Seit Stunden habe ich ein Problem mit crc8.
Initialwert: 0x00
Polynom: 0x07 / (x^8 + x^2 + x^1 + x^0)
daten: uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};
Mehrere Online-Rechner sowie die Java-Klasse, die ich mir
heruntergeladen habe (diese arbeitet mit einer vorgegebenen Tabelle)
bringen folgendes ergebnis:
crc8 = 34dez bzw. 0x22
///
Ich habe nun 3 verschiedene crc8 codes hier aus dem Forum ausprobiert
(und natürlich das polynom angepasst), es kommt aber einfach immer was
anderes raus (197dez bzw. c5) hex.
Hier der c-code (von "avr-code" auf google code):
1 | #include <inttypes.h>
|
2 |
|
3 | #define CRC8INIT 0x00
|
4 | #define CRC8POLY 0x07 //0X18 = X^8+X^5+X^4+X^0
|
5 | //0x07 = x^8+x^2+x^1+x^0
|
6 |
|
7 | uint8_t crc8 ( uint8_t *data_in, uint16_t number_of_bytes_to_read )
|
8 | {
|
9 | uint8_t crc;
|
10 | uint16_t loop_count;
|
11 | uint8_t bit_counter;
|
12 | uint8_t data;
|
13 | uint8_t feedback_bit;
|
14 |
|
15 | crc = CRC8INIT;
|
16 |
|
17 | for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
|
18 | {
|
19 | data = data_in[loop_count];
|
20 |
|
21 | bit_counter = 8;
|
22 | do {
|
23 | feedback_bit = (crc ^ data) & 0x01;
|
24 |
|
25 | if ( feedback_bit == 0x01 ) {
|
26 | crc = crc ^ CRC8POLY;
|
27 | }
|
28 | crc = (crc >> 1) & 0x7F;
|
29 | if ( feedback_bit == 0x01 ) {
|
30 | crc = crc | 0x80;
|
31 | }
|
32 |
|
33 | data = data >> 1;
|
34 | bit_counter--;
|
35 |
|
36 | } while (bit_counter > 0);
|
37 | }
|
38 |
|
39 | return crc;
|
40 | }
|
aufgerufen mit:
1 | uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};
|
2 | crc = crc8 ( ccc,5 );
|
Ich verstehs wirklich garnicht... Sieht da jemand einen Fehler?
Danke!!!