|
stm32 bootloader, разьясните новичку |
|
|
|
Apr 18 2012, 11:40
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Помогите, пожалуйста, поставить точки над i. Насколько мне понятно, в stm32 bootloader может быть использован вместо программатора. Для того, чтоб залить прошивку в контроллер, необходимо подсоединить плату с МК к компу через ком порт( по USART1 МК), подать на вход бут0 1, на бут 1 -0, загрузить бинарник, используя специальную утилиту Flash Loader Demonstrator.Это весь алгоритм? Второй вопрос. Часто встречается в сети такое выражение, как "написать загрузчик". Что имеется в виду под этим? В каком случае нужно писать свой загрузчик и как это сделать?
Сообщение отредактировал batisto4ka - Apr 18 2012, 11:41
|
|
|
|
|
 |
Ответов
|
Apr 19 2012, 06:41
|
Участник

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

|
Вектора прерываний переносятся потому, что и бутлоадеру и основной прошивке как правило требуется работа с прерываниями, и необходимо выбирать какой код обработчика прерывания мы выполняем - код бутлоадера или код основной прошивки. Для этой цели у STMовского контроллера прерываний есть функция переноса таблицы векторов прерываний. При этом появляется возможность иметь отдельные наборы обработчиков прерываний для бутлоадера и для основной прошивки. Конечно возможен вариант с одной таблицей векторов, и программным выбором какой обработчик использовать (устанавливаем флаг работает бутлоадер или основная прошивка, и по этому флагу делаем if в ветках которого расположены разные обработчики) - бутлоадера или основной прошивки (в зависимости от того что активно), но такой вариант замедляет реакцию системы на прерывания. Вариант с переносом таблицы векторов удобней тем, что в памяти программ мы можем хранить несколько разных прошивок (естественно скомпилированных и линкованных для использования разных стартовых адресов), и на старте системы можем выбирать какой из прошивок отдавать управление. Сейчас как раз занимаюсь такой развлекухой)). Требуется шиться по CAN с оооочень низкой скоростью (порядок байтов в секунду), причем с огромной вероятностью разрывов на линии. При этом вероятность того, что устройство продолжит функционировать после неудачной перепрошивки, должна стремится к 100%.
|
|
|
|
|
Apr 19 2012, 07:22
|
Гуру
     
Группа: Свой
Сообщений: 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)  Обработчики прерываний описываютсся одинаково везде. Неправда
|
|
|
|
|
Apr 19 2012, 07:26
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Цитата(jcxz @ Apr 19 2012, 11:22)  1. неизменяемой части (загрузчика) в первом секторе флеш, который прошивается изначально на заводе и при удалённой прошивке не может быть перешит; 2. собственно рабочего ПО (во флеш после загрузчика). Ну где-то так я себе это и предсатвляю. У меня еще вот вопросы: 1. Как можно определить программно размер записанной программы в МК. 2. Как программно перегрузить МК?
|
|
|
|
|
Apr 19 2012, 07:31
|

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

|
Цитата(batisto4ka @ Apr 19 2012, 10:26)  Ну где-то так я себе это и предсатвляю. У меня еще вот вопросы: 1. Как можно определить программно размер записанной программы в МК. 2. Как программно перегрузить МК? Вот для Вас полезная ссылочка будет тыц
--------------------
Magic Friend
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|