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

 
 
> stm32 bootloader, разьясните новичку
batisto4ka
сообщение Apr 18 2012, 11:40
Сообщение #1


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Помогите, пожалуйста, поставить точки над i. Насколько мне понятно, в stm32 bootloader может быть использован вместо программатора. Для того, чтоб залить прошивку в контроллер, необходимо подсоединить плату с МК к компу через ком порт( по USART1 МК), подать на вход бут0 1, на бут 1 -0, загрузить бинарник, используя специальную утилиту Flash Loader Demonstrator.Это весь алгоритм?
Второй вопрос. Часто встречается в сети такое выражение, как "написать загрузчик". Что имеется в виду под этим? В каком случае нужно писать свой загрузчик и как это сделать?

Сообщение отредактировал batisto4ka - Apr 18 2012, 11:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lead_seller
сообщение Apr 19 2012, 06:41
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225



Вектора прерываний переносятся потому, что и бутлоадеру и основной прошивке как правило требуется работа с прерываниями, и необходимо выбирать какой код обработчика прерывания мы выполняем - код бутлоадера или код основной прошивки. Для этой цели у STMовского контроллера прерываний есть функция переноса таблицы векторов прерываний. При этом появляется возможность иметь отдельные наборы обработчиков прерываний для бутлоадера и для основной прошивки.
Конечно возможен вариант с одной таблицей векторов, и программным выбором какой обработчик использовать (устанавливаем флаг работает бутлоадер или основная прошивка, и по этому флагу делаем if в ветках которого расположены разные обработчики) - бутлоадера или основной прошивки (в зависимости от того что активно), но такой вариант замедляет реакцию системы на прерывания.
Вариант с переносом таблицы векторов удобней тем, что в памяти программ мы можем хранить несколько разных прошивок (естественно скомпилированных и линкованных для использования разных стартовых адресов), и на старте системы можем выбирать какой из прошивок отдавать управление. Сейчас как раз занимаюсь такой развлекухой)). Требуется шиться по CAN с оооочень низкой скоростью (порядок байтов в секунду), причем с огромной вероятностью разрывов на линии. При этом вероятность того, что устройство продолжит функционировать после неудачной перепрошивки, должна стремится к 100%.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 19 2012, 07:22
Сообщение #3


Гуру
******

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



Цитата(lead_seller @ Apr 19 2012, 12:41) *
Вектора прерываний переносятся потому, что и бутлоадеру и основной прошивке как правило требуется работа с прерываниями, и необходимо выбирать какой код обработчика прерывания мы выполняем - код бутлоадера или код основной прошивки. Для этой цели у STMовского контроллера прерываний есть функция переноса таблицы векторов прерываний. При этом появляется возможность иметь отдельные наборы обработчиков прерываний для бутлоадера и для основной прошивки.
Конечно возможен вариант с одной таблицей векторов, и программным выбором какой обработчик использовать (устанавливаем флаг работает бутлоадер или основная прошивка, и по этому флагу делаем if в ветках которого расположены разные обработчики) - бутлоадера или основной прошивки (в зависимости от того что активно), но такой вариант замедляет реакцию системы на прерывания.
Вариант с переносом таблицы векторов удобней тем, что в памяти программ мы можем хранить несколько разных прошивок (естественно скомпилированных и линкованных для использования разных стартовых адресов), и на старте системы можем выбирать какой из прошивок отдавать управление. Сейчас как раз занимаюсь такой развлекухой)). Требуется шиться по CAN с оооочень низкой скоростью (порядок байтов в секунду), причем с огромной вероятностью разрывов на линии. При этом вероятность того, что устройство продолжит функционировать после неудачной перепрошивки, должна стремится к 100%.

