Seguire in base all'esperienza seriale UART, non ricercare.
Ho riscontrato un minor numero di problemi di comunicazione quando sono inclusi - o, in altre parole, entrambi SOF/EOF e (lunghezza - forse)/checkcode. Telaio:
- SOFrame
- (lunghezza forse)
- dati (indirizzo, a, da, il tipo, la sequenza #, codice operativo, byte, etc.)
- checkcode
- EOFrame
Invariabilmente, le ricevute "fames" comprendono:
- quelli buoni - nessun problema.
- Corrupt dovuto al mittente che non invia un messaggio completo (sospensione, spegnimento o trasmissione power-on) (il ricevitore deve sospendere i messaggi incompleti scaduti.)
- Corrupt a causa di interferenze di rumore o di trasmissione. (errori di framing di byte, parità, dati errati)
- Corrupt dovuto al ricevitore che si avvia nel mezzo di un messaggio inviato o manca alcuni byte a causa di sovraccarico del buffer di input.
- collisioni bus condivise.
- Break: questo è valido nel sistema?
Indipendentemente dal tipo di frame utilizzato, è sicuro che sia in grado di indirizzare questi tipi di messaggi, convalidare immediatamente il numero 1 e identificare rapidamente 2-5 e prepararsi per il frame successivo.
SOF ha l'enorme vantaggio di esso facile da ottenere di nuovo iniziare, se il ricevitore è perso a causa di una precedente struttura merda, ecc
Lunghezza è buono, ma secondo me la meno utile. Può limitare il through-put, se la lunghezza deve essere all'inizio di un messaggio. Alcune operazioni a bassa latenza non conoscono la lunghezza prima che siano pronte per iniziare la trasmissione.
CRC Consiglia più di 2 byte. Un breve codice di controllo non migliora abbastanza le cose per me. Preferirei non avere un codice di controllo di uno a 1 byte. Se gli errori si verificano di tanto in tanto, vengono catturati dal codice di controllo, voglio qualcosa di meglio di un 99 di 2 byte.999% delle volte, mi piace il 99.99999997% di 4 byte
EOF così utile!
BTW: Se il protocollo è ASCII (invece di binario), consiglia di non uso cr
o lf
come EOFrame. Forse li userai solo out-of-frame dove non fanno parte di un messaggio.
BTW2: se il ricevitore è in grado di rilevare automaticamente il baud, consente di risparmiare su molti problemi di configurazione.
BTW3: un mittente potrebbe prendere in considerazione l'invio di un byte "niente" (prima del SOF) per assicurare la corretta sincronizzazione SOF.
Grazie! Buoni argomenti! – user2479653
Baud partite perse, bit per parola, parità, livelli di segnale inattesi causano problemi. – chux