Forum: PC-Programmierung Unterschiede bei CRC16?


von Philipp B. (philipp_b993)


Lesenswert?

Hey,

ich habe nun einen RFID reader (Datenblatt hier: 
http://www.chafon.com/DownLoadFile.aspx?fid=85) der eine CRC-16 
Pruefsumme erwartet. Da ich mit Riot OS arbeiten, habe ich bereits eine 
fertige Implementierung genommen. Siehe: 
https://riot-os.org/api/group__sys__checksum__crc16__ccitt.html und 
https://riot-os.org/api/group__sys__checksum__ucrc16.html

Nun habe ich aber das Ergebnis der beiden Implementierungen mit diesem 
Online-Tool und meinen Byte Array vergleich.
Das Array: 0x04 0x00 0x21
Ergebnis Online Tool: 0xE883

Nun, je nachdem welche implementierung ich waehle und Startwert komme 
ich auf andere Pruefsummen. Eigentlich sollte das ja nicht sein oder 
sehe ich das falsch?

Ich habe folgende Konfigurationen wie im Datenblatt verwendet:
#define PRESET_VALUE 0xFFFF
#define POLYNOMIAL  0x8408

Das Datenblatt beschreibt ausserdem folgende implementierung:
https://pastebin.com/MSezmVxC

von g457 (Gast)


Lesenswert?

> Nun, je nachdem welche implementierung ich waehle und Startwert komme
> ich auf andere Pruefsummen. Eigentlich sollte das ja nicht sein oder
> sehe ich das falsch?

Ja, das siehst Du falsch. Startwerte und Co. beeinflussen ∗natürlich∗ 
das Ergebnis.

von georg (Gast)


Lesenswert?

Philipp B. schrieb:
> Eigentlich sollte das ja nicht sein oder
> sehe ich das falsch?

Kurze Antwort: Ja. Wikipedia führt 5 verschiedene CRC-16 auf, d.h. 
verschiedene Polynome. Und die kann man mit verschiedenen, eigentlich 
beliebigen Startwerten kombinieren.

Georg

von A. S. (Gast)


Lesenswert?

georg schrieb:
> Und die kann man mit verschiedenen, eigentlich beliebigen Startwerten
> kombinieren.

Und dann schlägt noch endianess zu, wenn man das Polynom nicht spiegelt.

von Sebastian (Gast)


Lesenswert?

Das hier könnte hilfreich sein:
http://www.ross.net/crc/crcpaper.html

Da gibt es auch Tabellen, mit denen du, wenn du Glück hast, aus den 
gegebenen CRC die richtigen Parameter rausfinden kannst.

von Scyte (Gast)


Lesenswert?

Oder mit dem tool reveng (Kurzform für reverse engineering).
Das probiert per bruteforce alle Varianten durch, geht bei crc16 noch 
relativ schnell<1min. Du musst nur die Daten übergeben und wieviele bit 
davon die checksumme sind.
LG
Scyte

von Philipp B. (philipp_b993)


Lesenswert?

Okay, danke fuer die Antworten. Dachte es gaebe irgendwie einen 
Standard.

von Bernd K. (prof7bit)


Lesenswert?

Der folgende Katalog listet allein 30 verschiedene CRC-16 
Konfigurationen auf die in freier Wildbahn bereits beobachtet wurden:

http://reveng.sourceforge.net/crc-catalogue/16.htm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.