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

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


Местный
***

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



Цитата(Golikov A. @ Mar 7 2015, 22:12) *
Ну тогда вам стоит написать бутлоадер хотя бы для того чтобы "не жать на кнопку Boot0."

А... я начинаю понимать. "свой" бутлодер - это не свой вариант кода, которым мы затираем заводской бутлодер, а дополнительная программа, которая располагается в начальном адресе памяти? Заводской бутлодер никуда не девается, и по прежнему может вызываться кнопкоу boot, но мы им просто не пользуемся. Я правильно понял?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 7 2015, 19:23
Сообщение #17


Гуру
******

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



да, аминьsm.gif

стандартный принцип, если что то готовое устраивает пользуемся, нет пишем свое и заменяем...



ну есть еще вариант, можно между блютусом и процом вставить ЦПЛД или маленький контроллер, который получив правильную последовательность сформирует перегрузку боевого проца с ножкой бут), процы нынче не дороги, а программа на этом маленьком проце не измена... но это ИМХО как-то через одно место)
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 19:23
Сообщение #18


Местный
***

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



Цитата(Golikov A. @ Mar 7 2015, 22:21) *
да, аминьsm.gif

алилуйа...
Ну зачем же менято было пугать вторым постом?

Побегал по настройкам Keil... Скажите, а можно ли как-то все это настроить, чтобы все так же шить через KEIL? Ну как будто у меня контроллер через Jtag шьется (я понимаю, что отладка невозможна). То есть нажал в KEIL кнопку прошивки, он через USART и залил?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 7 2015, 19:26
Сообщение #19


Гуру
******

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



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

Тем более у нас в некоторых продуктах прошивка скрыта от пользователя. То есть он просто запускает программу управления на компьютере, а она сама проверяет если железо старое, меняет ему прошивку, пользователь даже не знает что там было...
Так что в производстве можно даже прогу не лить, просто грузишь загрузчик, он как раз заливается кейлом по жетагу. И все, дальше при первом включении плата приобритет необходимую прошивку.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 19:49
Сообщение #20


Местный
***

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



Цитата(Golikov A. @ Mar 7 2015, 22:26) *
Ну наверное как-то можно...
Но я прикинул что на выяснения как у меня уйдет больше времени чем на написание внешнего терминальчика.

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


У меня мотивация другая - устройство будет вращаться))) Не хочется останавливать, подключать разъем, потом снова запускать. Ленивый я.

Поиски бутлодера под KEIL привели только к примеру под STM8...
Кто-нибудь ткнет носом, где скачать?
Go to the top of the page
 
+Quote Post
AVNN
сообщение Mar 7 2015, 19:51
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 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-ках возможно что-то подобное можно сделать.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 19:58
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 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. То есть, если ставить брейкпоинт на эту строку, отладчик его ловит, если на следюущую - не ловит.
Go to the top of the page
 
+Quote Post
AVNN
сообщение Mar 7 2015, 20:12
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 20:16
Сообщение #24


Местный
***

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



мне это ни о чем не говорит.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 7 2015, 20:25
Сообщение #25


Гуру
******

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



Вот так кошернее:
Код
static const uint16_t jump2fw[] =
{
        0xF850, 0xDB04, /* LDR.W SP, [R0], #4   */
        0x6800,         /* LDR.W R0, [R0]       */
        0x4700,         /* BX R0                */
};

((void (*)(int))(1 + (int)jump2fw))(0x1FFF0000);
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 20:53
Сообщение #26


Местный
***

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



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

Останавилваю отладчик - дизассемблер вот что показывает
0x080001D6 E7FE B HardFault_Handler (0x080001D6)WEAK]

У 103 серии адрес другой - 0x1FFFF000
Теперь не вылетает в HardFault. Лазит где-то...
Но Flashloader контакт не устанавилвает. Вообще он глючный какой-то - он и при нажатии boot0 через раз коннектится..
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 7 2015, 21:10
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 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.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 22:06
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 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, то без переписывания бутлодера ее не выключишь. И сколько не перезагружай контроллер - он все время будет в загрузчик залетать.

Кто-нибудь из присутствующих может реально в железе попробовать программно запустить встроенный загрузчик?

Что-то безрезультатно....
Go to the top of the page
 
+Quote Post
Aner
сообщение Mar 7 2015, 22:29
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Прошивать дистанционно без написания собственного загрузчика нереально, программно запустить встроенный загрузчик низя.
Еслиб было можно то что тогда ...? В том то и дело.
А все железные приблуды с удержанием, загонят случайно в загрузчик и что тогда? Только ресет, а где его взять дистанционно, аппататный? Нигде, придется ехать за сотню км и перегружать железку, неправильно это.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Mar 7 2015, 23:13
Сообщение #30


Местный
***

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



ОК, хочу пример загрузчика под KEIL
Go to the top of the page
 
+Quote Post

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

 


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


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