Forum: Mikrocontroller und Digitale Elektronik CRC8 Auswertung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Robert (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.