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

 
 
> Опять изобретать велосипед?, Bootloader STM32F103 IAR EEPROM.
misyachniy
сообщение Jun 15 2014, 08:30
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Есть уже готовый проект. Теперь к нему нужно прикрутить возможность обновления ПО в приложении.

Предполагается 2(4) метода получения ПО в EEPROM
1) По USB в штатном/аварийном режиме.
2) По FTP через GPRS в штатном/аварийном режиме.

В найденых мною примерах bootloader пишется и компилируется отдельно. Программа пишется отдельно и компилируется по разному, для отладки и для загрузки через бутлоадер.

Прием данных в EEPROM возможен как при обновлени так при при отказе соновной прошивки, следовательно нецелесообразно в бутлоадере и а основной программе дублировать функции для работы USB, GPRS, EEPROM.

Bootloader и основную пограмму можно положиь в разных секциях flash и компилировать один проект.
Затем с двоичного файла отрезать нужный кусок.

В сети не нашел подобных вариантов. Очевидно что есть скрытые (или очевидные :-) недостатки такого метода.
Какие именно недостатки?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
jcxz
сообщение Jun 15 2014, 09:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Компилировать как один проект нельзя - как же вы потом отрежете? Там ведь возможны перекрёстные ссылки.
Например: функция a() используется и в основной программе и в загрузчике. Естественно, что компилятор не будет (и не сможет) делать две её копии.
По-любому надо два разных проекта, которые и собирать по-отдельности. И линковать в разные области flash.
А уж готовые бинарники можно и склеить при желании.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 15 2014, 09:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(misyachniy @ Jun 15 2014, 11:30) *
Какие именно недостатки?


"Категорический" недостаток - невозможность апгрейда совместно используемых фрагментов. Остальное - просто дополнительные хлопоты по их размещению и интерфейсу.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 15 2014, 10:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



дополнительные хлопоты sm.gif
Ну если так можно назвать переписывание стандартного си-стартапа, чтобы разделить функции main(), а также
сегменты инициализации глобальных и static переменных. Это кроме всего прочего.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jun 15 2014, 11:19
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Что такое "бутлоадер EEPROM"?
Просто менять EEPROM бутлоадер не нужен. Или речь о флаш идет?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 15 2014, 11:21
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(jcxz @ Jun 15 2014, 13:21) *
дополнительные хлопоты sm.gif
Это кроме всего прочего.

Конечно, Вы правы. Но все-таки это из разряда "Если нельзя, но очень хочется - то можно...".
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jun 15 2014, 11:28
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Axel @ Jun 15 2014, 05:55) *
"Категорический" недостаток - невозможность апгрейда совместно используемых фрагментов. Остальное - просто дополнительные хлопоты по их размещению и интерфейсу.

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

Бутлоадер всегда должен быть полностью отдельным.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
kan35
сообщение Jun 15 2014, 16:27
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Проблема в том, что если вы откомпилируете с разными уровнями оптимизации кода или перейдете на новую версию компилятора, то точки входа в модули в бутлодере сползут и появится несовместимость версий и прочие беды. Если конечно функции привязать к конкретным адресам, то будет полегче, но все равно это будет неудобно. Отдельно делать банально легче технически. А хранить куски кода в бутлодере - правильно ли идеологически? - вы же как раз хотите обновлять код, а как это делать если все массивные части у вас будут залочены...

Бутлодер должен быть лаконичным, максимально надежным куском кода, который поднимет девайс из любого убитого состояния, который обновлять не будет нужно никогда. Например должно быть так: основная прошивка должна загрузить код по FTP в промежуточную память (конечно если она есть), а бутлодер уже из этой памяти взять код, проверить на целостность и уже потом прошить.

Сообщение отредактировал kan35 - Jun 15 2014, 16:29
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 15 2014, 17:45
Сообщение #9


Гуру
******

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



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

