Forum: Mikrocontroller und Digitale Elektronik Synchronisation µP <-> Seriell <-> PC


von Kupfer Michi (Gast)


Lesenswert?

Hallo,

ich bin auf der Suche nach einem effizienten und robusten
Synchronisationsverfahren für eine serielle µP - PC Kommunikation.
Die Verbindung wird oft unterbrochen so dass ein sicheres
wiederaufsetzen auf der Applikationsprotokollebene notwendig ist.

Übertragen werden 8Bit Binaermessages. Auf der PC Seite kann nicht 9Bit
oder Missbrauch der Stopbits als Frame Information verwenden.

Bleibt also nur umkodieren 8Bit->7Bit und setzen eines Frame
Startbits.

Oder gibts da andere Tricks?

von Stefan R. (Gast)


Lesenswert?

Hallo,

schau dir dazu mal das KISS-Protokoll (kommt von Packet-Radio, also
Datenfunk) an. Dabei geht es genau um dein Problem, nämlich eine
Sequenz von 8-Bit-Daten mit eindeutigem "Startbyte" zu übertragen.
Man definiert dazu zusätzlich zu dem Startbyte (dort FEND genannt) ein
"Escape"-Byte (FESC), ein "transponiertes" Startbyte (TFEND) und
ein "transponiertes" "Escape"-Byte (TFESC). Kommt nun im Datenstrom
nach dem Start des Frames ein Startbyte (FEND) vor, wird es durch die
2-Byte-Kombination FESC-TFEND ersetzt (FESC signalisiert quasi, dass
das aktuelle Byte durch zwei Bytes im Datenstrom übertragen wird).
Kommt im Datenstrom ein FESC vor, wird dieses durch FESC-TFESC ersetzt.
Somit kommt im Datenstrom das Startbyte niemals vor, und man kann
trotzdem alle 8 Bit nutzen. Die Erklärung war jetzt vielleicht etwas
schwammig, aber schau dir einfach mal das an:

http://bips.bi.ehu.es/prj/modem/evm56002/kiss.html

C++ Implementation Sender/Empfänger:
http://www.scs.carleton.ca/~barbeau/Courses/SETP/ALP/kissdriver.pdf

Gruß, Stefan

von Kupfer Michi (Gast)


Lesenswert?

Danke für die Links! werd sie mir noch genauer anschauen.

ich hatte mir auch schon kurz die Verwendung von einem Escape Char
überlegt bin dann aber doch etwas davor zurückgeschreckt da mann dann
bei ungünstigen Daten glatt eine verdopplung der Datenlänge hat.

Die Verwendung verschiedener Esc Bytes ist gegenüber der einfacheren
Variante robuster in der Synchronisation, hat aber auch das Problem der
nicht genau verhersagbaren Messagelänge/Übertragungszeit.

Allerdings wenn man schon mit Esc Chars arbeitet, dann könnte man auch
gleich eine einfache RLE Kompression vorchalten und das Längenproblem
wäre entschärft.

mal sehen...

von Stefan R. (Gast)


Lesenswert?

Hi,

> RLE-Kompression

oder einfach, wenn die Daten nicht allzu schnell kommen, die serielle
Geschwindigkeit verdoppeln, so dass selbst im ungünstigsten Fall die
Geschwindigkeit Frames/Sekunde gleich bleicht. Die Übertragungszeit ist
zwar nicht vorhersehbar, aber da die einzelnen Frames ja taktgenau
erzeugt werden (bzw. die Messdaten gemessen werden), dürfte das z.B.
für einen Datenlogger kein Problem sein. Das dürfte nur dann
problematisch werden, wenn über den angeschlossenen Computer z.B. eine
schnelle Regelung gemacht wird.

Gruß,
Stefan

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.