Как понять контрольную сумму ИК - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь понять, как вычисляется crc из приведенных ниже пакетов данных удаленного контроллера без маркировки.последние 4 бита кажутся crc, а длина пакета данных составляет 8 байтов.Я могу понять, как извлечь пакет данных, но не crc.Первые 3 бита исправлены.

шаблон данных, например, 1) 0010 0100 0100 0011 0000 0000 0000 0000 0000 0000 1110образец данных, например, 2) 0010 1000 0101 0011 0000 0000 0000 0000 0000 0000 1101образец данных, например, 3) 0010 1000 0110 0011 0000 0000 0000 0000 0000 0000 1100образец данных, например, 4) 0010 1000 0111 0011 0000 0000 0000 0000 0000 0000 1011образец данных, например, 5) 0010 1000 1000 0011 0000 0000 0000 0000 0000 0000 1010образец данных, например, 6) 0010 1000 1001 0011 0000 0000 0000 0000 0000 0000 1001образец данных, например, 7) 0010 1000 1010 0011 0000 0000 0000 0000 0000 0000 1000образец данных, например, 8) 0010 1000 1011 0011 0000 0000 0000 0000 0000 0000 0111образец данных, например, 9) 0010 1000 0000 0011 0000 0000 0000 0000 0000 0000 0010образец данных, например, 10) 0010 1000 0001 0011 0000 0000 0000 0000 0000 0000 0001образец данных, например, 11) 0010 1000 0010 0011 0000 0000 0000 0000 0000 0000 0000образец данных, например, 12) 0010 1000 0011 0011 0000 0000 0000 0000 0000 0000 1111

образец изображения

1 Ответ

0 голосов
/ 26 сентября 2018

Я думаю, что это может быть просто инвертированная сумма.

Сложение всех, кроме последних 4 битов, а затем ((x&1111)^1111):

0010 + 0100 + 0100 + 0011 =  1101  ->  0010*
0010 + 1000 + 0101 + 0011 = 10010  ->  1101
0010 + 1000 + 0110 + 0011 = 10011  ->  1100
0010 + 1000 + 0111 + 0011 = 10100  ->  1011
0010 + 1000 + 1000 + 0011 = 10101  ->  1010
0010 + 1000 + 1001 + 0011 = 10110  ->  1001
0010 + 1000 + 1010 + 0011 = 10111  ->  1000
0010 + 1000 + 1011 + 0011 = 11000  ->  0111
0010 + 1000 + 0000 + 0011 =  1101  ->  0010
0010 + 1000 + 0001 + 0011 =  1110  ->  0001
0010 + 1000 + 0010 + 0011 =  1111  ->  0000
0010 + 1000 + 0011 + 0011 = 10000  ->  1111

Обратите внимание, что первая выборка неверна (следуетбыть 1110), но остальные совпадают.Я не уверен, что это ошибка в моем алгоритме или ошибка во входных данных (глядя на фотографию, я не вижу, где появляется 0010 0100).

Также обратите внимание, что предоставленные образцы очень похожи (отличаются только биты 8, 9, 10, 11, если исключить первую выборку), поэтому, вероятно, существует много способов получить «решение».

...