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

 
 
> 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
batisto4ka
сообщение Apr 19 2012, 07:26
Сообщение #4


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

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



Цитата(jcxz @ Apr 19 2012, 11:22) *
1. неизменяемой части (загрузчика) в первом секторе флеш, который прошивается изначально на заводе и при удалённой прошивке не может быть перешит;
2. собственно рабочего ПО (во флеш после загрузчика).

Ну где-то так я себе это и предсатвляю. У меня еще вот вопросы:
1. Как можно определить программно размер записанной программы в МК.
2. Как программно перегрузить МК?
Go to the top of the page
 
+Quote Post
Danis
сообщение Apr 19 2012, 07:31
Сообщение #5


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(batisto4ka @ Apr 19 2012, 10:26) *
Ну где-то так я себе это и предсатвляю. У меня еще вот вопросы:
1. Как можно определить программно размер записанной программы в МК.
2. Как программно перегрузить МК?


Вот для Вас полезная ссылочка будет
тыц


--------------------
Magic Friend
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
|||- - 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 19 2012, 11:22) Вот так...   Apr 26 2012, 07:05
||- - jcxz   Конечно перед заливкой, надо провести полные испыт...   Apr 26 2012, 08:07
||- - Lotor   Цитата(jcxz @ Apr 26 2012, 12:07) Ваши пр...   Apr 26 2012, 12:08
||- - jcxz   Цитата(Lotor @ Apr 26 2012, 18:08) По-мое...   Apr 26 2012, 13:59
||- - 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 Текстовая версия Сейчас: 21st July 2025 - 07:38
Рейтинг@Mail.ru


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