Forum: Mikrocontroller und Digitale Elektronik CRC8 Auswertung


von Robert (Gast)


Lesenswert?

Hallo,
ich habe mich jetzt ca. 1 Tag mit CRC beschäftigt. Doch einige Fragen 
hätte ich da bitte noch.
Ich habe inzwischen ein Code welcher mit meine CRC8 Prüfsumme erzeugt.. 
als Polynom habe ich jetzt 0xD5 genommen.. Wobei wir zur ersten fragen 
kommen.

1. Ich habe öfter gelesen.. ej nimm das Polynom und nicht das... womit 
hängt das zusammen? ich denke dass muss nur auf sender und 
Empfängerseite gleich sein...?!

dann meine zweite frage...
2. Ich habe auch einen Prüfcode (irgendwo im Internet gefunden), der mir 
meine Daten auf Rest 0 überprüft. Das funktioniert auch soweit mit max. 
40bit und ich kann das auch nachvollziehen...

Die Daten die ich hin und her schicke sind aber 20Byte lang (char[20]).

Mein CRC Generator generiert mir aus meinen 19 Byte eine Prüfsumme... 
Diese hänge ich als 20tes Byte hinten dran und verschicke es....
Doch wie kann ich diese 20 Byte nun auf rest 0 überprüfen???

Oder soll ich lieber jedes Byte einzeln durch den generator schicken und 
einzel mit der Prüfsumme hintendran verschicken?


Danke leute schon mal

: Verschoben durch Moderator
von STM32 (Gast)


Lesenswert?

Robert schrieb:
> 1. Ich habe öfter gelesen.. ej nimm das Polynom und nicht das... womit
> hängt das zusammen? ich denke dass muss nur auf sender und
> Empfängerseite gleich sein...?!

Kommt darauf an. Das Polynom bestimmt die überprüfbare Tiefe der CRC, 
Stichwort Hamming-Distanz.

Robert schrieb:
> Mein CRC Generator generiert mir aus meinen 19 Byte eine Prüfsumme...
> Diese hänge ich als 20tes Byte hinten dran und verschicke es....
> Doch wie kann ich diese 20 Byte nun auf rest 0 überprüfen???

Du nimmst in Deinem Beispiel 19 Byte, machst die Prüfssumme und hängst 
sie an, das ist das normale Vorgehen.
Rückwärts machst du folgendes: Während des Empfangs machst Du eine 
Prüfsumme über die 19(!) Bytes, empfängst die übertragene und ver-XORst 
die beiden, also die selbst berechnete mit der empfangenen, miteinander. 
Kommt dabei "0" heraus, ist alles in Ordnung.

von Nop (Gast)


Lesenswert?

Robert schrieb:

> 1. Ich habe öfter gelesen.. ej nimm das Polynom und nicht das... womit
> hängt das zusammen?

Damit, daß unterschiedliche Polynome unterschiedliche Eigenschaften in 
der Fehlerentdeckung haben. Mehr dazu hier:
http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf
Oder auf Koopmans Webseite:
https://users.ece.cmu.edu/~koopman/crc/

> ich denke dass muss nur auf sender und
> Empfängerseite gleich sein...?!

Das sowieso.

> Mein CRC Generator generiert mir aus meinen 19 Byte eine Prüfsumme...
> Diese hänge ich als 20tes Byte hinten dran und verschicke es....

Genau.

> Doch wie kann ich diese 20 Byte nun auf rest 0 überprüfen???

Eigentlich sollte die Checksumme über diese 20 Bytes 0 sein. Du kannst 
aber auch die Checksumme beim Empfänger über die ersten 19 bilden und 
gucken, ob der erhaltene Rest mit dem 20. Byte übereinstimmt.

> Oder soll ich lieber jedes Byte einzeln durch den generator schicken und
> einzel mit der Prüfsumme hintendran verschicken?

Nein. Dann würdest Du ja die Datenmenge effektiv verdoppeln. Wenn Dir 
eine CRC8 nicht sicher genug ist für 20 Byte, dann nimm eine CRC16 oder 
gleich CRC32.

von Robert (Gast)


Lesenswert?

STM32 schrieb im Beitrag #5262259:
> Du nimmst in Deinem Beispiel 19 Byte, machst die Prüfssumme und hängst
> sie an, das ist das normale Vorgehen.
> Rückwärts machst du folgendes: Während des Empfangs machst Du eine
> Prüfsumme über die 19(!) Bytes, empfängst die übertragene und ver-XORst
> die beiden, also die selbst berechnete mit der empfangenen, miteinander.
> Kommt dabei "0" heraus, ist alles in Ordnung.

AHHHH!!!!:D Danke... so wird es klappen...

alle anderen Links werde ich mir auch mal durchkauen...
Danke euch

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.