Достаточно сделать режим загрузки бутлоадера.
1. по флагу в памяти или горячей перезагрузки с флагом в РАМе
2. по специальной команде в начале загрузки (зажатая кнопка, или команда по порту и т.д.)
3. по отсутствию валидной прошивки (контрольная сумма, код безопасности и так далее.

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

Загрузчик примитивен, без инициативы, а значит может применяться во всех ваших прочих устройствах, не зависимо от того что они делают. Мы уже такой загрузчик не глядя в приборы втыкаем...
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jun 16 2014, 00:20
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(kan35 @ Jun 15 2014, 12:27) *
Бутлодер должен быть лаконичным, максимально надежным куском кода, который поднимет девайс из любого убитого состояния, который обновлять не будет нужно никогда. Например должно быть так: основная прошивка должна загрузить код по FTP в промежуточную память (конечно если она есть), а бутлодер уже из этой памяти взять код, проверить на целостность и уже потом прошить.

Угу. А потом эта загруженная программа откажется работать. И прощай фтп


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 16 2014, 04:52
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(A. Fig Lee @ Jun 16 2014, 03:20) *
Угу. А потом эта загруженная программа откажется работать. И прощай фтп

Вполне вероятная перспектива. В реальности технология "Семь раз отмерь..." не всегда реализуема и перекладывание части функций загрузчика на основную программу (что, собственно, и предусматривает концепция "лаконичности") - прямой путь к неприятностям.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 16 2014, 06:52
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



biggrin.gif Имеет право на жизнь и такой вариант, какой вы описали. Но он слишком хлопотный. Например в ПЛК сименс можно заменить даже отдельные процедуры. Причём прямо на лету. Правда при этом хранятся не только копии программ, но и копии данных. Требуется полное совпадение данных. Они определённым образом обезличены, по отношению к другим модулям. Ну и так далее ... wink.gif
Короче, если не готовы продумать все эти детали и подробности, то значительно проще, использовать независимый бут и независимое приложение. Пусть там что-то и будет дублироваться. В конечном итоге, работа бута состоит только в загрузке приложения. И он может быть даже неэфективным. Может годами не модифицироваться. Необходимо чтобы он просто выполнял свою функцию. А вот приложение, может непрерывно совершенствоваться.
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Jun 19 2014, 16:10
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Взял пример AN2557 переделал прием данных по UART в чтение из EEPROM.

Увеличил размер под bootloader в проекте bootloader-а
Код
#define ApplicationAddress    0x8004000

И подкорректировал stm32f10x_flash_offset.icf
Код
define symbol __ICFEDIT_region_ROM_start__ = 0x08004000;

Скомпилировал пример и загрузил в EEPROM.

bootloader корректно стирает Program memory, пишет в нее программу но не запускает приложение.

Не проходит проверка:
Код
    // Test if user code is programmed starting from address "ApplicationAddress"
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);
      Jump_To_Application();
    }

По ApplicationAddress у меня храняться байты 00 04 00 20
Что переводиться в unsigned int как 0x20000400
После наложения маски 0x20000000 условие должно выполняться и запускаться программа, но отладчик пропускает выполнеие
и вываливается на конец программы
while (1)
{}


Почему7
Go to the top of the page
 
+Quote Post
x893
сообщение Jun 19 2014, 17:19
Сообщение #14


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Чудес не бывает - смотрите отладчиком.
Делал бутлодер и с поддержкой GPRS и полностью автономный.
Загрузка только измененными кусками и полностью.
Всё работает так как и задумано.
Никаких проблем с процессором не возникало ни разу.
Просто надо продумать всё заранее.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jun 21 2014, 01:15
Сообщение #15


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

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



Цитата(SasaVitebsk @ Jun 16 2014, 10:52) *
...В конечном итоге, работа бута состоит только в загрузке приложения.....


сделал просче - бут обеспечивает только старт рабочей версии. Всё остальное (каналы прихода прошивки, её обработка и т.д..)
делает сама прошивка. Т.к. во флеше хранится более чем одна рабочая копия, то откатиться на устойчивую версию в любой
момент времени - труда не составляет.

Go to the top of the page
 
+Quote Post

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

 


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


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