Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32 bootloader, разьясните новичку
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Lotor
Цитата(jcxz @ Apr 27 2012, 09:01) *
Или Вы в ваших устройствах позволяете обновлять ПО кому попало без защиты канала связи???

Зачем столько эмоций, я лишь показал вам две потенциально возможных ситуации, когда назвать такую реализацию 100% надежной нельзя. А злодеи могут быть и бывшими сотрудниками вашей фирмы, которые затаили обиду. sm.gif
jcxz
Цитата(Lotor @ Apr 27 2012, 11:17) *
Зачем столько эмоций, я лишь показал вам две потенциально возможных ситуации, когда назвать такую реализацию 100% надежной нельзя.

Да я спокоен как удафф wink.gif
Цитата(Lotor @ Apr 27 2012, 11:17) *
А злодеи могут быть и бывшими сотрудниками вашей фирмы, которые затаили обиду. sm.gif

Всё решается на своём уровне - ключ доступа для обновления ПО (или методику формирования такого ключа на основании серийного номера изделия и текущего времени к примеру) знает узкий круг лиц и если произошёл такой инцидент - тут должна подключаться служба безопасности и проверять подозреваемых из этого круга.
Если все эти мероприятия выполнены в полном объёме - надёжность будет близка к 100%.
Lotor
Цитата(jcxz @ Apr 27 2012, 09:33) *
Если все эти мероприятия выполнены в полном объёме - надёжность будет близка к 100%.

Согласен, просто меня жизнь научила, что если есть пусть и маловероятная, но возможная ситуация - она случается. =)
Поэтому даже с вышеуказанными вами мерами безопасности есть шанс, что у залитой (но плохо протестированной) прошивки со временем отваливаются какие-то важные функции, включая обновление ПО. И в этом я вижу единственный минус такого подхода к загрузчику.
batisto4ka
Цитата(spasbyspas @ Apr 26 2012, 21:06) *
После компиляции выдает сообщение:
"
.\Listings\MSU_KDM-3322.axf: Warning: L6310W: Unable to find ARM libraries.
.\Listings\MSU_KDM-3322.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
"
А у вас?

Все, вопрос снят. Нужно подключить core_m3.c
batisto4ka
Помогите домучать бутлоадер.
Программа бутлоадера записана по адресу 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 будет принадлежать области порграммы бутлоадера.
Подскажите, пожалуйста, правильно ли я мыслю? И как настроить проект в Кейле, чтобы все хорошо работало???))))))))))))))))
EugenyAM
Цитата(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);

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

Код
__set_PRIMASK(1);//отключить все прерывания
/* Set the Vector Table base location at 0x08010000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x19000);     //перенести таблицу векторов прерываний по адресу 0х08019000
/*Тут функции настройки NVICа*/
__set_PRIMASK(0);//включить все прерывания
veteq
Вопрос по встроенному загрузчику STM, возможно ли его запустить находясь в основной программе не использую ножки BOOT? Например такая возможность имеется у LPC подав специальную команду внутри своей программы перейти в встроенный загрузчик и прошить контроллер с помощью flashmagic.
demiurg_spb
Цитата(veteq @ Dec 23 2013, 09:26) *
Тут пишут, что это возможно.
veteq
Спасибо, действительно все заработало. Основное можно подглядеть: http://www.youtube.com/watch?v=cvKC-4tCRgw
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.