SENT Protokoll CRC Berechnung

Gast #5283760
Lesenswert?

Moin,

ich versuche gerade die CRC für das SENT Protokoll in C zu berechnen. 
Die Vorgaben sind:

- 4 Bit CRC
- Polynom 0x1D
- Startwert 0x05

Ich habe schon versucht einige Codebeispiele zu modifizieren, aber es 
kommen immer völlig andere Ergbnisse raus. Hat das schon mal jemand 
gemacht?

Werner
Gast #5283868
Lesenswert?

Hallo

Schau mal Hier https://www.nxp.com/docs/en/application-note/AN4219.pdf
Kapitel 2.1.4

Beschreibt das vorgehen ich würde das so Prograammieren
1
const unsigned char tab_crc4[16] = {   
2
0, 3, 6, 5,   
3
12, 15, 10, 9,   
4
11, 8, 13, 14,   
5
7, 4, 1, 2 };   
6
   
7
unsigned char crc4(unsigned char buf[])   
8
{   
9
    char k=0, crc=0;   
10
   
11
    for(k=0;buf[k]!=NULL;k++)   
12
    {   
13
        crc^=buf[k]>>4;       //PARTE ALTA   
14
        crc=tab_crc4[crc];   
15
        crc^=buf[k]&0xF;    //PARTE BAIXA   
16
        crc=tab_crc4[crc];   
17
    }   
18
   
19
    return crc;

Gruß
Detlev
Gast #5283957
Lesenswert?

Hallo Detlev,

Danke schon mal für die Hilfe, damit klappt es aber leider auch nicht. 
Hier habe ich noch ein paar gemessene Rohdaten:

char data[] = {0x00, 0x05, 0x03, 0x0A, 0x08, 0x01, 0x0A, 0x0C};
char data[] = {0x00, 0x05 , 0x03 , 0x0B , 0x0B , 0x0E , 0x0A , 0x02};
char data[] = {0x04, 0x05 , 0x03 , 0x0B , 0x0E , 0x01 , 0x0A , 0x07};
char data[] = {0x00 , 0x05 , 0x03 , 0x0A , 0x01 , 0x08 , 0x0A , 0x06};
char data[] = {0x00 , 0x05 , 0x03 , 0x0A , 0x08 , 0x02 , 0x0A , 0x0A};

Das erste Nibble ist jeweils der Status, das letzte Nibble ist jeweils 
die gelesene CRC.

Werner
Gast #5289615
Lesenswert?

Polynom mit 0x1D kenne ich nur von einer CRC-8

SAE J2710 habe nochmals in die Spec geschaut und das
SENT Protocol hat das Polynom

Sorry dann kann ich auch nicht weiterhelfen
Gast #5289631
Lesenswert?

Oder Versuche mal das Eventuell Klappt es
1
 
2
int generate_crc(unsigned int data[], int arr_length)
3
 {
4
    
5
 const int gpoly = 0x1D;  // generator polynomial 
6
 int crc = 0x05; // initial value of checksum
7
 printf(“\nAddress\tValue\n”);  // print data values and calculate CRC
8

9
 for (int index = 0; index <= arr_length-1; index++) 
10
    {
11
     printf(“0x%1X\t0x%04X\n”, index, data[index]);
12
     for (int bitnr = 7; bitnr >= 0; bitnr--) 
13
        {
14
         crc <<= 1;
15
         crc = (int) ((data[index] & (1u<<bitnr))>>bitnr);
16
         if (crc & 0x10) crc ^= gpoly;
17
        }
18
    }
19
 printf(“\nCalculated Checksum: 0x%02X\n”, crc);  
20
     // print calculated checksum
21
 return crc;
22
 }

Versprechen kann ich dir aber nichts

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