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

 
 
> STM32. Собственный бутлоадер
Sidoroff
сообщение Nov 27 2012, 08:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 3-07-06
Пользователь №: 18 536



Работаю в Keil, микроконтроллер STM32F407ZGT.
Хочу написать собственный бутлоадер. Как работает флешка и нужная мне связь, разобрался.
Но столкнулся с одной проблемой: не могу найти, как разместить код, написанный на С
в заранее известных областях встроенной флешки и это проконтролировать,
чтобы бутлоадер не пытался перезаписать сам себя. В свое время писал на AVR на
ассемблере, там такой проблемы не было, можно было точно указать, где размещать код,
и загрузчик просто лежал в неизменяемой части программы.

Можно ли решить проблему именно так?

Или есть более простое решение?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
MBR
сообщение Nov 27 2012, 09:03
Сообщение #2


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

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Для си тоже есть возможность размещать функции в определенных секциях. Синтаксис зависит от компилятора.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Nov 27 2012, 09:44
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (Sidoroff @ Nov 27 2012, 17:55) *
Можно ли решить проблему именно так?

Или есть более простое решение?

Именно так проблема и решается rolleyes.gif
Вам прямой путь в справку Кейла по линкеру (Linker). Готовите код загрузчика - размещаете его в соответствующей секции, готовите код приложения - компилируете его для работу в своей секции (адресном пространстве). Справка у Кейла очень даже не плохая. Примеры загрузчиков - имеются. В инете под Кейл найти, полагаю, не составит труда.
Удачи!!! rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 27 2012, 12:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Sidoroff @ Nov 27 2012, 12:55) *
Но столкнулся с одной проблемой: не могу найти, как разместить код, написанный на С в заранее известных областях встроенной флешки и это проконтролировать, чтобы бутлоадер не пытался перезаписать сам себя.

Ничего не понимаю. При каком сценарии загрузчик может переписать сам себя?
Могу предположить, что у вас загрузчик и основная программа линкуются вместе. Если так, то это ужасно. Они должны быть разными проектами.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Nov 27 2012, 13:49
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Полностью согласен с scifi. Нано 2 разных проекта и тогда не надо по доке линка лазить. Просто в кейле указать по какому адресу грузить. Далее в ассемблерном файле указать нужный адрес перехода. Не забыть про таблицу векторов, она то же может переключаться. По крайне мере у меня все так и работает и ни с какими секциями я не заморачивался.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Nov 28 2012, 10:01
Сообщение #6


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (vlad_new @ Nov 27 2012, 21:49) *
тогда не надо по доке линка лазить

Ну в доку-то все равно придется заглянуть, хотя бы чтобы понять, как разместить проект по необходимым адресам.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
x893
сообщение Nov 28 2012, 16:18
Сообщение #7


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Можешь скачать как пример HID Bootloader. Часть кода (user) размещено с 0х8003000. Все в обном проекте. Файл bin получается общий - но его легко разделить на два.
http://x89300.codeplex.com/SourceControl/BrowseLatest
CMSIS-DAP\Firmware\STM32
Go to the top of the page
 
+Quote Post
MK2
сообщение Dec 3 2012, 15:57
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



можно проще решить с помощью линкера: 2 проекта - два разных флеша
Go to the top of the page
 
+Quote Post
Sidoroff
сообщение Dec 13 2012, 11:44
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 3-07-06
Пользователь №: 18 536



Всем спасибо за советы!
Разобрался с размещением в линкере Keil и сделал так:
Через встроенный бутлоадер по UART на 115200 быстро заливаю маленькую программку для RAM, 4 кбайт
(линкуется с адреса 0x20000000), стартую ее, связываюсь с ней на большой скорости по тому
же UART (на 6 мбит) и уже на большой скорости записываю любую "пользовательскую" программу
для FLASH. Вся операция вместе со стиранием занимает менее 15 секунд,
Это уже близко к пределу по документации, в отличие 2-3 минутной прошивки через ULINK-2.

Другой МК (ATtiny13) мониторит UART RX и по специальной сигнатуре формирует RESET для STM32
в режиме флешки или встроенного бутлоадера.
Tiny нужен и для других целей, поэтому все равно будет.
Кстати у STM32 прога из RAM работает медленнее, чем из флешки, удивительно...
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Dec 13 2012, 12:24
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(Sidoroff @ Dec 13 2012, 15:44) *
Кстати у STM32 прога из RAM работает медленнее, чем из флешки, удивительно...

Физические шыны команд и данных разные. Приходится перебрасывать код с одной шыны на другую. Соответственно требуется лишний такт. :-)

Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 13 2012, 13:53
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(vlad_new @ Dec 13 2012, 16:24) *
Физические шыны команд и данных разные. Приходится перебрасывать код с одной шыны на другую. Соответственно требуется лишний такт. :-)

Жуткая ересь. Читаем мануал:
Цитата
The CPU can access the system SRAM through the System Bus or through the I-Code/D-Code buses when boot from SRAM is selected or when physical remap is selected (Section 7.2.1: SYSCFG memory remap register (SYSCFG_MEMRMP) in the SYSCFG controller). To get the max performance on SRAM execution, physical remap should be selected (boot or software selection).

Если хотим быстро исполнять код из SRAM, то делаем remap. Иначе инструкции в проц пойдут через S-bus (2 такта на инструкцию), а не через I-bus (1 такт на слово).
Go to the top of the page
 
+Quote Post

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

 


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


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