andrewlekar 0 20 мая, 2013 Опубликовано 20 мая, 2013 · Жалоба Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры загружают софт с фиксированного адреса и стартуют независимо от основного приложения (по кнопке или перемычке). Мне же хочется, чтобы прямо из USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку. У меня созрела вот такая схема бутлоадера: Загрузка новой прошивки происходит при работающем приложении, а новая прошивка спокойно заливается в свободную область памяти. После загрузки ещё одна область флэша патчится и меняет местами указатель на новую и на старую прошивки. При сбросе проца бут проверяет наличие прошивки по основному адресу и по запасному в случае сбоя. Всё это должно работать при условии позиционно независимого кода прошивки. Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)? Прокомментируйте предложенную схему работы бутлоадера. В обычных бутах не устраивает, что для прошивки приходится что-то дополнительно нажимать на плате и то, что устройство перецепляется к ПК (требует повторного подключения). Для сравнения, в U-Boot этого не требуется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*ZEVS* 0 20 мая, 2013 Опубликовано 20 мая, 2013 · Жалоба USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку У меня созрела вот такая схема бутлоадера: Загрузка новой прошивки происходит при работающем приложении, а новая прошивка спокойно заливается в свободную область памяти. Как то эти два предложения противоречат друг с другом. Вам нужно либо бут (это маленькая программка которая только умеет загружать основную программу и выполнять минимальные требования) либо вместо бута уже полноценное приложение которое умеет принимать и прошивать новую прошивку. В случае с бутом как на меня это более хороший вариант так как программка бута маленькая и ее отладить намного проще. После чего она не изменяется а только обновляется основная программа. Кто-нибудь работал с позиционно независимыми прошивками (IAR мой софт с ходу не смог собрать как позиционно независимый)? Вы хотите скомпилить так программу для контроллера что бы она работала неважно с какого адреса ее залили в контроллер при этом сама прошивка не должна меняться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 20 мая, 2013 Опубликовано 20 мая, 2013 · Жалоба ...Кто-нибудь работал с позиционно независимыми прошивками... На меге128 такой делал. На STM пошёл дальше - ввёл версионность, патч и апгрэйд в прошивки(по форточной терминологии). Основная заковыка - группировать в одном месте межблочные переходы(ну типа аля хедер DLL). Сами переходы в группы. Группы по фиксированным адресам, либо по подписи. На мегах делал на азме - более муторно. На сях(STM) попросче выходит (листинг). Откуда грузиться(канал) - фиолетово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 20 мая, 2013 Опубликовано 20 мая, 2013 · Жалоба Вы хотите скомпилить так программу для контроллера что бы она работала неважно с какого адреса ее залили в контроллер при этом сама прошивка не должна меняться? Да. Впрочем, боюсь на две копии софта не хватит флэша, поэтому придётся откатиться к традиционной схеме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 20 мая, 2013 Опубликовано 20 мая, 2013 · Жалоба Как то эти два предложения противоречат друг с другом. Вам нужно либо бут (это маленькая программка которая только умеет загружать основную программу и выполнять минимальные требования) либо вместо бута уже полноценное приложение которое умеет принимать и прошивать новую прошивку. В случае с бутом как на меня это более хороший вариант так как программка бута маленькая и ее отладить намного проще. После чего она не изменяется а только обновляется основная программа. Есть еще вариант, на процах с достаточным ОЗУ: 1) бут компилиться для работы в ОЗУ, потом его бинарник подстыковывается любым образом в основную программу как массив данных. 2) в основной программе, при выборе апдейта прошивки - бут перегружается в ОЗУ и ему передается управление. Основных достоинств этого метода два: 1) нет проблем с теми процами, которые не могут выплолнять програму из флеш и одновременно писать в эту флеш (в другие блоки, естественно). 2) поскольку бут физически находится в основной программе. при ее апдейте бут тоже апдейтится. Недостаток вроде только один - сбой питания или передачи данных в процессе записи может привести к полной неработоспособности устройства. Но это можно обойти различными методами (например еще один неизменный супербут). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*ZEVS* 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба Недостаток вроде только один - сбой питания или передачи данных в процессе записи может привести к полной неработоспособности устройства. Этот недостаток ставит крест на всех преимуществах. Так как реанимировать мобильное устройство почти всегда дороже чем оно стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры загружают софт с фиксированного адреса и стартуют независимо от основного приложения (по кнопке или перемычке). Мне же хочется, чтобы прямо из USB приложения на ПК можно было перевести устройство в режим бута и тут же безопасно залить свежую прошивку. а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdog При старте бута в самом начале проверяем magic word и делаем что нужно или стартуем приложение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба а что мешает в приложении записать по определенному адресу в RAM некое magic word и рестартнуть проц чем-то, например, через watchdogРестартануть проц програмным сбросом. При старте бута проверить причину рестарта в соответствующем регистре и если это был программный сброс - значит приложение попросило об обновлени. По окончании загрузки сброситься собакой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorle 0 22 мая, 2013 Опубликовано 22 мая, 2013 · Жалоба Нужно сделать очередной USB бутлоадер, но с некоторыми особенностями. Имеющиеся в природе бутлоадеры... Не по вашему вопросу, но раз уж здесь собрались специалисты по USB loaderам. Есть небольшая тестовая плата с STM32F103C8 (64 К флэша, 20К ОЗУ). Можете дать ссылку на готовый проект простейшего USB bootloaderа? Желательно, чтобы имиджи можно было загружать просто копированием. Раз уж для вас это пройденный этап. Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться