hallo @ kennt jemand den Unterschied zwischen der Forward und Reverse CCITT (CRC mit Polynom x^16 + x^12 + x^5 + 1)? Kann sich jemand vorstellen,mit welchem Polynom die mit CRC-16 gekennzeichneten Felder berechnet wurden? Gruß und Dank schonmal
Hallo Gerd, auch wenn Polynom und Startwert festgelegt sind, gibt es immer noch etliche Wege der Berechnung. So kann man die zu prüfenden Daten vorwärts oder rückwärts behandeln. Ebenso kann man das Polynom rechts oder links herum rotieren. Das gibt dann natürlich unterschiedliche Ergebnisse. Woher stammt dein crc.pdf Dokument? Ist das ein Screenshot von einem Programm? Wo gibt es dieses Tool? Ich habe schon bei TI auf der Seite gesucht, aber nix gefunden. Kannst Du mir da einen Tipp geben? Gruß, Markus_8051
Ja, gerne, an die GMX-Adresse. Ich habe nämlich auch oft schwierigkeiten, wenn es darum geht, den richtigen Algorythmus für die CRC zu finden. Und dieses Tool sieht so aus, als ob man damit ein paar Möglichkeiten ausprobieren könnte. Gruß und danke schon mal, Markus_8051
Hallo nochmal, kennt jemand den Algorithmus für den Reverse CCITT, bzw. Doku darüber? Gruß
Hallo Gerd, Ich habe es nachgerechnet. CRC-16 -> x^16 + x^15 + x^2 + 1 CCITT -> x^16 + x^12 + x^5 + 1 Forward CRC: - MSB der Datenbytes zuerst - CRC-Schieberegister in Richtung MSB (nach links) schieben - normale Polynommaske verwenden (0x8005/0x1021) Reverse CRC: - LSB der Datenbytes zuerst - CRC-Schieberegister in Richtung LSB (nach rechts) schieben - bitgedrehte Polynommaske verwenden (0xA001/0x8408) Gruß Thomas
Hallo Thomas, Danke für die Info, ich probier' s gleich mal aus. Hast du die Rechnung da, könnte ich da mal draufschauen?? Grüße Gerd
Hallo Gerd, Die Berechnungen stehen im Dateianhang. Die Reverse-CRC kann man übrigens auch vorwärts berechnen, man fängt dann mit dem LSB der Datenbytes anstatt dem MSB an und verwendet das bitgedrehte Ergebniss der kompletten Berechnung. Dieses Austauschen der Bits spart man durch das Reverse-Verfahren, die CRC wird bereits bitgedreht berechnet. Aber wozu das ganze überhaupt ? CRC ist eigentlich immer MSB-first. Damit ergeben sich aber Probleme wenn bei der Übertragung eines Bytes das LSB zuerst dran ist. Dann würden die CRC-Bits in der falschen Reihenfolge am Ziel ankommen. In dieser Reihenfolge sollen sie ankommen : 1. Byte 2. Byte 15 14 13 12 11 10 09 08 - 07 06 05 04 03 02 01 00 Aber so würden sie ankommen : 1. Byte 2. Byte 08 09 10 11 12 13 14 15 - 00 01 02 03 04 05 06 07 Das Reverse Verfahren berechnet sie so : 1. Byte 2. Byte 00 01 02 03 04 05 06 07 - 08 09 10 11 12 13 14 15 Vor dem Senden vertauscht man die beiden Bytes : 1. Byte 2. Byte 08 09 10 11 12 13 14 15 - 00 01 02 03 04 05 06 07 Jetzt kommen sie wieder richtig an : 1. Byte 2. Byte 15 14 13 12 11 10 09 08 - 07 06 05 04 03 02 01 00 Gruß Thomas
Oh man, Thomas, ich weiß garnicht wie ich das wieder gut machen kann!!! Hab vielen Dank für Deine aufopferungsvolle Hilfe. :) Viele Grüße Gerd
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.