1-wire DS2423 CRC16 howto

Generella mjukvarufrågor som inte är beroende av vilket operativsystem som körs skall ställas i denna kategori
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
jrnker
Inlägg: 1
Blev medlem: 17 apr 2011, 21:33
Ort: Zeewolde, Nederländerna

1-wire DS2423 CRC16 howto

Inlägg av jrnker »

Hej,
Jag håller på och skriver på en egen implementation för att samla bland annat 1-wire data, och skriver just nu på modulen för DS2423 (4kbit +2 räknare http://www.wulfden.org/downloads/datasheets/DS2423.pdf).
Som det bör sig så kör man ju fast på nåt liten irriterande bit som man inte kan få till, och i det här fallet så är det CRC checken på inhämtat data.

Som det står i databladet på s25:
"With the initial pass through the Read Memory + Counter flow chart the 16-bit CRC value is the result of
shifting the command byte into the cleared CRC generator, followed by the two address bytes, data bytes,
value of the counter associated with the page and zero bits"
Som jag läser det så ska CRC16'n för att läsa räknare 1 beräknas på command byte (A5) + address bitarna (C001) + mottaget data - den medskickade CRC'n.

Så till exempel om jag skickar A5C001 och tar emot 00FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF0068990200000000005D57 så ska jag (enligt mitt antagligen felaktiga antagande) beräkna CRC16'n på A5C00100FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF006899020000000000, vilket om jag gör det rätt ska resultera i 575D (motsvarande inverterat medskickat) - men det jag får är A8A2.

Så. Jag gör nåt galet, det är ju tydligt ;)
Jag har testat CRC16'n mot lite andra saker och funktionen ser ut att fungera som den ska, vilket leder mej till slutsatsen att jag beräknar CRC'n på fel saker.

Men om det nu är så, vad ska den då beräknas på? Eller är jag helt ut och cyklar??

Lite andra summor jag har beräknat under dagens gång för att utesluta fel är:
Bara data: 00FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF006899020000000000 = 4B8F
Skip rom + resten: CCA5C00100FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF006899020000000000 = 313B
Inverterad address + resten: A501C000FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF00689902000000000 = 5467
Skip rom + inverterad address + resten: CCA501C000FFFF0000FFFF0000FFFF0000FFFF0040FFFF0000FFFF0000FFFF0000FFFF006899020000000000 = CDFE

Så snälla, någon, berätta vad jag gör galet innan allt mitt hår är utslitet..

-Christoffer