Następujące w oparciu o szeregowe doświadczenie UART, a nie badania.
Znalazłem mniej problemów z komunikacją, gdy dołączono poniższe - lub innymi słowy, zarówno SOF/EOF, jak i (długość - być może)/kod kontrolny. Rama:
- SOFrame
- (długość może)
- dane (adres, do, z, typ sekwencji #, opcode, bajty, etc.)
- CheckCode
- EOFrame
Niezmiennie, otrzymane "sławy" obejmują:
- dobre - bez problemów.
- Uszkodzone z powodu nie wysłania przez nadawcę kompletnego komunikatu (zawiesił się, wyłączył zasilanie lub zsypu). Odbiornik powinien przeterminować nieukończone wiadomości.)
- Uszkodzony z powodu zakłóceń sygnału lub zakłóceń transmisji. (błędy ramek bajtów, parzystość, niepoprawne dane)
- Uszkodzone z powodu uruchomienia odbiornika w środku wysłanej wiadomości lub braku kilku bajtów z powodu przekroczenia bufora wejściowego.
- Kolizje wspólnych kolizji.
- Przerwa - czy to jest legalne w twoim systemie?
Cokolwiek framing użyć, ubezpieczenia jest odporny na rozwiązanie tych typów wiadomości, niezwłocznie potwierdzić # 1 i szybkiej identyfikacji 2-5 i staje się gotowy do następnej klatki.
SOF ma ogromną zaletę stanowi to, że łatwo zacząć ponownie, jeśli odbiornik jest utracone w wyniku poprzedniej ramki bzdura, itp
Długość jest dobra, ale IMHO najmniej przydatne. Może ograniczać przekazywanie, jeśli długość musi znajdować się na początku wiadomości. Niektóre operacje o małym opóźnieniu po prostu nie znają długości, zanim będą gotowe do rozpoczęcia transmisji.
CRC Poleć więcej niż 2-bajtowe. Krótki kod kontrolny nie poprawia wystarczająco dużo dla mnie. Wolałbym nie mieć kodu sprawdzającego niż 1-bajtowego. Jeśli błędy pojawiają się od czasu do czasu, tylko przechwytuje je kod kontrolny, chcę coś lepszego niż dwubajtowe 99.999% czasu, lubię 4-bajtowe 99,99999997%
EOF bardzo przydatne!
BTW: Jeśli protokół, który jest ASCII (zamiast binarny), zaleca się nie użytku cr
lub lf
jako EOFrame. Może używać ich tylko poza ramką, gdzie nie są częścią wiadomości.
BTW2: Jeżeli odbiornik może automatycznie wykryć prędkość transmisji, oszczędza wiele problemów konfiguracyjnych.
BTW3: Nadawca może rozważyć wysłanie bajtu "nic" (przed SOF) w celu zapewnienia właściwej synchronizacji SOF.
Dzięki! Dobre argumenty! – user2479653
Prędkość nieudana, bity na słowo, parzystość, nieoczekiwany poziom sygnału również powodują problemy. – chux