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

 
 
9 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Как программно загнать STM32 в бутлоадер?
Salamander
сообщение Mar 8 2015, 16:56
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Может быть можно расположить переменную по фиксированному адресу? Как это сделать?

Ау?

Сообщение отредактировал Salamander - Mar 8 2015, 16:30
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 8 2015, 17:08
Сообщение #47


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Добавить к переменной атрибут __attribute((at(0x08020000)))
Go to the top of the page
 
+Quote Post
x893
сообщение Mar 8 2015, 17:11
Сообщение #48


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

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



А можно просто документацию почитать - там гораздо более интресные есть аттрибуты. И возможности о которых даже не подозреваешь.

Сообщение отредактировал x893 - Mar 8 2015, 17:11
Go to the top of the page
 
+Quote Post
hlebn
сообщение Mar 8 2015, 17:32
Сообщение #49


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

Группа: Свой
Сообщений: 131
Регистрация: 22-10-04
Пользователь №: 963



у меня для stm32f407 обновление через стандартный лоадер так:

static void BootLoader()
{
void (*SysBootLoaderJmp)(void)=(void (*)(void))(*((uint32_t *)0x1fff0004));
__set_PRIMASK(1);
RCC_DeInit();
SysTick->CTRL=0;
SysTick->LOAD=0;
SysTick->VAL=0;
__set_PRIMASK(1);
__set_MSP(*((uint32_t *)0x1fff0000));
SysBootLoaderJmp();
while(1);
}
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 18:25
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата(ViKo @ Mar 8 2015, 21:08) *
Добавить к переменной атрибут __attribute((at(0x08020000)))
.
Спасибо, а я хотел бы еще так для себя поинтересоваться, а если в процессе компиляции компилятор присвоит какой-либо переменной некий адрес, а потом я в конце захочу указанным атрибутом этот же адрес присвоить другой переменной? Что будет? Или компилятор в первую очередь распределяет явно указанные адреса?




Погодите... но если я в бутлодере напишу __attribute((at(0x08020000))) то эта переменная очистится...
Как решить задачу?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 8 2015, 20:13
Сообщение #51


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Salamander @ Mar 8 2015, 21:25) *
а я хотел бы еще так для себя поинтересоваться, а если в процессе компиляции компилятор присвоит какой-либо переменной некий адрес, а потом я в конце захочу указанным атрибутом этот же адрес присвоить другой переменной? Что будет? Или компилятор в первую очередь распределяет явно указанные адреса?

Если конкретный адрес задан, то компилятор туда ничего от себя не поместит.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2015, 20:29
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Salamander @ Mar 8 2015, 17:43) *
Как мне в основной программе записать флажок, чтобы этот флажок был виден в бутлодыре?

Флажка тут мало: он может и случайно оказаться равен 1. Используйте 32 битное слово с каким-нибудь нетривиальным значением.
Передать есть несколько способов (в порядке нарастания сложности):
1. Записать в какой-нибудь периферийный scratchpad-регистр (скажем, регистры ключа AES у вашего процессора).
2. "Спрятать" кусочек RAM от линкера, и писать-читать по указателю.
3. Определить честную секцию с фиксированным адресом для хранения флага. Со стороны загрузчика она должна иметь какой-нибудь атрибут типа "no init", иначе при старте будет затерта нулями.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 8 2015, 20:41
Сообщение #53


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Хитро.... Я уж лучше как изначально задумывал - на HC-05 ножки буду зажигать.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 9 2015, 00:24
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Тему почти можно закрывать. С ножками от HC-05 все получилось.
В C++ Builder проект добавил VCL, обеспечивающий передачу по протоколу YModem. Вроде бы коннект состоялся, но я ему подсунул какую-то лабуду и конечный результат не оценивал.
Остается дождаться, когда китайские братья пришлют еще один HC-05 и попробовать осуществить полноценную прошивку по воздуху
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 9 2015, 06:18
Сообщение #55


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Salamander @ Mar 9 2015, 03:24) *
Остается дождаться, когда китайские братья пришлют еще один HC-05 и попробовать осуществить полноценную прошивку по воздуху


Добавлю, если хотите качественой прошивки, незабывайте про то, что передавать нужно пакетами с контр. суммой, и иметь механизм перезапросов. Не пробовал для этой цели Ymodem, делал свои протоколы.

Сообщение отредактировал mantech - Mar 9 2015, 06:19
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 9 2015, 09:13
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

1. бутлоадер должен грузиться первым, это если боевой прошивки нет позволит ее залить, также проверить ее целостность и секретность
2. флажок надо передавать через флэш, а переключение программа - бутлоадер делать через перезагрузку
3. отлаживаете программу как обычно через жетаг с 0 адреса, а потом просто компилите и собираете для работы с адреса Н для бутлоадера. Для этого в кейле можно сделать несколько режимов компиляции и сборки

Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2015, 09:22
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Mar 9 2015, 12:13) *
2. флажок надо передавать через флэш, а переключение программа - бутлоадер делать через перезагрузку

Зачем через флеш?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 9 2015, 09:55
Сообщение #58


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Golikov A. @ Mar 9 2015, 12:13) *
...
3. отлаживаете программу как обычно через жетаг с 0 адреса, а потом просто компилите и собираете для работы с адреса Н для бутлоадера. Для этого в кейле можно сделать несколько режимов компиляции и сборки

Они и есть Target-ы. Недавно спрашивали, зачем они. А вот зачем. rolleyes.gif
Лично мне из основной программы в загрузчик выходить не надо. У меня есть выключатель питания, так и попаду в сброс. Ах... флажок... Да, это можно использовать. Установил флажок, сбросился, дождался прошивки, прошился, сбросил флажок. А если не дождался, по таймауту время отсчитал, сбросил флажок, ушел в основную программу.
Размещу флажок в Backup RAM, она у меня от батарейки питается. Тогда и сброс можно делать, как хочешь.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2015, 09:56
Сообщение #59


Гуру
******

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



Цитата(aaarrr @ Mar 9 2015, 12:22) *
Зачем через флеш?

Просто он так сделал, у него заработало, и менять не стал.
Конечно, нужно проверять регистр причины сброса, и если сброс программный, то проверять флаг в ОЗУ.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 9 2015, 13:41
Сообщение #60


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Ух... только сейчас отладил всю цепочку переключений и обратно. У блютус модуля определенная задержка была при включении PIO, а я не мог понять приичны неустойчивости работы.
Буду теперь YModem из наколенного состояния перепиливать в удобоваримое.
Go to the top of the page
 
+Quote Post

9 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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