crc8 problem

Gast #2902871
Lesenswert?

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!!!
Gast #2902885
Lesenswert?

Die Procedur ist deklariert als : uint8_t crc8 ( uint8_t *data_in, ..

data als pointer.  Gebraucht als

uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};
crc = crc8 ( ccc,5 );

Ich wuerd's mal mit

crc = crc8 ( &ccc,5 );

probieren.
Gast #2902894
Lesenswert?

ob crc_data oder &crc_data macht beim Ergebnis keinen Unterschied.

Ich meine mich auch aus einer Vorlesung drann zu erinnern, dass crc_data 
== &crc_data[0]  ist.


Habe mir innerhalb der crc routine schonmal jedes byte einzeln ausgeben 
lassen und es kommt auch der richtige Eingangswert raus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren