Тот же 16-битный CRC X-25 для любого кадра - PullRequest
0 голосов
/ 20 июня 2019

Мне очень любопытно, что я наблюдал во время разработки своего приложения.Короче говоря, я делал приложение, которое считывает данные с интеллектуальных электросчетчиков.У них есть кадр запроса, например:

7E [hex-address] [crc1] [cmd] [crc2] 7E

Алгоритм CRC равен CRC-16 / X-25, и они должны рассчитываться для всей левой части кадра без 7e, поэтому crc2 включает crc1.Я заметил, что все время crc2 одинаково для любого cmd, даже с разными hex-address.Я использовал crccalc инструмент для обеспечения.Шаги для воспроизведения:

  • положить любой (даже любой размер) шестнадцатеричный массив
  • calc CRC-16 / X-25
  • поменять местами байты CRC
  • поместите этот замененный CRC в конец массива
  • снова вычислите CRC

Этот CRC будет одинаковым для любого байтового массива.Почему так?Есть ли какое-нибудь название для этого явления?

1 Ответ

1 голос
/ 21 июня 2019

снова вычислить CRC

Если вы добавите CRC к данным и вычислите его снова, результатом будет постоянное значение. Если CRC не дополняется пост (xorout = 0), результат равен нулю, но в этом случае он дополняется пост (xorout = 0xffff), поэтому результат является ненулевой константой, в данном случае 0x0f47 (при условии, что нет произошли ошибки).

...