Forum: Mikrocontroller und Digitale Elektronik CRC Berechung für CAN Datenbyte?


von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

Ich möchte die Checksumme eines CAN Datenbytes berechnen. Ich verstehe 
aber die Anleitung von Wikipedia 
http://de.wikipedia.org/wiki/Zyklische_Redundanzprüfung noch nicht so 
ganz. Berechnet sich das Generatorpolygon immer aus dem Datenbyte oder 
ist das Generatorpolygon immer fest vorgegeben da es ja dem Sender und 
Empfänger bekannt sein muss? Bei CAN-CRC z.B. x15 + x14 + x10 + x8 + x7 
+ x4 + x3 + 1 also immer hoch15, hoch14....

Kann mir jemand dieses Schreibweise als Binärwert geben?

Die Rechenwege für das Teilen durch den Polynom selber ist mir klar.

Ich möchte ohne CAN-Controller arbeiten, weil die Platine möglichst 
klein und günstig ausfallen soll da ich eine (für mich) größere 
Stückzahl fertigen lassen will und ich da etwas auf die Kosten achten 
muss.

Oder gibts vielleicht ne fertige CRC Tabelle da ich immer nur 1 
Datenbyte übertrage und das etwas schneller wäre den CRC-Wert aus einer 
Tabelle zu fischen?

von Hans (Gast)


Lesenswert?

>x15 + x14 + x10 + x8 + x7+ x4 + x3 + 1
>Kann mir jemand dieses Schreibweise als Binärwert geben?

1100010110011001

>Berechnet sich das Generatorpolygon immer aus dem Datenbyte oder
>ist das Generatorpolygon immer fest vorgegeben da es ja dem Sender und
>Empfänger bekannt sein muss?

Die Datenbytes stellen ein Polynom p1 dar, ebenso das Polynom
p2=1100010110011001, durch welches geteilt wird. Der CRC ist der Rest
der Polynomdivision p1/p2. Die Polynomkonstante p2 ist Sender und
Empfaenger bekannt, p1 variabel (lang) :-)

>Oder gibts vielleicht ne fertige CRC Tabelle da ich immer nur 1
>Datenbyte übertrage und das etwas schneller wäre den CRC-Wert aus einer
>Tabelle zu fischen?

Folgender Link wurde schon mehrmals in CRC-Threads
(in mikrocontroller.net) erwaehnt,
daher hast Du das sicher schon gefunden ;-)  :

http://www.tty1.net/pycrc/

Passt das nicht?


MfG,
Hans

von Thomas (kosmos)


Lesenswert?

habe die einzelnen Schritte wie sie im Wiki beschrieben sind 
durchgeführt und komme bei meinem Datenbyte von 11111111 auf eine 
CAN-CRC von 10010101.

Kann das jemand nachrechnen, damit ich weiß das ich auf dem richtigen 
Weg bin.

Was passiert wenn ich 00000000 übertrage das lässt sich ja trotz der 
Erweiterung mit mehreren Stellen nicht teilen ist dann die Checksumme 0

Wie setzt sich die Checksumme zusammen wenn man mehrere Datenbytes 
überträgt?

pycrc hilf mir nicht weiter da ich das ganze in ASM mache und es auch 
nicht kompilieren kann.

von Fabian B. (fabs)


Lesenswert?

Unabhängig von der Berechnung des CRC, hast du dir mal Gedanken gemacht, 
wie du das mit dem Einlesen beim Schreiben auf dem Bus, das Umschalten 
von Sender auf Empfänger und das Fehlermanagement mit Error-Frames und 
automatischem Resend machen möchtest? In einem FPGA könnte ich mir noch 
vorstellen einen CAN-Core zu implementieren, aber in Software in einem 
uC der noch was anderes tun soll, wohl nur bei extrem langsamen 
Baudraten, wenn überhaupt. Den Transceiver wirste eh immer brauchen, 
warum dann nicht einen uC mit integriertem CAN-Controller?

Gruß
Fabian

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich seh das auch kritisch.
Bei kleinen Baudraten kann es aber funktionieren.
Die Frage ist u.a.: bleib ich mit evtl. abgespecktem CAN innerhalb 
meines Systems oder muss es voll kompatibel sein?
Es gibt inzwischen doch ne Menge MCs mit integriertem CAN.
Falls du doch bei der Softwarelösung bleiben willst: plan ne Menge Zeit 
ein.

von Thomas (kosmos)


Lesenswert?

habe mir 2 Bücher ausgeliehen und mir das ganze mal genauer angesehen. 
Ich denke das ich das ganze sehr vereinfachen werde, Baudrate runter, 
Protokoll abspecken. Zudem ich sowieso nur reine Sender und Empfänger 
ohne Remoteaufforderung einsetzen werde, damit alles dezentral ablaufen 
kann.

von Fabian B. (fabs)


Lesenswert?

Jo, aber dennoch bezweifle ich, dass das in einem System mit "echten" 
CAN-Controllern auf der anderen Seite zuverlässig laufen wird.
Wenn du nur "deine" CAN-Controller am Bus hast ist das freilich was 
anderes, da kann man dann nur den Sinn bezweifeln. Einfach von der 
Kosten-/Nutzenrechnung.
Vielleicht solltest du dir mal kleine kostengünstige µCs mit 
CAN-Controller ansehen, wie den STM8.

Gruß
Fabian

von Helmut -. (dc3yc)


Lesenswert?

Und ausserdem darfst du das nicht CAN nennen, denn da gibts von Bosch 
ein Patent drauf und wenn du das verwenden willst, muss es zertifiziert 
sein und du musst Lizensgebühren zahlen. Ich würde einen 
Billigcontroller nehmen, der das alles schon kann. Da lohnt sich die 
Entwicklung und der Test kaum.

von Thomas (kosmos)


Lesenswert?

kompatibel braucht es nicht sein. Ich fand nur die Möglichkeit mit der 
Abitrierung und die Priorität der einzelnen Nachrichten sehr 
interessant.

Mit den Lizenzen kenne ich mich nicht aus, dachte aber das die 
CAN-Controller Hersteller diese pro Stück entrichten und das Patent 
sollte doch schon abgelaufen sein da es CAN schon seit 27 Jahren gibt. 
Und bei einer Privatnutzung ist es sowieso egal.

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.