Hallo, ich logge gerade die Daten eines 868 MHz Funkthermometers mit: 94 44 21 6A 54 94 44 23 6A 8D 94 44 22 6A 79 94 44 24 6A 23 Das letzte Byte soll die CRC sein (angeblich Generatorpolynom x^8 + x^5 + x^4 + 1 wie bei Dallas 1-Wire). Ich habe nun schon einige Online CRC Rechner und C Sourcecodes ausprobiert, aber keiner hat das richtige Ergebnis geliefert. Kann jemand helfen? Stefan
Hallo, folgende Routine ergibt das gewünschte Ergebnis
1 | uint8_t CRC8_update(uint8_t crc, uint8_t data) //mit dem Dallas 1-Wire Generatorpolynom x^8 + x^5+ x^4 + 1 entspricht: 100110001, 0x131 |
2 | {
|
3 | uint8_t i; |
4 | |
5 | crc = crc ^ data; |
6 | for (i = 0; i < 8; i++){ |
7 | if (crc & 0x80) |
8 | crc = (crc << 1) ^ 0x31; // Dallas 1-Wire-Polynom |
9 | else
|
10 | crc <<= 1; |
11 | }
|
12 | return crc; |
13 | }
|
dazu zu begin die "crc" mit 0x00 initialisieren und dann fortlaufend die Datenbytes "bearbeiten"
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.