mikrocontroller.net

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


Autor: Thomas O. (kosmos)
Datum:
Angehängte Dateien:

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

Autor: Hans (Gast)
Datum:

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

Autor: Thomas O. (kosmos)
Datum:

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

Autor: Fabian B. (fabs)
Datum:

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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: Thomas O. (kosmos)
Datum:

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

Autor: Fabian B. (fabs)
Datum:

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

Autor: Helmut -dc3yc (dc3yc)
Datum:

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

Autor: Thomas O. (kosmos)
Datum:

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

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.