Forward / Reverse CCITT(CRC) ??

Gast #169230
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
Angehängte Dateien:
Gast #169231
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
Gast #169233
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
Gast #169235
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
Gast #169237
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
Angehängte Dateien:
Gast #169238
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.