Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Ну тогда вам стоит написать бутлоадер хотя бы для того чтобы "не жать на кнопку Boot0." А... я начинаю понимать. "свой" бутлодер - это не свой вариант кода, которым мы затираем заводской бутлодер, а дополнительная программа, которая располагается в начальном адресе памяти? Заводской бутлодер никуда не девается, и по прежнему может вызываться кнопкоу boot, но мы им просто не пользуемся. Я правильно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба да, аминь:) стандартный принцип, если что то готовое устраивает пользуемся, нет пишем свое и заменяем... ну есть еще вариант, можно между блютусом и процом вставить ЦПЛД или маленький контроллер, который получив правильную последовательность сформирует перегрузку боевого проца с ножкой бут), процы нынче не дороги, а программа на этом маленьком проце не измена... но это ИМХО как-то через одно место) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба да, аминь:) алилуйа... Ну зачем же менято было пугать вторым постом? Побегал по настройкам Keil... Скажите, а можно ли как-то все это настроить, чтобы все так же шить через KEIL? Ну как будто у меня контроллер через Jtag шьется (я понимаю, что отладка невозможна). То есть нажал в KEIL кнопку прошивки, он через USART и залил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Ну наверное как-то можно... Но я прикинул что на выяснения как у меня уйдет больше времени чем на написание внешнего терминальчика. Тем более у нас в некоторых продуктах прошивка скрыта от пользователя. То есть он просто запускает программу управления на компьютере, а она сама проверяет если железо старое, меняет ему прошивку, пользователь даже не знает что там было... Так что в производстве можно даже прогу не лить, просто грузишь загрузчик, он как раз заливается кейлом по жетагу. И все, дальше при первом включении плата приобритет необходимую прошивку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Ну наверное как-то можно... Но я прикинул что на выяснения как у меня уйдет больше времени чем на написание внешнего терминальчика. Тем более у нас в некоторых продуктах прошивка скрыта от пользователя. То есть он просто запускает программу управления на компьютере, а она сама проверяет если железо старое, меняет ему прошивку, пользователь даже не знает что там было... Так что в производстве можно даже прогу не лить, просто грузишь загрузчик, он как раз заливается кейлом по жетагу. И все, дальше при первом включении плата приобритет необходимую прошивку. У меня мотивация другая - устройство будет вращаться))) Не хочется останавливать, подключать разъем, потом снова запускать. Ленивый я. Поиски бутлодера под KEIL привели только к примеру под STM8... Кто-нибудь ткнет носом, где скачать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaA 0 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба В заводской загрузчик на 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-ках возможно что-то подобное можно сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба В заводской загрузчик на 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. То есть, если ставить брейкпоинт на эту строку, отладчик его ловит, если на следюущую - не ловит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaA 0 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Я попробовал - контроллер куда то улетает на строчке 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба мне это ни о чем не говорит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Вот так кошернее: 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Ну да... контроллер куда-то прыгает.. Но видимо не в заводской бутлодер, поскольку программа FlashLoader не видит доступного устройства... Останавилваю отладчик - дизассемблер вот что показывает 0x080001D6 E7FE B HardFault_Handler (0x080001D6)WEAK] У 103 серии адрес другой - 0x1FFFF000 Теперь не вылетает в HardFault. Лазит где-то... Но Flashloader контакт не устанавилвает. Вообще он глючный какой-то - он и при нажатии boot0 через раз коннектится.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Я хочу прошивать дистанционно - по bluetooth (hс-05) Я бы присоединился к ответу smalcom и предложил аппаратный переход во встроенный UART загрузчик STM32F, коммуникационный протокол которого описан в документации. Прилагаю схему сброса процессора: при удержании кнопки сброса дольше чем, примерно, 1.5 секунд, и последующем (естественно) ее отпускании процессор улетает в BOOT. Подбором конденсатора С11 можно время изменить, если надо. Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Секунду... вот дока http://www.icbase.com/Promotion/download/AN2606.pdf Раздел 3.3 - таблица два. Исходя из нее в контроллерах не Value-серии встроенный загрузчик к адресу не привязан... Так может быть действительно в него нельзя программно прыгнуть? Не знаком пока с HC-05, но если он поддерживает UART, может он поддерживает и линии квитирования UART. Взяв сигнал RTS, можно завести его на NRST. Тогда и Ваша схема не нужна. Но есть одно но... если включить какую-нибудь ножку на HС-05, то без переписывания бутлодера ее не выключишь. И сколько не перезагружай контроллер - он все время будет в загрузчик залетать. Кто-нибудь из присутствующих может реально в железе попробовать программно запустить встроенный загрузчик? Что-то безрезультатно.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 3 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба Прошивать дистанционно без написания собственного загрузчика нереально, программно запустить встроенный загрузчик низя. Еслиб было можно то что тогда ...? В том то и дело. А все железные приблуды с удержанием, загонят случайно в загрузчик и что тогда? Только ресет, а где его взять дистанционно, аппататный? Нигде, придется ехать за сотню км и перегружать железку, неправильно это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 7 марта, 2015 Опубликовано 7 марта, 2015 · Жалоба ОК, хочу пример загрузчика под KEIL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться