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.
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.