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

 
 
 
Reply to this topicStart new topic
> Bootloader STM32L (переход на исполнение в RAM), Вопрос
Нортон
сообщение Feb 19 2013, 05:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 9-04-11
Пользователь №: 64 246



Здравствуйте.

Пишу Bootloader для stm32l.

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

Принцип такой:
1. В основной программе, по приходу команды через USART о том, что появился запрос о перепрошивки, МК заканчивает все операции, отвечает по USART, что готов и начинает прием программы. Данную программу он записывает на микросхему Flash памяти.

2. После приема всей программы и проверки правильности приема - у меня есть функция которая стирает flash МК и перезаписывает из внешней flash новую программу, я расположил данную функцию по определенному адресу flash. Но естественно выполнять ее из flash не могу, она сотрет сама себя и МК повиснет. Для устранения этого я копирую, данную функцию в RAM(Я же знаю по какому адресу она находится). И пытаюсь перейти ассемблерной командой BX (BLX) на ее выполнение.

Вот в последнем действии у меня загвоздка. Во первых нашел интересный факт, что при команде BX и BLX, у адреса перехода первый бит всегда должен быть 1. Грубо говоря если вы хотите перейти по адресу 0x08000000, то команду - BX 0x08000000, давать нельзя, надо давать BX 0x08000001. (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka12545.html).

НО даже если в конце ставить эту 1, исполнение программы в RAM не хочет переходить, хотя по адресам FLASH все нормально переходит и выполняет команды.

ВОПРОС - почему не хочет переходить на выполнение в RAM? почему переходит только по адресам FLASH?
КАК мне тогда перейти на выполнение программы из RAM, по определенному адресу?

Заранее благодарен за все советы и ответы.
Go to the top of the page
 
+Quote Post
shmur
сообщение Feb 19 2013, 05:35
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 28-11-11
Пользователь №: 68 553



Проверьте чтобы в функции не использовалась абсолютная адресация.
Но зачем все так усложнять, почему не разделить основную прошивку от бутлоадера? У меня например для stm32f2 бутлоадер лежит во флеше в первых двух секторах, а прошивка в остальнах, и ничего из рама запускать не надо sm.gif Плюс можно даже в самом бутлоадере реализовать прием прошивки по уарту и немедленное прошитие во внутреннюю флеш минуя внешнюю.
PS Бит нужен для того чтобы указать процессору работать в тумб режиме, у кортексов арм режима даже вроде как и нету, так что бит всегда должен быть установлен.
Go to the top of the page
 
+Quote Post
Нортон
сообщение Feb 19 2013, 06:42
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 9-04-11
Пользователь №: 64 246



Цитата(shmur @ Feb 19 2013, 09:35) *
Проверьте чтобы в функции не использовалась абсолютная адресация.
Но зачем все так усложнять, почему не разделить основную прошивку от бутлоадера? У меня например для stm32f2 бутлоадер лежит во флеше в первых двух секторах, а прошивка в остальнах, и ничего из рама запускать не надо sm.gif Плюс можно даже в самом бутлоадере реализовать прием прошивки по уарту и немедленное прошитие во внутреннюю флеш минуя внешнюю.
PS Бит нужен для того чтобы указать процессору работать в тумб режиме, у кортексов арм режима даже вроде как и нету, так что бит всегда должен быть установлен.




Точно проверил дизассемблер, а там косяки. Это что-же мне писать на ассемблере эту функцию вручную.
А поместить загрузчик вначале, тоже отличная идея.

Спасибо за помощь.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Feb 20 2013, 04:49
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Нортон @ Feb 19 2013, 10:42) *
Это что-же мне писать на ассемблере эту функцию вручную.

Как вариант - изучить документацию к своему компилятору.

PS: Вот тут отличное описание загрузчика.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post

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

 


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


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