Jump to content
    

Нужна помощь по утилите srec_cat.exe

Прошерстил форум и Интернет на предмет использования утилиты srec_cat.exe, но остались вопросы и непонятки.

Мне надо добавить в конец прошивки ее CRC, с этим я справился:

srec_cat.exe test_file_source.bin -binary -crc32-l-e -maximum-address test_file_source.bin -binary -o test_file.bin -binary

Также хотелось бы перед формированием конечного файла прошивки увидеть в выводе IDE полученную CRC (или даже записать ее в отдельный файл). Это тоже можно сделать, например, так:

srec_cat.exe test_file_source.bin -binary -fill 0xFF 0 0x400 -crop 0 0x400 -crc32-b-e 0x400 -crop 0x400 0x404 -o - -hex-dump

Но как быть, если размер прошивки заранее неизвестен? Чтобы встроить вызов утилиты в IDE и полностью автоматизировать процесс, не вводя ручками каждый раз разные адреса.

Во втором случае, если использовать, например,

-crop -maximum-address test_file_source.bin -binary -maximum-address test_file_source.bin -binary -offset 4

вместо

-crop 0x400 0x404

В консоль выводится полный дамп прошивки, а не 4 последние байта, как мне надо.

Есть ли способ для утилиты srec_cat.exe указывать в качестве параметров, например, реальную длину файла, а не забивать магические константы?

Share this post


Link to post
Share on other sites

22 минуты назад, _Desh_ сказал:

Но как быть, если размер прошивки заранее неизвестен?

Писать CRC не в конец, а внутрь прошивки.

Share this post


Link to post
Share on other sites

6 hours ago, jcxz said:

Писать CRC не в конец, а внутрь прошивки.

Вопрос немного не об этом, но допустим.

При попытке писать длину прошивки и CRC вместо неиспользуемых (несуществующих) векторов по заранее известному фиксированному адресу:

srec_cat.exe test_file_source.bin -binary -length-l-e 0x1C -crc32-b-e 0x20 -o test_file.bin -binary

srec_cat.exe выводит следующее сообщение об ошибке:

srec_cat: test_file_source.bin: 0x0400: multiple 0x0000001C values (previous = 0x0C, this one = 0x00)

Что это означает и как это исправить? Из документации ни черта не понятно, там есть почти такой же пример, и видимо он должен работать.

 

P.S. Что означает ошибка примерно понял. Он мне хочет сказать, что я хочу какое-то ненулевое значение перезаписать новым значением (нулевым). Ну и что? Мне это и надо.

Edited by _Desh_

Share this post


Link to post
Share on other sites

Методом проб и ошибок выяснил, что перезаписать данные по некоторому адресу можно, сначала исключив этот адрес:

srec_cat.exe test_file_source.bin -binary -exclude 0x1C 0x20 -length-l-e 0x1C -o test_file.bin -binary

Теперь по адресу 0x1C корректно записывается длина файла.

Но теперь проблема записать по адресу 0x20 значение CRC. Если исключить диапазон 0x20-0x24, то в расчете CRC он не участвует, выдается предупреждение о том, что в данных есть прореха. В принципе, при сверке CRC программно внутри контроллера можно это учесть, но получается как-то некрасиво.

 

Есть ли более элегантный способ прописать CRC в нужный адрес?

Edited by _Desh_

Share this post


Link to post
Share on other sites

Потратить десяток минут на написание своей утилиты, нежели несколько дней плясать вокруг чужой.

Share this post


Link to post
Share on other sites

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

Теперь по адресу 0x1C корректно записывается длина файла.

Ну так используйте ее для вычисления адреса, по которому сразу за концом прошивки (не забыв про необходимое выравнивание) будет лежать CRC. Я делаю именно так, правда, не использую для этого srecord.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...