Я нашел кое-что, что работает, но это кажется немного странным.
Сначала я xor'ed два образца
10 02 B1 F0 3F 32 08 00 00 10 03 B4 5C
10 02 B1 F0 3F 32 07 00 00 10 03 4D EE
--------------------------------------
00 00 00 00 00 00 0F 00 00 00 00 F9 B2
Это исключает начальные значения CRC и конечные значения xor и привело к использованию CRC с отражением бита 0x11021. Похоже, что CRC использует 8 байтов данных, включая завершающий 0x10.
Используя калькулятор CRC, связанный с нижеследующим, выберите любой CRC16, затем щелкните по пользовательскому и установите параметры: входной сигнал отражен, выходной сигнал проверен, poly = 0x1021. Недостаточно информации для определения начального и конечного значения xor без сообщения другого размера. Используя 8 байтов данных, некоторые примеры параметров: начальное значение = 0x5B08, конечное значение xor = 0x0000 или начальное значение = 0xffff, конечное значение xor = 0xdde5 или начальное значение = 0x0000, конечное значение xor = 0xa169.
При использовании отраженных параметров бит калькулятора инвертирует значение инициализации (0x5B08 - бит 0x17DA в обратном порядке). Для кода используются 3 комбинации: {0x17da, 0x0000}, (0xffff, 0xdde5}, {0x0000,0xa169}. Poly = 0x8408 и смещение вправо.
Используя хх для обозначения введенных данных, я получил
xx xx B1 F0 3F 32 08 00 00 10 xx B4 5C
xx xx B1 F0 3F 32 07 00 00 10 xx 4D EE
Поскольку первые два байта являются {10 02}, это фиксированные значения, их можно включить, изменив начальное значение. Однако я не смог включить значение ETX 03.
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html