CRC16 per hand berechnen!

Gast #3052664
Lesenswert?

Hallo,

ich verzweifle bald daran, die CRC16 Prüfsumme per Hand zu berechnen!

Hier mal die Ausgangsdaten:
Daten: 0x01
Init: 0xFFFF
Polynom: 0x8408

Ich will einfach nur zum Test die Prüfsumme für den Beispielwert 1 
berechnen.
Wenn ich eine Schieberegister Simuliere, und es so berechne, wie das 
Schieberegister arbeitet, dann bekomme ich die richtige Prüfsumme 
heraus! (0E1E)

Wenn ich es aber normal mit Hand, per Division mit Modulo 2 versuche, 
dann scheitere ich immer erfolgreich daran! :-(
Ich weiß, es sieht so aus als hätte ich nicht fertig gerechnet. Dass 
hatte ich aber vorher schon mal so versucht und da bekam ich was 
falsches heraus!
Ich kann mir nicht erklären, was ich da anders machen muss!

Ist der Init das gleiche wie der Startwert, also muss 0xFFFF einfach vor 
das Datenbyte gehangen werden?
Muss ich an den Polynom noch was ändern?

Ich würde mich sehr freuen, wenn mir einer weiterhelfen kann!

Mfg Patrick
Angehängte Dateien:
Gast #3052835
Lesenswert?

Ok, ich werde es mal mit dem Polynom versuchen!

Aber wie muss ich den Init-Wert 0xFFFF behandeln?
Stell ich das einfach vor das Datenbyte, also 0xFFFF01 und dann die 
Polynomdivision durchführen?
Ooder mach ich erst ein Polynomdivision von 0x01 durch 0xFFFF und 
erhalte 0xFFFE und mach damit dann die Polynomdivision?

Vielen Dank schonmal für die bisherige Hilfe!

Mfg Patrick
Gast #3053421
Lesenswert?

Guten Morgen,

ich hab es mal mit dem Polynom von Thosch probiert!

x^16 + x^15 + x^10 + x^3

Ich habe beide Varianten ausprobiert, einmal  dem Init-Wert als 
Startwert vorn dran gehangen und das zweite mal habe ich den Init wert 
vorher mit dem Datenbyte verknüpft.
Bei beiden Varianten kam ich leider nicht zum gewünschten Erfolg! :-)

Hat noch jemand eine Idee, wie es klappen könnte?

Mfg Patrick
Angehängte Dateien:
Gast #3053761
Lesenswert?

Diesen Einwand versteh ich nicht so ganz!

Mein verwendetes Polynom lautet: x^16 + x^15 + x^10 + x^3

Also: 1 1000 0100 0000 1000

Und dieses habe ich auch benutzt!

Siehe auch Zitat von Thosch weiter oben:
>Die höchstwertige Position x^16 ist im Polynom stets implizit enthalten.
>Eine Polynomdefinition 0x8408 bedeutet also, das Polynom ist:

>x^16 + x^15 + x^10 + x^3
#3054209
Lesenswert?

Patrick schrieb:
> Mein verwendetes Polynom lautet: x^16 + x^15 + x^10 + x^3

Polynome enden nach meinem Kenntnisstand immer mit 1 (=x^0), siehe:
http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung#Polynome_und_Typen

Dann wäre Dein Polynom vielleicht in Wirklichkeit
   x^16 + x^15 + x^10 + x^3 + 1
und die Bitfolge
   1 1000 0100 0000 1001

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

Gruß Dierich
Gast #3055371
Lesenswert?

Danke Dietrich für den Typ!
Ich hab es gleich mal probiert. Leider kam ich wieder nicht zum 
gewünchten Erfolg! :-)
Es muss wohl doch noch einen anderen Trick geben!

Wie oben schon mal erwähnt, bei der berechnung per Schieberegister 
klappt es einwandfrei!

CRC16 per Hand zu berechnen ist anscheinend doch nicht so leicht, wie es 
am anfang aussieht! :-)

Wenn noch jemand ne idee hat, ich würde Sie gern versuchen!
Angehängte Dateien:
Gast #3055886
Lesenswert?

Patrick schrieb:
> Wenn noch jemand ne idee hat, ich würde Sie gern versuchen!

Wie schaut denn die Simulierte Schaltung einklich aus?  Nicht, dass die 
Rückkopplung per XNOR statt XOR erfolgt, oder das LSB auf der "falschen" 
Seite steht.

Christopher B. schrieb:
> Also wenn ich meien CRCs berechne, dann hänge ich da nicht vorher noch
> ne Eins an...

Wenn man 16 Bits in der Prüfsumme will, braucht man nunmal ein 
17-Bit-Polynom, da der Grad des Rests bei Division immer kleiner ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren