-
- В итоге, основные нестыковки были вызваны лишней командой в скрипте загрузки прошивки. Сам алгоритм оказался вполне стандартным, на crccalc.com в первой строчке. - AlexG(08.10.2023 19:22)
- Вот тута, вроде как, есть софтверная реализация, эквивалентная
хардверной. Врут, что алгоритм CRC32 соответствует правилам для
Ethernet. LightElf(220 знак., 02.10.2023 15:56, ссылка)
- Огромное спасибо! AlexG(203 знак., 02.10.2023 18:18)
- LightElf уже написал про разные параметры при вычислении, здесь уточню. Для CRC32 даже для одного полинома могут быть разные значения инициализации, порядка входных и выходных бит и инверсии, которые будут давать разный результат. Вот онлайн калькулятор CRC: mrFirst(338 знак., 02.10.2023 06:28, , ссылка)
- Ну, собственно, CRC может отличаться: полиномом, начальным
значением, порядком битов в байтах данных, порядком битов и байтов
в результате, наличием инверсии в результате. Если брать
относительно распространённые варианты CRC32, то их вряд ли
наберётся более двух десятков. Если есть бинарь (лучше небольшую) и
её CRC - то поиск правильной схемы займёт несколько минут. Дальше
читать доку на Srecord и выставлять ему ключи, чтобы генерил также.
Или свою утилю наваять - я LightElf(17 знак., 02.10.2023 01:01)
- Тот бинарь, с которым я экспериментировал, большой и я не готов его
выложить, но, если это это поможет, могу запустить рассчет CRC с
почти любыми данными на входе и выложить результаты. - AlexG(02.10.2023 03:19)
- Да, пару десятков случайных байт и CRC от них. Вечером посмотрю. - LightElf(02.10.2023 11:04)
- Тот бинарь, с которым я экспериментировал, большой и я не готов его
выложить, но, если это это поможет, могу запустить рассчет CRC с
почти любыми данными на входе и выложить результаты. - AlexG(02.10.2023 03:19)
- Ну программный подсчет делай. Ну будет оно полсекунды считать.. никто даже не заметит - POV(01.10.2023 20:42)
- если один "при подаче питания проверять", то зачем аппаратный CRC?
ЦРЦ могут отличатся, полиномом и порядком вычисления,
слева-направо. ну и соответственно начальным значением. Полезная
фича - CRC(данные + СRС)==0, зная эту фичу необязательно знать
алгоритм CRC. - IBAH(01.10.2023 20:27)
- Фича то работает. Проблема в том, что у меня прошивка содержит
переменную часть, и правильная CRC разная при каждой попытке
прошивки. Альтернатива - выносить изменяемую часть в непопадающую
под CRC область. - AlexG(01.10.2023 20:39)
- Прошивка чем грузится - программатором или бутлоадером? Я делал так: бутлоадер (фиксированный) с фиксированной своей CRC, при каждом сбросе вначале проверяет сам себя. Далее, читает длину и CRC рабочей программы из EEPROM, подсчитывает CRC, и если совпало - передаёт управление. Если выбран режим обновления, то Бутлоадер (по СОМ-порту) вначале из шапки прошивки читает её длину и CRC, затем прошивает МК, подсчитывая CRC. Если в конце CRC совпали, то новая длина и новая CRC vpv.vpv(159 знак., 02.10.2023 08:44)
- Дык пускай при каждой прошивке CRC и вычисляется. При старте проверяешь ЦРЦ, если не совпадает делаешь сообщение и записываешь правильное ЦСЦ, для особо изощеренных, можно добавить журнал ошибок ЦРЦ, заложить в код Дату/Время сборки, я так настройки сохраняю IBAH(1 знак., 01.10.2023 21:52, картинка)
- Если вы делаете прибор для коммерческого учета, то метрологически
значимую часть, вы не просто должны, а обязаны выделять из общей программы. - reZident(01.10.2023 20:47)
- Это не коммерческий учет и не метрология - AlexG(01.10.2023 21:44)
- Фича то работает. Проблема в том, что у меня прошивка содержит
переменную часть, и правильная CRC разная при каждой попытке
прошивки. Альтернатива - выносить изменяемую часть в непопадающую
под CRC область. - AlexG(01.10.2023 20:39)
- Пусть Мега считает контрольную сумму по всей флеш, КРОМЕ места сохранения контрольного значения. Nikolay_Po(106 знак., 01.10.2023 20:12)
- гугел? SciFi(1 знак., 01.10.2023 19:39, ссылка)
- Гугел и поинтереснее информацию знает: AlexG(1 знак., 01.10.2023 20:26, ссылка)