Python Dow CRC mit crcmod (I2C und RPi)
Verfasst: Montag 3. Februar 2014, 21:06
Hallo zusammen,
ich bastel momentan an meinem Raspberry Pi und spreche mit I2C eine Schrittmotorkarte an. Da ich momentan über ein Steckboard arbeite und eine längere I2C Leitung verwende, fange ich mir noch recht viele Busstörungen ein. Die Schrittmotorkarte kommt aus dem Roboternetzbereich und unterstützt CRC-8 (Dallas/Maxim - Polynom 8C). Natürlich auf Bascom mit abgestimmt.
Um die Busstörungen zu erkennen (Behebung und Fehlersuche dort später) will ich den CRC nun auswerten. Nun habe ich schon viel hin und her gerechnet und probiert und weiß einfach nicht mehr weiter. Bascom hat eine crc8 Funktion, um das ganze zu berechnen. Diese Funktion wollte ich "mal schnell" in Python abbilden. Mittlerweile habe ich schon 2 Tage damit verblasen und komme nun nicht mehr weiter. Bascom und die Webseite http://www.datastat.com/sysadminjournal/maximcrc.cgi liefern mir andere Werte als ich von Hand berechnet habe, bzw. mir die crcmod Bib liefert.
Bascom und die Seite liefern mir als Ergebnisse für die Werte
Dez: 55, 1, 200, 0, 0 ,0
oder in Hex: 0x37, 0x01, 0xC8, 0x0, 0x0, 0x0
den CRC Wert 128 in Dezimal, bzw. 80 in Hex zurück.
crcmod selbst unterstützt laut eigener Homepage auch den Maxim.
Leider klappt das in meinen Tests nicht.
das Ergebnis:
Nun verstehe ich langsam nichts mehr => Nehme ich nur einen Wert (z.B. Dez 201, Hex C9) und lasse ihn durch die Homepage oder Bascom laufen, erhalte ich Dez 86, bzw. Hex 56.
Berechne ich das ganze von Hand nach Beispiel Wiki oder berechne ich das mit crcmod, bekomme ich jeweils einen anderen Wert.
Ich frage mich nur, was ich übersehe...
Gruß
Michael
ich bastel momentan an meinem Raspberry Pi und spreche mit I2C eine Schrittmotorkarte an. Da ich momentan über ein Steckboard arbeite und eine längere I2C Leitung verwende, fange ich mir noch recht viele Busstörungen ein. Die Schrittmotorkarte kommt aus dem Roboternetzbereich und unterstützt CRC-8 (Dallas/Maxim - Polynom 8C). Natürlich auf Bascom mit abgestimmt.
Um die Busstörungen zu erkennen (Behebung und Fehlersuche dort später) will ich den CRC nun auswerten. Nun habe ich schon viel hin und her gerechnet und probiert und weiß einfach nicht mehr weiter. Bascom hat eine crc8 Funktion, um das ganze zu berechnen. Diese Funktion wollte ich "mal schnell" in Python abbilden. Mittlerweile habe ich schon 2 Tage damit verblasen und komme nun nicht mehr weiter. Bascom und die Webseite http://www.datastat.com/sysadminjournal/maximcrc.cgi liefern mir andere Werte als ich von Hand berechnet habe, bzw. mir die crcmod Bib liefert.
Bascom und die Seite liefern mir als Ergebnisse für die Werte
Dez: 55, 1, 200, 0, 0 ,0
oder in Hex: 0x37, 0x01, 0xC8, 0x0, 0x0, 0x0
den CRC Wert 128 in Dezimal, bzw. 80 in Hex zurück.
crcmod selbst unterstützt laut eigener Homepage auch den Maxim.
Leider klappt das in meinen Tests nicht.
Code: Alles auswählen
import crcmod.predefined
sample1=('3701c800000')
sample2=('0x3701c800000')
sample3=('0x37, 0x1, 0xc8, 0x0, 0x0, 0x0')
sample4=('0x37, 0x01, 0xc8, 0x00, 0x00, 0x00')
print "Print Sample1 ", sample1
print "Print Sample2 ", sample2
print "Print Sample3 ", sample3
print "Print Sample4 ", sample4
crc8_func = crcmod.predefined.mkPredefinedCrcFun('crc-8-maxim')
print "Print CRC Sample1 ", crc8_func(sample1)
print "Print CRC Sample2 ", crc8_func(sample2)
print "Print CRC Sample3 ", crc8_func(sample3)
print "Print CRC Sample4 ", crc8_func(sample4)
Code: Alles auswählen
Print Sample1 3701c800000
Print Sample2 0x3701c800000
Print Sample3 0x37, 0x1, 0xc8, 0x0, 0x0, 0x0
Print Sample4 0x37, 0x01, 0xc8, 0x00, 0x00, 0x00
Print CRC Sample1 22
Print CRC Sample2 234
Print CRC Sample3 233
Print CRC Sample4 56
Berechne ich das ganze von Hand nach Beispiel Wiki oder berechne ich das mit crcmod, bekomme ich jeweils einen anderen Wert.
Ich frage mich nur, was ich übersehe...

Gruß
Michael