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?
>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
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.
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
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.