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

 
 
> Самозагрузчик
inventor
сообщение Apr 7 2016, 06:34
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Подскажите как правильно сделать вот что:

имеется какой то прибор с SD картой на проце STM32
я хочу сделать для пользователя возможность самому менять прошивку.
делал такие вещи для других процов,
с ST возникли некоторые вопросы.

предположим - нужно поменять прошивку прибора,
саму прошивку - бинарник заливаю в корень SD карты.
при включении питания маленькая программа, loader смотрит:
есть ли файл с определенным именем на SD и если есть, то
записывает его в определенный раздел внутренней flash памяти
далее после того как успешно записал бинарник на flash,
стирает его на SD карте. - передает ему управление.
если файла bin нет - то loader просто передает управление программе.

саму программу Loader я хочу разместить
по адресу Flash 0x08000000
а рабочая прошивка, предположим, будет работать с адреса 0x08001000
после того, как бинарник записан по адресу 0x08001000
как мне LOADER - ом передать ему управление?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Apr 7 2016, 06:51
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(inventor @ Apr 7 2016, 09:34) *
после того, как бинарник записан по адресу 0x08001000
как мне LOADER - ом передать ему управление?


Самый лучший способ IMHO - сделать хардварный reset с помощью watchdog!
лоадер уже не обнаружит прошивку и передаст управление...

Но есть еще нюанс - для того что бы лоадеру обнаружить файл на SD, необходимо частично проинитить периферию..., а передавать управление основной программе после этого не хорошо!
Я ставлю метку в озу по определенному адресу (типа 0x55AAAA55) и если лоадер ее обнаруживает, то стирает и передает управление основной программе (установив адрес таблицы прерываний кончено)
Go to the top of the page
 
+Quote Post
inventor
сообщение Apr 7 2016, 07:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(KRS @ Apr 7 2016, 10:51) *
Самый лучший способ IMHO - сделать хардварный reset с помощью watchdog!
лоадер уже не обнаружит прошивку и передаст управление...

Но есть еще нюанс - для того что бы лоадеру обнаружить файл на SD, необходимо частично проинитить периферию..., а передавать управление основной программе после этого не хорошо!
Я ставлю метку в озу по определенному адресу (типа 0x55AAAA55) и если лоадер ее обнаруживает, то стирает и передает управление основной программе (установив адрес таблицы прерываний кончено)


у меня вот такие вопросы, вектора должны находится по адресу 80000000
как мне сделать так чтобы у прошики эти вектора были переопределены и не накладывались
на адреса векторов у лоадера.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Apr 7 2016, 07:11
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(inventor @ Apr 7 2016, 10:05) *
у меня вот такие вопросы, вектора должны находится по адресу 80000000
как мне сделать так чтобы у прошики эти вектора были переопределены и не накладывались
на адреса векторов у лоадера.


Вся прошивка в целом линкуется с таким скриптом линкера, чтобы осталось пустое место под загрузчик. При этом вектора прошивки будут сдвинуты. Скажем на 0x8001000 - это зависит от размера загрузчика.

Есть такой регистр - VTOR, который задает положение таблицы векторов
Соответственно в загрузчике перед стартом прошивки его надо скорректировать, выставить стек и перейти по адресу сброса

Код
#define PO_START 0x8001000
SCB->VTOR = PO_START;
__set_MSP(*(uint32_t*)PO_START);
__DMB();

typedef void (* pf)();
(*((pf*)(PO_START+4)))();
Go to the top of the page
 
+Quote Post
inventor
сообщение Apr 7 2016, 07:46
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



то есть я делаю в файле линкера для прошивки исправления:
define symbol __ICFEDIT_intvec_start__ = 0x08001000;
define symbol __ICFEDIT_region_ROM_start__ = 0x08001000;
про компиляции программы моя программа и векторы должны начинаться с адреса 0x08001000

теперь в лоадере я должен передать управление по новому адресу вектора сброса: 0x08001000
правильно я понял?

вернее вектор старта + 4, там вроде в начале адрес стека идет

Сообщение отредактировал IgorKossak - Apr 7 2016, 18:33
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 7 2016, 08:09
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(inventor @ Apr 7 2016, 10:46) *
вернее вектор старта + 4, там вроде в начале адрес стека идет

