mikrocontroller.net

Forum: Compiler & IDEs XMODEM CRC16 Protokoll (für Firmware update)


Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muß mich in ein bestehendes Bussystem einklinken (leider unter NDA,
daher darf ich keine Details geben).
Die Übertragung von Daten (Firmware und Programm)geschieht per XMODEM
Protokoll mit CRC 16.
Ich versuche zur Zeit verzweifelt die Prüfsumme nachzurechen, ohne
Erfolg.

Kann mir einer weiterhelfen ?

Ich will mit den Empfangenen Daten dann denn Code des AVR updaten (Zur
Zeit ein Mega8515.

Es kommen immer 128 Byte (In 3 Packeten Protokollbedingt).
Es sollte doch nun möglich sein den AVR mit den Empfangenen Daten neu
zu Flashen (auch den Boot Loader selbst ?).
Aber bevor die Prüfsumme nicht stimmt will ich das besser noch nicht
machen :-)

So, ein Packet sieht z.B. wie folgt aus (C Noatation) (3 Byte
XMODEM-Header + 128 Data + 2 Byte CRC 16):
char c[3+128+2] =
  {0x01, 0x01, 0xfe, 0x5c, 0x72, 0x5c, 0x6e, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x69, 0x6b};

Zur Zeit versuche ich das auf dem PC mit angehängtem Code
nachzurechnen. Dann will ich das auf den AVR mit gcc Hilfe übernehmen.

Kann mir einer sagen was ich falsch mache ?

Danke
Juergen

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dir mal die CRC-Routinen in <util/crc16.h> angeguckt?
Da müsste auch eine Xmodem-Variante dabei sein.

Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich eben erst entdeckt...
Gleich nen Versuch gestartet, allerdings mit dem C-Komplement in der
Doku.
Mein Suse System hat es nicht so mit dem AVR Assembler Code :-)

Leider mit dem gleichen Erfolgt. Die Checksumme stimmt nicht.

Anbei nochmals den Code den ich jetzt benutzt habe (Aus der AVR-libc
Doku für XMODEM)

Ich gehe mal davon aus, das der CRC nur über die Nutzdaten berechnet
wird ?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, der C-Code ist eher Pseudocode.

Worüber die CRC gebildet wird, sollte Bestandteil der Protokoll-
definition sein (hmm, XModem und Protokolldefinition, naja...).
Hast du denn keinen Testvektor?

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setzen 6 ! würde ich sagen :-(

Die While schleife ist schuld, da diese nicht über alle Datenbytes
läuft. (Von wegen "Durchlaufe bis du ein NULL Byte findest")
Ersetze ich diese durch:
for (uint8_t cnt = 0 ; cnt < 128 ; cnt++)

funzt es problemlos und auch mit der libc-funktion.
Besten Dank an alle die sich das Hirn zermartert haben !

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.