www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC berechnet + Problem


Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Manni (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe vorher was falsch gemacht. Jetzt nochmal berechnet..aber stimmt 
immernoch nicht mit deinem überein.
Kannst du mal gucken? (Anhang)

Danke!

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jop kann kein Fehler erkennen. Dann is meins wohl falsch.. ;)

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
offensichtlich machen wir beide was falsch.

Die Musterlösung sagt 101'1111'1011 als CRC.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es soll auch falsche Musterlösungen geben.

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie lautet denn die genaue aufgaben? Nicht das da noch ein 
"descending/ascending order" Fehler drin ist. Muss man Endianess 
beachten, etc?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hatte da auch immer meine Qual mit dem CRC.
Aber bei RENESAS RC8 ist ein pdf .
Mit C-Source u.
Das hat mir sehr geholfen.

Autor: Manni (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl M. (movex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich auch öfters damit konfrontiert bin die FlexRay Header CRC zu 
bestimmen, habe ich ein kleines Tool dafür geschrieben:

http://www.movex.de/down/flexray/

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.