Ви не увійшли.
Сторінки 1
В общем была такая же проблема. Может кому то пригодится, а может потом забуду и тут опять найду)
Итак, есть подробная статья https://www.maximintegrated.com/en/design/technical-documents/app-notes/2/27.html
Полином X^8+X^5+X4+1 равен 0b100110001 в двоичной форме. Старший бит отбрасывают получаем 0х31
Если мы побитно считаем, сдвигаем влево данные - получаем бит, сдвигаем влево CRC (для даласа crc изначально заполнено нулями) получаем еще один бит. Теперь между битами производим xor (логическое или) и если результат 1 (это будет когда один бит 1 а второй 0) то делаем CRC xor полином, но полином для даласа нужно вывернуть задом наперед и 0x31=0b00110001 превращается в 0b10001100. (если мы начальное значение CRC ставим не нулевое оно тоже выворачивается)
Вы берете со старшего бита а надо с младшего. в итоге последовательности бит 0 0 0 1 0 1 1 1
0 CRC=0 вот тут внимание если CRC мы инициализируем не нулем (0x71 например мы выворачиваем 0x71 и пишем CRC=0x8F)
0 CRC=0
0 CRC=0
1 CRC=0b10001100 выполняем xor входной бит 1 перенос 0
0 CRC=0b01000110
1 CRC=0b10101111 xor не выполняет оба бита =1
1 CRC=0b01010111 xor не выполняет оба бита =1
1 CRC=0b00101011 xor не выполняет оба бита =1
Для того чтобы посчитать на онлайн калькуляторе ставим crc8 полином 0x31 инициализация CRC 0x00 и две галочики инвертировать чего то там и чего то там.
и так далее
Уже неделю пытаюсь понять алгоритм и вообще что делать для подсчета избыточной циклической суммы. Дело в том что я пишу библиотеку для связи по протоколу 1-Wire.... Собственно мне нужно понимать алгоритм подсчета CRC
Полином CRC=X^8+X^5+X4+1
Циклическая сумма высчитывается из 7 байт
Допустим моё сообщение "10110101000000000000000000000110011011000000101111101000"
Мне нужно моё сообщение поделить по модулю - 2 моё сообщение на двоичное число. Какое это число ?? Как мне перевести в двоичное число X^8+X^5+X4+1 ?
Это 2^8+2^5+2^4+1 выходит ? Выходит 305 в десятичном или 100110001 в двоичном ?
Пытался делить в ручную - не совпало.Полином:100110001 CRC сумма от приёмника:00101000 Моё сообщение (56 бит или 7 байт): 10110101000000000000000000000110011011000000101111101000 остача от деления:01101011 (не совпадает с CRC от приёмника) 1011010100000000000000000000011001101100000010111110100000000000 100110001........................~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ---------........................ 010110110....................... 000000000....................... ---------....................... 101101100...................... 100110001...................... ---------...................... 010111010..................... 000000000..................... ---------..................... 101110100.................... 100110001.................... ---------.................... 010001010................... 000000000................... ---------................... 100010100.................. 100110001.................. ---------.................. 001001010................. 000000000................. ---------................. 010010100................ 000000000................ ---------................ 100101000............... 100110001............... ---------............... 000110010.............. 000000000.............. ---------.............. 001100100............. 000000000............. ---------............. 011001000............ 000000000............ ---------............ 110010000........... 100110001........... ---------........... 101000010.......... 100110001.......... ---------.......... 011100110......... 000000000......... ---------......... 111001100........ 100110001........ ---------........ 111111010....... 100110001....... ---------....... 110010110...... 100110001...... ---------...... 101001110..... 100110001..... ---------..... 011111110.... 000000000.... ---------.... 111111101... 100110001... ---------... 110011001.. 100110001.. ---------.. 101010000. 100110001. ---------. 011000010 000000000 --------- 110000101 100110001 --------- 101101011 100110001 --------- 010110100 000000000 --------- 101101001 100110001 --------- 010110001 000000000 --------- 101100010 100110001 --------- 010100110 000000000 --------- 101001100 100110001 --------- 011111010 000000000 --------- 111110100 100110001 --------- 110001010 100110001 --------- 101110111 100110001 --------- 010001100 000000000 --------- 100011001 100110001 --------- 001010001 000000000 --------- 010100011 000000000 --------- 101000111 100110001 --------- 011101101 000000000 --------- 111011010 100110001 --------- 111010111 100110001 --------- 111001100 100110001 --------- 111111010 100110001 --------- 110010110 100110001 --------- 101001110 100110001 --------- 011111110 000000000 --------- 111111100 100110001 --------- 110011010 100110001 --------- 101010110 100110001 --------- 011001110 000000000 --------- 110011100 100110001 --------- 101011010 100110001 --------- 01101011
Сторінки 1