mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitte um Hilfe bei einer Protokollerstellung


Autor: Metaller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Metaller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Castlerock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.