|
|
  |
Как программно загнать STM32 в бутлоадер? |
|
|
|
Mar 7 2015, 17:20
|
Местный
  
Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893

|
Цитата(Salamander @ Mar 7 2015, 21:00)  На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер. А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset. Я хочу прошивать дистанционно - по bluetooth (hс-05) может задержать BOOT0 на RC цепочке?
|
|
|
|
|
Mar 7 2015, 17:25
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(smalcom @ Mar 7 2015, 20:19)  программно никак. используйте одновибратор на ножках BOOTx А какова длительность импульса?
|
|
|
|
|
Mar 7 2015, 18:29
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
В доках нашел, что условий запуска загрузчика 6. Вот одно их условий Цитата nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0 Так может быть эти биты как-то устанавливаются? И тогда можно программно зайти? Я уже писал, что хочу использоват bluetooth модуль HC-05. У него есть пины общего назначения, которые можно включать и выключать AT командой. Эти пины можно подключить и к Boot и к Reset. Но вот как тогда выходить из bootloader...
|
|
|
|
|
Mar 7 2015, 18:59
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Salamander @ Mar 7 2015, 21:53)  Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак". Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!!
|
|
|
|
|
Mar 7 2015, 19:02
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Железная ножка чтобы загрузить встроенный загрузчик, в который можно писать данные по ком порту.
А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш?
Так все и делают, пишут свою программу, которая запускается первой проверяет надо ли - можно ли грузить нормальную программу, и если да передают управление ей, а если нет сидят и ждут когда придется прошивка. Приходящую прошивку распихивают во флэш память и запускают...
ножка - это не ограничение а доп фишка, используя ее, данные загрузки надо будет слать в специальном формате, ваш блютус с этим справиться?
|
|
|
|
|
Mar 7 2015, 19:12
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(mantech @ Mar 7 2015, 21:59)  Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!! Где почитать, а то мне в основном какая-то вода попадается. Как сделать, чтобы бутлодер стартовал без ножки Boot0 ? Цитата А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш? Погодите.... У меня подуль HC-05. Ни компьютер, ни STM32 понятия не имеют, что работают с блютус. Они думают, что работают с USART. Сегодня когда я озадачился бутлоадером, я не подключая блютус модуль скачал FlashLoader Demonstrator, а к STM32 подключил USB-COM конвертер. ПРошивать не пробовал, но контакт контроллера и компа состоялся. ЗАчем мне писать загрузчик, если он уже есть внутри STM32? ПРоцесс заливки прошивки по блютус я могу организовать хоть сейчас (был бы у меня второй HC-05), но мне не нравится только одно - я не хочу жать на кнопку Boot0. Цитата первой проверяет надо ли - можно ли грузить нормальную программу, А как это понять? Смотрите, как я хочу сделать - работает STM, принимает команды по USART (через блютус). Выполняет их. Как только получает заранее оговореную последовательнось байт - делает что-то, чтобы запустить bootloader. Перепрошивается и вновь запускает основную программу. То есть мне нужно проверять условие не при старте, а во время работы и из работающей программы посылать контроллер на перепрошивку. На АВР я 3 года назад как-то так делал...
|
|
|
|
|
Mar 7 2015, 19:18
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
как вы хотите все уже поняли, и вам сообщили что не зажав ногу бут при ресете никак...
правильно делается так.
Первой стартует программа загрузчик. Она проверяет 1. наличие флага обновления прошивки 2. целостность прошивки 3. секретный код (если не хотите чтобы левые люди запускали свои прошивки) если все хорошо, дальше запускается нормальная прошивка... нет ждет обновления прошивки....
Когда вы хотите обновить прошивку из программы, вы ставите флаг обновления и перегружаетесь, после этого запуститься бутлоадер и по 1 условию останется ждать прошивку, а когда обновите прошивку, просто снимаете флаг, и опять перегружаетесь...
все работает по одному сценарию, предсказуемо и надежно. Доп бонусом идет что загрузчик следит сам за тем чтобы ничего в его область не записали, это делает не убиваемый загрузчик.... Можно добавить 4 условие таймаут в загрузчике, если придут данные остается в загрузчике, на случай если будет корректная по всем условиям прошивка не могущая выставить 1 флаг. Ну или кнопку, я кнопку предпочитаю...
Из плюсов что бутлоадер может делать какую-то диагностику, и вести какой-то диалог, хотя бы сможет объяснить что что-то плохо
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|