Forum: Mikrocontroller und Digitale Elektronik Protokoll implementieren


von Ralf (Gast)


Lesenswert?

Hallo,

ich hab für ein µC-Projekt ein Befehlsprotokoll erstellt, also wie 
welcher Befehl auszusehen hat, wie die Parameter und Daten aufgebaut 
sind usw.

Mein Problem ist, wie ich das Protokoll richtig implementiere. Damit 
meine ich, vom Empfang über die Prüfung bis zur Ausführung des Befehls. 
Wie macht ihr das?
Kann mir da jemand Beispiele zeigen?

Ralf

von Dieter Werner (Gast)


Lesenswert?

Die Frage erinnert mich ein wenig an:
ich will von Hamburg nach München, wie mach ich das am besten?

Die Abarbeitung eines Protokolls hängt von vielen verschiedenen 
Umständen ab. Ein paar mehr Infos wären nicht schlecht.

Ist es Multi- oder Singlemaster
Wie viele Teilnehmer kommunizieren miteinander
Welche Datenmengen sind zu erwarten

von Ralf (Gast)


Lesenswert?

Hi Dieter,

okay, habs zu ungenau beschrieben, da hast du recht.

Also, es ist nur ein SingleMaster. PC ist Master, µC ist Slave. Pro 
Befehl gehen maximal 48 Byte an den µC, die Antworten sind maximal 
genauso lang.
Es geht mir nicht um ein Übertragungs-Protokoll, sondern darum, das 
Protokoll richtig im µC umzusetzen. Mir fehlt quasi die Schnittstelle 
zwischen Empfang eines Befehls, der Aufbereitung der Daten und dem 
Ausführen des Befehls.

Ralf

von Roland Praml (Gast)


Lesenswert?

Hier mal was einfaches:

<header-byte>
<destination-byte>
<payload-length>
<payload...>
<crc>

Dann baust dir eine Statemachine, welche automatisch nach einer Weile 
wenn nichts übertragen wird in State 0 springt.

in State 0 wartest auf das Eintreffen des (oder der) Header Bytes und 
springst dann auf State 1.
In State 1 empfängst das Adressbyte (z.B. die Modulnummer)
In State 2 dann die Payloadlength.
Dann bleibst so lange in State3 bis die Payloadlength erreicht ist, die 
Bytes schreibst dabei in einem Puffer.
In State 4 prüfst dann mittels einem CRC-Verfahren ob die Übertragung 
korrekt war. Weiterhin prüfst ob das empfangene Paket für den 
entsprechenen µC war. Wenn dieses alles korrekt ist, dann kannst die 
Daten weiterverarbeiten.
Danach springst in State 0 und sendest evtl eine Antwort zurück zum 
Master.
Kommt keine Antwort kann der Master davon ausgehen, das das Paket 
fehlerhaft übertragen wurde.

Dies ist zwar nicht das Beste Protokoll aber relativ einfach zu 
implementieren. Am Besten schaust dir mal ein paar andere Protokolle an 
(z.B. SNAP, CAN, Nokia FBus/MBus oder auch TCP/IP) und verstehst ihre 
Vor und Nachteile und implementierst dann eins, was für deinen 
Anwendungszweck passt.

Gruß
Roland

von rene (Gast)


Lesenswert?

Der Controller ist eine Statemaschine. Die Zustandshierarchie sollte so 
flach wie moeglich sein. Dh man sollte von jedem Zustand in einem 
anderen gelangen koennen, sofern das physikalisch ueberhaupt moeglich 
ist. Die Commands aktivieren entweder Vorgaenge oder aendern den 
Zustand. Zudem gibt es noch Statusabfragen. Die Zustaende und die 
Commands sollen so zusammenpassen, dass auch mal ein Command 
verschwinden kann. Das Protokol sollte auf ein command eine Antwort 
bedingen. Damit kann der PC pruefen, ob das command angekommen ist. Ein 
Beispiel :
http://www.ibrtses.com/embedded/shortmsgprotocol.html


rene

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.