Poiché al giorno d'oggi la comunicazione seriale asincrona è ampiamente diffusa tra i dispositivi elettronici, credo che molti di noi abbiano di tanto in tanto posto una domanda del genere. Considerare un dispositivo elettronico D
e un computer PC
collegato con una linea seriale (RS-232 o simile) e necessario per scambiare informazioni in modo continuo . Cioè PC
sta inviando un frame di comando ciascuno X ms
e D
sta rispondendo con report di stato / frame di telemetria ciascuno Y ms
(il report può essere inviato come risposta alle richieste o in modo indipendente - non importa davvero qui). I frame di comunicazione possono contenere qualsiasi dato binario arbitrario . Supponendo che i frame di comunicazione siano pacchetti a lunghezza fissa.
Il problema:
Poiché il protocollo è continuo, il lato ricevente potrebbe perdere la sincronizzazione o semplicemente "unirsi" nel mezzo di un frame inviato in corso, quindi non saprà dove si trova l'inizio del frame (SOF). A dato che i dati hanno un significato diverso in base alla sua posizione rispetto al SOF, i dati ricevuti verranno danneggiati, potenzialmente per sempre.
La soluzione richiesta
Schema affidabile di delimitazione / sincronizzazione per rilevare il SOF con tempi di recupero brevi (cioè non dovrebbe richiedere più di, diciamo 1 frame per risincronizzare).
Le tecniche esistenti di cui sono a conoscenza (e che ne uso alcune) di:
1) Header / checksum - SOF come valore byte predefinito. Checksum alla fine del frame.
- Pro: semplice.
- Contro: non affidabile. Tempo di recupero sconosciuto.
2) Riempimento byte:
- Pro: recupero affidabile e veloce, può essere utilizzato con qualsiasi hardware
- Contro: non adatto per comunicazioni basate su frame di dimensioni fisse
3) Marking 9th bit - antepone ogni byte con bit aggiuntivo, mentre SOF contrassegnato con 1
e i byte di dati sono contrassegnati con 0
:
- Pro: recupero affidabile e veloce
- Contro: richiede supporto hardware. Non supportato direttamente dalla maggior parte
PC
dell'hardware e del software.
4) Contrassegno 8 ° bit - tipo di emulazione di quanto sopra, mentre si utilizza l'8 ° bit anziché il 9 °, che lascia solo 7 bit per ogni parola di dati.
- Pro: recupero affidabile e veloce, può essere utilizzato con qualsiasi hardware.
- Contro: richiede uno schema di codifica / decodifica dalla / alla rappresentazione convenzionale a 8 bit alla / dalla rappresentazione a 7 bit. Abbastanza dispendioso.
5) Basato sul timeout : presuppone che il SOF sia il primo byte proveniente dopo un determinato tempo di inattività.
- Pro: nessun sovraccarico di dati, semplice.
- Contro: non così affidabile. Non funzionerà bene con sistemi di temporizzazione scadenti come, ad esempio, PC Windows. Potenziale sovraccarico del throughput.
Domanda: quali sono le altre tecniche / soluzioni possibili per risolvere il problema? Puoi indicare i contro nell'elenco sopra che possono essere facilmente risolti, rimuovendoli così? Come progettate (o vorreste) il vostro protocollo di sistema?