|
STM32 bootloader, написание собственного бута |
|
|
|
Jan 3 2012, 13:31
|

Участник

Группа: Участник
Сообщений: 32
Регистрация: 3-02-11
Из: Украина, Киев
Пользователь №: 62 695

|
Всем привет. Появилась задача создать бутлоадер, который будет удаленно перепрошивать контроллер. Контроллер работает в связке с gsm-модулем. Раньше опыта создания бутов не было, поэтому вопросов появилось просто масса. Во-первых, для себя я вижу 2 концепции бутлоадера, каждый со своими плюсами и минусами. 1. Основная программа качает прошивку, пишет её в определенное место флеша(например, с 16-й страницы флеша), проверяет, все ли правильно записалось, устанавливает в энергонезависимом регистре флаг, что нужно войти в бут, перезагружается, происходит вход в бутлоадер, который очищает основную программу(например, со 2й страницы флеша) и перезаписывает новую прошивку на это место и переходит на выполнение основной программы. Преимущества(+)/недостатки(-): +простота бутлоадера, в том числе не нужно инициализировать юарт и модуль из бутлоадера. +не нужно долго висеть в буте +перезагружаться в бут можно только после того, как прошивка успешно закачана -если не верно закачалась прошивка либо же не рабочая прошивка - только вручную перепрошивать -нужен МК с бОльшим обьемом Flash 2. Основная программа перегружает МК в бут, который удаляет старую прошивку, качает новую и сразу записывает её вместо старой. Преимущества(+)/недостатки(-): +бут может сам скачать новую прошивку +контроллер с меньшим обьемом флеша -сложность бута - нужно будет иниициализировать юарт, включать и инициализировать gsm модуль. -долго находиться в бутлоадере Какой вариант лучше? И, может, есть более совершенные решения? Теперь вопросы по реализации: 1. Какие подводные камни могут быть в написании бута? 2. Читал на форуме про то, что нужно перезаписывать таблицу векторов(или вектора прерываний?)? Можно об этом подробнее? Как это делается? Где об этом можно подробнее почитать, а то никакой вразумительной инфы не нашел. 3. Бут и основная программа пишуться ведь как 2 разных проекта? Отадельным вопросом - как заставить программу перейти на выполнение с определенного адреса? Где найти об этом информацию? Пробывал как в примере от ST: CODE #include "common.h" #define ApplicationAddress 0x08000073
extern pFunction Jump_To_Application; extern uint32_t JumpAddress;
/* 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(); Не получилось. На ф-ции Jump_To_Application(); уходит в hardfault Особенно не понятно, где тело этой функции, нигде в присоединенных файлах эта функция не описана. (файлы примера прикрепил к сообщению) Был бы очень благодарен, если бы кто-то подсказал, где об этом можно прочитать и где можно найти рабочие и понятные примеры. И чтобы не плодить сообщения, напишу про еще одну проблему с отладочной платой: на STM32VLDiscovery целевой контроллер работает, прошивается, но невероятно греется. Даже на 2 секунды нельзя на нем задержать палец. Очень горячий. Закороток визуально нет, да и паяльником я не притрагивался к плате , не знаю, с чего все и началось. Тестера под рукой тоже нет. Не работает светодиод LD4. Правда я не знаю, это следствие или причина нагрева, сейчас далеко от цивилизации, протестить и перепаять ничего не могу. (схема : http://www.st.com/internet/com/TECHNICAL_R...CD00267113.pdf)
Прикрепленные файлы
an2557.rar ( 1.64 мегабайт )
Кол-во скачиваний: 79
|
|
|
|
|
 |
Ответов
|
Sep 21 2012, 16:10
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Almaz1988 @ Sep 21 2012, 18:57)  А IAP-команды переводятся же в ассемблерный код при компилляции? Это ведь не отдельный язык программирования. нет, конечно в разные регистры заносятся команда, номер начального сектора, конечного сектора, адрес блока данных вызывается IAP, адрес которого заранее известен из еще одного регистра читается результат операции какая разница, каким языком это дело описать? а вот требования к выполнению IAP (как то - отключить PLL, например, или вызов IAP не из области FLASH) нужно выполнять обязательно
|
|
|
|
|
Sep 22 2012, 12:13
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(toweroff @ Sep 21 2012, 19:10)  а вот требования к выполнению IAP (как то - отключить PLL, например В UM10398 Chapter 26: LPC111x/LPC11Cxx Flash programming firmware PLL не упоминается (или я не нашёл). Ссылку приведёте? Цитата(toweroff @ Sep 21 2012, 19:10)  вызов IAP не из области FLASH В примере от NXP функции IAP вызываются из flash. Наверняка потому, что из bootloader не использует прерываний. В случае испоользования прерываний таблицу векторов и обработчики нужно поместить в RAM или запрещать прерывания на время стирания/записи flash.
|
|
|
|
Сообщений в этой теме
ierofant STM32 bootloader Jan 3 2012, 13:31 skripach Я бы делал вариант 2, т.к. в первом варианте во вн... Jan 3 2012, 16:12 Cosmojam Цитата(ierofant @ Jan 3 2012, 16:31) Проб... Jan 3 2012, 20:52 skripach Цитатаskripach, Ваш пример ничем не отличается от ... Jan 3 2012, 21:30 ierofant Спасибо, что откликнулись.
skripach
Пытаюсь в пр... Jan 3 2012, 21:33 Сергей Борщ Как у вас все сложно!
Какова структура "о... Jan 4 2012, 07:47 skripach ЦитатаТ.е. по предположению - код должен выполнить... Jan 4 2012, 00:49 ierofant Спасибо всем за помощь.
В целом получилось и пере... Jan 8 2012, 00:38 Almaz1988 Так же пишу бутлоадер, но для lpc11c24.
Столкнулся... Sep 19 2012, 09:41 _Артём_ Цитата(Almaz1988 @ Sep 19 2012, 12:41) Ст... Sep 19 2012, 10:09 Almaz1988 Спасибо Артем, ваш ответ очень помог)
По адресу 0... Sep 19 2012, 10:55 _Артём_ Цитата(Almaz1988 @ Sep 19 2012, 13:55) Не... Sep 19 2012, 11:56 Almaz1988 Исправил на reset handler.
По поводу ремапа, как ... Sep 19 2012, 12:36 Сергей Борщ QUOTE (Almaz1988 @ Sep 19 2012, 15:36) ... Sep 19 2012, 20:15 Almaz1988 Цитата(Сергей Борщ @ Sep 20 2012, 00:15) ... Sep 20 2012, 04:24 Сергей Борщ QUOTE (Almaz1988 @ Sep 20 2012, 07:24) Co... Sep 20 2012, 06:20 Almaz1988 Цитата(_Артём_ @ Sep 19 2012, 15:56) Если... Sep 20 2012, 07:18 Сергей Борщ QUOTE (Almaz1988 @ Sep 20 2012, 10:18) Ко... Sep 20 2012, 09:23 Almaz1988 2) а если размещать вектор прерываний не в RAM, а ... Sep 20 2012, 11:01 Сергей Борщ QUOTE (Almaz1988 @ Sep 20 2012, 14:01) 2)... Sep 20 2012, 11:21 Almaz1988 Т.е., когда я заливаю "Загрузчик" по адр... Sep 20 2012, 12:36 Сергей Борщ Примерно так. Процессор умеет читать вектора тольк... Sep 20 2012, 15:26 Almaz1988 А как такое решение проблемы:
Проект №1 - "За... Sep 21 2012, 06:37 Сергей Борщ QUOTE (Almaz1988 @ Sep 21 2012, 09:37) По... Sep 21 2012, 07:51 Alex19 Если Вы в загрузчике не используете прерывания - с... Sep 21 2012, 07:11 Almaz1988 Цитата(Сергей Борщ @ Sep 21 2012, 11:51) ... Sep 21 2012, 10:00 Сергей Борщ QUOTE (Almaz1988 @ Sep 21 2012, 13:00) Эт... Sep 21 2012, 10:12 Almaz1988 Цитата(Сергей Борщ @ Sep 21 2012, 14:12) ... Sep 21 2012, 12:30 Сергей Борщ QUOTE (Almaz1988 @ Sep 21 2012, 15:30) Ви... Sep 21 2012, 12:45 Almaz1988 Цитата(Сергей Борщ @ Sep 21 2012, 16:45) ... Sep 21 2012, 13:14 Сергей Борщ Возможность записи во флеш есть. Ведь как-то этот ... Sep 21 2012, 13:25    _Артём_ Цитата(toweroff @ Sep 22 2012, 19:05) Зде... Sep 22 2012, 17:00     AHTOXA Кхм...
Господа, а как обсуждение IAP от NXP относи... Sep 22 2012, 20:02      toweroff Цитата(AHTOXA @ Sep 23 2012, 00:02) Госпо... Sep 22 2012, 20:16 Almaz1988 #include "LPC11xx.h"
#include "rom_... Sep 24 2012, 08:44 AndreFF Здравствуйте!
Просьба откликнуться кто в те... Mar 2 2013, 07:01 Сергей Борщ QUOTE (AndreFF @ Mar 2 2013, 09:01) Это т... Mar 2 2013, 23:03 MK2 тоже интересовал этот вопрос, но решил следующим о... Mar 2 2013, 19:40 AndreFF Спасибо за ответы.
Пробовал следовать советам офиц... Mar 3 2013, 06:27 vovanxp Хочу сделать загрузку прошивки через веб, но непол... Dec 11 2014, 08:55 Kabdim Цитата(vovanxp @ Dec 11 2014, 11:55) В че... Dec 12 2014, 10:46  vovanxp Цитата(Kabdim @ Dec 12 2014, 14:46) Выгля... Dec 12 2014, 11:12   Kabdim Цитата(vovanxp @ Dec 12 2014, 14:12) А гд... Dec 12 2014, 13:19    vovanxp Цитата(Kabdim @ Dec 12 2014, 16:19) SCB-... Dec 12 2014, 14:56     Kabdim Цитата(vovanxp @ Dec 12 2014, 17:56) В мо... Dec 12 2014, 17:25 vovanxp Только что удалось прошить через веб, причина было... Dec 17 2014, 07:59 ViKo А можно ли утоптать загрузчик в память OTP (512 ба... Feb 19 2015, 10:44 AHTOXA А как туда будет передаваться управление? Feb 20 2015, 05:46  ViKo Цитата(AHTOXA @ Feb 20 2015, 08:46) А как... Feb 20 2015, 07:53   AHTOXA Цитата(ViKo @ Feb 20 2015, 12:53) После с... Feb 20 2015, 09:17    ViKo Цитата(AHTOXA @ Feb 20 2015, 12:17) Я вот... Feb 20 2015, 10:36     A. Fig Lee Цитата(ViKo @ Feb 20 2015, 05:36) Я вот ч... Feb 20 2015, 12:20      ViKo Цитата(A. Fig Lee @ Feb 20 2015, 15:20) П... Feb 20 2015, 13:01       A. Fig Lee Цитата(ViKo @ Feb 20 2015, 08:01) Чему по... Feb 20 2015, 14:06        ViKo Цитата(A. Fig Lee @ Feb 20 2015, 17:06) А... Feb 20 2015, 14:08         A. Fig Lee Цитата(ViKo @ Feb 20 2015, 09:08) А им за... Feb 20 2015, 14:16          ViKo Цитата(A. Fig Lee @ Feb 20 2015, 17:16) Н... Feb 20 2015, 14:33           A. Fig Lee Цитата(ViKo @ Feb 20 2015, 09:33) Он уже ... Feb 20 2015, 14:36 Сергей Борщ Видимо затем, что программу еще надо во флешку зап... Feb 20 2015, 13:29 ViKo А в чем тогда вообще великий смысл "отображен... Feb 20 2015, 13:45 x893 Особенно когда люди даже прочитать не могут, а сра... Feb 20 2015, 17:06 ViKo Может ли Cortex-M3 выполнять программу из внешней ... Feb 21 2015, 01:22 x893 Да ему пофиг какой адрес - что указано в 8000004 и... Feb 21 2015, 11:08 ViKo Ой ли? Надо по шинам посмотреть в руководстве. Feb 21 2015, 11:38 x893 Без Ой-ли. Только hardfault можно получить, если н... Feb 21 2015, 11:52 ViKo Предыдущий оратор путается в показаниях. То у него... Feb 22 2015, 12:35 SSerge Цитата(ViKo @ Feb 22 2015, 19:35) Есть у ... Feb 23 2015, 19:34 ViKo Судя по рисунку, STM32F20X может выполнять програм... Feb 24 2015, 10:58 jcxz Цитата(ViKo @ Feb 24 2015, 16:58) Судя по... Mar 2 2015, 19:43 ViKo Что-то не выходит у меня запустить скомпилированну... Feb 25 2015, 13:01 SSerge Цитата(ViKo @ Feb 25 2015, 20:01) Но осно... Feb 25 2015, 13:41  ViKo Цитата(SSerge @ Feb 25 2015, 16:41) NVIC_... Feb 25 2015, 14:00   esaulenka Цитата(ViKo @ Feb 25 2015, 17:00) Дохожу ... Feb 25 2015, 15:14    ViKo Цитата(esaulenka @ Feb 25 2015, 18:14) Ка... Feb 25 2015, 15:45     Сергей Борщ Цитата(ViKo @ Feb 25 2015, 17:45) Да вот ... Feb 25 2015, 17:58   SSerge Цитата(ViKo @ Feb 25 2015, 21:00) Дохожу ... Feb 25 2015, 17:29    ViKo Цитата(SSerge @ Feb 25 2015, 20:29) Надо ... Feb 25 2015, 18:29 ViKo Из программы-загрузчика по стартовому адресу основ... Feb 26 2015, 13:33 ViKo Перенес инициализацию FSMC (заодно и всего остальн... Feb 27 2015, 15:58 ViKo Хочу спросить... Что-то не могу после прошивки нов... Mar 9 2015, 10:10 ViKo А в отладчике после 16 с перескакивает в основную ... Mar 9 2015, 14:10 ViKo Так и не могу разобраться, что же не дает загрузчи... Mar 10 2015, 13:27 Сергей Борщ Выходите через сброс (я выхожу через сброс по соба... Mar 10 2015, 14:33 ViKo Все, исправил. Кнопка от панели передается двумя б... Mar 13 2015, 13:47 ViKo Цитата(ViKo @ Mar 13 2015, 16:47) Теперь ... Mar 23 2015, 11:29 veteq Есть проблема со входом в бутлоадер STM32L051 (cor... Mar 19 2015, 13:24 ViKo Теперь подвис на том, как размер кода задать в сам... Mar 25 2015, 08:37 Сергей Борщ Цитата(ViKo @ Mar 25 2015, 10:37) upd. ... Mar 25 2015, 09:52  ViKo Цитата(Сергей Борщ @ Mar 25 2015, 12:52) ... Mar 25 2015, 10:00 ViKo Пробую разместить строки в startup.s, чтобы знать ... Mar 25 2015, 13:27 AHTOXA Напишите перед использованием объявление:
extern u... Mar 26 2015, 05:30  ViKo Цитата(AHTOXA @ Mar 26 2015, 08:30) Напиш... Mar 26 2015, 12:36   Сергей Борщ Цитата(ViKo @ Mar 26 2015, 14:36) А exter... Mar 26 2015, 13:09    ViKo Цитата(Сергей Борщ @ Mar 26 2015, 16:09) ... Mar 26 2015, 13:14     Сергей Борщ Цитата(ViKo @ Mar 26 2015, 15:14) Я, врод... Mar 26 2015, 14:11      ViKo Цитата(Сергей Борщ @ Mar 26 2015, 17:11) ... Mar 26 2015, 14:53
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|