Перейти к содержанию
    

Вычисление CRC с помощью sRecord

22.05.2015 в 12:56, esaulenka сказал:

Решал аналогичную задачу.

пытаюсь посчитать контрольную сумму для прошивки .hex.
Для этого выполняю следующий скрипт для Srecord:

# srec_cat command file: srec_crc_dump_to_file.txt
#=============================
-disable-sequence-warning
#Input file
PLK.hex -Intel
#Fill hole with 0xFF
-fill 0xFF 0x8000000 0x8040000
#CRC Algorithm at given address
-STM32 0x8040000
#-crop 0x08040000 0x08040004
-Output_Block_Size=16
#Produce output
-o PLK_SRECORD.hex -Intel

После выполнения скрипта получаю предупреждение:

srec_cat: PLK.hex: 47492: warning: The data presented for STM32 calculation has
    at least one hole in it. This is bad. It means that the in-memory
    calculation performed by your embedded system will be different than the
    calculation performed here. You are strongly advised to use the "--fill 0xFF
    --over <inoput>" filter *before* the STM32 filter to ensure both
    calculations are using the same byte values. See srec_info(1) for how to see
    the holes.

может кто подскажет в чем дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, Alex_Golubev сказал:

может кто подскажет в чем дело?

Может они хотят --fill 0xFF --over <что-то>, а вы даете --fill без --over?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, Сергей Борщ сказал:

а вы даете --fill без --over

Попробовал: 

#Input file
PLK.hex -Intel
#Fill hole with 0xFF
#-fill 0xFF 0x08000000 0x08040000
fill 0xFF -over PLK.hex -Intel
#CRC Algorithm at given address
-STM32 0x08040000
#-crop 0x08040000 0x08040004
#Produce output
-Output_Block_Size=16
-o PLK_SRECORD.hex -Intel

Мне выдает сообщение Srecord

Скрытый текст

srec_cat: fill: -motorola address multiple 255 not understood (do you need
    parentheses to group the expressions differently?)

 

Я же указал "PLK.hex -Intel"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Alex_Golubev сказал:

Мне выдает сообщение Srecord

У вас одно тире перед over. Хз как оно влияет, для меня всегда его синтаксис был загадкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 минуты назад, Сергей Борщ сказал:

У вас одно тире перед over.

Да, нужно было тире поставить перед -fill ).

Выходной файл получил, но он получился размером 2 Гб. 

Открыть не смог. Как понимаю в .hex прошивки находится и инициализация ОЗУ , и программа управления. 

Наверное где то в этом ошибка у меня при расчете CRC. 

У контролера stm32h7 память раскидана, а нужно считать CRC только области программы. 

Изменено пользователем Alex_Golubev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 minutes ago, Alex_Golubev said:

Открыть не смог

Напишите сами какой надо алгоритм. Пара часов и будет счастье.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну мне, например, гораздо проще написать свою утилиту за 10-20 минут, чем неделю (или больше уже?) разбираться с чужим. Тем более кода там - с гулькин хвост, стандартными fopen()/fwrite()/fclose() из любого Си-шного учебника утилиту можно научить делать и другие, более изощренные способы постобработки файла прошивки. ИМХО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Alex_Golubev сказал:

Как-то же люди считают CRC прошивки. НЕ все же пишут свои программы.

IAR нормально считает. Ничё дописывать не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот если сделать вот так:

Скрытый текст

# srec_cat command file: srec_crc_dump_to_file.txt
#===============================================
#-disable-sequence-warning
#Input file
PLK.hex -Intel
#Fill hole with 0xFF
-crop 0x08000000 0x08040000
-fill 0xFF 0x8000000 0x8040000
#CRC Algorithm at given address
-STM32 0x8040000
-Output_Block_Size=16
#Produce output
-o PLK_SRECORD.hex -Intel

 

того предупреждения нет. И как понимаю дальше идет инициализация ОЗУ (посмотрел по адресам) для отладчика. Для прошивки МК она не нужна.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24.01.2022 в 16:46, Alex_Golubev сказал:

пытаюсь посчитать контрольную сумму для прошивки .hex

Т.е. у вас есть готовый файл .hex и вам надо посчитать CRC32? Установите HashTab и в свойствах файлов вас будет вкладка с разными хэшами.

Или вам надо другое - посчитать CRC32 двоичного образа памяти? Тогда сгенерируйте из .hex файл .bin и снова HashTab.

Если надо посчитать в процессе отладки - напишите функцию подсчета CRC32 и посмотрите, что она возвращает отладчиком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

srec_cat.exe Boot.hex -intel -crop 0x8000000 0x8003FFC -fill 0xff 0x8000000 0x8003FFC -STM32_Little_Endian 0x8003FFC -o Boot_crc.hex -intel

Вот мой рабочий вариант командной строки. Считает по тому же алгоритму, что и внутренний вычислитель CRC в STM32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Alex_Golubev said:

MDD у вас тоже самое. Что и у меня ).

Да он рабочей.

 

В вашем варианте меня немного смущает, что Вы пытаетесь поместить CRC по адресу 0x8040000. В вашем контроллере там есть флешь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...