Synchronisation µP <-> Seriell <-> PC

Gast #144976
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?
Gast #144977
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
Gast #144978
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...
Gast #144979
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.