У нас работают тысячи устройств имеющих загрузчик (правда на LPC). Обновление прошивки - по любому интерфейсу по рабочему протоколу, при внезапной перезагрузке ничего не слетит 100%, загрузка нового ПО может быть продолжена с точки разрыва. Сбой питания возможен в любой момент хоть при загрузке прошивки хоть при обновлении её во флеш. Никакие таблицы векторов переносить не надо - на время работы загрузчика прерывания запрещены, рабочее ПО при старте само настраивает таблицу прерываний.
ПО состоит из:
1. неизменяемой части (загрузчика) в первом секторе флеш, который прошивается изначально на заводе и при удалённой прошивке не может быть перешит;
2. собственно рабочего ПО (во флеш после загрузчика).
Вся флеш (за исключением первого сектора) делится на две половины: первая - область исполняемого рабочего ПО; вторая - область хранения нового ПО, которое надо прошить.
Рабочее ПО по любому интерфейсу (или по всем включая CAN и беспроводные) принимает прошивку по рабочему протоколу устройства среди прочего обмена данными не мешая основной работе устройства.
Приём идёт в ОЗУ (так как если шить сразу во вторую половину флеши контроллера, то надо запрещать прерывания надолго, а это помешает работе основной программы).
По завершении приёма и проверки валидности прошивки, новая прошивка переписывается во вторую половину флеш контроллера и во флеш выставляется флаг требования обновления прошивки,
после чего делается RESET процу.
Стартует загрузчик, который обнаружив флаг и проверив CRC прошивки во второй половине, перешивает прошивку из второй половины флеш в первую, далее - удаляет флаг и стартует рабочее ПО из первой
половины флеш. Если загрузчик флаг не обнаруживает - значит не надо обновлять прошивку и просто передаёт управление рабочему ПО в первую половину прошивки.

Вот такой алгоритм обеспечивает 100%-надёжное удалённое обновление прошивки в устройстве по рабочему протоколу, не боящееся неожиданных сбоев питания и с возможностью широковещательного
обновления ПО.
Если в устройстве есть внешняя энергонезависимая память (SPI-флеш к примеру), то можно обойтись без хранения принимаемой прошивки во второй половине флеш контроллера и хранить её в этой памяти.

Цитата(Danis @ Apr 19 2012, 13:04) *
Вероятно, можно и не переносить, но мне пока в голову не приходит, как организовать тогда взаимодействие загрузчика и основной программы.

Расположите с помощью компоновщика команду перехода на _c_int00 (точку входа в С-программу) с самого начала образа прошивки и передавайте управление на первый адрес прошивки.


Цитата(Danis @ Apr 19 2012, 13:04) *
Обработчики прерываний описываютсся одинаково везде.

Неправда sm.gif
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 26 2012, 07:05
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(jcxz @ Apr 19 2012, 11:22) *
Вот такой алгоритм обеспечивает 100%-надёжное удалённое обновление прошивки в устройстве по рабочему протоколу, не боящееся неожиданных сбоев питания и с возможностью широковещательного
обновления ПО.

У вашего подхода есть минус. Представьте ситуацию - загруженная прошивка в девайс имеет правильную crc, но сама по себе так испорчена, что не позволяет загрузить новую прошивку.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 26 2012, 08:07
Сообщение #5


Гуру
******

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



Конечно перед заливкой, надо провести полные испытания новой прошивки.
Ваши предложения как обойти этот минус?
Учтите, что рабочий интерфейс в общем случае у нас может быть сложным - сокет TCP/IP поверх Ethernet или GSM или ZigBee и т.п., т.е. - канал, для которого нельзя задать конфигурационные параметры по умолчанию.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 26 2012, 12:08
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(jcxz @ Apr 26 2012, 12:07) *
Ваши предложения как обойти этот минус?

По-моему обойти это можно только, если неизменяемый загрузчик в первом секторе флеш, зашиваемый вами на заводе, будет иметь возможность "засасывать" прошивку из вне.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 26 2012, 13:59
Сообщение #7


Гуру
******

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



Цитата(Lotor @ Apr 26 2012, 18:08) *
По-моему обойти это можно только, если неизменяемый загрузчик в первом секторе флеш, зашиваемый вами на заводе, будет иметь возможность "засасывать" прошивку из вне.

