Har skrivit en rutin i C för PIC som letar efter enheter på bussen och detekterar deras ROM kod (ROM SEARCH). Funger så vitt jag kan se, får rätt familjekod i alla fall och mitt 1-Wire "bibliotek" klarar att välja upplösning och att läsa av temperaturen från en 18B20 så på HW nivå fungerar det.
Men jag sliter mitt hår i försöket att få CRC check att fungera på ROM koden.
Jag lagrar ROM koderna efter varandra i en byte array med familjekoden först.
crc1=crc2=0 innan det startar, codes är min byte array, i är från en yttre loop som pekar ut vilken 8 byte sekvens som ska räknas på (value 1,2,3...,n)
Kod: Markera allt
for (j=0;j<64;j++) {
crc2=(((crc1&0x01)^((codes[((i-1)*8)+(j>>3)]>>(j&0x07))&0x01))<<4)^crc2;
crc2=(((crc1&0x01)^((codes[((i-1)*8)+(j>>3)]>>(j&0x07))&0x01))<<3)^crc2;
crc2>>1;
crc2=(((crc1&0x01)^((codes[((i-1)*8)+(j>>3)]>>(j&0x07))&0x01))<<7)|crc2;
crc1=crc2;
}
Är det någon som skrivit en CRC-8 check i C för data lagrad i byte sträng?