Контрольная сумма для самодельного коммуникационного протокола - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно реализовать протокол связи, который работает через I 2 C и используется для связи между платой и платой двух распределенных микроконтроллеров. Чтобы обеспечить целостность данных, я хочу добавить к протоколу связи контрольную сумму и подумать, что что-то вроде CRC-8 или CRC-16 должно соответствовать, но, к сожалению, у меня нет клея, какие критерии я должен использовать, чтобы определить лучший алгоритм и в следующий шаг, лучшая настройка (например, значение многочлена в случае CRC).

Мой протокол довольно прост, определены только одна 32-битная команда чтения и одна 32-битная команда записи:

  • I 2 C Команда Master Read:

    • Запрос (I 2 C WR): 2 байта, индекс памяти + контрольная сумма
    • Ответ (I 2 C RD): 4 байта данных + контрольная сумма
  • I 2 C Основная команда записи:

    • Запрос (I 2 C WR): индекс памяти 2 байта + данные 4 байта + контрольная сумма

Я прочитал в сообщении на форуме, что длина CRC зависит от размера данных, которые должны быть проверены, поэтому CRC-8 может в достаточной степени проверять 2 8 % 8 (= 32 бита) и 2 16 % 8 (= 8 КБ) данных для CRC-16. Если это правда, CRC-8 должно быть достаточно, но я не знаю, правильно ли это утверждение ...

Может кто-нибудь помочь мне, как я могу определить лучший алгоритм контрольной суммы для моего протокола?

1 Ответ

0 голосов
/ 23 мая 2019

Согласно этой таблице Лучший полином CRC Лучшее соответствие CRC зависит от размера данных и расстояния Хэмминга.Чем больше расстояние Хэмминга, тем меньше данных обрабатывает CRC.Вы должны будете предсказать (как можно больше), если HD включен в диапазон.

Но я не понимаю вашего утверждения: x power y mod z = x ^ y - (x ^ y / z * z) = 2 ^ 8 - (2 ^ 8/8 * 8) =0

...