En basit seviyede, basit bir iletişim protokolünün üç katmana sahip olduğunu söyleyebilirsiniz: fiziksel, nakil ve uygulama. ( OSI gibi 7'li veya TCP / IP'li 4'li modeller vardır . Katman sayısı bu soru bağlamında çok önemli değildir.)
Uygulama katmanı, doğrudan kodunuzda ele aldığınız katman ve sorunun odak noktasıdır. Aktarım katmanı söz konusu olduğunda, send_data'da kendisine ilettiğiniz bayt yalnızca ikili bir desendir, ancak uygulama kodunuzda 'A' harfi olarak yorumlayabilirsiniz. CRC veya sağlama toplamı hesaplaması, baytın 'A,' 0x41 veya 0b01000001 olduğunu düşünmenize bakılmaksızın aynı olacaktır.
Aktarım katmanı, mesaj başlıklarınızın bulunduğu paket seviyedir ve CRC veya temel bir sağlama toplamı olup olmadığına dair hata kontrolüdür. Firmware bağlamında, send_data gibi bir fonksiyona sahip olabilirsiniz, burada onu göndermek için bir bayt geçirirsiniz. Bu işlevin içinde, "Hey bu normal bir mesajdır, bir onay gerektirir ve sağlama toplamı 0x47, şu anki saat X'dir." Bu paket, fiziksel katman üzerinden alıcı düğüme gönderilir.
Fiziksel katman, elektronik ve arayüzün tanımlandığı yerdir: konektörler, voltaj seviyeleri, zamanlama, vb. CAN uygulamaları.
Alıcı düğümde, paket fiziksel katmana gelir, taşıma katmanında açılır ve ardından ikili kalıbınız uygulama katmanına kullanılabilir. Bu desenin 'A,' 0x41 veya 0b01000001 olarak yorumlanması gerekip gerekmediğini ve bununla ne yapılması gerektiğini bilmek alıcı düğüm uygulama katmanına bağlıdır.
Sonuç olarak, uygulamanın istediği şey buysa, ASCII karakterlerini göndermek her zaman kabul edilebilir. Önemli olan, iletişim planınızı anlamak ve bir hata kontrol mekanizması içermektir.