|
|
  |
Как программно загнать STM32 в бутлоадер? |
|
|
|
Mar 8 2015, 05:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Одни утверждают, что нельзя программно запрыгнуть в системный загрузчик, другие приводят программу, которая скачэ... Чудеса. Попробую сам. Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего. Salamander, вы не поняли. В таблице два указан адрес идентификатора загрузчика. Это не обязательно. Мы и так знаем, какой загрузчик в мк. И адрес загрузчика всегда конкретный, описан в разделах микроконтроллеров.
|
|
|
|
|
Mar 8 2015, 06:19
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(ViKo @ Mar 8 2015, 08:45)  Одни утверждают, что нельзя программно запрыгнуть в системный загрузчик, другие приводят программу, которая скачэ... Чудеса. Попробую сам. Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего. Дак в этом и есть прелесть самописого бутлодыря - то, что он сперва сам запускается, даже если прога вообще еще не загружена, причем никаких ногодрыгов и т.п. Как вы будете "запрыгивать" в стшный загрузчик, если прога еще не загружена??
|
|
|
|
|
Mar 8 2015, 06:58
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего. думаю зависит от реализации... Вон в LPC1768 и семействе ножка бут подменяет 0 регион, с векторами прерывания и прочее... Тут об Гоу тушишься, а загрузчика просто нет пока ногой не подергал. Так что думаю не всегда можно просто перепрыгнуть по адресу. Другое дело что сделать свой загрузчик по примерам не сложно, а он все же дает большие возможности.....
|
|
|
|
|
Mar 8 2015, 07:13
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(Aner @ Mar 8 2015, 01:29)  Прошивать дистанционно без написания собственного загрузчика нереально, программно запустить встроенный загрузчик низя. Еслиб было можно то что тогда ...? В том то и дело. А все железные приблуды с удержанием, загонят случайно в загрузчик и что тогда? Только ресет, а где его взять дистанционно, аппататный? Нигде, придется ехать за сотню км и перегружать железку, неправильно это. Ну вы парни даете... Можно!!! Выше приведенный пример джампа рабочий. Использую подобную методику на stm32f1 и stm32f4 единственный нюанс это деинитить клоки и периферию перед переходом, что бы сам bootloader это мог сделать корректно. Протокол работы с STшным бутлоадером подробно описан в AN3155Но! Если нет уверенности в надежности канала(канала передачи ПО), я бы порекомендовал использовать буфер(внешняя flash или половина flash контроллера если размер ПО позволяет) тоесть заливать прошивку после полного получения, а затем ее прошивать, но понятно, в этом случае понадобится уже свой bootloader с методикой работы описанной вышей. P.S. Если есть сомнения в работе встроенного bootloader , достаточно в startup.s сделать джамп до инита железа.
|
|
|
|
|
Mar 8 2015, 08:45
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(Aner @ Mar 8 2015, 01:29)  Прошивать дистанционно без написания собственного загрузчика нереально, программно запустить встроенный загрузчик низя. Да как же? А вот http://www.youtube.com/watch?v=cvKC-4tCRgwПравда это для F4 серии, но ссылаются на тот же документ, в котором я адреса бутлодера смотрел. Цитата(mantech @ Mar 8 2015, 09:19)  Дак в этом и есть прелесть самописого бутлодыря - то, что он сперва сам запускается, даже если прога вообще еще не загружена, причем никаких ногодрыгов и т.п. Как вы будете "запрыгивать" в стшный загрузчик, если прога еще не загружена?? А зачем мне в него прыгать до загрузки? На отладочной плате есть кнопка, ее надо жать до ресета и отпускать потом, понятное дело, что в загрузчик мы попадаем до основной программы. Но у меня приложение беспроводное, чтобы оно поняло что нужно прошиваться ему нужно команду по воздуху получить, а для этого как раз основная программа должна работать. Цитата достаточно в startup.s сделать джамп до инита железа. Да! Вот теперь получилось. Но все очень сложно... Только определенная последовательность действий. Нужно сначала загрузить FlashLoader, потом сделать Reset на контроллере и только тогда появляется связь. Если сначала запустить устройство, а потом FlashLoaer и не сделать Reset - пишет unrecognized device. Все-таки свой бутлодер буду писать. И свой софт. Да елки - нигде не могу найти исходник бутлодера. Они существуют в природе?
Сообщение отредактировал Salamander - Mar 8 2015, 08:16
|
|
|
|
|
Mar 8 2015, 09:25
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата А зачем мне в него прыгать до загрузки? На отладочной плате есть кнопка, ее надо жать до ресета и отпускать потом, понятное дело, что в загрузчик мы попадаем до основной программы. Но у меня приложение беспроводное, чтобы оно поняло что нужно прошиваться ему нужно команду по воздуху получить, а для этого как раз основная программа должна работать. а если во время загрузки будет обрыв связи? нормальной программы уже не будет, и вот у вас беспроводной кирпич... Цитата Все-таки свой бутлодер буду писать. И свой софт. это правильно собственно вам надо написать программу которая кладет пришедшие данные во флэшь и запускает программу по новому адресу. http://www.st.com/st-web-ui/static/active/...rchtype=keywordто есть вам надо на самом деле найти 2 документа запись данных во флэш и запуск прошивки с произвольного адреса.
|
|
|
|
|
Mar 8 2015, 09:52
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(scifi @ Mar 8 2015, 12:41)  Прикладываю реальный загрузчик для STM32. Грузит прошивку через TFTP с буфером во внешней SPI flash памяти. Ох и наворочено....
|
|
|
|
|
Mar 8 2015, 11:00
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(scifi @ Mar 8 2015, 12:57)  Любой загрузчик, делающий чуть больше, чем "два байта переслать", будет "навороченным". Никуда от этого не деться... Да не скажите. Вот нашел первоисточник от ST - более или менее понятно. http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
|
|
|
|
|
Mar 8 2015, 14:43
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Вроде бы получилось - в начальных адресах расположил бутлодырь http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword# По адресу 0x8003000 основную программу. В виду сложности отладки и расстановки брейкпоинтов в таком режиме я зажигаю диодики. Диодики показали, что бутлодырь грузится, а дальше управление передается основной программе. В основной программе контролирую unsigned char NEED_TO_LOAD и если она равна единичке (сам пишу единичку в окне watch) программу кидает на адрес загрузчика. А в загрузчике (бутлоадере) таже переменная unsigned char NEED_TO_LOAD контроллируется, и если она равна единичке, то запускается прошивка, если нет передается управление основной программе. Я понимаю всю наивность моей попытки дать одинаковое имя переменной в разных программах и расчитывать, что она будет видна в обоих. Но попробовать надо было. Не получилось. Как мне в основной программе записать флажок, чтобы этот флажок был виден в бутлодыре?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|