www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme bei einer CRC berrechnung


Autor: Kai W. (kai-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kämpfe hier mit folgendem Problem:
gegeben ist  ein Datenstrom mit 24 Bytes:
Byte0 - Byte22 = Nutzdaten; Byte 23 = CRC
Das zugehörige Generatorpolynom ist x^8 + x^4 + x^3 + x^2 + 1

ausserdem habe ich dazu zwei Beispiele:

Example 1:
Byte   Bits set to logic 1
0      0 2 3 4 5
1      1
4      1
All other bits in channel status bytes 0 to 22 inclusive are set to 
logic 0:
CRCC Byte 23:         1 1 0 1 1 0 0 1

Example 2:
Byte   Bits set to logic 1
0      0
All other bits in channel status bytes 0 to 22 inclusive are set to 
logic 0:
CRCC Byte23           0 1 0 0 1 1 0 0

Da ich mich grede erst mühsam in die CRC Thematik einarbeite, habe ich 
diese Beispiele erstmal "zu Fuß" nachrechnen, bekomme aber aber immer 
ein anderes Ergebnis raus.

Also bei Example zwei fang ich so an:

Bit0      Bit1      Bit2           Bit23
0000 0001 0000 0000 0000 0000 .... 0000 0000
        1 0001 1101
------------------------
             1 1101 0000
             1 0001 1101
--------------------------
               1100 1101 0
               1000 1110 1
---------------------------
                100 0011 1

usw. bis ich am ende einen Rest von 10010101 raus bekomme.

Ich hab' das alles mehrfach durch, habe mir inzwischen auch eine 
Excel-Tabelle gebastelt (die zumindest mit den Beispielen von Wikipedia 
und co. hervorragend klar kommt).
Ich bekomme immer das gleiche, aber nie das gewünschte raus.

Habe ich jetzt einen grundsätzlichen Denkfehler???

Ich hoffe mir kann jemand auf die Sprünge helfen...

Gruß Kai

Autor: Remo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Ding ist zu lang um es nachzurechnen, daher nur mal so eine Idee:
Bist du dir denn sicher dass das Bit0 auch das LSB und nicht das MSB 
ist?

Idee Nr2: Da du dir eine Excel-Tabelle gemacht hast, lass dir doch mit 
der Zielwertsuche ausgehend von dem "richtigen" CRC die ursprüngliche 
Bit/Bytefolge itterieren, Evtl kannst du so Bitdreher sehen.

P.S.: Poste halt mal dein Spiel-Excel dann hilft dir evtl ja einer.
ciao
Remo

Autor: Niels Keller (niels-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo. Ist doch ein wenig aufwendig, dass gleich mit einem 24 Byte 
langem Datensatz zu machen. Klein anfangen. Die CRC-Bildung ist im 
Grunde nur eine Schieberegisteroperation mit XOR-Vergleich und ganz 
einfach diskret aufbaubar - wirklich gar kein Hexenwerk.

Ein kleines Beispiel:

Die Bitfolge 1011 0000 soll übertragen werden. Dazu wird ein 
Generatorpolynom vom Grad 2 verwendet. Dieses lautet: x^2+1 (101).

Zuerst multipliziert man mit der höchsten Potenz des Generatorpolynoms 
die zu sendende Information durch. So sieht das aus:

(x^8+x^6+x^5)*x^2=x^10+x^8+x^7=1011 0000 00

Man merkt - es wird an und für sich nur geschoben.

Weiter geht´s:

Das entstandene Polynom 1011 0000 00 wird durch das ursprüngliche 
Generatorpolynom dividiert. Das ist eine Polynomdivision mit Rest. Der 
Rest des entstehenden Polynoms ist vom Grad her kleiner als der des 
Generatorpolynoms. Wird mir zu lang...

1011 0000 00 : 101 = 10
101
----

Dieser Rest wird an den Datensatz mit angehängt und übertragen:

Der Empfänger dividiert nun das Polynom durch das ursprüngliche Polynom. 
Ist der Rest 0 ist alles i.O.

Auf Seite 7 dieses Dokuments ist das graphisch veranschaulicht: 
http://www-vs.informatik.uni-ulm.de/teach/ws04/rn1...

Autor: Kai W. (kai-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für eure Antworten,

@ Niels Keller:
die Theorie hab ich soweit durch und verstanden. Und bei den Beispielen, 
die ich sonst so im Netz gefunden habe, kommt ja auch alles hervorragend 
hin.

Dummerweise habe ich jetzt aber dieses blöde 24 Byte Teil vor der Nase 
und das weigert sich hartnäckig.

@ Remo:
Das mit dem LSB/MSB ist es offensichtlich leider nicht, aber ich vermute 
langsam, dass es etwas in der Art ist.

Auf alle Fälle ist mir jetzt zu spät und ich werde morgen weiter damit 
beschäftigen

Gruß Kai

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist die CRC mit 00000000 oder mit 11111111
vorbelegt?

Autor: Kai W. (kai-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs jetzt!!!

Der Datenstrom fängt mit dem LSB an UND der Startwert ist FF.

Danke dass ihr mich auf den richtigen Weg gebracht habt.

Gruß Kai

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.