|
|
  |
Как программно загнать STM32 в бутлоадер? |
|
|
|
Mar 7 2015, 19:19
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(Golikov A. @ Mar 7 2015, 22:12)  Ну тогда вам стоит написать бутлоадер хотя бы для того чтобы "не жать на кнопку Boot0." А... я начинаю понимать. "свой" бутлодер - это не свой вариант кода, которым мы затираем заводской бутлодер, а дополнительная программа, которая располагается в начальном адресе памяти? Заводской бутлодер никуда не девается, и по прежнему может вызываться кнопкоу boot, но мы им просто не пользуемся. Я правильно понял?
|
|
|
|
|
Mar 7 2015, 19:23
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(Golikov A. @ Mar 7 2015, 22:21)  да, аминь  алилуйа... Ну зачем же менято было пугать вторым постом? Побегал по настройкам Keil... Скажите, а можно ли как-то все это настроить, чтобы все так же шить через KEIL? Ну как будто у меня контроллер через Jtag шьется (я понимаю, что отладка невозможна). То есть нажал в KEIL кнопку прошивки, он через USART и залил?
|
|
|
|
|
Mar 7 2015, 19:49
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(Golikov A. @ Mar 7 2015, 22:26)  Ну наверное как-то можно... Но я прикинул что на выяснения как у меня уйдет больше времени чем на написание внешнего терминальчика.
Тем более у нас в некоторых продуктах прошивка скрыта от пользователя. То есть он просто запускает программу управления на компьютере, а она сама проверяет если железо старое, меняет ему прошивку, пользователь даже не знает что там было... Так что в производстве можно даже прогу не лить, просто грузишь загрузчик, он как раз заливается кейлом по жетагу. И все, дальше при первом включении плата приобритет необходимую прошивку. У меня мотивация другая - устройство будет вращаться))) Не хочется останавливать, подключать разъем, потом снова запускать. Ленивый я. Поиски бутлодера под KEIL привели только к примеру под STM8... Кто-нибудь ткнет носом, где скачать?
|
|
|
|
|
Mar 7 2015, 19:51
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 28-09-06
Из: Минск
Пользователь №: 20 776

|
В заводской загрузчик на STM32F205 вхожу так: Код #define BOOTLOADER_ADDR 0x1FFF0000
typedef void (*pFunction)(void); pFunction Jump_To_Bootloader; uint32_t JumpAddress;
JumpAddress = *(__IO uint32_t*) (BOOTLOADER_ADDR + 4); Jump_To_Bootloader= (pFunction) JumpAddress; /* Initialize Stack Pointer */ __set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDR ); Jump_To_Bootloader(); На других STM-ках возможно что-то подобное можно сделать.
|
|
|
|
|
Mar 7 2015, 19:58
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Цитата(AVNN @ Mar 7 2015, 22:51)  В заводской загрузчик на STM32F205 вхожу так: Код #define BOOTLOADER_ADDR 0x1FFF0000
typedef void (*pFunction)(void); pFunction Jump_To_Bootloader; uint32_t JumpAddress;
JumpAddress = *(__IO uint32_t*) (BOOTLOADER_ADDR + 4); Jump_To_Bootloader= (pFunction) JumpAddress; /* Initialize Stack Pointer */ __set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDR ); Jump_To_Bootloader(); На других STM-ках возможно что-то подобное можно сделать. Я попробовал - контроллер куда то улетает на строчке JumpAddress. То есть, если ставить брейкпоинт на эту строку, отладчик его ловит, если на следюущую - не ловит.
|
|
|
|
|
Mar 7 2015, 20:12
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 28-09-06
Из: Минск
Пользователь №: 20 776

|
Цитата(Salamander @ Mar 7 2015, 22:58)  Я попробовал - контроллер куда то улетает на строчке JumpAddress. То есть, если ставить брейкпоинт на эту строку, отладчик его ловит, если на следюущую - не ловит. У меня компилятор IAR. Вот что он в asm выдает Код 163 JumpAddress = *(__IO uint32_t*) (BOOTLOADER_ADDR + 4); \ 00000030 0x.... LDR.N R0,??DataTable1_4 ;; 0x1fff0000 \ 00000032 0x6841 LDR R1,[R0, #+4] \ 00000034 0x60A1 STR R1,[R4, #+8] 164 Jump_To_Bootloader = (pFunction) JumpAddress; \ 00000036 0x6061 STR R1,[R4, #+4] 165 /* Initialize Stack Pointer */ 166 __set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDR); \ 00000038 0xE003 B.N ??main_2 167 Jump_To_Bootloader(); \ ??main_2: (+1) \ 00000042 0x6800 LDR R0,[R0, #+0] \ 00000044 0xF380 0x8808 MSR MSP,R0 175 Jump_To_Application(); \ 00000048 0x4608 MOV R0,R1 \ 0000004A 0x4780 BLX R0
|
|
|
|
|
Mar 7 2015, 21:10
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Salamander @ Mar 7 2015, 19:00)  Я хочу прошивать дистанционно - по bluetooth (hс-05) Я бы присоединился к ответу smalcom и предложил аппаратный переход во встроенный UART загрузчик STM32F, коммуникационный протокол которого описан в документации. Прилагаю схему сброса процессора: при удержании кнопки сброса дольше чем, примерно, 1.5 секунд, и последующем (естественно) ее отпускании процессор улетает в BOOT. Подбором конденсатора С11 можно время изменить, если надо. Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST.
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 7 2015, 22:06
|
Местный
  
Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443

|
Секунду... вот дока http://www.icbase.com/Promotion/download/AN2606.pdfРаздел 3.3 - таблица два. Исходя из нее в контроллерах не Value-серии встроенный загрузчик к адресу не привязан... Так может быть действительно в него нельзя программно прыгнуть? Цитата Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST. Тогда и Ваша схема не нужна. Но есть одно но... если включить какую-нибудь ножку на HС-05, то без переписывания бутлодера ее не выключишь. И сколько не перезагружай контроллер - он все время будет в загрузчик залетать. Кто-нибудь из присутствующих может реально в железе попробовать программно запустить встроенный загрузчик? Что-то безрезультатно....
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|