CRC16: wahre Checksumme?

Gast #350723
Lesenswert?
• ▲
▼
Hi,

schon seit Stunden bin ich schon auf der wahren CRC16-Checksumme fuer
folgende Bytes:

0x08 0x60 0x81 0x98 0xF0 0x81 0x8A

serversniff.de behaupted da kommt 0xDA 0x72 als CRC16 bei raus.
jacksum, so'n Java-Proggi meint, es kommt dabei ebenfalls 0xDA 0x72
bei raus.

Wenn ich aber Peter Danneggers Routine aus
http://www.mikrocontroller.net/forum/read-4-49752.html#89913 nehme,
kommt da 0xDA 0x69 bei raus, auch die AVR-include-utils-crc16.h
_crc16_update Funktion bringt mir genau das Ergebnis.

Jetzt hiess es mal glaubich, wenn ich den gesamten String inkl. CRC16
nochmal durch die CRC16-Maschinerie laufen lasse, soll 0x00 0x00 bei
rauskommen. Bei serversniff.de und auch bei jacksum kommt dann aber
0x7E 0x7E bei raus. Was ist jetzt richtig? Es steht 2:2.......

Ich geh' jetzt ersma inne Firche...
 Hegy
#350726
Lesenswert?
• ▲
▼
Hallo,

ich denke beide CRC16 Implementierungen arbeiten für sich gesehen
richtig. Der Entscheidene Punkt ist das Generator Polynom. Das kann bei
den CRC16 Implementierungen ja unterschiedlich sein. Wenn dem so ist
kommen auch verschiedene Ergebnisse raus. Jedes für sich gesehen ist
aber richtig.

CRC-CCITT (CRC-16) = x16 + x12 + x5 + 1
IBM-CRC-16         = x16 + x15 + x2 + 1

Ein weitere Punkt ist Startwert bei der CRC Berechnung 0x0000 oder
0xffff beides ist gebräuchlich, ergibt aber jeweils ein anderes
Ergebnis.

Siehe auch:
http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung

Tschau
Michael
Gast #350727
Lesenswert?
• ▲
▼
Hi,

mit CRC16 meinte ich auch CRC16 und nicht CRC-CCITT. Aber ich habe die
Loesung fuer die unterschiedlichen Ergebnisse gefunden, denn alle
Ergebnisse sind richtig.

Die online-Berechnung bei serversniff,de und auch jacksum, das Java
Proggi rechnen mit einem Startwert von 0, wohingegen die CRC16-Routine
von Danegger oder auch die_crc16_update.h mit einem Startwert von
0xFFFF rechnen. Daher die unterschiedlichen Ergebnisse.
#350728
Lesenswert?
• ▲
▼
CRC16 heißt einfach nur, dass da eine CRC mit 16Bit berechnet wird. Es
gibt da keinen Standard dafür. Das Ding von der CCITT ist natürlich
auch eine CRC16. So wie die von IBM oder Microsoft. Da die
Generator-Polynome unterschiedliche Qualität haben denkt man sich aber
besser nicht einfach eines aus, sondern nimmt ein getestetes. Aus
diesem Grund benutzen die Programmierer z.B. das Polynom aus dem Buch,
aus dem sie den Algorithmus haben.

Antwort schreiben

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.

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.