Генерация полиномиального ключа для crc - PullRequest
0 голосов
/ 13 апреля 2020

Применительно к этой статье: https://www.digikey.com/eewiki/display/microcontroller/CRC+Basics

Полиномиальный ключ является важной частью CR C. Ключи - это не просто случайные полиномы; они генерируются с использованием набора математических формул и предназначены для увеличения количества ошибок, которые выявляет процесс CR C. Полином обычно определяется сетевым протоколом или внешним устройством. Поскольку существует хорошо установленный набор ключей, процессы определения ключей здесь не обсуждаются.

Я понимаю, как вычисление CR C с данным полиномиальным ключом, однако, как генерирует ли полиномиальный ключ, и чтобы он мог перехватить как можно больше ошибок с заданным набором протоколов?

Я предполагаю, что полиномиальный ключ имеет какое-то отношение к:

  1. длина данных
  2. скорость передачи данных
  3. другие?

1 Ответ

0 голосов
/ 13 апреля 2020

Часть об использовании математических формул для генерации CR C полиномов несколько вводит в заблуждение. Число 1 бит в полиноме CR C является максимально возможным расстоянием Хемминга (HD) для полинома, и обычно фактическое расстояние Хемминга будет меньше в зависимости от длины данных. Максимальное обнаружение ошибок по битам - это расстояние Хэмминга - 1.

Обычно полиномы CR C, которые обнаруживают большее количество бит, являются произведением нескольких простых полиномов. Например, для 32-битного CR C, который может обнаружить до 7 ошибок для данных + cr c длина = 1024 бит, 33-битный CR C полином 0x1f1922815 = 0x787 * 0x557 * 0x465 * 0x3 * 0x3. Коэффициент 0x3 обнаружит любое нечетное количество битовых ошибок, поэтому CR C должен обнаружить все возможные 6-битные ошибки в 1024 битах.

Мне неизвестна формула для определения максимальной битовой ошибки обнаружение и, как правило, несколько оптимизированный поиск методом грубой силы. В качестве примера, скажем, проверяется 32-битный полином CR C, чтобы увидеть, может ли он обнаружить все 6-битные ошибки для данных + cr c длиной 1024 бит, количество возможных 6-битных шаблонов ошибок в 1024 битах гребень (1024,6) = 1 577 953 087 760 896. Чтобы свести это к чему-то разумному, число возможных 3-битных ошибок, comb (1024,3) = 178 433 024, используется для создания большой таблицы, каждая запись которой содержит CR C и 3-битные индексы. Таблица сортируется и затем используется для проверки коллизий, в которых CR C 3-битного шаблона совпадает с CR C другого 3-битного шаблона. Также потребуется проверка на сбой для 4-битных комбинаций (проверка на наличие коллизий между двумя различными 2-битными комбинациями).

Как правило, когда длина данных уменьшается, максимальное количество битов ошибок, гарантированных для обнаружения, увеличивается. Вот ссылка на набор полиномов CR C и их возможность обнаружения ошибок.

https://users.ece.cmu.edu/~koopman/crc/crc32.html

На странице примечаний объясняются записи в таблице:

http://users.ece.cmu.edu/~koopman/crc/notes.html

...