|
stm32 bootloader, разьясните новичку |
|
|
|
Apr 18 2012, 11:40
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Помогите, пожалуйста, поставить точки над i. Насколько мне понятно, в stm32 bootloader может быть использован вместо программатора. Для того, чтоб залить прошивку в контроллер, необходимо подсоединить плату с МК к компу через ком порт( по USART1 МК), подать на вход бут0 1, на бут 1 -0, загрузить бинарник, используя специальную утилиту Flash Loader Demonstrator.Это весь алгоритм? Второй вопрос. Часто встречается в сети такое выражение, как "написать загрузчик". Что имеется в виду под этим? В каком случае нужно писать свой загрузчик и как это сделать?
Сообщение отредактировал batisto4ka - Apr 18 2012, 11:41
|
|
|
|
|
 |
Ответов
|
May 3 2012, 07:59
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Помогите домучать бутлоадер. Программа бутлоадера записана по адресу 0x08000000. Программа пользователя пишется по адресу 0x0819000. Алгоритм бутлоадера такой: при сбросе ждем 5 секунд, если за это время по юсарту приходит нужная комбинация (короче устанавливается связь с внешним загрузчиком), то работает бутлоадер. А если связь не стуанавливается- загружается программа пользователя если она есть. Не могу понять одного, как работает эта функция Код void JumpToApplication (uint32_t ApplicationAddress) { typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t JumpAddress;
//__disable_interrupt(); // Запрещаем прерывания NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_PROG_OFFSET); if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //Проверяем, есть ли что-нибудь по адресу (там должно лежать значение SP для приложения, его кладет линкер) { //Адрес перехода из вектора Reset JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress; //Указатель на функцию перехода __set_MSP(*(__IO uint32_t*) ApplicationAddress); //Устанавливаем SP приложения Jump_To_Application(); //Запускаем приложение } }
Вроде бы все правильно работает до момента [code]JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Насколько я понимаю, JumpAddress должна содержать адрес функции SystemInit. Но, у меня получается, что формируется фообще какой-то левый адрес, в котором расположен код бутлоадера. Я так подозреваю, что причина в том, что нужно прежде чем билдить проект программы пользователя, которую нужно запистаь в память, нужно опредленным образомнастроить адрессацию где-то в настройках, то ли линковщик то ли не знаю. Потому что если брать обыкновенный проект в кейле, где настройки стоят по умолчанию, по адресу вектора сброса записывается адресс, где хранится программа, скомпилированная и слинкованная для базового адресса 0х08000000, поэтому если эту программу через программатор записать в камень и отлаживать, то адрес систем инит там будет к примеру по адресу 0х08000431. А если этот hex переслать в бутлоадер, то соответственно JumpAddress=0х08000431 будет принадлежать области порграммы бутлоадера. Подскажите, пожалуйста, правильно ли я мыслю? И как настроить проект в Кейле, чтобы все хорошо работало???))))))))))))))))
|
|
|
|
|
May 4 2012, 03:34
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 14-10-08
Из: Omsk
Пользователь №: 40 929

