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
Patrick schrieb: > Polynom: 0x8408 > Muss ich an den Polynom noch was ändern? denke ja. 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
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
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
Hi, liegt es vielleicht einfach daran, dass dein Polynom falsch ist? 0x8408 -> 1000 0100 0000 1000 du hast aber 1000 1000 0001 0000 verwendet also 0x8810 gruß Christopher
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
Also wenn ich meien CRCs berechne, dann hänge ich da nicht vorher noch ne Eins an... Aber ganz oben (in deinem ersten Post), da hast du doch mit 0x8810 gerechnet, statt mit 0x8408
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
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!
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.
Es gibt Zusatzmechanismen um die CRC sicherer zu machen. Auf http://zorc.breitbandkatze.de/crc.html kannst Du versch. Mechanismen ausprobieren. Wenn es dann online mit der Berechnung klappt, dann solltest Du auch manuell auf das gleiche Ergebnis kommen. Grüße, Steffen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.