Datum: 15.05.2008 18:38
Für die serielle Kommunikation zwischen einem ATMega8 und der Software auf einem Mobiltelefon erstelle ich gerade eine Reihe von (kurzen) Telegrammen, die hin- und hergeschickt werden sollen. Da ich nicht weiß, wie fehleranfällig diese Kommunikation werden kann (mir fehlt da die praktische Erfahrung), habe ich überlegt, die Telegramme in Frames zu packen, evtl. mit zusätzlicher Prüfsumme. Recht verbreitet scheint ja folgendes Protokoll zu sein:
DLE STX Daten DLE ETX |
wobei DLEs innerhalb der Daten ein weiteres DLE vorangestellt wird. Folgendes Beispiel lässt mich jetzt seit einer halben Stunde grübeln: In den Daten ist ein "DLE STX". Vor dem Senden wird es ergänzt zu "DLE DLE STX" und dann abgeschickt. Wenn jetzt der Empfänger durch einen blöden Zufall exakt im Moment nach dem ersten DLE "hinhört", sieht es für ihn ja exakt aus wie eine Startkennung und das erste Paket ist "Murks"? Oder? Wie wird dieses Problem umgangen? Abgesehen davon - ist ein Verpacken in Frames wirklich notwendig, wenn die Telegramme feste Längen haben, recht kurz sind und der Datenverkehr nur langsam und sporadisch stattfindet? Danke für Tipps, Florian
Datum: 15.05.2008 18:54
also ich habe schon viele verschiedene Dinge ausprobiert. Bei meinem letzten "Projekt" war die kommunikation in einer Art Base64. Das hieß 3Zeichen(24Bit) wurden auf 4Zeichen(32Bit) verteilt. Also pro Byte(auf der seriellen Schnittstelle) nur 6Bit Nutzdaten. Diese 6Bit haben einen Wertraum von 0-63 und wurden in der ASCII-Tabelle in den hinteren Bereich gemappt. Ich habe als obset immer '0' genommen. Der Vorteil ist jetzt das man 256-64=>192Steuerbytes hat die im datenstrom niemals vorkommen. Dann kan man start,ende usw machen. Und wenn man noch einen 2Datenstrom übertragen will dann mappt man den in einen anderen Bereich. Und der Empfänger kann dann jedes Byte dem richtigen Datenstrom wieder zuordnen da er weiß welcher Datenstrom wo in der "ASCII-Tabelle" ist
Datum: 15.05.2008 20:32
Schau dir einfach mal das Protokoll vom LMX8920 Bluetooth-Chip an, das nehmen wir immer.
Datum: 16.05.2008 09:05
Christian R. wrote: > Schau dir einfach mal das Protokoll vom LMX8920 Bluetooth-Chip an, das > nehmen wir immer. Ich habe nur LMX9820 gefunden - Schreibfehler? Dessen Protokoll ist ja ähnlich (STX Daten ETX), nur dass nicht erwähnt wird, was passiert, wenn in den Nutzdaten auch ein STX oder ETX vorkommt? @Ulrich: Klingt interessant und funktioniert sicher auch, ist mir aber eigentlich zu viel Rechenaufwand für "das bisschen" Kommunikation, das geplant ist.
Datum: 16.05.2008 09:17
Ja, 9820 natürlich. Sorry. Naja, du hast ja immer noch die Länge und die Checksumme, muss dann natürlich alles zusammen passen. Erst dann ist der Frame gültig. STX am Anfang, passende Länge, passende Checksumme und ETX am Ende. Da müssten schon sehr sehr viele Zufälle passieren, dass da was falsch wird. Man kann statt der einfachen Checksumme vielleicht besser CRC16 über den ganzen Frame verwenden.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel