Может кто подскажет, написал процедуру подсчета CRC, и при считывании данных с прибора процентов 5 ответов приходят с CRC не совпадающей с моей посчитанной.
В примере ниже видно ответ прибора с его же контрольной суммой, строкой ниже две CRC, первая - пришедшая в ответе прибора, вторая - посчитанная мной.
Код: Выделить всё
B1 08 05 00 26 05 15 1E 00 00 FF FF 00 00 FF FF 0E 22
220E 220E
B1 08 05 30 26 05 15 1E 00 00 FF FF 00 00 FF FF 4F D2
D24F D24F
B1 08 06 00 26 05 15 1E 00 00 FF FF 00 00 FF FF 0A 21
210A 210D
CRC Error
B1 08 06 30 26 05 15 1E 00 00 FF FF 00 00 FF FF 4C D1
D14C D14C
B1 08 07 00 26 05 15 1E 00 00 FF FF 00 00 FF FF 0A E0
E00A E00D
CRC Error
B1 08 07 30 26 05 15 1E 00 00 FF FF 00 00 FF FF 4C 10
104C 104C
B1 08 08 00 26 05 15 1E 00 00 FF FF 00 00 FF FF 02 EF
EF02 EF02
B1 08 08 30 26 05 15 1E 00 00 FF FF 00 00 FF FF 43 1F
1F43 1F43
Мой код на С -
Код: Выделить всё
unsigned crc16(unsigned char *buf, unsigned len)
{
int i;
unsigned crc = 0xFFFF;
while (len--)
{
crc ^= *buf++;
for (i = 8; i--;)
{
int f = crc & 1;
crc >>= 1;
if (f) crc ^= 0xA001;
}
}
return crc;
}