Salamander 0 Posted March 7, 2015 · Report post На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер. А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset. Я хочу прошивать дистанционно - по bluetooth (hс-05) Quote Ответить с цитированием Share this post Link to post Share on other sites
smalcom 0 Posted March 7, 2015 · Report post программно никак. используйте одновибратор на ножках BOOTx Quote Ответить с цитированием Share this post Link to post Share on other sites
porty 0 Posted March 7, 2015 · Report post На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. А в тексте основной программы некая функция слушала USART и по определенной команде перезагружала контроллер. А как в STM - ну подам я на BOOT0 единичку - ее же нужно держать какое-то время после Reset. Я хочу прошивать дистанционно - по bluetooth (hс-05) может задержать BOOT0 на RC цепочке? Quote Ответить с цитированием Share this post Link to post Share on other sites
Salamander 0 Posted March 7, 2015 · Report post программно никак. используйте одновибратор на ножках BOOTx А какова длительность импульса? Quote Ответить с цитированием Share this post Link to post Share on other sites
smalcom 0 Posted March 7, 2015 · Report post А какова длительность импульса? Это вам решать, вы же программу пишите. По доке: смотрите сколько необходимо сохранять требуемый уровень на BOOTx после перевода nRESET в неактивное состояние. Quote Ответить с цитированием Share this post Link to post Share on other sites
scifi 0 Posted March 7, 2015 · Report post Самодельный загрузчик кошернее. Quote Ответить с цитированием Share this post Link to post Share on other sites
Salamander 0 Posted March 7, 2015 · Report post В доках нашел, что условий запуска загрузчика 6. Вот одно их условий nBoot0(bit) = 0, nBoot1(bit) = 1 and nBoot0_SW(bit) = 0 Так может быть эти биты как-то устанавливаются? И тогда можно программно зайти? Я уже писал, что хочу использоват bluetooth модуль HC-05. У него есть пины общего назначения, которые можно включать и выключать AT командой. Эти пины можно подключить и к Boot и к Reset. Но вот как тогда выходить из bootloader... Quote Ответить с цитированием Share this post Link to post Share on other sites
mantech 0 Posted March 7, 2015 (edited) · Report post На AVR все делалось просто - загрузчик запускался первым и по таймауту отдавал управление основной программе. Что мешает то же самое сделать на СТМ?? В авр-же сами писали загрузчик. Не умеете писать загрузчики на стм? Возьмите готовый в аппнотах... Edited March 7, 2015 by mantech Quote Ответить с цитированием Share this post Link to post Share on other sites
Salamander 0 Posted March 7, 2015 · Report post Так в AVR не было специального пина, все делалось ручками - пинаешь контроллер по адресу и все. Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак". Quote Ответить с цитированием Share this post Link to post Share on other sites
mantech 0 Posted March 7, 2015 · Report post Я усомнился, что так вожно в STM, поскольку у него для этого есть железная ножка. А задав вопрос здесь, услышал "программно никак". Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!! Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted March 7, 2015 · Report post Железная ножка чтобы загрузить встроенный загрузчик, в который можно писать данные по ком порту. А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш? Так все и делают, пишут свою программу, которая запускается первой проверяет надо ли - можно ли грузить нормальную программу, и если да передают управление ей, а если нет сидят и ждут когда придется прошивка. Приходящую прошивку распихивают во флэш память и запускают... ножка - это не ограничение а доп фишка, используя ее, данные загрузки надо будет слать в специальном формате, ваш блютус с этим справиться? Quote Ответить с цитированием Share this post Link to post Share on other sites
Salamander 0 Posted March 7, 2015 · Report post Я просто вообще не понимаю, зачем дрыгать какими-то ножками, если все можно сделать программно?? Кто сказал, что "программно никак"?? Всегда делал программно - стартует буллоадер, опрашивает, есть-ли варианты загрузки, если нет, переопределяем контр. прерываний и на адрес основной проги. В основной проге сбрасываем собаку, а если надо рестартануть - не сбрасываем и все!! Где почитать, а то мне в основном какая-то вода попадается. Как сделать, чтобы бутлодер стартовал без ножки Boot0 ? А что вам мешает написать программу, которая будет принимать данные по блютусу, и записывать их во флэш? Погодите.... У меня подуль HC-05. Ни компьютер, ни STM32 понятия не имеют, что работают с блютус. Они думают, что работают с USART. Сегодня когда я озадачился бутлоадером, я не подключая блютус модуль скачал FlashLoader Demonstrator, а к STM32 подключил USB-COM конвертер. ПРошивать не пробовал, но контакт контроллера и компа состоялся. ЗАчем мне писать загрузчик, если он уже есть внутри STM32? ПРоцесс заливки прошивки по блютус я могу организовать хоть сейчас (был бы у меня второй HC-05), но мне не нравится только одно - я не хочу жать на кнопку Boot0. первой проверяет надо ли - можно ли грузить нормальную программу, А как это понять? Смотрите, как я хочу сделать - работает STM, принимает команды по USART (через блютус). Выполняет их. Как только получает заранее оговореную последовательнось байт - делает что-то, чтобы запустить bootloader. Перепрошивается и вновь запускает основную программу. То есть мне нужно проверять условие не при старте, а во время работы и из работающей программы посылать контроллер на перепрошивку. На АВР я 3 года назад как-то так делал... Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted March 7, 2015 · Report post Ну тогда вам стоит написать бутлоадер хотя бы для того чтобы "не жать на кнопку Boot0." Quote Ответить с цитированием Share this post Link to post Share on other sites
scifi 0 Posted March 7, 2015 · Report post ЗАчем мне писать загрузчик, если он уже есть внутри STM32 Для расширения кругозора? Ну или для того, чтобы он снял все ограничения, присущие заводскому загрузчику, и добавил кучу полезных плюшек. Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted March 7, 2015 · Report post как вы хотите все уже поняли, и вам сообщили что не зажав ногу бут при ресете никак... правильно делается так. Первой стартует программа загрузчик. Она проверяет 1. наличие флага обновления прошивки 2. целостность прошивки 3. секретный код (если не хотите чтобы левые люди запускали свои прошивки) если все хорошо, дальше запускается нормальная прошивка... нет ждет обновления прошивки.... Когда вы хотите обновить прошивку из программы, вы ставите флаг обновления и перегружаетесь, после этого запуститься бутлоадер и по 1 условию останется ждать прошивку, а когда обновите прошивку, просто снимаете флаг, и опять перегружаетесь... все работает по одному сценарию, предсказуемо и надежно. Доп бонусом идет что загрузчик следит сам за тем чтобы ничего в его область не записали, это делает не убиваемый загрузчик.... Можно добавить 4 условие таймаут в загрузчике, если придут данные остается в загрузчике, на случай если будет корректная по всем условиям прошивка не могущая выставить 1 флаг. Ну или кнопку, я кнопку предпочитаю... Из плюсов что бутлоадер может делать какую-то диагностику, и вести какой-то диалог, хотя бы сможет объяснить что что-то плохо Quote Ответить с цитированием Share this post Link to post Share on other sites