На найпростішому рівні, можна сказати, простий протокол зв'язку має три шари: фізичний, транспортний та прикладний. (Є моделі з більшою кількістю таких, як OSI з 7 або TCP / IP з 4. Кількість шарів не дуже важлива в контексті цього питання.)
Прикладний шар - це шар, з яким ви безпосередньо працюєте у своєму коді, і фокус питання. Що стосується транспортного шару, то байт, який ви передали йому у send_data, є лише бінарним шаблоном, але ви можете інтерпретувати його у коді програми як букву "A". Розрахунок CRC або контрольної суми буде однаковим, незалежно від того, чи вважаєте ви байт "A", 0x41 або 0b01000001.
Транспортний шар - це рівень пакету, де у вас є заголовки повідомлень та перевірка помилок, чи це CRC, чи основна контрольна сума. У контексті вбудованого програмного забезпечення у вас може бути така функція, як send_data, де ви передаєте його байт для надсилання. Всередині цієї функції він помістив у пакет, який говорить: "Ей, це звичайне повідомлення, потрібне підтвердження, а контрольна сума - 0x47, поточний час - X." Цей пакет надсилається через фізичний рівень до приймального вузла.
У фізичному шарі визначаються електроніка та інтерфейс: роз'єми, рівні напруги, синхронізація тощо. Цей шар може варіюватися від пари слідів, що виконують TTL-сигнали для базового UART на друкованій платі, до повністю ізольованої диференціальної пари, як у деяких МОЖЕТЕ реалізації .
На вузлі прийому пакет надходить на фізичний рівень, розпаковується на транспортному шарі, і тоді ваш бінарний візерунок доступний для рівня додатків. Із шаром програми прийому вузла залежить, чи слід інтерпретувати цей шаблон як "A", 0x41 або 0b01000001, і що з ним робити.
На закінчення, надто завжди прийнятно надсилати символи ASCII, якщо для цього потрібна програма. Важливим є розуміння вашої схеми зв'язку та включення механізму перевірки помилок.