Jump to content
    

Опять про бутлоадер. Как в Keil одновременно заливать в МК и бутлоадер и основную программу ?

Друзья,

сделал простенький бутлоадер, заливаю его в STM32 по адресу 0x08000000. Потом заливаю основную программу по адресу 0x0800D000.

Все работает, бутлоадер запускается, потом передает управление основной программе.

Не могу сообразить как сделать, чтобы при заливке основной программы в чистый МК, туда автоматом бы заливался и бутлоадер ?

(Пользуюсь Keil MDK ARM)

 

Share this post


Link to post
Share on other sites

Из двух бинарей делайте один единый.

Я это делаю собственной консольной утилитой, пишется за 10 минут на Си.

Из готовых, разве что, утилиту srec тут кто-то пользовал, вроде. Но надо смотреть, умеет она клеить или нет.

А в Keil-е нужно будет для удобства настроить запуск этого скрипта после сборки проекта - там в опциях есть все для этого.

Share this post


Link to post
Share on other sites

Делаете две конфигурации. Одна с бутом, вторая с прошивкой.

Добавляете load бут... в Debug init script для прошивки.

Share this post


Link to post
Share on other sites

On 9/19/2022 at 10:28 AM, Arlleex said:

Я это делаю собственной консольной утилитой, пишется за 10 минут на Си.

Понял, Arlleex. Спасибо. 

On 9/19/2022 at 10:30 AM, x893 said:

Делаете две конфигурации. Одна с бутом, вторая с прошивкой.

Добавляете load бут... в Debug init script для прошивки.

Поподробнее бы чуть-чуть. Не пойму как эти конфигурации делать и где этот Debug init script ?

Share this post


Link to post
Share on other sites

18 minutes ago, TOG said:

Не пойму как эти конфигурации делать и где этот Debug init script ?

Как делать расписано на сайте Keil ну и конечно в google.com

image.png.b36a5fef011b4fdeee7f9a6f56d50b91.png

image.png.4ce6bb8c315a96b964014f84f38e75eb.png

Share this post


Link to post
Share on other sites

On 9/19/2022 at 11:23 AM, x893 said:

Как делать расписано на сайте Keil ну и конечно в google.com

Гениально, x893 !

Всего одна строчка.

Создаем файл bootloader.ini с одной командой "LOAD Bootloader.hex"

Потом в основном проекте идем в Options->Utilities->Init File и прицепляем там этот init файл.

Теперь при нажатии F8(download) автоматом прошивается bootloader.hex и основной проект. Красота ! 

Share this post


Link to post
Share on other sites

1 hour ago, TOG said:

Гениально, x893 !

Я тут не при чём. Это им говорите - Günter и Reinhard Keil

Share this post


Link to post
Share on other sites

5 часов назад, Arlleex сказал:

Я это делаю собственной консольной утилитой, пишется за 10 минут на Си.

А я это делаю батником. Пишется за 10 секунд и содержит всего одну строчку:

copy /b boot.hex + work.hex complex.hex

:wink:

Полученный complex.hex грузится в jflash.exe (из состава Segger-овских утилит) и шьётся. Jflash даже на наличие лишней строчки ":00000001FF" в конце boot.hex не ругается, проглатывает нормально.

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

Теперь при нажатии F8(download) автоматом прошивается bootloader.hex и основной проект. Красота ! 

Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер??? :wacko2: Или при отладке бутлоадера всё время перешивать основную программу? Возможно, что реально флешь и не будет шиться (если Кейл делает перед прошивкой сравнение содержимого флешь с файлом), но лишнее время тратиться всё равно будет.

 

PS: Попробовал сейчас загрузить complex.hex в "STM32 ST-LINK Utility.exe" - загрузилось без проблем. Причём выглядит даже красивее, чем в Jflash. Т.е. с ST-Link вроде тоже нормально работает.

Share this post


Link to post
Share on other sites

On 9/19/2022 at 3:55 PM, jcxz said:

Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер???

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

Share this post


Link to post
Share on other sites

Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту:

const unsigned char Bootloader[0xD000] __attribute__((at(0x08000000))) =
  {
  ...
  };

Все. Ваша прошивка содержит в себе бутлоадер.

Share this post


Link to post
Share on other sites

On 9/19/2022 at 6:57 PM, Intel4004 said:

Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту

Тоже отличный вариант, Intel4004 !

Share this post


Link to post
Share on other sites

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

Если да расскажите как я не умею, если нет то неужели вы массово шьете девайсы из кейла?

Я сейчас в кейл делаю два таргета с разными адресами старта.

С 0x08000000 для отладки и с адресом после бута для релиза.

Share this post


Link to post
Share on other sites

On 9/21/2022 at 9:38 AM, uriy said:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

Да, отладка работает. Загрузчик отработал и передал управление основной программе и отладчик остановился на main.  

Share this post


Link to post
Share on other sites

1 час назад, uriy сказал:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

А чем перескакивание из бута отличается от перескакивания из Reset_Handler() без бута? Можно, конечно.

Share this post


Link to post
Share on other sites

8 часов назад, uriy сказал:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

А в чём проблема? Отладчик, после загрузки образа, сам передаёт управление на его стартовый адрес. Без бута. По-крайней мере в IAR под отладчиком можно запускать программу расположенную с произвольного адреса (в пределах разумного) даже вообще без бутлоадера. И если потом просто включить питание такого МК без отладчика, то программа конечно не запустится.

 

Я так иногда делаю: чтобы не затирать текущую программу в начале флеши, переношу исполняемый регион в конец флеши (запас по размеру флеши есть большой). И прошиваю и отлаживаю IAR-ом программу в старших адресах флеши, не стирая программу в начале.

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...