да! и стек надо тоже проинитить
у меня такой код, но это для LPC и IAR (просто у IAR в r1 = 0x1000 после присваивания VTOR)
Код
        VTOR = (unsigned)0x1000;
        asm ("ldm r1, {r0,r1}\n"
             "mov r13, r0\n"
             "mov r15, r1");
        while(1);



Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- inventor   Самозагрузчик   Apr 7 2016, 06:34
- - jcxz   Цитата(inventor @ Apr 7 2016, 12:34) саму...   Apr 7 2016, 08:07
|- - inventor   Цитата(jcxz @ Apr 7 2016, 11:07) В 0x1000...   Apr 7 2016, 10:13
- - KnightIgor   Цитата(inventor @ Apr 7 2016, 07:34) имее...   Apr 7 2016, 13:54
|- - x893   Цитата(KnightIgor @ Apr 7 2016, 16:54) У ...   Apr 7 2016, 20:01
||- - KnightIgor   Цитата(x893 @ Apr 7 2016, 21:01) Вот бы е...   Apr 8 2016, 09:26
|- - kolobok0   Цитата(KnightIgor @ Apr 7 2016, 16:54) У ...   Apr 7 2016, 21:06
|- - Непомнящий Евгений   Цитата(kolobok0 @ Apr 8 2016, 00:06) в св...   Apr 8 2016, 05:37
|- - kolobok0   Цитата(Непомнящий Евгений @ Apr 8 2016, 08...   Apr 8 2016, 14:07
|- - Kabdim   Цитата(kolobok0 @ Apr 8 2016, 17:07) - за...   Apr 12 2016, 13:11
|- - kolobok0   Цитата(Kabdim @ Apr 12 2016, 16:11) А вот...   Apr 12 2016, 14:26
- - romas2010   Цитата(inventor @ Apr 7 2016, 09:34) Подс...   Apr 7 2016, 15:07
- - bugdesigner   Вот мой скелет бутлоадераю Выделено под него 16К ф...   Apr 8 2016, 09:55
- - inventor   Сделал, но чего то не получается запустить основну...   Apr 12 2016, 12:44
|- - scifi   Цитата(inventor @ Apr 12 2016, 15:44) Я в...   Apr 12 2016, 12:52
||- - inventor   Цитата(scifi @ Apr 12 2016, 15:52) А попо...   Apr 12 2016, 13:12
||- - scifi   Цитата(inventor @ Apr 12 2016, 16:12) ток...   Apr 12 2016, 13:37
|- - KRS   Цитата(inventor @ Apr 12 2016, 15:44) Код...   Apr 12 2016, 14:26
|- - aaarrr   Цитата(KRS @ Apr 12 2016, 17:26) Во первы...   Apr 12 2016, 14:49
|- - scifi   Цитата(aaarrr @ Apr 12 2016, 17:49) Где? ...   Apr 12 2016, 15:03
||- - zltigo   QUOTE (scifi @ Apr 12 2016, 18:03) Ассемб...   Apr 13 2016, 08:03
||- - scifi   Цитата(zltigo @ Apr 13 2016, 11:03) Ассем...   Apr 13 2016, 08:10
||- - KnightIgor   Цитата(scifi @ Apr 13 2016, 09:10) Я ж не...   Apr 13 2016, 09:00
||- - scifi   Цитата(KnightIgor @ Apr 13 2016, 12:00) О...   Apr 13 2016, 09:41
||- - zltigo   QUOTE (scifi @ Apr 13 2016, 12:41) А, ну ...   Apr 13 2016, 09:47
||- - scifi   Цитата(zltigo @ Apr 13 2016, 12:47) В дан...   Apr 13 2016, 09:50
||- - zltigo   QUOTE (scifi @ Apr 13 2016, 12:50) Вы сво...   Apr 13 2016, 10:03
|||- - scifi   Цитата(zltigo @ Apr 13 2016, 13:03) Абсол...   Apr 13 2016, 10:14
||- - Сергей Борщ   QUOTE (scifi @ Apr 13 2016, 11:50) Все уж...   Apr 13 2016, 11:14
|- - KRS   Цитата(aaarrr @ Apr 12 2016, 17:49) По-мо...   Apr 12 2016, 15:41
|- - aaarrr   Цитата(KRS @ Apr 12 2016, 18:41) Нет - за...   Apr 12 2016, 16:49
|- - scifi   Цитата(aaarrr @ Apr 12 2016, 19:49) А я -...   Apr 13 2016, 06:59
- - inventor   Сделал самозагрузчик, забыл вызвать функцию NVIC_...   Apr 13 2016, 06:49
|- - KnightIgor   Цитата(inventor @ Apr 13 2016, 07:49) вот...   Apr 13 2016, 07:54
- - ViKo   Коль все предъявили, тогда и я...: Код/* Адрес ...   Apr 13 2016, 10:21
|- - scifi   Цитата(ViKo @ Apr 13 2016, 13:21) Коль вс...   Apr 13 2016, 10:35
|- - ViKo   Цитата(scifi @ Apr 13 2016, 13:35) Выше б...   Apr 13 2016, 10:43
|- - aaarrr   Цитата(scifi @ Apr 13 2016, 13:35) Выше б...   Apr 13 2016, 16:28
- - inventor   В догонку. все работает, загрузчик загружает, с од...   Apr 22 2016, 18:59
- - scifi   Цитата(inventor @ Apr 22 2016, 21:59) есл...   Apr 22 2016, 19:13


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

 


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


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