Na najprostszym poziomie można powiedzieć, że prosty protokół komunikacyjny ma trzy warstwy: fizyczny, transportowy i aplikacyjny. (Istnieją modele z większą liczbą, takie jak OSI z 7 lub TCP / IP z 4. Liczba warstw nie jest szczególnie ważna w kontekście tego pytania.)
Warstwa aplikacji jest warstwą, z którą masz do czynienia bezpośrednio w kodzie, i koncentruje się na pytaniu. Jeśli chodzi o warstwę transportową, bajt przekazany do niej w send_data jest tylko wzorem binarnym, ale możesz zinterpretować ją w kodzie aplikacji jako literę „A”. Obliczenia CRC lub sumy kontrolnej będą takie same, niezależnie od tego, czy uważasz bajt za „A”, 0x41 lub 0b01000001.
Warstwa transportowa to poziom pakietu, w którym znajdują się nagłówki wiadomości i sprawdzanie błędów, niezależnie od tego, czy jest to CRC, czy podstawowa suma kontrolna. W kontekście oprogramowania układowego możesz mieć funkcję taką jak send_data, w której przekazujesz bajt do wysłania. Wewnątrz tej funkcji jest umieszczany w pakiecie, który mówi: „Hej, to jest normalny komunikat, wymaga potwierdzenia, a suma kontrolna to 0x47, bieżący czas to X”. Ten pakiet jest wysyłany przez warstwę fizyczną do węzła odbiorczego.
Warstwa fizyczna to miejsce, w którym definiuje się elektronikę i interfejs: złącza, poziomy napięcia, taktowanie itp. Warstwa ta może wahać się od kilku śladów sygnałów TTL dla podstawowego UART na płytce drukowanej do całkowicie izolowanej pary różnicowej, jak w niektórych Implementacje CAN .
W węźle odbiorczym pakiet wchodzi w warstwę fizyczną, jest rozpakowywany w warstwie transportowej, a następnie twój wzór binarny jest dostępny dla warstwy aplikacji. Od warstwy aplikacji węzła odbiorczego zależy, czy ten wzorzec powinien być interpretowany jako „A”, 0x41 lub 0b01000001 i co z nim zrobić.
Podsumowując, wysyłanie znaków ASCII jest prawie zawsze dopuszczalne, jeśli wymaga tego aplikacja. Ważne jest zrozumienie schematu komunikacji i włączenie mechanizmu sprawdzania błędów.