вычислить 3-байтовый CRC с помощью блока вычисления CRC Nucleo L053R8

Я хотел бы рассчитать 3-байтовое значение CRC, используя блок вычисления crc Nucleo L053R8. Генератор Полином имеет следующий вид: g (X) = x ^ 24 + x ^ 10 + x ^ 9 + x ^ 6 + x ^ 4 + x ^ 3 + x + 1

Кажется, что с помощью этого блока вычисления CRC я могу сгенерировать только CRC длиной 32 бита, а меньшие значения - это просто LSBS 32-битного результата. Я также знаю, что младший бит CRC32 не равен CRC16.

Есть идеи, какие операции я должен выполнить с данными ввода / вывода, чтобы получить правильный CRC24, который я хочу?


person Abyr    schedule 09.05.2019    source источник
comment
Если вам нужен CRC-24, то почему вы используете полином для CRC-16-CCITT?   -  person Lundin    schedule 09.05.2019
comment
Я генерирую crc для пакета BLE и получил этот многочлен из официальной спецификации Bluetooth, но я думаю, вы правы, я могу неправильно понять   -  person Abyr    schedule 09.05.2019
comment
мне все еще нужны подсказки, чтобы знать, как это сделать правильно   -  person Abyr    schedule 09.05.2019
comment
Я знаю об этом очень мало, но я считаю, что BLE использует какой-то 24-битный CRC, может быть, как этот? electronics.stackexchange.com/questions/90472/   -  person Lundin    schedule 09.05.2019
comment
да, спасибо, что привлекли мое внимание. Я имел в виду неправильный раздел. Теперь у меня есть правильный многочлен. Как я могу продолжить?   -  person Abyr    schedule 09.05.2019


Ответы (1)


Умножьте порождающий полином на x ^ 8, сдвинув его влево на 8 бит. Если у вас есть начальное значение, также умножьте его на x ^ 8, сдвинув его влево на 8 бит. Используйте 32-битный код CRC со смещенным полиномом и начальным значением, затем сдвиньте полученный 32-битный CRC вправо на 8 бит.

g(X)*x^8 = x^32 + x^18 + x^17+ x^14 + x^12 + x^11 + x^9 + x^8
person rcgldr    schedule 09.05.2019
comment
а как насчет значения инициализации это 0x555555? - person Abyr; 09.05.2019
comment
@Abyr - также умножьте значение инициализации на x ^ 8, в данном случае 0x555555 * x ^ 8 = 0x55555500. - person rcgldr; 09.05.2019