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

 
 
> 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
 
Start new topic
Ответов
Almaz1988
сообщение Sep 19 2012, 09:41
Сообщение #2


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

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Так же пишу бутлоадер, но для lpc11c24.
Столкнулся с казалось бы элементарной проблемой - не могу прошить даже самую простую программу (моргание светодиодом) по адресу, отличному от нуля.
Т.е. если стартовый адрес во флеш-памяти ставлю 0х00000000, то программа стартует.
Стоит его поменять на, к примеру, 0х00000100 и программа не запускается.
Пишу в Keil. Адрес выставляю следующим образом:
правый клик по проекту-->Options for target-->Linker-->R/O base = 0x00000100.
Попробовал прошить из LPCXpresso, - получил ошибку "vectors still have erased values".
Спасибо за ответы
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 19 2012, 10:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Almaz1988 @ Sep 19 2012, 12:41) *
Столкнулся с казалось бы элементарной проблемой - не могу прошить даже самую простую программу (моргание светодиодом) по адресу, отличному от нуля.

Прошиваться она может и прошивается, но работать не будет.

Цитата(Almaz1988 @ Sep 19 2012, 12:41) *
Пишу в Keil. Адрес выставляю следующим образом:
правый клик по проекту-->Options for target-->Linker-->R/O base = 0x00000100.
Попробовал прошить из LPCXpresso, - получил ошибку "vectors still have erased values".
Спасибо за ответы

Этого недостаточно.
Нужна вторая программа (собственно бутлоадер), которая должна быть расположена по адресу 0, и которая запустит основное приложение. Зашить её нужно до зашивки-отладки основной программы.
Ещё момент: смещение 0x100 может и допустимо, но нежелательно - flash стирается по 4кБ за раз и получается нельзя обновить основную программу, не стирая бут. Стереть его можно, если он будет работать из ОЗУ, но это чревато.
Ставьте смещение кратное 0x1000. Для простого бута 4к достаточно, если нужно больше - увеличивайте.

P.S. ещё про boot на lpc11xx
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   Спасибо Артем, ваш ответ очень помог) По адресу 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 16:43
Рейтинг@Mail.ru


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