Bitte um Hilfe bei einer Protokollerstellung

Gast #432075
Lesenswert?

Nachdem ich nun es geschafft habe meine uC’s über den PC (seriell) zu 
steuern, stellt sich mir die Frage nach einem Softwareprotokoll, welches 
aus einer 16Bit Adresse und aus einem 32Bit Datenpaket besteht, um so 
die einzelnen Komponenten anzusprechen. Wie könnte eine Start-/Stopp- 
bedingung aussehen ohne, dass diese schon als ein Teil der Nutzdaten 
erkannt wird?

Mir fällt dazu nix vernünftiges ein. Ich habe mir schon folgendes 
überlegt. Als Start würde ich <ESC> ($1B) und für die Stopp auch <ESC> 
senden und zähle ab dem ersten <ESC> die einzeln ankommenden Bytes bis 
wieder ein <ESC> kommt. Wenn nach dem sechsten Byte ein <ESC> kommt, 
dann war die Übertragung erfolgreich und das Datenpaket wird 
weiterverarbeitet, wenn nicht, dann wird das Paket verworfen. Als 
Bestätigung für eine i.O. Übertragung könnte man <ACK> ($06) und für 
eine n.i.O. Übertragung <NAK> ($15) zurücksenden.

Könnte so gehen, aber was meint Ihr dazu? Ginge das Ganze auch 
einfacher?

Vielen Dank... Metaller
Gast #432085
Lesenswert?

Bei jedem Binärprotokoll hast Du das Problem, daß Du ein Markerbyte 
nicht in den Nutzdaten ausschließen kannst. Wenn also in Deiner Adresse 
oder Deinen Daten ein $1B vorkommt, weißt Du nicht, ob es vielleicht ein 
Markerbyte ist. Durch Start und Stopp wird das ganze unwahrscheinlicher 
(es müßten zwei $1B hintereinander in den Nutzdaten vorkommen), aber 
nicht ausgeschlossen.

Ausschließen kann man es nur durch Stuffbytes, z.B.: ein $1B in den 
Nutzdaten wird immer von einem $00-Byte gefolgt, das beim Auslesen 
verworfen wird. Das Markerbyte wird dagegen von einem $01-Byte gefolgt. 
So ist der Marker immer auffindbar.

Variante 2, wenn ohnehin ein Handshake benutzt wird: gar keinen Marker, 
aber ein Prüfbyte (z.B. XOR über alles Bytes). Hinter jedem Datenpaket 
wird das Prüfbyte gesendet und der Sender wartet auf eine Antwort oder 
sendet nach x Millisekunden erneut. Der Empfänger hat ein Timeout beim 
Datenempfang, daß er nach knapp unter x Millisekunden seinen 
Empfangspuffer zurücksetzt.
Gast #432138
Lesenswert?

Danke Philipp für den Tipp !!!

Du hast mich auf eine Idee gebracht :) Ich benutze einfach die CTS/RTS 
Leitung für die Separierung der Datensätze und bilde die Prüfsumme aus 
dem Modulo256 des gesamten Datensatzes, so wie es auch bei meinem LCD 
gemacht wird.
So werde ich es machen, wenn keiner eine andere Idee hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren