Hallo, für eine Datenübertragung mit CAN von PC zu Mikrocontroller setzte ich eine CRC 32 Prüfung ein. Es soll sichergestellt werden, dass die Datenpackete sicher vom Mikrocontroller empfangen werden. Die Datenpackete sind 128 Byte groß. Die 128 Bytes werden mit einer Art Transportprotokoll an dem Mikrocontroller versendet. Nach jedem empfangen eines Sektors, der aus 128 Bytes x 512 = 0x10000 hex besteht, wird nochmals eine CRC 32 Prüfung durchgeführt. Nach der CRC 32 Berechnung im Mikrocontroller wird die CRC Summe an dem PC gesendet. Auf der PC Seite wird ebenfalls von den versendeten Daten eine CRC Prüfung durchgeführt. Damit ich festgestellt werden kann, ob die Daten korrekt an den Mikrocontroller versendet wurden, weird auf der PC Seite aus immer die beiden CRC Summen miteinander verglichen. Nun stellt sich mir die Frage, ob diese Vorgehensweise korrekt ist oder nicht.
Hat der CAN-Bus auf unterster Ebene nicht schon eine CRC-Sicherung? Dann wäre das doch überflüssig?
Hallo Pitty, das ist mir bereits bekannt. Ich möchte nur sicherstellen, dass der Mikrocontroller sicher und korrekt die Daten empfangen hat.
Wärest du bei der Post, so würdest du ein Paket in einen Sprinter laden und den Sprinter in einen LKW, und das mit dem Argument, dass zwei Fahrzeuge doppelt so schnell sind, wie ein Fahrzeug.
Sooo überkanditelt ist das nicht... es kommt imho auf die Datenmenge und die Anwendung an. Auf unterster Ebene, also der Hardware, ist der CAN ziemlich sicher, das wird da durch in Silizium gegossene Controller gewährleistet, aber eben nur über eine Framelänge, also 8 Byte. Alles was darüber hinausgeht, kann durchaus nochmal abgesichert werden. Das wird manchmal sogar verlangt (z.B. Medizintechnik). Im Normalfall geht man davon aus, daß fehlerhafte Frames durch den CAN-Controller selbst schon zurückgewiesen bzw neu angefordert werden. Es spricht aber eben nichts dagegen, daß man große Datenblöcke nochmal zusätzlich absichert. Kostet halt Zeit und Ressourcen.
tiny schrieb: > Nun stellt sich mir > die Frage, ob diese Vorgehensweise korrekt ist oder nicht. Ja, das scheint so korrekt zu sein. Wenn sowohl Sender als auch Empfänger selbstständig die CRC berechnen (logischerweise mit dem gleichen Polynom) und zum gleichen Ergebnis kommen, ist die Übertragung geglückt.
Davis schrieb: > Wärest du bei der Post, so würdest du ein Paket in einen Sprinter laden > und den Sprinter in einen LKW, und das mit dem Argument, dass zwei > Fahrzeuge doppelt so schnell sind, wie ein Fahrzeug. Nein. Er möchte doppelt sichern, in deinem Vergleich würde er also ein Paket nochmals verpacken um mehr Sicherheit zu haben. Und die hat er auch.
Davis schrieb: > Wärest du bei der Post, so würdest du ein Paket in einen Sprinter laden > > und den Sprinter in einen LKW, und das mit dem Argument, dass zwei > > Fahrzeuge doppelt so schnell sind, wie ein Fahrzeug. Macht jeder PC der im Netzwerk hängt: Ethernet-Frame mit CRC TCP-Frame mit CRC IP-Frame mit CRC
Gregor B. schrieb: > Macht jeder PC der im Netzwerk hängt: > > Ethernet-Frame mit CRC > TCP-Frame mit CRC > IP-Frame mit CRC Aber nicht, um es sicherer zu machen. TCP oder IP haben nichts mit Ethernet zu tun und dürfen auch (und wurden früher häufig) über andere Strecken als Ethernet übertragen werden. Und diese haben möglicherweise kein CRC. MfG Klaus
Folgendes habe ich mir überlegt. Nach jeder größeren Datenmenge die über CAN übertragen wird, versende ich im Anschluss noch die CRC. Auf der Genestelle (Mikrocontroller) werden die Daten + CRC empfangen und dort wird eine CRC Prüfung mit dem gleichen CRC Polynom durchgeführt. Die das Ergebnis 0, dann ist alles ok.
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.