Forum: FPGA, VHDL & Co. Can-Controller von OpenCore


von Torben (Gast)


Lesenswert?

Moin Leute,
weiß jemand welches Generatorpolynom der CAN-Controller von OpenCore 
verwendet, um den CRC auszurechnen?
Das gängige Polynom (x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1) ist es 
nicht, denn da passt die Bitfolge hinten und vor nicht zusammen mit der 
errechneten.

Nachricht: 0110010001001100011100000000001100000010
Polynom: x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1 (100010110011001)
errechnetes CRC: 11111101000001

vom CAN-Controller errechnetes CRC: 010010010000000

Kennt sich jemand damit aus und kann mir dabei weiterhelfen?

von Matthias (Gast)


Lesenswert?

Müsste man das nicht aus dem VHDL Code rauslesen können?

von Torben (Gast)


Lesenswert?

Hast recht, steht sogar im Klartest da (ich Honk).
Bloß nun stellt sich die Frage, wie errechnet der Controller bloß seine 
CRC?
Das Polynom ist gleich dem von mir verwendeten.
Ich las meine Polynome von VisualHash (Windowsprogramm) berechnen und 
von der I-Netseite http://zorc.breitbandkatze.de/crc.html.

von Herr Huber (Gast)


Lesenswert?

Kann es sein, daß Du word- oder byte orientiwert rechnest und der CRc 
den vollen Bitstrom nutzt?

Oder, der CRC im CAN nutzt (nicht) alle redundanten bits ?

von Lupinus Digitalus (Gast)


Lesenswert?

Bloss kurz eingeworfen.

Wir haben den selben Core vor kurzen mit einem CAN Protocol Tester
geprüft und die Pakete wurden richtig gesendet und empfangen.

Heisst der implementierte CRC sollte korrekt sein und implizit
der von Dir verwendete CRC sollte noch einmal überdacht werden.
Also ähnlicher Feedback wie mein Vorredner

Gruss

Lupi

von Torben (Gast)


Lesenswert?

Hi,
so ich hab mir jetzt nochmal den CRC des Controllers angesehen, aber ich 
glaube ich bin zu blöd um das zu Verstehen was er macht.
Ich gehe davon aus das man den CRC des Can- Protokolls genauso 
ausrechnet wie sonst auch oder sehe ich das falsch?

Eine kleines Beispiel:
Nachricht (M):10011010
Polynom (P): 1011
aufzufüllende Nullen (N): 3
Rest von der Division (R): 001 --> M / P
Formel zum Errechnen der zu sendenden Nachricht: M * x^k + R
x^k = 1000 (Binär)

Danach erhalte ich folgende Nachricht: 10011010001

Wo liegt mein Denkfehler?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.