Forum: Mikrocontroller und Digitale Elektronik Busprotokoll RS485, wozu Startbyte?


von Enno (Gast)


Lesenswert?

Hallo,

ich bin dabei mir ein Protokoll für ein RS485 Netzwerk mit 4 Teilnehmern 
zu überlegen. Im Grunde finde ich den Aufbau der CAN-Botschaft ganz gut, 
nur etwas kürzer kann es sein. Aber wozu brauche ich eigentlich das 
Startbyte? Ich wollte zwischen jeder Nachricht eine Pause von 4 Byte 
machen, somit ist klar, dass das erste Byte, dass nach dieser Pause 
kommt, der Identifier ist (keine extra Adressierung notwendig durch 
Identifierlisten in jedem Controller).

Was für Vorteile bringt da noch ein Startbyte? Denn dass damit eine neue 
Nachricht anfängt, weiss jeder Teilnehmer auch nur wenn er die 4 Byte 
Pause mitbekommen hat. Sonst könnte das Startbyte genausogut Teil der 
Daten sein.

von Hans J. (hjm)


Lesenswert?

Hallo Enno,

ein Startbyte brauchst Du nicht. Dies vereinfacht lediglich die 
Auswertung.

Wenn Du ein Startbyte und anschließend ein Längenbyte sendest, sowie am 
Ende eine CRC, so ist auf jeden Fall gewährleistet das die Telegramme 
richtig ausgewertet werden.

Wenn Du wie beschrieben feste Pausen zwischen den Telegrammen einfügst, 
so kannst Du diese als Timeout werten und dann sollte es auch gehen.

Prinzipiel kannst Du auf Deinem Bus machen was Du willst, denn Du mußt 
dafür sorge tragen das alle die richtigen Botschaften empfangen.

Grüße

von Enno (Gast)


Lesenswert?

Ein Längenbyte sowie CRC wollte ich ohnehin dabei haben. Aber durch die 
Längenangabe müsste es doch selbst ohne 4 Byte Pause genauso gut 
funktionieren wie mit Startbyte.

Ich denk mir halt wenn ein Controller aus irgendeinem Grund (durch 
Watchdog Reset, enorme EMV Störungen oder was auch immer) komplett den 
Faden verliert und nicht mehr weiss an welcher Stelle die 
Buskommunikation ist, dann hilft ein Startbyte ja auch nicht, da es wie 
gesagt genau so gut ein Datenbyte sein könnte. Das einzige an was ich 
denken kann ist eine Pause die so vorkommend, in den Daten verboten 
wird.

Deswegen frage ich mich, an welcher Stelle ich überhaupt irgend einen 
Nutzen von einem Startbyte habe.

von Thomas P. (topla)


Lesenswert?

Schicke halt das erste Byte als Adressbyte (Zieladresse) mit gesetztem 
9.Bit. Da kann jeder Slave synchronisieren, der mit Adress-Match 
schaltet um und empfängt weiter, die anderen legen sich halt wieder hin, 
bis das nächste Byte mit gesetztem 9. Bit auftaucht.

Gruß
Thomas

von Enno (Gast)


Lesenswert?

Ein 9Bit Protokoll...sehr interessant. Die Lösung gefällt mir.
Allerdings würde ich nach wie vor über die Nachricht-Id Adressieren. 
Muss halt jeder Teilnehmer kurz nachschauen ob er für die Id eine 
Fallbehandlung hat oder nicht.

von Thomas P. (topla)


Lesenswert?

Wie Du das nennst, ist doch egal. Das gesetzte 9. Bit kennzeichnet ja 
nur, dass da eben etwas besonderes kommt. Ich nutze das z.B. als eine 
Art Token, der Slave der ein gesetztes 9. Bit mit seiner Adresse 
empfängt, darf eine Antwort an den Master senden; im einfachsten Fall 
ein ACK, also "ich bin noch da", die anderen haben Sendepause. Als 
Kennzeichen für eine Nachricht kann man das erste Byte mit gesetztem 9. 
Bit nur verwenden, wenn man keine Antworten der Slaves erwartet, da ja 
mehrere die Nachricht auswerten (können). Gibt es pro Nachrichtenart nur 
einen Empfänger, ist es wieder eine Adresse...

Gruß
Thomas

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
Noch kein Account? Hier anmelden.