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
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.
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.
Es gibt auch eine Fertige ansatz im i-net zu finden. Google nach S.N.A.P (Scaleable Node Address Protocol) von HTH Es könnte genau deine anforderung abdecken.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.