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

 
 
> Самообновление bootloader AVR
MVJ
сообщение Feb 3 2011, 09:11
Сообщение #1


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



В даташитах и в AVR109 упоминается, что есть возможность для загрузчика прошивать самого себя, но детально принцип не описан. Если загрузчик занимает более одной страницы, то, очевидно, уже после прошивки первой страницы целостность программы нарушится (могут поменяться распределение памяти, адреса вызова функций), и она не будет корректно работать. Где бы что почитать по этому вопросу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dimka76
сообщение Feb 3 2011, 10:16
Сообщение #2


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Т.е. вы хотите, чтобы загрузчик обновлял сам себя.

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

2. Либо иметь область загрузчика размером (выраженном в страницах) таким, чтобы в ней помещалось два загрузчика. Далее алгоритм такой же как и в первом случае, только все действия происходят в области загрузчика.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
MVJ
сообщение Feb 3 2011, 10:54
Сообщение #3


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



Цитата(dimka76 @ Feb 3 2011, 14:16) *
1. Можно новую копию загрузчика зашить в область приложения, потом передать управление этой новой версии прошивки и она скопирует сама себя в область загрузчика.

2. Либо иметь область загрузчика размером (выраженном в страницах) таким, чтобы в ней помещалось два загрузчика. Далее алгоритм такой же как и в первом случае, только все действия происходят в области загрузчика.


1. В AVR109 (и в даташитах) сказано, что SPM команды могут выполняться только из области загрузчика
2. А как 2 загрузчика будут использовать общую область векторов прерываний, которая фьюзами устанавливается на начало области загрузчика? К тому же не всегда можно позволить выделить двойную область под загрузчик, зачастую его размер превышает половину максимального размера области загрузчика.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 3 2011, 11:06
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MVJ @ Feb 3 2011, 13:54) *
1. В AVR109 (и в даташитах) сказано, что SPM команды могут выполняться только из области загрузчика

это лок-фузами делается, там разница в том, что это NRWW секция и проц останавливается на время записи страницы.
Go to the top of the page
 
+Quote Post
MVJ
сообщение Feb 3 2011, 11:25
Сообщение #5


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



Цитата(_Pasha @ Feb 3 2011, 15:06) *
это лок-фузами делается, там разница в том, что это NRWW секция и проц останавливается на время записи страницы.

Если я правильно понял, то имеется в виду, что функция записи страницы должна находиться в NRWW секции основной программы. Но это неприменимо если размер загрузчика превышает половину максимального размера области загрузчика.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 3 2011, 11:31
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MVJ @ Feb 3 2011, 14:25) *
Если я правильно понял, то имеется в виду, что функция записи страницы должна находиться в NRWW секции основной программы.

Не обязательно. Просто обновление NRWW секции тянет за собой невозможность установки блокировки чтения и записи области загрузчика. Если в локере нет необходимости, проблем не существует.
Go to the top of the page
 
+Quote Post
MVJ
сообщение Feb 3 2011, 11:53
Сообщение #7


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



Цитата(_Pasha @ Feb 3 2011, 15:31) *
Не обязательно.

Из AVR109: "The SPM instruction can only be executed from the Boot Loader section."
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 3 2011, 12:15
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MVJ @ Feb 3 2011, 14:53) *
Из AVR109: "The SPM instruction can only be executed from the Boot Loader section."

Непонятно, зачем они это написали, ведь в реале это не так.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 3 2011, 13:01
Сообщение #9


Гуру
******

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



QUOTE (_Pasha @ Feb 3 2011, 14:15) *
Непонятно, зачем они это написали, ведь в реале это не так.
В реале это именно так. То есть из области приложения выполнить SPM можно, но толку не будет.


--------------------
На любой вопрос даю любой ответ
"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
_Pasha
сообщение Feb 3 2011, 13:36
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Feb 3 2011, 16:01) *
В реале это именно так. То есть из области приложения выполнить SPM можно, но толку не будет.

Ойц. Увидел. Значит, путь один - только макс. размер загрузчика и поддержка его двух копий. Когда-то баловался с мегой48 - там как раз бутлоадера нету - конструкция сложная и ненадежная, менять пришлось все- от стартапа до линкерскрипта, наигрался и забросил.
Go to the top of the page
 
+Quote Post
MVJ
сообщение Feb 3 2011, 13:49
Сообщение #11


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



Цитата(_Pasha @ Feb 3 2011, 17:36) *
Значит, путь один - только макс. размер загрузчика и поддержка его двух копий.

А как же таблица векторов прерываний - ведь она будет в первом бутлодере.

Сообщение отредактировал MVJ - Feb 3 2011, 13:57
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 3 2011, 14:09
Сообщение #12


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MVJ @ Feb 3 2011, 16:49) *
А как же таблица векторов прерываний - ведь она будет в первом бутлодере.

Я так понимаю, что нужно сделать некое ядро, использующее только регистры для работы и остальное ОЗУ - для содержимого страниц, туда весь код с использованием SPM и верификацию, загнать его в последние адреса, и оно сможет обновить таблицу векторов. Но размеров минимального бутлоадера может оказаться маловато для такого ядра.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 3 2011, 14:21
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Непонятно: зачем нужно обновлять bootloader? Ну, приложение - ясно, но - bootloader...

Но, если это всё же кому-то нужно, то, imho, сделать это "дешевле" в два приёма.
1. Загружается в Application Section программа загрузки bootloader'а.
2. Эта программа зашивает уже сам загрузчик.

