Hallo, ich habe zwar dutzende Beiträge zum Thema CRC8 gefunden, aber ich habe ein recht spezifisches Verständnisproblem. Ich möchte die CRC8 Checksumme über mehrere Bytes bilden. Konkret möchte ich mit einem ATMEGA48 die CRC8 Checksummen des SMBus für einen MLX90614 IR-Temperatursensor berechnen. Die Berechnung des CRC8 von einem Byte funktioniert bereits problemlos. Dazu habe ich einige Implementierungen nachvollzogen und letztendlich meine eigene geschrieben. Möchte ich auf dem Papier den CRC8 von mehreren Bytes berechnen, schreibe ich diese hintereinander auf, rechne und komme aufs richtige Ergebnis. Möchte ich diese Aufgabe effektiv mit einem 8-Bit AVR bewältigen, sagt mir die Theorie, dass ich den CRC des erstes Bytes berechne und diesen als SEED wieder in die CRC Berechnung des nächsten Bytes mit einfließen lasse. Hier verlässt mich die Theorie... Es ist logisch, dass ich den Rest der letzten "Division" in die nächste mit einfließen lassen muss. Aber wie? Ich fürchte meine Frage wird vielleicht nicht ganz klar. Angenommen ich habe ein Polynom x^8+x^2+x^1+1 und ich möchte den CRC der Nachricht 0xB4 0xB4 berechnen. Dann stellt es für mich kein Problem da den CRC des ersten Bytes zu berechnen, dieser ist 0x05. Im nächsten Schritt kommt wieder 0xB4 als Datenbyte, ich habe 0x05 als SEED und nun? Ich komme an dem Punkt nicht weiter... Egal wie viel ich recherchiere... Danke, fürs lesen meiner Frage. Ich freue mich auf Antworten
Sch dir halt an, wie andere das machen. Du bist ja nicht der erste, der eien CRC8 berechnet http://websvn.hylands.org/filedetails.php?repname=Projects&path=%2Fcommon%2FCrc8.c&sc=1
1 | uint8_t Crc8Block( uint8_t crc, uint8_t *data, uint8_t len ) |
2 | {
|
3 | while ( len > 0 ) |
4 | {
|
5 | crc = Crc8( crc, *data++ ); |
6 | len--; |
7 | }
|
8 | |
9 | return crc; |
10 | |
11 | } // Crc8Block |
einfach nacheinander alle Bytes durch die CRC8 Funktion durchschleusen, wobei das Ergebnis eines Funktionsaufrufs als Vorgabe des zu modifizierenden CRC Wertes für den nächsten dient.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.