Это должно обнаруживать все ошибки одиночного пакета до 16 бит.
0x11021 является произведением 2 "простых" полиномов, 0xf01f и 0x3.Фактор 0x3 - это то, почему все нечетные битовые ошибки обнаруживаются (это коэффициент четности).
Поскольку все нечетные битовые ошибки обнаруживаются, этот оператор становится обнаруживающим все 2-битные ошибки вплоть доразмер данных 32751 бит или размер сообщения 32767 бит, который включает в себя 16-битный CRC, который добавляется к битам данных.Для подхода грубой силы, используя строку битов всех нулевых битов, кроме первого бита, который является одним битом, затем вычисляют CRC по этой строке до тех пор, пока CRC не будет иметь только один бит в качестве наиболее значимого бита.Это можно эмулировать, начиная с CRC 0x8000 и повторяя его, пока он снова не вернется к 0x8000, что займет 32767 циклов.Таким образом, если бит [0] и бит [32768] равны == 1 (все остальные биты == 0), то вычисленный CRC будет равен нулю, что приведет к невозможности обнаружить 2 ошибочных бита.
Какие ошибки CRC не может обнаружить?
Множественные пакетные ошибки, когда общее расстояние пакетов составляет более 16 бит, по сути, одна пакетная ошибка длиной более 16 бит.
Некоторые комбинации из 4 или более случайно распределенных битовых ошибок не будут обнаружены.Как видно из таблицы ниже, вероятность того, что ошибка не будет обнаружена, достаточно низкая.По мере увеличения количества битовых ошибок частота отказов увеличивается, но она остается низкой, если у вас много битовых ошибок.Случайный набор битов пройдет проверку CRC16 примерно в 1/65536 времени, но это было бы необычно в обычной последовательности отправки / получения сообщений.
48 bit data, 16 bit crc, => 64 bit message
2^64 - 1 possible error patterns
84 of 635376 possible patterns of 4 error bits fail
2430 of 74974368 possible patterns of 6 error bits fail
133001 of 4426165368 possible patterns of 8 error bits fail
4621021 of 151473214816 possible patterns of 10 error bits fail
100246083 of 3284214703056 possible patterns of 12 error bits fail