Проблема с SPM - надуманная: достаточно в конце области BLS иметь код - типа функции Do_spm из примеров загрузчиков от Atmel. При необходимости программа из Application Section к нему обращается по заранее известному адресу...
Go to the top of the page
 
+Quote Post
MVJ
сообщение Feb 4 2011, 10:52
Сообщение #14


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

Группа: Участник
Сообщений: 172
Регистрация: 9-10-06
Пользователь №: 21 119



Цитата(Палыч @ Feb 3 2011, 18:21) *
..сделать это "дешевле" в два приёма.
1. Загружается в Application Section программа загрузки bootloader'а.
2. Эта программа зашивает уже сам загрузчик.

Проблема с SPM - надуманная: достаточно в конце области BLS иметь код - типа функции Do_spm из примеров загрузчиков от Atmel. При необходимости программа из Application Section к нему обращается по заранее известному адресу...

Поскольку перед записью страницы ее нужно очистить, то получается, что страницу, содержащую Do_spm переписать нельзя. Тогда прошивка МК должна содержать 3 секции: приложение, загрузчик и секция с Do_spm(в концеNRWW). Первые две перекрестно обновляются, а 3-я обновлению не подлежит.

Цитата(Палыч @ Feb 4 2011, 14:13) *
Я тоже был удивлён необходимостью обновления загрузчика, но потом, в оправдание автора топика, в голову пришла мысль - для чего это может быть использовано. Например, устройство имеет несколько интерфейсов для общения с "внешним миром"

Действительно МК имеет 2 интерфеса (СОМ-порта) для общения с "внешним миром": на однои RS485, на другом GSM-модем, который получает обновление для МК и хранит его в своей памяти. С обновлением через RS485 проблем нет, а вот при обновлении с GSM-модема загрузчик должен кроме всего прочего поддерживать минимальную функциональность модема. Здесь есть некоторые ньюансы, которые, возможно будет необходимость подправить. Отсюда и такой большой размер загрузчика (~3k) и желание иметь возможность его обновлять.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 23 2011, 11:04
Сообщение #15


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(MVJ @ Feb 4 2011, 14:52) *
Действительно МК имеет 2 интерфеса (СОМ-порта) для общения с "внешним миром": на однои RS485, на другом GSM-модем, который получает обновление для МК и хранит его в своей памяти. С обновлением через RS485 проблем нет, а вот при обновлении с GSM-модема загрузчик должен кроме всего прочего поддерживать минимальную функциональность модема. Здесь есть некоторые ньюансы, которые, возможно будет необходимость подправить. Отсюда и такой большой размер загрузчика (~3k) и желание иметь возможность его обновлять.


А памяти под прошивку на плате нет? У меня тоже есть подобные устройства. Во всех загрузчик просто проверяет наличие обновления в внешней flash, обновляет основную прошивку при наличии обновления, проверяет целостность и производит восстановление при сбое. Сам он не занимается скачиванием прошивок. Для этого предусмотрена основная программа которая может принимать прошивку по gprs, USB или com-порту и ложит её в внешнюю загрузочную память.

Мне страшно представить если во время обновления загрузчика произойдёт сбой (например кратковременно пропадёт питание) - кто его (загрузчик) восстановит. Поэтому ИМХО правильней загрузчик не обновлять вообще!

Сообщение отредактировал mempfis_ - Mar 23 2011, 11:05
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 23 2011, 12:15
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(mempfis_ @ Mar 23 2011, 14:04) *
Поэтому ИМХО правильней загрузчик не обновлять вообще!
Все это понимают (в том числи и ТС), но, как я понял, у ТС загрузчик довольно сложный и "сырой", а устройства поставлять - время уже пришло. Поэтому, для возможного исправления "ляпов" в загрузчике, ТС и желает заложить функцию обновления кода самого загрузчика.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MVJ   Самообновление bootloader AVR   Feb 3 2011, 09:11
||- - Палыч   Цитата(MVJ @ Feb 4 2011, 13:52) ...то пол...   Feb 4 2011, 11:21
|||- - MVJ   Цитата(Палыч @ Feb 4 2011, 15:21) Если ра...   Feb 4 2011, 12:23
|- - dimka76   Цитата(MVJ @ Feb 3 2011, 14:53) Из AVR109...   Feb 4 2011, 06:34
|- - _Pasha   Цитата(dimka76 @ Feb 4 2011, 10:34) Дейст...   Feb 4 2011, 07:50
|- - dimka76   Цитата(_Pasha @ Feb 4 2011, 10:50) А там,...   Feb 4 2011, 08:01
|- - Палыч   Цитата(_Pasha @ Feb 4 2011, 10:50) А там,...   Feb 4 2011, 08:46
|- - _Pasha   Цитата(Палыч @ Feb 4 2011, 12:46) Если хо...   Feb 4 2011, 09:03
- - kovigor   Цитата(MVJ @ Feb 3 2011, 12:11) В даташит...   Feb 4 2011, 10:01
|- - Палыч   Цитата(kovigor @ Feb 4 2011, 13:01) Загру...   Feb 4 2011, 10:13
|- - delamoure   Цитата(Палыч @ Feb 4 2011, 12:13) Я тоже ...   Feb 14 2011, 10:38
- - _Pasha   Я тут подумал,как оно должно выглядеть. 1. Имеется...   Feb 4 2011, 16:03
- - BigallS   Есть хорошая статья по этой теме http://easyelectr...   Mar 23 2011, 10:43


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

 


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


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