mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC16: wahre Checksumme?


Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Egon (der wahre) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, da gibt es wohl verschiedene Implementationen, einmal die falsche
und einmal die richtige:

http://www.joegeluso.com/software/articles/ccitt.htm

Autor: Mehmet Kendi (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, scheint, als ob Microsoft's VFP mit seiner eingebauten Funktion
SYS(2007) ebenfalls die falsche CRC-16 berechnet.
Gut, wenn man sich nicht auf eingebaute Funktionen verlaesst und diese
(soweit als möglich) selbst schreibt.

Autor: Michael Odenwald (odiwan)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus K. (markus-)
Datum:

Bewertung
0 lesenswert
nicht 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

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.