Перейти к содержанию
    

Ещё про бутлоадер

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

У меня созрела вот такая схема бутлоадера:

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

 

Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)? Прокомментируйте предложенную схему работы бутлоадера. В обычных бутах не устраивает, что для прошивки приходится что-то дополнительно нажимать на плате и то, что устройство перецепляется к ПК (требует повторного подключения). Для сравнения, в U-Boot этого не требуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

У меня созрела вот такая схема бутлоадера:

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

 

Как то эти два предложения противоречат друг с другом.

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Кто-нибудь работал с позиционно независимыми прошивками...

 

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

 

Основная заковыка - группировать в одном месте межблочные переходы(ну типа аля хедер DLL). Сами переходы в группы. Группы по фиксированным адресам, либо по подписи.

На мегах делал на азме - более муторно. На сях(STM) попросче выходит (листинг).

Откуда грузиться(канал) - фиолетово.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Да. Впрочем, боюсь на две копии софта не хватит флэша, поэтому придётся откатиться к традиционной схеме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как то эти два предложения противоречат друг с другом.

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

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

 

Есть еще вариант, на процах с достаточным ОЗУ:

1) бут компилиться для работы в ОЗУ, потом его бинарник подстыковывается любым образом в основную программу как массив данных.

2) в основной программе, при выборе апдейта прошивки - бут перегружается в ОЗУ и ему передается управление.

 

Основных достоинств этого метода два:

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

2) поскольку бут физически находится в основной программе. при ее апдейте бут тоже апдейтится.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Этот недостаток ставит крест на всех преимуществах. Так как реанимировать мобильное устройство почти всегда дороже чем оно стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdog

При старте бута в самом начале проверяем magic word и делаем что нужно или стартуем приложение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdog
Рестартануть проц програмным сбросом. При старте бута проверить причину рестарта в соответствующем регистре и если это был программный сброс - значит приложение попросило об обновлени. По окончании загрузки сброситься собакой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры...

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

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...