Forum: Mikrocontroller und Digitale Elektronik CRC-Tabelle berechnen


von Fabian F. (grottenolm)


Lesenswert?

Moin,

ich bin gerade dabei mir einen Generator/Tester für 
CRC-Tabellen/Polynome zu basteln (In AutoIt) und bin dabei irgednwie auf 
wiedersprüchliche informationen gestoßen.

Ich habe eine CRC-Tabelle für das Polynom x8+ x5+ x3+ x2+ x1+ x0:
1
00, 2F, 5E, 71, BC, 93, E2, CD, 
2
57, 78, 09, 26, EB, C4, B5, 9A...
Diese ist bereits im Einsatz und funktioniert auch mit Geräten die nicht 
von mir programmiert wurden. Von da geh ich mal davon auß, dass diese 
stimmt.

Mit dieser Funktion bekomme ich auch genau diese Tabelle raus 
(for-schleife 0-255):
1
Func MakeCRC_X853210($BitString)
2
   
3
   Local $CRC[8]=[0,0,0,0,0,0,0,0]
4
   Local $i;
5
   Local $Invert;
6
   for $i=0 to (UBound($BitString)-1) step 1
7
      
8
      $Invert = BitXOR(($BitString[$i]),$CRC[7])
9
    
10
      $CRC[7] = $CRC[6]
11
      $CRC[6] = $CRC[5]
12
      $CRC[5] = BitXOR($CRC[4], $Invert)
13
      $CRC[4] = $CRC[3]
14
      $CRC[3] = BitXOR($CRC[2], $Invert)
15
      $CRC[2] = BitXOR($CRC[1], $Invert)
16
      $CRC[1] = BitXOR($CRC[0], $Invert)
17
      $CRC[0] = $Invert                ; Übertrag 8
18
   Next
19
   return($CRC)
20
EndFunc
Deckt sich auch mit dem was hier berechnet wird:
http://ghsi.de/CRC/index.php?Polynom=100101111&Message=128%0D%0A%0D%0A%0D%0A

Für das Polynom
x8+x5+x4+1
Sollte der Code also so aussehen:
1
Func MakeCRC_X853210($BitString)
2
   
3
   Local $CRC[8]=[0,0,0,0,0,0,0,0]
4
   Local $i;
5
   Local $Invert;
6
   for $i=0 to (UBound($BitString)-1) step 1
7
      
8
      $Invert = BitXOR(($BitString[$i]),$CRC[7])
9
    
10
      $CRC[7] = $CRC[6]
11
      $CRC[6] = $CRC[5]
12
      $CRC[5] = BitXOR($CRC[4], $Invert)
13
      $CRC[4] = BitXOR($CRC[3], $Invert)
14
      $CRC[3] = $CRC[2]
15
      $CRC[2] = $CRC[1]
16
      $CRC[1] = $CRC[0]
17
      $CRC[0] = $Invert
18
19
   Next
20
   return($CRC)
21
EndFunc

Die Tabelle die da rauskommt schaut dann so aus:
1
0x00, 0x31, 0x62, 0x53, 0xC4, 0xF5, 0xA6, 0x97, 
2
0xB9, 0x88, 0xDB, 0xEA, 0x7D, 0x4C, 0x1F, 0x2E,

Was aber irgendwie keine ähnlichkeit hat mit der Tabelle von 
Dallas/Maxim
die z.B. hier rumgeistert, die aber das selbe Polynom verwenden soll...:
Beitrag "CRC8 / OneWire Frage"

Was stimmt denn nun?

Die Werte aus der Tabelle von Dallas passen auch nicht zu dem 
CRC-Cecker-link von oben..

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
Noch kein Account? Hier anmelden.