CRC-Fehler beim Auslesen DS18B20 Kategorie: Sensoren (von Fabian - 14.02.2012 12:46) | ||
| ||
Hallo, ich nutze die CCII Station mit I2C 1-Wire Bridge8 HS (DS2482-800) und mehreren Sensoren an verschiedenen Ports. Um die Funktionssicherheit zu erhöhen und Fehler sauber zu erkennen, wollte ich eine CRC-Prüfung implementieren. Dazu habe ich eine kleine Funktion abgewandelt, welche ich an anderer Stelle gefunden habe. Sie funktioniert einwandfrei. test unter: Erics CRC-Generator Es werden alle 9 Bytes des Scratchpad mit einer for-Schleife ausgelesen. Problem: Nur das letzte Byte (CRC) ist falsch. Es ist um genau 1 zu hoch. Die anderen übertragenen Bytes sind augenscheinlich korrekt. Ich finde hier keinen Fehler. Könnte es ein Problem mit der I2C-Umsetzung sein? Hier mal die Sensordaten zum Nachrechnen: T ist die ber. Temp.; den ersten Sensor habe ich rausgezogen, hier müsste das letzte Byte eigentlich ebenfalls FF sein. Daher vermute ich eine Prob mit der Bridge... 12:38:21 E: CRC fail 0 1 12:38:21 D: Bytes FF FF FF FF FF FF FF FF 00 12:38:22 T -0.1 0 0 12:38:22 E: CRC fail 1 1 12:38:23 D: Bytes B6 00 4B 46 7F FF 0A 10 A0 12:38:23 T 11.4 1 0 12:38:23 E: CRC fail 2 1 12:38:24 D: Bytes 1A 02 4B 46 7F FF 06 10 AE 12:38:24 T 33.6 2 0 12:38:24 E: CRC fail 3 1 12:38:25 D: Bytes 4E 02 4B 46 7F FF 02 10 9F 12:38:25 T 36.9 3 0 12:38:26 E: CRC fail 4 1 12:38:26 D: Bytes 0E 00 4B 46 7F FF 02 10 AE 12:38:26 T 0.9 4 0 12:38:27 E: CRC fail 5 1 12:38:27 D: Bytes F5 00 4B 46 7F FF 0B 10 D8 12:38:27 T 15.3 5 0 Ich poste die CRC-Funktion hier, falls jemand anderes sie brauchen kann. Mit den oft genutzten Lookuptables bläht sich das ganz schön auf, diese hier gefällt mir besser. // bytes als array, Arraygrö�e als len function crc8( byte addr[], byte len) returns byte { byte crc; byte i,j,l; crc = 0; l = len-1; for i=0...l { byte inbyte; inbyte = addr[i]; for j=0...7 { byte mix; mix = (crc ^inbyte) & 0x01; crc = crc shr 1; if (mix) crc = crc ^ 0x8C; inbyte = inbyte shr 1; } } return crc; } | ||
Antwort schreiben Antworten: Re: CRC-Fehler beim Auslesen DS18B20 (von Fabian - 22.02.2012 10:25) Re: CRC-Fehler beim Auslesen DS18B20 (von Fabian - 19.12.2012 15:27) |