CRC berechnet + Problem

Gast #490838
Hi Hallo

Ich habe folgendes
Generator CRC:  1011'1000'0101
Nutzdaten: 1100'0000'0001'1000'1010

Ich habe die zu übertragende Bitfolge ausgerechnet (wie es bei Wiki 
steht)

1100'0000'0001'1000'1010'1001'0001'0100 = 0xC018A914

Mit den online-tools kam ich nicht klar...die haben alles was anderes 
raus.
Kann mir das jemand bestätigen?

Das ganze soll in ein CRC-Frame gehen, dieser hat aber nur 11 Bit Platz.
Wie muss man dort jetzt weitermachen um das auf 11 Bit zu bringen?

Grüße
Manni
Gast
Also mit einem einem Generatorpolynom mit 12 Bits bekommt man 11 Bits 
raus.
Ich habe:

1100'0000'0001'1000'1010'   011'1001'0101'

Die letzen 11 Bits sind der Rest der Polynomdivision.
Gast
Also ausführlicher:

Ein CRC Polynom mit 12 Stellen (x^11 ... x^0) lässt im Worst-Case (also 
x^10 : 1^11) ein x^10 stehen (Rest) Somit hat ein Generatorpolynom mit 
12 Bits einen Rest von maximal 11 Bits. Falls weniger wird mit nullen 
aufgefuellt.

Eine Probe kannst du machen indem du die Polynomdivison machst und dann 
0 rauskommt.

Deine CRC ist m.E. jedoch falsch da das MSB bei dir gesetzt ist. (Wie 
schon oben erwaehnt wird im "Worst-Case" das MSB (11 Bit) zu 1)
Gast
Irgendwas scheine ich falsch zu machen. Hier mal das Wiki Beispiel:
Ich verstehe nicht wie man auf die 0 0 0 0 0 kommt (mit Pfeil markiert).
Ich dachte es wird immer durch das Generator Polynom dividiert.

Frame:          1 1 0 1 0 1 1 0 1 1
Generator:      1 0 0 1 1
Frame 0-Bits:   1 1 0 1 0 1 1 0 1 1 0 0 0 0

Division:

    1 1 0 1 0 1 1 0 1 1 0 0 0 0  /  1 0 0 1 1  =  1 1 0 0 0 0 1 0 1 0
    1 0 0 1 1 ------------------------------------+ | |             |
    ---------                                       | |             |
      1 0 0 1 1                                     | |             |
      1 0 0 1 1 ------------------------------------+ |             |
      ---------                                       |             |
        0 0 0 0 1                                     |             |
->      0 0 0 0 0 ------------------------------------+    . . .    |
        ---------                                                   |
          0 0 0 1 0                                                 |
          0 0 0 0 0                                                 |
          ---------                                                 |
            0 0 1 0 1                                               |
            0 0 0 0 0                                               |
            ---------                                               |
              0 1 0 1 1                                             |
              0 0 0 0 0                                             |
              ---------                                             |
                1 0 1 1 0                                           |
                1 0 0 1 1                                           |
                ---------                                           |
                  0 1 0 1 0                                         |
                  0 0 0 0 0                                         |
                  ---------                                         |
                    1 0 1 0 0                                       |
                    1 0 0 1 1                                       |
                    ---------                                       |
                      0 1 1 1 0                                     |
                      0 0 0 0 0 ------------------------------------+
                      ---------
                        1 1 1 0  =  Rest
Gast
Diese Methode ist IMO kompliziert und unnoetig umstaendlich. Diese 0000 
Die die jedes mal drunterschreiben ist sinnlos. Schneller und einfach 
zeigt das erste Beispiel auf Wikipedia.

Generell kann man es so sagen:

- Man will die 'linkeste' 1 wegbekommen.
-> Dazu stellt man das generatorpolynom unter diese eins und mittels 
eines XOR wird dann die zu 0.
-> nun geht man wieder zur 'linkesten' 1 usw...
- So lange bis man das generatorpolynom nicht mehr drunterschreiben kann 
(es fehlen die bits) und man hat den rest...
Gast
Hallo!
da Ganze gehört dem Header-CRC vom Flexray Frame (siehe Anhang).
Es sind also folgende Daten CRC geschützt:
Sync Bit + Startup Bit + Frame ID + Payload Länge

Im aktuellen Beispiel:
Sync Bit=1
Startup Bit=1
Frame ID=3
Payload Länge=10

Header CRC: 0x5FB = 101.1111.1011 (so soll er sein, damit läuft das 
System auch)

Mehr darüber sagt mir nichtmal die Flexray Spezifikation.

Ist es nich beim CAN ähnlich, eine CRC ..aber die wird ja wohl vom 
Controller berechnet.
Angehängte Dateien:
Gast
Ja müsst alles passen. Hab auch grad mein Flexray Reference Chart 
angeguckt und stimm dir zu.

Jetzt ist nur die Frage ob man nicht die Header Bits alle umdrehen muss 
und darüber den CRC laufen lässt. Das ist nur geraten, könnte es mir 
aber evtl. vorstellen da CRC normal über ein Schieberegister realisiert 
wird und die "linken" Bits ja zuerst auf den Bus kommen.

Bin jetzt zu faul auszurechnen was da für ein CRC-Rest rauskommt.

Wie gesagt, ist nur geraten...
Gast
wa smir noch aufgefallen ist:
In der Spez.2.1 steht das CRCPolynom so:
x^11 + x^9 + x^8 + x^7 + x^2 + 1 = 101110000101

mit diesem habe ich auch gerechnet (siehe oben).

Aber dann steht weiter im Text:
Header CRC Polynom (hexadecimal) = 0x385 = 1110000101
was einem ganz anderen Polynom entspricht.
Bin etwas verwirrt... (habe auch mit diesem Polynom gerechnet..ebenso 
Mist rausgekommen)
Gast
in der Doku steht noch dies:
The initialization vector of the register used to generate the header 
CRC shall be 0x01A.

Weis jemand damit was anzufangen?
Gast
Lies dir doch nochmal den Wikipedia Artikel ganz durch. Da steht was 
davon. Bzw. mach dich auch mit den Links schlau... Ich weis es grad auch 
net, aber dazu findest du bestimmt was im Netz.
Gast
Hat vielleicht jemand den Quelcode zu dem CRC-11 Algorithmus?
Hab jetzt Stundenlang aufm Blatt Papier rumgerechnet. Hab auch 0x01A als 
Initialisierung für den Register verwendet, es kommt aber trotzdem nicht 
der Sollwert raus.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 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.