Jump to content

    
Sign in to follow this  
Salamander

Как программно загнать STM32 в бутлоадер?

Recommended Posts

На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер.

А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset.

Я хочу прошивать дистанционно - по bluetooth (hс-05)

Share this post


Link to post
Share on other sites
На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер.

А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset.

Я хочу прошивать дистанционно - по bluetooth (hс-05)

может задержать BOOT0 на RC цепочке?

Share this post


Link to post
Share on other sites
А какова длительность импульса?

 

Это вам решать, вы же программу пишите. По доке: смотрите сколько необходимо сохранять требуемый уровень на BOOTx после перевода nRESET в неактивное состояние.

Share this post


Link to post
Share on other sites

В доках нашел, что условий запуска загрузчика 6. Вот одно их условий

nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0

Так может быть эти биты как-то устанавливаются? И тогда можно программно зайти?

 

 

 

Я уже писал, что хочу использоват bluetooth модуль HC-05.

У него есть пины общего назначения, которые можно включать и выключать AT командой. Эти пины можно подключить и к Boot и к Reset. Но вот как тогда выходить из bootloader...

Share this post


Link to post
Share on other sites
На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе.

 

Что мешает то же самое сделать на СТМ?? В авр-же сами писали загрузчик. Не умеете писать загрузчики на стм? Возьмите готовый в аппнотах...

 

 

Edited by mantech

Share this post


Link to post
Share on other sites

Так в AVR не было специального пина, все делалось ручками - пинаешь контроллер по адресу и все. Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак".

Share this post


Link to post
Share on other sites
Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак".

 

Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!!

Share this post


Link to post
Share on other sites

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

 

А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш?

 

Так все и делают, пишут свою программу, которая запускается первой проверяет надо ли - можно ли грузить нормальную программу, и если да передают управление ей, а если нет сидят и ждут когда придется прошивка.

Приходящую прошивку распихивают во флэш память и запускают...

 

ножка - это не ограничение а доп фишка, используя ее, данные загрузки надо будет слать в специальном формате, ваш блютус с этим справиться?

Share this post


Link to post
Share on other sites
Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!!

Где почитать, а то мне в основном какая-то вода попадается.

Как сделать, чтобы бутлодер стартовал без ножки Boot0 ?

 

 

А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш?

Погодите.... У меня подуль HC-05. Ни компьютер, ни STM32 понятия не имеют, что работают с блютус. Они думают, что работают с USART.

Сегодня когда я озадачился бутлоадером, я не подключая блютус модуль скачал FlashLoader Demonstrator, а к STM32 подключил USB-COM конвертер. ПРошивать не пробовал, но контакт контроллера и компа состоялся. ЗАчем мне писать загрузчик, если он уже есть внутри STM32? ПРоцесс заливки прошивки по блютус я могу организовать хоть сейчас (был бы у меня второй HC-05), но мне не нравится только одно - я не хочу жать на кнопку Boot0.

 

 

первой проверяет надо ли - можно ли грузить нормальную программу,

А как это понять?

Смотрите, как я хочу сделать - работает STM, принимает команды по USART (через блютус). Выполняет их. Как только получает заранее оговореную последовательнось байт - делает что-то, чтобы запустить bootloader. Перепрошивается и вновь запускает основную программу.

 

То есть мне нужно проверять условие не при старте, а во время работы и из работающей программы посылать контроллер на перепрошивку. На АВР я 3 года назад как-то так делал...

Share this post


Link to post
Share on other sites
ЗАчем мне писать загрузчик, если он уже есть внутри STM32

Для расширения кругозора?

Ну или для того, чтобы он снял все ограничения, присущие заводскому загрузчику, и добавил кучу полезных плюшек.

Share this post


Link to post
Share on other sites

как вы хотите все уже поняли, и вам сообщили что не зажав ногу бут при ресете никак...

 

 

правильно делается так.

 

Первой стартует программа загрузчик.

Она проверяет

1. наличие флага обновления прошивки

2. целостность прошивки

3. секретный код (если не хотите чтобы левые люди запускали свои прошивки)

если все хорошо, дальше запускается нормальная прошивка... нет ждет обновления прошивки....

 

 

Когда вы хотите обновить прошивку из программы, вы ставите флаг обновления и перегружаетесь, после этого запуститься бутлоадер и по 1 условию останется ждать прошивку, а когда обновите прошивку, просто снимаете флаг, и опять перегружаетесь...

 

 

все работает по одному сценарию, предсказуемо и надежно. Доп бонусом идет что загрузчик следит сам за тем чтобы ничего в его область не записали, это делает не убиваемый загрузчик.... Можно добавить 4 условие таймаут в загрузчике, если придут данные остается в загрузчике, на случай если будет корректная по всем условиям прошивка не могущая выставить 1 флаг. Ну или кнопку, я кнопку предпочитаю...

 

 

Из плюсов что бутлоадер может делать какую-то диагностику, и вести какой-то диалог, хотя бы сможет объяснить что что-то плохо

 

 

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.

Sign in to follow this