Hey Leute,
ich versuche gerade den CRC bei einem DS18B20-Temperatursensor durchzuführen, komme aber irgendwie nicht weiter. Ich verwende für Python das Modul crcmod. Der Doku kann man entnehmen, dass ich über die CRC function factory mit "mkCrcFun()" meine Funktion aufstellen kann, mit der sich der CRC berechnen lässt.
Dem Datenblatt des SD18B20-Temperatursensor lässt sich entnehmen, dass das Generatorpolynom X^8 + X^5 + X^4 + 1 entspricht. Über das Polynom abgeleitet ergibt das bei mir 100110001 ... das sind aber 9-Bits und keine 8-Bits ... ? (Meine erste Verwirrung). Unabhängig von den 8- bzw. 9-Bits stehe ich mit meiner Python-Funktion vor einer Wand, denn betrachte ich die Doku, über das CRC-32 Beispiel, wird der poly-Wert mit Hex angegeben, in der Doku steht allerdings "a Python integer or long" ... ???
Setzte ich mein Generatorpolynom ein, erhalte ich folgende Fehlermeldung: "The degree of the polynomial must be 8, 16, 24, 32 or 64". Irgendwie komisch.
Stehe ich auf dem Schlauch, seh den Wald vor lauter Bäumen nicht oder was ist da los? Kann mir wer auf die Sprünge helfen? Big Thx!
Ich hoffe, dass ich aber sonst korrekt in der Annahme bin, dass ich mit der Funktion, falls sie mein poly erkennen sollte, dann über .crc_function(data[, crc=initCRC]) mein CRC-Value berechnen kann.
Der 64-Bit ROM-Code setzt sich ja aus 8-Bit "Family Code", 48-Bit "Seriennummer" und dem 8-Bit CRC zusammen. Nehme ich einen Beispiel-Senor mit der Kennung "28-000003cee4ca" handelt es sich dabei ja um Hex. Wandle ich das in Bits um, kommt n langer Rattenschwanz raus. Würde bei mir von LSB nach MSB "0001 0100 0101 0011 0010 0111 0111 0011 1100 0000 0000 0000 0000 0000 00000000" ergeben. Über das Polynom errechnet mir der Sensor daraus ja den bei mir ankommenden CRC, durch erneute Division über das Poly müsste dann ja bei perfekter Übertragung meine 8-Bits 0er rauskommen. Als "data" setze ich also den bei mir ankommenden Wert ein. Nur wo kann ich den entnehmen? Handelt es sich bei der oberen Zahlenreihe innerhalb der w1_slave-Datei dann um den mir übermittelten 64-Bit ROM-Code? Weil ich sehe da 18 Hex Werte, was 72-Bits entspricht und keine 64 ... *Verwirrung*
Bin ich auf dem Holzweg? Hab das alles bisher nur in der Theorie gemacht, aber noch nie in der Praxis und auch nicht mit Python. Von daher vielen Dank um Nachsicht und ich hoffe, dass mir wer weiterhelefen kann.
Gruß
mobby