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

 
 
> STM32 bootloader, написание собственного бута
ierofant
сообщение Jan 3 2012, 13:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Almaz1988   А IAP-команды переводятся же в ассемблерный код пр...   Sep 21 2012, 14:57
|- - toweroff   Цитата(Almaz1988 @ Sep 21 2012, 18:57) А ...   Sep 21 2012, 16:10
|- - _Артём_   Цитата(toweroff @ Sep 21 2012, 19:10) а в...   Sep 22 2012, 12:13
|- - toweroff   Цитата(_Артём_ @ Sep 22 2012, 16:13) Ссыл...   Sep 22 2012, 16:05
|- - _Артём_   Цитата(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 страниц V   1 2 >


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

 


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


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