Forum: Mikrocontroller und Digitale Elektronik CRC für Datenübertragung


von tiny (Gast)


Lesenswert?

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.

von PittyJ (Gast)


Lesenswert?

Hat der CAN-Bus auf unterster Ebene nicht schon eine CRC-Sicherung?
Dann wäre das doch überflüssig?

von tiny (Gast)


Lesenswert?

Hallo Pitty,

das ist mir bereits bekannt. Ich möchte nur sicherstellen, dass der 
Mikrocontroller sicher und korrekt die Daten empfangen hat.

von Davis (Gast)


Lesenswert?

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.

von STM32 (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Der (Gast)


Lesenswert?

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.

von Gregor B. (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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

von tiny (Gast)


Lesenswert?

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