|
Цитата(batisto4ka @ May 3 2012, 13:59)  Я так подозреваю, что причина в том, что нужно прежде чем билдить проект программы пользователя, которую нужно запистаь в память, нужно опредленным образомнастроить адрессацию где-то в настройках, то ли линковщик то ли не знаю. Потому что если брать обыкновенный проект в кейле, где настройки стоят по умолчанию, по адресу вектора сброса записывается адресс, где хранится программа, скомпилированная и слинкованная для базового адресса 0х08000000, поэтому если эту программу через программатор записать в камень и отлаживать, то адрес систем инит там будет к примеру по адресу 0х08000431. А если этот hex переслать в бутлоадер, то соответственно JumpAddress=0х08000431 будет принадлежать области порграммы бутлоадера. Подскажите, пожалуйста, правильно ли я мыслю? И как настроить проект в Кейле, чтобы все хорошо работало???)))))))))))))))) Все рассуждения верные, как конкретно настроить в кейле не знаю, по аналогии с IAR надо смотреть опции линковщика. Надо изменить начальные адреса FLASH и Intvec на начальный адрес программы. В самой программе не забыть первым действием установить новый адрес таблицы векторов, я про это уже говорил. Код NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_PROG_OFFSET);
|
|
|
|
|
May 4 2012, 05:37
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Так все решено. На самом деле в программу, которая загружается, нужно добавить Код __set_PRIMASK(1);//отключить все прерывания /* Set the Vector Table base location at 0x08010000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x19000); //перенести таблицу векторов прерываний по адресу 0х08019000 /*Тут функции настройки NVICа*/ __set_PRIMASK(0);//включить все прерывания
Сообщение отредактировал batisto4ka - May 4 2012, 11:37
|
|
|
|
Сообщений в этой теме
batisto4ka stm32 bootloader, разьясните новичку Apr 18 2012, 11:40 lead_seller Бутлоадер (термин "загрузчик" имеет неск... Apr 18 2012, 11:52 KnightIgor Цитата(batisto4ka @ Apr 18 2012, 12:40) П... Apr 18 2012, 11:53 batisto4ka Спасибо всем, кто откликнулся. Подскажите, где мож... Apr 18 2012, 11:57 nicks80 Цитата(batisto4ka @ Apr 18 2012, 15:57) С... Apr 18 2012, 13:12 batisto4ka И еще хотелось бы уточнить, есть отладочная плата ... Apr 18 2012, 13:16 lead_seller Собственно ответы:
1. да
2. нет. Заводской бутлоа... Apr 18 2012, 20:22 scifi Цитата(lead_seller @ Apr 19 2012, 00:22) ... Apr 18 2012, 20:45  Danis Цитата(scifi @ Apr 19 2012, 00:45) +1.
Пл... Apr 18 2012, 23:38 batisto4ka Цитата(lead_seller @ Apr 19 2012, 00:22) ... Apr 19 2012, 05:44  Danis Цитата(batisto4ka @ Apr 19 2012, 08:44) 1... Apr 19 2012, 07:04   KRS Цитата(Danis @ Apr 19 2012, 10:57) таблиц... Apr 19 2012, 07:07 lead_seller Вектора прерываний переносятся потому, что и бутло... Apr 19 2012, 06:41 jcxz Цитата(lead_seller @ Apr 19 2012, 12:41) ... Apr 19 2012, 07:22  batisto4ka Цитата(jcxz @ Apr 19 2012, 11:22) 1. неиз... Apr 19 2012, 07:26   Danis Цитата(batisto4ka @ Apr 19 2012, 10:26) Н... Apr 19 2012, 07:31   jcxz Цитата(batisto4ka @ Apr 19 2012, 13:26) 1... Apr 19 2012, 07:34  Danis Цитата(jcxz @ Apr 19 2012, 10:22) Неправд... Apr 19 2012, 07:27  Lotor Цитата(jcxz @ Apr 19 2012, 11:22) Вот так... Apr 26 2012, 07:05   jcxz Конечно перед заливкой, надо провести полные испыт... Apr 26 2012, 08:07    Lotor Цитата(jcxz @ Apr 26 2012, 12:07) Ваши пр... Apr 26 2012, 12:08     jcxz Цитата(Lotor @ Apr 26 2012, 18:08) По-мое... Apr 26 2012, 13:59      Lotor Цитата(jcxz @ Apr 26 2012, 17:59) Таким о... Apr 27 2012, 04:23       jcxz Цитата(Lotor @ Apr 27 2012, 10:23) Абсурд... Apr 27 2012, 05:01        Lotor Цитата(jcxz @ Apr 27 2012, 09:01) Или Вы ... Apr 27 2012, 05:17         jcxz Цитата(Lotor @ Apr 27 2012, 11:17) Зачем ... Apr 27 2012, 05:33          Lotor Цитата(jcxz @ Apr 27 2012, 09:33) Если вс... Apr 27 2012, 05:59 Marto Цитата(lead_seller @ Apr 19 2012, 12:41) ... Apr 19 2012, 07:36 batisto4ka Правильно ли я понимаю, что под переносом таблицы ... Apr 19 2012, 06:49 lead_seller Делаю примерно так же, но помимо текущей версии ПО... Apr 19 2012, 07:27 jcxz Цитата(lead_seller @ Apr 19 2012, 13:27) ... Apr 19 2012, 07:41 lead_seller При каждом старте бутлоадер проверяет целостность ... Apr 19 2012, 07:44 jcxz Цитата(lead_seller @ Apr 19 2012, 13:44) ... Apr 19 2012, 07:48 jcxz Цитата(lead_seller @ Apr 19 2012, 13:44) ... Apr 19 2012, 09:06 lead_seller Не спорю. Вообще и при моем алгоритме тоже. Но луч... Apr 19 2012, 07:56 lead_seller У нас проблемы с настройками связи не возникают. П... Apr 19 2012, 12:36 EugenyAM Хочу привести несколько рекомендаций, основываясь ... Apr 19 2012, 18:37 batisto4ka Подскажите, как сделать безусловный переход по адр... Apr 22 2012, 17:02 scifi Цитата(batisto4ka @ Apr 22 2012, 21:02) Н... Apr 22 2012, 18:18 EugenyAM Цитата(batisto4ka @ Apr 23 2012, 00:02) П... Apr 23 2012, 03:44  batisto4ka Цитата(EugenyAM @ Apr 23 2012, 07:44) Отв... Apr 23 2012, 07:03   EugenyAM Цитата(batisto4ka @ Apr 23 2012, 14:03) Г... Apr 23 2012, 09:29  batisto4ka Цитата(EugenyAM @ Apr 23 2012, 07:44) //У... Apr 23 2012, 13:34   scifi Цитата(batisto4ka @ Apr 23 2012, 17:34) ч... Apr 23 2012, 13:52    batisto4ka Цитата(scifi @ Apr 23 2012, 17:52) Мне во... Apr 24 2012, 13:53     scifi Цитата(batisto4ka @ Apr 24 2012, 17:53) В... Apr 24 2012, 13:59      batisto4ka Цитата(scifi @ Apr 24 2012, 17:59) Для эт... Apr 24 2012, 19:17   EugenyAM Цитата(batisto4ka @ Apr 23 2012, 20:34) ч... Apr 23 2012, 19:32 k000858 подскажите плиз по переходу из бутлоадера в основн... Apr 26 2012, 06:12 EugenyAM Цитата(k000858 @ Apr 26 2012, 13:12) - мо... Apr 26 2012, 08:31 lead_seller Раздумывал над таким вариантом. Придумал такой вар... Apr 26 2012, 12:52 batisto4ka Прилагаю свой проект с функцией перехода по адресу... Apr 26 2012, 13:00 spasbyspas Цитата(batisto4ka @ Apr 26 2012, 16:00) П... Apr 26 2012, 17:06  batisto4ka Цитата(spasbyspas @ Apr 26 2012, 21:06) П... Apr 27 2012, 06:36 veteq Вопрос по встроенному загрузчику STM, возможно ли ... Dec 23 2013, 05:26 demiurg_spb Цитата(veteq @ Dec 23 2013, 09:26) Тут пи... Dec 23 2013, 06:45 veteq Спасибо, действительно все заработало. Основное мо... Dec 23 2013, 10:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|