реклама на сайте
подробности

 
 
9 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Как программно загнать STM32 в бутлоадер?
ViKo
сообщение Mar 8 2015, 05:45
Сообщение #31


Универсальный солдатик
******

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



Одни утверждают, что нельзя программно запрыгнуть в системный загрузчик, другие приводят программу, которая скачэ... Чудеса. Попробую сам. Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего.
Salamander, вы не поняли. В таблице два указан адрес идентификатора загрузчика. Это не обязательно. Мы и так знаем, какой загрузчик в мк. И адрес загрузчика всегда конкретный, описан в разделах микроконтроллеров.
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 8 2015, 06:19
Сообщение #32


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(ViKo @ Mar 8 2015, 08:45) *
Одни утверждают, что нельзя программно запрыгнуть в системный загрузчик, другие приводят программу, которая скачэ... Чудеса. Попробую сам. Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего.


Дак в этом и есть прелесть самописого бутлодыря - то, что он сперва сам запускается, даже если прога вообще еще не загружена, причем никаких ногодрыгов и т.п.
Как вы будете "запрыгивать" в стшный загрузчик, если прога еще не загружена??
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 8 2015, 06:58
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Не вижу принципиальных трудностей. Узнать адрес, и гоу ту... Ножки бута нужны, чтобы сразу перенестись в загрузчик при старте, только и всего.

думаю зависит от реализации...

Вон в LPC1768 и семействе ножка бут подменяет 0 регион, с векторами прерывания и прочее... Тут об Гоу тушишься, а загрузчика просто нет пока ногой не подергал.
Так что думаю не всегда можно просто перепрыгнуть по адресу.

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


Go to the top of the page
 
+Quote Post
Integro
сообщение Mar 8 2015, 07:13
Сообщение #34


Частый гость
**

Группа: Свой
Сообщений: 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 сделать джамп до инита железа.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 08:45
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 8 2015, 09:19
Сообщение #36


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Salamander @ Mar 8 2015, 11:45) *
Все-таки свой бутлодер буду писать. И свой софт.

Да елки - нигде не могу найти исходник бутлодера. Они существуют в природе?


Ну вот хоть правильное решение!



Сообщение отредактировал mantech - Mar 8 2015, 09:23
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 8 2015, 09:25
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

Цитата
Все-таки свой бутлодер буду писать. И свой софт.

это правильно


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

http://www.st.com/st-web-ui/static/active/...rchtype=keyword

то есть вам надо на самом деле найти 2 документа запись данных во флэш
и запуск прошивки с произвольного адреса.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 8 2015, 09:41
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Salamander @ Mar 8 2015, 11:45) *
Да елки - нигде не могу найти исходник бутлодера. Они существуют в природе?

Прикладываю реальный загрузчик для STM32. Грузит прошивку через TFTP с буфером во внешней SPI flash памяти.
Прикрепленные файлы
Прикрепленный файл  bootloader.zip ( 76.54 килобайт ) Кол-во скачиваний: 90
 
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 09:52
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата(scifi @ Mar 8 2015, 12:41) *
Прикладываю реальный загрузчик для STM32. Грузит прошивку через TFTP с буфером во внешней SPI flash памяти.

Ох и наворочено....
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 8 2015, 09:56
Сообщение #40


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ Mar 8 2015, 12:41) *
Прикладываю реальный загрузчик для STM32. Грузит прошивку через TFTP с буфером во внешней SPI flash памяти.


Зачем такие навороты, когда есть первоисточник, там все куда проще: STSW-STM32068

http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 8 2015, 09:57
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Salamander @ Mar 8 2015, 12:52) *
Ох и наворочено....

Любой загрузчик, делающий чуть больше, чем "два байта переслать", будет "навороченным". Никуда от этого не деться...
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 11:00
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата(scifi @ Mar 8 2015, 12:57) *
Любой загрузчик, делающий чуть больше, чем "два байта переслать", будет "навороченным". Никуда от этого не деться...

Да не скажите.
Вот нашел первоисточник от ST - более или менее понятно.
http://www.st.com/web/en/catalog/tools/FM1...chtype=keyword#
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 12:53
Сообщение #43


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Вопрос: вот работает у меня программа, анализирует поток поступающих по USART данных. Получает команду на перепрошивку. Прыгает на бутлоадер. Бутлоадер должен проанализаровать некий флаг и понять, что нужна перепрошивка...
А можно сделать так - записать бутлодер в конец адресного пространства, а основную программу как обычно. И основная программа в случае необходимости прыгает по адресу бутлодера. А по окончанию загрузки просто ресетит контроллер.
ЧТо скажете по поводу такой схемы?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 8 2015, 13:27
Сообщение #44


Универсальный солдатик
******

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



Цитата(Salamander @ Mar 8 2015, 15:53) *
ЧТо скажете по поводу такой схемы?

Плохо тем, что, например, для STM32F2xx старшие адреса разбиты на сектора по 128 kB, а младшие - всего по 16 kB. Стирать нужно целый сектор. Нормально, когда загрузчик размещен в отдельном секторе, чтобы не стирать его при перепрошивке. Поэтому загрузчик в секторе 0 предпочтительнее.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 14:43
Сообщение #45


Местный
***

Группа: Участник
Сообщений: 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 контроллируется, и если она равна единичке, то запускается прошивка, если нет передается управление основной программе.

Я понимаю всю наивность моей попытки дать одинаковое имя переменной в разных программах и расчитывать, что она будет видна в обоих. Но попробовать надо было. Не получилось.
Как мне в основной программе записать флажок, чтобы этот флажок был виден в бутлодыре?
Go to the top of the page
 
+Quote Post

9 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016