01.03.2019, 20:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Контрольная сумма
Упало на мою голову делать реверс, три недели верчусь
Серийный протокол. Работает в условиях неслабых помех.
Первый байт 0x24 само собой
Второй и третий данные. Какой бит для чего проверял. Сходится.
Четвертый и пятый должны быть контролем. Затык однако. Как вычислить понятия не имею.
Сложение, вычитание, XOR не работают. Дешифратор младший ПИК 8 бит. Без аппаратного умножения.
Может нечто с коррекцией ошибок заложено. Непонятно
Ну не в Блечли Парке живу, никакой не Алан Тюринг .....
Мне бы маленькую подсказку
Код:
|
0x24, 0xFF, 0xF9, 0xD0, 0xB3
0x24, 0x7F, 0xF9, 0xD0, 0x33
0x24, 0x7F, 0xA4, 0x30, 0xCA
0x24, 0xFF, 0xB0, 0xB0, 0xBC
0x24, 0xFF, 0x30, 0xB0, 0x3C
0x24, 0xFF, 0x24, 0x30, 0xCA
0x24, 0xFF, 0x8E, 0x8C, 0xA3
0x24, 0xFF, 0xFF, 0x8C, 0xCA
0x24, 0xBF, 0xA4, 0x10, 0x72
0x24, 0xBF, 0xF9, 0x90, 0x93
0x24, 0xFF, 0xC0, 0x50, 0x0C
0x24, 0xFF, 0xF9, 0xD0, 0xB3
0x24, 0xFF, 0xA4, 0x30, 0x2A
Еще
24 F9 F9 A8 EE
24 82 80 72 2D
24 82 82 32 4F |
Последний раз редактировалось OakRidge; 06.03.2019 в 10:54.
|
|
|
|
01.03.2019, 20:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: Контрольная сумма
Вряд ли в младшие ПИК влезет какой-то серьезный алгоритм црц. Какой-то самопал. Нет данных с одинаковыми 2-3 байтами? Типа FF FF. Было бы легче анализировать.
|
|
|
|
01.03.2019, 21:47
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,859 раз(а) в 2,929 сообщении(ях)
|
Re: Контрольная сумма
OakRidge, стоит попробовать отсюда - может удасться подобрать алгоритм.
Ara41, так если они одинаковые, то что это облегчит
А так - 8-я строка именно FF FF…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 01.03.2019 в 21:53.
|
|
|
|
02.03.2019, 02:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: Контрольная сумма
Сей обмен идет на скорости 18 килобит. По обычным проводам. Без экрана, без витой пары.
Один провод CLOCK, второй данные, типа LIN, I2C вроде.
Там мерял конденсаторы на входах после делителя 150К+100K. 12пФ, поставил 47пФ. Бу менять на 22.
Вроде заработало без неких битов. Без контроля.
Шину слушлал SALEAE с добавкой декодера на контроллере.
Было что напутать
|
|
|
Сказали "Спасибо" OakRidge
|
|
|
02.03.2019, 21:02
|
|
Частый гость
Регистрация: 03.10.2009
Сообщений: 11
Сказал спасибо: 786
Сказали Спасибо 8 раз(а) в 4 сообщении(ях)
|
Re: Контрольная сумма
Еще можно попробовать этот калькулятор http://www.sunshine2k.de/coding/java...rc/crc_js.html, может быть подойдет какой-то алгоритм
|
|
|
|
02.03.2019, 21:37
|
|
Частый гость
Регистрация: 03.10.2009
Сообщений: 11
Сказал спасибо: 786
Сказали Спасибо 8 раз(а) в 4 сообщении(ях)
|
Re: Контрольная сумма
|
|
|
|
02.03.2019, 22:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Контрольная сумма
Какой смысл делать crc16 для двух байт?! Дешевле их повторить ещё раз, можно в инверсном виде.
Младший пик вполне потянет crc8.
Многие сети довольствуются не crc, а контрольной суммой, простым сложением.
|
|
|
|
03.03.2019, 13:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Контрольная сумма
Пользовался для передачи по радиоканал usart этим
Код:
|
unsigned __int16 in_cksum ( unsigned __int16 *ptr, int nbytes )
{
register unsigned __int32 sum;
unsigned __int16 oddbyte;
register unsigned __int16 answer;
sum = 0;
while ( nbytes › 1 )
{
sum += *ptr ++;
nbytes -= 2;
}
if ( nbytes == 1 )
{
oddbyte = 0;
* (( unsigned char *) &oddbyte ) = * (unsigned char *) ptr;
sum += oddbyte;
}
sum = ( sum ›› 16 ) + ( sum & 0xFFFF);
sum += (sum ›› 16 );
answer=~sum;
return (answer);
}
unsigned __int16 aaa[4] = {0x398a, 0xf802, 0x14b2, 0xc281};
unsigned __int16 bbb;
int main()
{
bbb = in_cksum (aaa, sizeof(aaa));
cout ‹‹ hex ‹‹ bbb ‹‹ endl;
getch();
} |
|
|
|
|
04.03.2019, 11:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: Контрольная сумма
Не получается разобратся. Придется плюнуть на контроль. В конце концов данные идут на дисплей, от которого ничего не зависит. Или извратится и следить за двумя одинаковыми последовательными посылками. Если совпадут буду выводить.
Всетаки там вероятно есть некая коррекция ошибок
|
|
|
|
04.03.2019, 13:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: Контрольная сумма
Ну а зачем тебе crc если это дисплей он же все равно без диалога с контроллером обмениваются данными
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:19.
|
|