Имеется некоторый контроллер декодирующий сигналы от местной клавиатуры, пульта ДУ и передающий соответствующие пакеты через USB мост в PC.
Каждый пакет состоит из шапки-3байта+данные-2байта+данные-2байта(повтор)+СRC.
Пакет CRC
53 4B 08 E0 00 E0 00 - AB
53 4B 08 E0 02 E0 02 - 3A
53 4B 08 E0 01 E0 01 - 6F
53 4B 08 E0 08 E0 08 - DD
53 4B 08 E0 10 E0 10 - 47
53 4B 08 E0 04 E0 04 - 90
53 4B 08 E0 24 E0 24 - 51
53 4B 08 E0 20 E0 20 - 6A
53 4B 08 E0 40 E0 40 - 30
53 4D 08 00 01 00 01 - DD
53 49 08 10 00 10 00 - D1
53 49 08 10 08 10 08 - A7
53 49 08 11 00 11 00 - 24
53 49 08 11 08 11 08 - 52
53 49 08 0D 00 0D 00 - EB
53 49 08 0D 08 0D 08 - 9D
53 49 08 00 00 00 00 - 06
53 49 08 00 08 00 08 - 70
53 49 08 01 00 01 00 - F3
53 49 08 01 08 01 08 - 85
53 49 08 02 00 02 00 - F5
53 49 08 02 08 02 08 - 83
53 49 08 03 00 03 00 - 00
53 49 08 03 08 03 08 - 76
53 49 08 04 00 04 00 - F9
53 49 08 04 08 04 08 - 8F
53 49 08 05 00 05 00 - 0C
53 49 08 05 08 05 08 - 7A
53 49 08 06 00 06 00 - 0A
53 49 08 06 08 06 08 - 7C
53 49 08 07 00 07 00 - FF
53 49 08 07 08 07 08 - 89
53 49 08 08 00 08 00 - E1
53 49 08 08 08 08 08 - 97
53 49 08 09 00 09 00 - 14
53 49 08 09 08 09 08 - 62
Хотя есть все основания полагать что используется класический алгоритм СRC8 с неизвестным полиномом и начальным заполнением - вследствие линейности:
53 49 08 01 00 01 00 - F3
53 49 08 02 00 02 00 - F5
XOR 00 00 00 03 00 03 00 - 06 !!!
53 49 08 00 00 00 00 - 06
53 49 08 03 00 03 00 - 00
XOR 00 00 00 03 00 03 00 - 06 !!!
Но перебор всех возможных полиномов и начальных заполнений по процедуре:
BYTE crc8_sft_buf(BYTE * buf, BYTE poly8, BYTE crc, BYTE len)
{
for (BYTE i = 0; i < len; i++)
{
crc ^= buf[i];
for (BYTE j = 0; j < 8; j++ )
crc = crc & 0x80 ? (crc << 1) ^ poly8 : crc << 1;
// crc = crc & 0x01 ? (crc >> 1) ^ poly8 : crc >> 1;
}
return crc;
}
Не принес результата

Ранее здесь подымалась подобная тема (http://electronix.ru/forum/index.php?showtopic=22188&st=0), но до победы как я понял не дошло.
Надеюсь на помощь, заранее спасибо!