Forum: Mikrocontroller und Digitale Elektronik crc8 berechnen


von Nicolas Nickisch (Gast)


Lesenswert?

Ich bin leider absolut kein Mathe-Freak. Insofern habe ich einiges an 
Verständnisschwierigkeiten beim Thema CRC8 berechnen.
Das Netz ist zwar voll von Hinweisen, aber leider komme ich nicht ganz 
hin.

Ich habe hier eine superkurze Anleitung  wie die Kommunikation mit einem 
Gerät ablaufen soll.

"Checksum8 is an 8bit checksum as it is utilized by varoius chip 
manufacterets ( with the polynomial x^8+x^5+x^4+1, bit reversion for 
data and remainder, initialized with 0xff)"
Mehr habe ich nicht.

Es beginnt schon mit dem Verständnis für das Polynom. Wie mir scheint, 
aknn man hier alles mögliche einsetzen, manche Werte sind aber wohl 
besser geeignet. Für CRC8 finde ich immer wieder den Wert 0x07 als 
Polynom. Passt dies zu der o.g. Anweisung ? Ich ätte jetzt gedacht, es 
müsste 49dez sein - aber was soll dann das x^8 ? Wenn ich einige 
Webseiten so anschaue, dann scheint ein x^8 oder x^16 (bei CRC16) 
einfach weggelassen zu werden. Aber man wird ja nicht einfach das 
höchstwertige Bit unterschalgen , oder ?

Unter www. miscel.dk/miscel findet man ein Programm mit dem man 
tatsächlich crc8-Werte zum testen berechnen kann.
Dazu gehören aber noch einige andere Werte.

Initial: dürfte dem 0xff in der Anweisung entsprechen
Alt: ?
final xor: ?
Polynom: müsste hier 49dez rein ?

Kann mir jemadn helfen ?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Gehört eigentlich nicht in diese Forum, habs mal gemeldet vieleicht 
verschiebt es ein Freundlicher Moderator.

http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check erklärt das 
generelle Vorgehen + Beispiel in C vieleicht hilft dir das?
Da wird auch erklärt wie das Polynom zustande kommt.

von Hans (Gast)


Lesenswert?

Zurueck zur urspruenglichen Frage:

> manufacterets ( with the polynomial x^8+x^5+x^4+1, bit reversion for
>besser geeignet. Für CRC8 finde ich immer wieder den Wert 0x07 als
>Polynom. Passt dies zu der o.g. Anweisung ?

nein.

> Ich ätte jetzt gedacht, es
> müsste 49dez sein -

49dez = 110001 = x^5 + x^4 + 1

BRAVO! Passt!

> aber was soll dann das x^8 ?

Wenn das 8.te Bit gesetzt wird, also 1.abcd.efgh  (a..h E {0,1})
xored man mit 1.0011.0001 (=x^8 + x^5 + x^4 + 1), d.h. Bit8 wird
durch das XOR 0.
Wenn es sowie die "meiste" Zeit "0" ist, und man lediglich bei
einer Schiebeoperation aufpassen muss, reicht ein Byte. Ein
Programm, das mit 9 Bit hantiert und eine darauffolgende
(leichte) Optimierung macht Dir die Antwort auf die Frage glasklar.

> Wenn ich einige
>Webseiten so anschaue, dann scheint ein x^8 oder x^16 (bei CRC16)
>einfach weggelassen zu werden. Aber man wird ja nicht einfach das
>höchstwertige Bit unterschalgen , oder ?

s.o.

>Unter www. miscel.dk/miscel findet man ein Programm mit dem man
>tatsächlich crc8-Werte zum testen berechnen kann.
>Dazu gehören aber noch einige andere Werte.

Den 10 Zeiler bekommst Du in 30 Minuten selbst hin!
Aufpassen wie laut Spec. die Daten reinkommen, d.h. LSB first
oder MSB first.

-Hans

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.