Перейти к содержанию
    

Как программно загнать STM32 в бутлоадер?

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

А... я начинаю понимать. "свой" бутлодер - это не свой вариант кода, которым мы затираем заводской бутлодер, а дополнительная программа, которая располагается в начальном адресе памяти? Заводской бутлодер никуда не девается, и по прежнему может вызываться кнопкоу boot, но мы им просто не пользуемся. Я правильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, аминь:)

 

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

 

 

 

ну есть еще вариант, можно между блютусом и процом вставить ЦПЛД или маленький контроллер, который получив правильную последовательность сформирует перегрузку боевого проца с ножкой бут), процы нынче не дороги, а программа на этом маленьком проце не измена... но это ИМХО как-то через одно место)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, аминь:)

алилуйа...

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

 

Побегал по настройкам Keil... Скажите, а можно ли как-то все это настроить, чтобы все так же шить через KEIL? Ну как будто у меня контроллер через Jtag шьется (я понимаю, что отладка невозможна). То есть нажал в KEIL кнопку прошивки, он через USART и залил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну наверное как-то можно...

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну наверное как-то можно...

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

 

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

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

 

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

 

Поиски бутлодера под KEIL привели только к примеру под STM8...

Кто-нибудь ткнет носом, где скачать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В заводской загрузчик на 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-ках возможно что-то подобное можно сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В заводской загрузчик на 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. То есть, если ставить брейкпоинт на эту строку, отладчик его ловит, если на следюущую - не ловит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я попробовал - контроллер куда то улетает на строчке 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так кошернее:

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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну да... контроллер куда-то прыгает..

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

 

Останавилваю отладчик - дизассемблер вот что показывает

0x080001D6 E7FE B HardFault_Handler (0x080001D6)WEAK]

 

У 103 серии адрес другой - 0x1FFFF000

Теперь не вылетает в HardFault. Лазит где-то...

Но Flashloader контакт не устанавилвает. Вообще он глючный какой-то - он и при нажатии boot0 через раз коннектится..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я хочу прошивать дистанционно - по bluetooth (hс-05)

Я бы присоединился к ответу smalcom и предложил аппаратный переход во встроенный UART загрузчик STM32F, коммуникационный протокол которого описан в документации. Прилагаю схему сброса процессора: при удержании кнопки сброса дольше чем, примерно, 1.5 секунд, и последующем (естественно) ее отпускании процессор улетает в BOOT. Подбором конденсатора С11 можно время изменить, если надо. Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST.

post-49725-1425762603_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Секунду... вот дока http://www.icbase.com/Promotion/download/AN2606.pdf

 

Раздел 3.3 - таблица два. Исходя из нее в контроллерах не Value-серии встроенный загрузчик к адресу не привязан... Так может быть действительно в него нельзя программно прыгнуть?

 

 

Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST.

Тогда и Ваша схема не нужна.

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

 

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

 

Что-то безрезультатно....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Еслиб было можно то что тогда ...? В том то и дело.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...