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

 
 
 
Reply to this topicStart new topic
> Ещё про бутлоадер
andrewlekar
сообщение May 20 2013, 08:25
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры загружают софт с фиксированного адреса и стартуют независимо от основного приложения (по кнопке или перемычке). Мне же хочется, чтобы прямо из USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку.
У меня созрела вот такая схема бутлоадера:
Загрузка новой прошивки происходит при работающем приложении, а новая прошивка спокойно заливается в свободную область памяти. После загрузки ещё одна область флэша патчится и меняет местами указатель на новую и на старую прошивки. При сбросе проца бут проверяет наличие прошивки по основному адресу и по запасному в случае сбоя. Всё это должно работать при условии позиционно независимого кода прошивки.

Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)? Прокомментируйте предложенную схему работы бутлоадера. В обычных бутах не устраивает, что для прошивки приходится что-то дополнительно нажимать на плате и то, что устройство перецепляется к ПК (требует повторного подключения). Для сравнения, в U-Boot этого не требуется.
Go to the top of the page
 
+Quote Post
-SANYCH-
сообщение May 20 2013, 09:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 6-12-05
Пользователь №: 11 864



Цитата
USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку


Цитата
У меня созрела вот такая схема бутлоадера:
Загрузка новой прошивки происходит при работающем приложении, а новая прошивка спокойно заливается в свободную область памяти.


Как то эти два предложения противоречат друг с другом.
Вам нужно либо бут (это маленькая программка которая только умеет загружать основную программу и выполнять минимальные требования) либо вместо бута уже полноценное приложение которое умеет принимать и прошивать новую прошивку.
В случае с бутом как на меня это более хороший вариант так как программка бута маленькая и ее отладить намного проще. После чего она не изменяется а только обновляется основная программа.

Цитата
Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)?


Вы хотите скомпилить так программу для контроллера что бы она работала неважно с какого адреса ее залили в контроллер при этом сама прошивка не должна меняться?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение May 20 2013, 10:00
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(andrewlekar @ May 20 2013, 12:25) *
...Кто-нибудь работал с позиционно независимыми прошивками...


На меге128 такой делал. На STM пошёл дальше - ввёл версионность, патч и апгрэйд в прошивки(по форточной терминологии).

Основная заковыка - группировать в одном месте межблочные переходы(ну типа аля хедер DLL). Сами переходы в группы. Группы по фиксированным адресам, либо по подписи.
На мегах делал на азме - более муторно. На сях(STM) попросче выходит (листинг).
Откуда грузиться(канал) - фиолетово.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение May 20 2013, 10:34
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



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

Да. Впрочем, боюсь на две копии софта не хватит флэша, поэтому придётся откатиться к традиционной схеме.
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 20 2013, 11:31
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(-SANYCH- @ May 20 2013, 11:56) *
Как то эти два предложения противоречат друг с другом.
Вам нужно либо бут (это маленькая программка которая только умеет загружать основную программу и выполнять минимальные требования) либо вместо бута уже полноценное приложение которое умеет принимать и прошивать новую прошивку.
В случае с бутом как на меня это более хороший вариант так как программка бута маленькая и ее отладить намного проще. После чего она не изменяется а только обновляется основная программа.


Есть еще вариант, на процах с достаточным ОЗУ:
1) бут компилиться для работы в ОЗУ, потом его бинарник подстыковывается любым образом в основную программу как массив данных.
2) в основной программе, при выборе апдейта прошивки - бут перегружается в ОЗУ и ему передается управление.

Основных достоинств этого метода два:
1) нет проблем с теми процами, которые не могут выплолнять програму из флеш и одновременно писать в эту флеш (в другие блоки, естественно).
2) поскольку бут физически находится в основной программе. при ее апдейте бут тоже апдейтится.

Недостаток вроде только один - сбой питания или передачи данных в процессе записи может привести к полной неработоспособности устройства. Но это можно обойти различными методами (например еще один неизменный супербут).
Go to the top of the page
 
+Quote Post
-SANYCH-
сообщение May 22 2013, 06:46
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 6-12-05
Пользователь №: 11 864



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


Этот недостаток ставит крест на всех преимуществах. Так как реанимировать мобильное устройство почти всегда дороже чем оно стоит.
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 22 2013, 08:43
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(andrewlekar @ May 20 2013, 12:25) *
Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры загружают софт с фиксированного адреса и стартуют независимо от основного приложения (по кнопке или перемычке). Мне же хочется, чтобы прямо из USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку.

а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdog
При старте бута в самом начале проверяем magic word и делаем что нужно или стартуем приложение
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 22 2013, 09:02
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (toweroff @ May 22 2013, 11:43) *
а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdog
Рестартануть проц програмным сбросом. При старте бута проверить причину рестарта в соответствующем регистре и если это был программный сброс - значит приложение попросило об обновлени. По окончании загрузки сброситься собакой.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
igorle
сообщение May 22 2013, 11:03
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Цитата(andrewlekar @ May 20 2013, 11:25) *
Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры...

Не по вашему вопросу, но раз уж здесь собрались специалисты по USB loaderам. Есть небольшая тестовая плата с STM32F103C8 (64 К флэша, 20К ОЗУ). Можете дать ссылку на готовый проект простейшего USB bootloaderа? Желательно, чтобы имиджи можно было загружать просто копированием. Раз уж для вас это пройденный этап.
Спасибо
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:00
Рейтинг@Mail.ru


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