Каким образом?
Учтите мои требования по интерфейсам, приплюсуйте сюда необходимость реализации некоего рабочего протокола обмена (довольно сложного) в бутлоадере, необходимость определения параметров конфигурации каналов связи (формат этой конфигурации каналов связи может от прошивки к прошивке поменяться и бутлоадер должен заранее знать какой он был в прошлом и будет в будущем sm.gif
Т.е. - вам придётся еще раз реализовать все те функции, что есть в рабочем ПО + необходимо как-то определить, что основное рабочее ПО функционирует неверно
(а ведь определить это бутлоадеру будет очень сложно, раз на этапе тестирования новой прошивки вы сами не выявили её неработоспособности, значит эту неработоспособность очень сложно даже вам определить не говоря уже о бутлоадере sm.gif
Таким образом вам придётся написать бутлоадер значительно сложнее самого рабочего ПО! Значит если у нас рабочее ПО перед пуском в серию должно пройти опытную эксплуатацию на объекте как минимум месяц, то и такой бутлоадер тем более надо ставить на опытную эксплуатацию. Только как вы будете его отлаживать, ставить на опытную эксплуатацию на объект и УДАЛЁННО ОБНОВЛЯТЬ??? smile3046.gif
Таким образом - приходим к абсурдности этой идеи wink.gif

А если вы о простом интерфейсе для обновления ПО, не подразумевающем использование различных каналов связи с переменной конфигурацией, то по-моему это уже есть в самом проце в ROM изначально - у NXP в её LPC есть ISP через UART.

Цитата(lead_seller @ Apr 26 2012, 18:52) *
Раздумывал над таким вариантом. Придумал такой вариант тестирования прошивки: в самой прошивке пишем функцию и располагаем ее по четко указанному адресу памяти программ, задача функции получить какое-нибудь число, выполнить некие действия (например, какие то арифметические действия) и вернуть ответ. Перед загрузкой основной прошивки бутлоадер сделает вызов этой функции с какими-то данными, получит от нее результат, выполнит такие же операции с этим же набором данных сам, сравнит результаты, если результаты совпадут то прошивка будет считаться валидной. Получится эдакий аналог системы пароль-отзыв.
Конечно, от необнаруженных при помощи CRC ошибок в прошивке это может и не спасти (если ошибки в прошивке есть, а сама функция-ключ будет работоспособной), но хотя бы спасет от заливки "левых" прошивок и выполнения устройством непредусмотренных действий.

Всё то же самое, но гораздо лучше реализует обычное CRC всей прошивки. Ведь вы предлагаете контролировать малую часть прошивки (функцию), а я - всю прошивку.
А спасение от заливки левых прошивок в моём способе делает бутлоадер, проверяя эту самую CRC перед обновлением поверх рабочей. Считать CRC генерируемой прошивки должен линковщик, благо к примеру в IAR-е это есть. Либо сторонее ПО - автоматом следующим шагом после линковки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- batisto4ka   stm32 bootloader, разьясните новичку   Apr 18 2012, 11:40
- - lead_seller   Бутлоадер (термин "загрузчик" имеет неск...   Apr 18 2012, 11:52
- - KnightIgor   Цитата(batisto4ka @ Apr 18 2012, 12:40) П...   Apr 18 2012, 11:53
- - batisto4ka   Спасибо всем, кто откликнулся. Подскажите, где мож...   Apr 18 2012, 11:57
|- - nicks80   Цитата(batisto4ka @ Apr 18 2012, 15:57) С...   Apr 18 2012, 13:12
- - batisto4ka   И еще хотелось бы уточнить, есть отладочная плата ...   Apr 18 2012, 13:16
- - lead_seller   Собственно ответы: 1. да 2. нет. Заводской бутлоа...   Apr 18 2012, 20:22
|- - scifi   Цитата(lead_seller @ Apr 19 2012, 00:22) ...   Apr 18 2012, 20:45
||- - Danis   Цитата(scifi @ Apr 19 2012, 00:45) +1. Пл...   Apr 18 2012, 23:38
|- - batisto4ka   Цитата(lead_seller @ Apr 19 2012, 00:22) ...   Apr 19 2012, 05:44
|- - Danis   Цитата(batisto4ka @ Apr 19 2012, 08:44) 1...   Apr 19 2012, 07:04
|- - KRS   Цитата(Danis @ Apr 19 2012, 10:57) таблиц...   Apr 19 2012, 07:07
||- - batisto4ka   Цитата(jcxz @ Apr 19 2012, 11:22) 1. неиз...   Apr 19 2012, 07:26
|||- - Danis   Цитата(batisto4ka @ Apr 19 2012, 10:26) Н...   Apr 19 2012, 07:31
|||- - jcxz   Цитата(batisto4ka @ Apr 19 2012, 13:26) 1...   Apr 19 2012, 07:34
||- - Danis   Цитата(jcxz @ Apr 19 2012, 10:22) Неправд...   Apr 19 2012, 07:27
||- - Lotor   Цитата(jcxz @ Apr 26 2012, 17:59) Таким о...   Apr 27 2012, 04:23
||- - jcxz   Цитата(Lotor @ Apr 27 2012, 10:23) Абсурд...   Apr 27 2012, 05:01
||- - Lotor   Цитата(jcxz @ Apr 27 2012, 09:01) Или Вы ...   Apr 27 2012, 05:17
||- - jcxz   Цитата(Lotor @ Apr 27 2012, 11:17) Зачем ...   Apr 27 2012, 05:33
||- - Lotor   Цитата(jcxz @ Apr 27 2012, 09:33) Если вс...   Apr 27 2012, 05:59
|- - Marto   Цитата(lead_seller @ Apr 19 2012, 12:41) ...   Apr 19 2012, 07:36
- - batisto4ka   Правильно ли я понимаю, что под переносом таблицы ...   Apr 19 2012, 06:49
- - lead_seller   Делаю примерно так же, но помимо текущей версии ПО...   Apr 19 2012, 07:27
|- - jcxz   Цитата(lead_seller @ Apr 19 2012, 13:27) ...   Apr 19 2012, 07:41
- - lead_seller   При каждом старте бутлоадер проверяет целостность ...   Apr 19 2012, 07:44
|- - jcxz   Цитата(lead_seller @ Apr 19 2012, 13:44) ...   Apr 19 2012, 07:48
|- - jcxz   Цитата(lead_seller @ Apr 19 2012, 13:44) ...   Apr 19 2012, 09:06
- - lead_seller   Не спорю. Вообще и при моем алгоритме тоже. Но луч...   Apr 19 2012, 07:56
- - lead_seller   У нас проблемы с настройками связи не возникают. П...   Apr 19 2012, 12:36
- - EugenyAM   Хочу привести несколько рекомендаций, основываясь ...   Apr 19 2012, 18:37
- - batisto4ka   Подскажите, как сделать безусловный переход по адр...   Apr 22 2012, 17:02
|- - scifi   Цитата(batisto4ka @ Apr 22 2012, 21:02) Н...   Apr 22 2012, 18:18
|- - EugenyAM   Цитата(batisto4ka @ Apr 23 2012, 00:02) П...   Apr 23 2012, 03:44
|- - batisto4ka   Цитата(EugenyAM @ Apr 23 2012, 07:44) Отв...   Apr 23 2012, 07:03
||- - EugenyAM   Цитата(batisto4ka @ Apr 23 2012, 14:03) Г...   Apr 23 2012, 09:29
|- - batisto4ka   Цитата(EugenyAM @ Apr 23 2012, 07:44) //У...   Apr 23 2012, 13:34
|- - scifi   Цитата(batisto4ka @ Apr 23 2012, 17:34) ч...   Apr 23 2012, 13:52
||- - batisto4ka   Цитата(scifi @ Apr 23 2012, 17:52) Мне во...   Apr 24 2012, 13:53
||- - scifi   Цитата(batisto4ka @ Apr 24 2012, 17:53) В...   Apr 24 2012, 13:59
||- - batisto4ka   Цитата(scifi @ Apr 24 2012, 17:59) Для эт...   Apr 24 2012, 19:17
|- - EugenyAM   Цитата(batisto4ka @ Apr 23 2012, 20:34) ч...   Apr 23 2012, 19:32
- - k000858   подскажите плиз по переходу из бутлоадера в основн...   Apr 26 2012, 06:12
|- - EugenyAM   Цитата(k000858 @ Apr 26 2012, 13:12) - мо...   Apr 26 2012, 08:31
- - lead_seller   Раздумывал над таким вариантом. Придумал такой вар...   Apr 26 2012, 12:52
- - batisto4ka   Прилагаю свой проект с функцией перехода по адресу...   Apr 26 2012, 13:00
|- - spasbyspas   Цитата(batisto4ka @ Apr 26 2012, 16:00) П...   Apr 26 2012, 17:06
|- - batisto4ka   Цитата(spasbyspas @ Apr 26 2012, 21:06) П...   Apr 27 2012, 06:36
- - batisto4ka   Помогите домучать бутлоадер. Программа бутлоадера...   May 3 2012, 07:59
|- - EugenyAM   Цитата(batisto4ka @ May 3 2012, 13:59) Я ...   May 4 2012, 03:34
|- - batisto4ka   Так все решено. На самом деле в программу, которая...   May 4 2012, 05:37
- - veteq   Вопрос по встроенному загрузчику STM, возможно ли ...   Dec 23 2013, 05:26
|- - demiurg_spb   Цитата(veteq @ Dec 23 2013, 09:26) Тут пи...   Dec 23 2013, 06:45
- - veteq   Спасибо, действительно все заработало. Основное мо...   Dec 23 2013, 10:47


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

 


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


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