CRC berechnet + Problem

Gast #490838
Lesenswert?

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 #490857
Lesenswert?

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 #490878
Lesenswert?

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 #490885
Lesenswert?

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 #491046
Lesenswert?

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 #491138
Lesenswert?

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 #491155
Lesenswert?

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 #994975
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren