Stosowanie znaków końca linii jest dobra przy komunikacji z wykorzystaniem liter i cyfr. Lecz jak my przesyłane dowolnych wartości bajtów, to już takie coś nie przejdzie

Dlatego w poważniejszych rozwiązaniach takie dane się ramkuje wysyłając ramkę typowo w postaci:
._______ ______ _____ ______
| START | DANE | CRC | STOP |
| ______|______|_____|_____|
gdzie:
START - wybrany znak oznaczający początek ramki (np. znak ASCII STX)
STOP - wybrany znak oznaczający koniec ramki (np. znak ASCII ETX)
CRC - suma kontrolna liczona według wybranego algorytmu (może być więcej niż jeden bajt, ale jej długość jest stała i ustalona)
DANE - przesyłane dane (dowolna, zmienna liczba bajtów)
Aby można było przesłać wartości w danych pokrywające się wartością ze znakami START, STOP wykonuje się tzw. ESCejpowanie. Polega to na tym, że aby wysłać w polu DATA znak o wartości START, wysyła się znak ESC i następnie zanegowany znak START. Tak samo zamiast STOP wysyła się znak ESC i zanegowany znak STOP. Dodatkowo trzeba zrobić jeszcze jedno ESCejpowanie. Aby wysłać znak ESC wysyłamy ESC i zanegowany znak ESC.
Dzięki takiej operacji mamy zawsze łatwą synchronizację początku ramki (odebranie znaku START oznacza początek ramki). Wiemy także kiedy jest koniec ramki (odebranie znaku STOP). Oraz możemy przesłać dowolną wartość binarną w polu DATA.
A w kodzie odbiorczym wystarczy dodać jedno proste sprawdzenie. Jeżeli otrzymaliśmy znak ESC, to nie dodajemy go do bufora odbiorczego, tylko ustawiamy dodatkowy znacznik. Przy odbiorze bajtu jeżeli mamy znacznik ustawiony to taki bajt dodawany jest do bufora jako zanegowany (wysłany był jako zanegowany, więc podwójna negacja da właściwy znak). I tyle

Nic więcej nie trzeba dodawać.
Jako sumę kontrolną warto stosować sumę, która ma pewną dodatkową właściwość. Chodzi o to by suma wyliczona na bajtach DATA i bajtach samej sumy (pole CRC) dawała zero. Dzięki temu licząc ją na bieżąco przy kolejnym bajcie, jak dojdziemy do znaku STOP, to gdy suma kontrolna jest poprawna, to mamy wartość 0

Taką właściwość ma np. bardzo popularny algorytm wyliczający sumę kontrolną CRC16.
--
Pozdrawiam,
Robert