CRC Berechung für CAN Datenbyte?

OP #1657332
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?
Angehängte Dateien:
Gast #1658452
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
OP #1660115
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.
#1660207
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
#1660220
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.
OP #1666028
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.
#1666073
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
#1666090
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.
OP #1666104
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.

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