Невозможно получить правильный CRC16 с заданным полиномом

Я борюсь со старым датчиком радиации и его протоколом связи.
Датчик управляется событиями, мастер начинает связь с передачей данных или запросом данных.
Каждая телеграмма данных использует CRC16 для проверки только блока переменных данных и CRC8 для проверки всей телеграммы.

Моя основная проблема - это crc16. Согласно таблице данных, полигон, используемый для проверки блока данных:
CRC16 = X^14 + X^12 + X^5 + 1 -> 0x5021 ??

Я захватил некоторые данные с действительным CRC16 и попытался воспроизвести ожидаемое значение, чтобы отправить свою собственную передачу данных, но я не могу получить то же значение.
Я использую пробуя любую возможную комбинацию с этим поли. Я также пробую CRC Reveng, но безрезультатно.

Вот несколько данных с правильным CRC16 :.

          Data    | CRC16 (MSB LSB)
14 00 00 0A | 1B 84
15 00 00 0C | 15 88
16 00 00 18 | 08 1D
00 00 00 00 | 00 00
00 00 00 01 | 19 D8
00 00 00 02 | 33 B0
01 00 00 00 | 5A DC
08 00 00 00 | c6 c2
10 00 00 00 | 85 95
80 00 00 00 | 0C EC
ff ff ff ff | f3 99

Если я отправлю недопустимый CRC16 в телеграмме, датчик отправит отрицательное подтверждение с ожидаемым значением, поэтому я могу попробовать любые данные, чтобы проверить или получить больше примеров, если это необходимо.

при необходимости датчик использует 8-битный микропроцессор 8051, и это пример действительной CRC8, проверенной с помощью калькулятор CRC солнечного света,CRC солнечного света :

      CRC8 = X^8 + X^6 + X^3 + 1 --> 0x49
Input reflected   Result reflected

    control byte    |    Data   |CRC16 |  CRC8
01 0E 01 00 24 2A 06 ff ff ff ff f3 99 |-> 0F

Любая помощь приветствуется!

1 ответ

Решение

Похоже на опечатку в многочлене. П -битового CRC полином всегда начинается с й п. Как ваш правильный 8-битный полином. 16-битный полином должен читать X16 + X12 + X5 + 1, что на самом деле является очень распространенным 16-битным полиномом CRC.

Другие вопросы по тегам