Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 14:39

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 13 авг 2014, 02:57 
Старожил

Зарегистрирован: 21 дек 2013, 18:00
Сообщения: 210
elisey писал(а):
Eddy_Em писал(а):
Народ, а реализацию простейшей операционки, а именно — подгрузка пользовательского кода в реальном времени, запись его во флэш и исполнение — никто не пробовал делать?
А то интересно было бы реализовать эдакий механизм плагинов.

да тут все разговоры ходят и ходят. Но презентаций сделанного пока нет.
viewtopic.php?f=35&t=19502
viewtopic.php?f=47&t=19011
Да я же говорю что делал для STM32F4 примерно два года назад. Все как в настоящей ОС, код загружается с СД карты и исполняется на лету (из RAM или Flash), есть поддержка динамических библиотек, может "параллельное" исполнение приложений (сделано поверх планировщика FreeRTOS), есть поддержка С++.

Это не разговоры, это реально работающее решение!!! Презентаций пока нет, поскольку чтобы показать работающий пример нужно написать статью, разъяснить что да как, иначе здешний народ в это дело без пол-литра не врубится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 13 авг 2014, 09:22 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4638
Откуда: КЧР, поселок Нижний Архыз
Цитата:
Все как в настоящей ОС, код загружается с СД карты и исполняется на лету (из RAM или Flash), есть поддержка динамических библиотек, может "параллельное" исполнение приложений (сделано поверх планировщика FreeRTOS), есть поддержка С++.

А, ну мне хотелось бы обойтись без RTOS.
Но понимаю, что дело очень уж трудоемкое. Да и с флешкой чтобы работать надо хотя бы ext2 какую-нибудь там завести...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 13 авг 2014, 17:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
Eddy_Em писал(а):
А, ну мне хотелось бы обойтись без RTOS.

Тоесть сделать ОС, только без ОС? В итоге велосипед и превратится в ОС.

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 13 авг 2014, 18:18 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4638
Откуда: КЧР, поселок Нижний Архыз
Именно. Сделать свою ОС. Простую. Без излишеств.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:05 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Точно такая же ерунда. Не работают прерывания.
Основная программа начинается с 0x80020000. Загрузчик сидит в 0x8000000.

Прописал в основной программе:

Код:
__set_PRIMASK(1);//отключить все прерывания
/* Set the Vector Table base location at 0x08010000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000);    //перенести таблицу векторов прерываний по адресу 0х08019000
/*Тут функции настройки NVICа*/
__set_PRIMASK(0);//включить все прерывания


Но толку никакого нету. Не работают прерывания и всё тут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:07 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
Я делал, как тут рекомендовано.
У меня все получилось
viewtopic.php?f=35&t=18446

elisey писал(а):
Pingvin писал(а):
NVIC_SetVectorTable(NVIC_VectTab_FLASH, xxxx);

В каком месте это нужно выполнить.
Я так разумею - до разрешения прерываний?
Как это правильно сделать?

у мя в дефолтных стартап файлах это уже определено.
в файле system_stm32f10x.c есть:
Код:
#define VECT_TAB_OFFSET  0x0000

Это и есть сдвиг. Далее он используется при инициализации в этот же файле в ф-ии SystemInit
Код:
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;

Сделайте поиск по исходникам и найдите где это уже используется.



И линкеру при сборке самой прошивки укажите доступные пределы памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:20 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Нашёл в файле system_stm32f10x.c дефайн #define VECT_TAB_OFFSET 0x0000. Поменял значение на 0x20000. Всё-равно не работает.

В линкере стоит галка use memory layout from target dialog. В target прописан адрес: 0x80020000.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:37 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
Yoda писал(а):
Нашёл в файле system_stm32f10x.c дефайн #define VECT_TAB_OFFSET 0x0000. Поменял значение на 0x20000. Всё-равно не работает.

В линкере стоит галка use memory layout from target dialog. В target прописан адрес: 0x80020000.


А перед тем, как на основную прошивку прыгнуть - все прерывания запретили?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:40 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Pingvin писал(а):
Yoda писал(а):
Нашёл в файле system_stm32f10x.c дефайн #define VECT_TAB_OFFSET 0x0000. Поменял значение на 0x20000. Всё-равно не работает.

В линкере стоит галка use memory layout from target dialog. В target прописан адрес: 0x80020000.


А перед тем, как на основную прошивку прыгнуть - все прерывания запретили?


В том и дело, что я не знаю ничего про загрузчик. Взял его из этой статьи:
http://easyelectronics.ru/proshivka-arm ... c1300.html

В статье приложена программа, которая его генерирует. Я так понимаю, загрузчик чисто в виде демо программы и косяк именно в нём?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:40 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
glags писал(а):
В общем у меня всё вышло и работает (кроме процедуры записи байта в внутреннюю флешь). Привожу работающий код перехода по адресу с пояснениями.
В области где мы назначаем глобальные переменные (до main ) вписываем это:
#define ApplicationAddress 0x80E0000 //Это адрес куда будет переходить основная программа, тоесть расположение программы прошивальщика.
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;

Далее в теле программы я сделал следующее (главное отключить все прерывания):
NVIC_DisableIRQ(OTG_FS_IRQn);// Отключил прерывание от юсб (если у вас SD то там другое прерывание)
SysTick->CTRL = 0;// Запретил работу SysTick и его прерывания
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP (*(__IO uint32_t*) ApplicationAddress);// устанавливаем указатель стека
Jump_To_Application ( );} //Здесь собственно переход по адресу заданному в глобальных переменных

Вот собственно и всё. Переход работает, осталось дело за програмкой прошивальщиком :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:45 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Pingvin писал(а):
glags писал(а):
В общем у меня всё вышло и работает (кроме процедуры записи байта в внутреннюю флешь). Привожу работающий код перехода по адресу с пояснениями.
В области где мы назначаем глобальные переменные (до main ) вписываем это:
#define ApplicationAddress 0x80E0000 //Это адрес куда будет переходить основная программа, тоесть расположение программы прошивальщика.
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;

Далее в теле программы я сделал следующее (главное отключить все прерывания):
NVIC_DisableIRQ(OTG_FS_IRQn);// Отключил прерывание от юсб (если у вас SD то там другое прерывание)
SysTick->CTRL = 0;// Запретил работу SysTick и его прерывания
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP (*(__IO uint32_t*) ApplicationAddress);// устанавливаем указатель стека
Jump_To_Application ( );} //Здесь собственно переход по адресу заданному в глобальных переменных

Вот собственно и всё. Переход работает, осталось дело за програмкой прошивальщиком :)


Это ведь для загрузчика...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 18:59 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
Я свой загрузчик писал.
Так что вряд ли смогу помочь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 19:04 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Всё. Нашёл косяк. Всё время думал, что базовый адрес: 0x8000 0000. Оказалось, что 0x0800 0000.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 19:19 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
Yoda писал(а):
Всё. Нашёл косяк. Всё время думал, что базовый адрес: 0x8000 0000. Оказалось, что 0x0800 0000.

Так значит бутлоадер из статьи рабочий?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 19:21 
Заглядывает иногда

Зарегистрирован: 14 апр 2014, 11:41
Сообщения: 124
Откуда: Минск Беларусь
Pingvin писал(а):
Yoda писал(а):
Всё. Нашёл косяк. Всё время думал, что базовый адрес: 0x8000 0000. Оказалось, что 0x0800 0000.

Так значит бутлоадер из статьи рабочий?


Так точно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 21 авг 2015, 19:23 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2566
Отлично!
Пригодится шить девайсы, где не будет SD карты


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 27 май 2017, 19:50 
Здравствуйте!

Зарегистрирован: 09 сен 2015, 09:37
Сообщения: 4
Тоже занялся вопросом
Тот бутлоадер что в систем мемори - не катит. (который управляется пином BOOT)
он для других целей. если скажем вы дебаг отключили случайно или еще что...
А то что вы искали
Вот документ
http://www.st.com/content/ccc/resource/ ... 161366.pdf
AN4657
Application note
STM32 in-application programming (IAP) using the USART


The X-CUBE-IAP-USART firmware package is delivered with this document
It is available from www.st.com.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 10 июн 2017, 22:07 
Здравствуйте!

Зарегистрирован: 09 сен 2015, 09:37
Сообщения: 4
написал пример для быстрого старта может кому пригодится
https://youtu.be/O-37mAwccyE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 11 июн 2017, 00:27 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2007
AlexeyCu писал(а):
написал пример для быстрого старта может кому пригодится
https://youtu.be/O-37mAwccyE

А исходники от BoilerManager планируется на github ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 15 июн 2017, 02:48 
Заглядывает иногда

Зарегистрирован: 12 июн 2017, 09:01
Сообщения: 33
а посмотрите STM32F103C8T6 http://forum.easyelectronics.ru/viewtopic.php?f=35&t=31975

если захотеть то можно вообще сис ром стереть и свой записать....(если там флэш а не отр)

Удачи....
Bob_st

пс... а вообще много таких проектов я сам разрабатывал , когда каждый девайс имет свой номер,
(ID) не переписываемый, получает апдейт по инету - кодировнный, к тому же второй кодированный апдейт- доступа услуг индивидуальный и может подойти только одному пользователю... к тому применяется ID connect
c нужным сервером который девайс ненужного номера уничтожит....
применялись и сенлоки разные, вплоть до установления максим времени работы в день - 2 мин к примеру...
чтоб одним девайсом не пользовался сервер и шара не покатит...
Пожму руку тому кто скажет что "сломал" сенселок......


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 22 июн 2017, 13:00 
Здравствуйте!

Зарегистрирован: 26 сен 2014, 08:58
Сообщения: 2
Пишу дешифрующий загрузчик на основе примера из STM32CUBE (пример IAP). В целом работает, но примерно 1 раз из 10 основная прошивка при переходе из бутлодера зависает. Пробовал делать как советовали парой постов выше, в основной проге в начале майн-а добавил:
__set_PRIMASK(1);//отключить все прерывания
/* Set the Vector Table base location at 0x08010000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x19000); //перенести таблицу векторов прерываний по адресу 0х08019000
/*Тут функции настройки NVICа*/
__set_PRIMASK(0);//включить все прерывания

Никакого эффекта. Но вообщем все эти действия (выключение прерываний, перенос таблицы векторов) уже есть в SystemInit(), который вызывается в startup.s основной проги. Что ещё можно проверить?

Небольшое уточнение: похоже, что переход из бутлодера в основную программу происходит нормально, но DMA работает в ней через раз. В этом вся проблема.

Вроде сам разобрался. В бутлодере надо перед прыжком запрещать прерывания: __disable_irq(); (можно и __set_PRIMASK(1);, вроде это одно и то же ).
В основной проге добавить __enable_irq(); ПОСЛЕ инициализации всей нужной переферии (в т.ч. DMA в моем случае), если воткнуть ее в самом начале main() то будут случайные зависания. До конца не понял, с чем это связанно, подозреваю, что срабатывает "старое" прерывание SYSTICK и портит или адрес возврата или еще что-то важное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 июл 2017, 15:45 
Заглядывает иногда

Зарегистрирован: 03 окт 2010, 01:49
Сообщения: 176
tmtlib писал(а):
Вариант 2. Мы посылаем в микроконтроллер прошивку в зашифрованном виде, внутри сидит наша маленькая программа, которая расшифровывает и записывает в открытом виде, а затем ставим защиту от чтения флешь.
Что даёт: когда ваш продукт подключат к SWD, то не смогут считать прошивку. Но если её нужно будет обновить, то файл вы дадите сами, но так как он зашифрован, его не понять. Дешифратор сидит внутри контроллера и на него защита от чтения. Так?

А как этот вариант работает?
Ведь после снятия защиты вся флешь стирается, вместе с дешифратором.

_________________
Все микрухи работают на волшебном дыме. Стоит только его выпустить - микруха мертва.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 июл 2017, 16:07 
Старожил

Зарегистрирован: 21 мар 2012, 14:33
Сообщения: 542
У меня все работает. В первых секторах стоит свой загрузчик, после включения он пару секунд смотрит, не пришла ли по USARTу команда на режим прошивания. Если не пришла, то идет загрузка со следующих секторов, там где обновляемая основная прошивка. В обновляемой прошивке предусмотрена команда на софтовый ресет, чтобы можно было войти в прошивальщик и успеть ему послать команду на вход в режим прошивания.
На сектора прошивальщика стоит защита read-only. На всю прошивку стоит, readout protection.

Защиту не нужно снимать, контроллер сам себя может программировать из прошивки в режиме readout. И даже сам свою прошивку отправить вовне, если кто-то знает вашу команду для чтения флеш и она рализована. Это извне нельзя прочитать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 04 июл 2017, 18:27 
Заглядывает иногда

Зарегистрирован: 03 окт 2010, 01:49
Сообщения: 176
tmtlib писал(а):
У меня все работает. В первых секторах стоит свой загрузчик, после включения он пару секунд смотрит, не пришла ли по USARTу команда на режим прошивания. Если не пришла, то идет загрузка со следующих секторов, там где обновляемая основная прошивка. В обновляемой прошивке предусмотрена команда на софтовый ресет, чтобы можно было войти в прошивальщик и успеть ему послать команду на вход в режим прошивания.
На сектора прошивальщика стоит защита read-only. На всю прошивку стоит, readout protection.

Защиту не нужно снимать, контроллер сам себя может программировать из прошивки в режиме readout. И даже сам свою прошивку отправить вовне, если кто-то знает вашу команду для чтения флеш и она рализована. Это извне нельзя прочитать.

Спасибо большое!

Почитал еще этот документик и всё полностью прояснилось.

_________________
Все микрухи работают на волшебном дыме. Стоит только его выпустить - микруха мертва.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 bootloader Flash
СообщениеДобавлено: 11 мар 2020, 16:49 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4638
Откуда: КЧР, поселок Нижний Архыз
Pingvin писал(а):
glags писал(а):
В общем у меня всё вышло и работает (кроме процедуры записи байта в внутреннюю флешь). Привожу работающий код перехода по адресу с пояснениями.
В области где мы назначаем глобальные переменные (до main ) вписываем это:
#define ApplicationAddress 0x80E0000 //Это адрес куда будет переходить основная программа, тоесть расположение программы прошивальщика.
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;

Далее в теле программы я сделал следующее (главное отключить все прерывания):
NVIC_DisableIRQ(OTG_FS_IRQn);// Отключил прерывание от юсб (если у вас SD то там другое прерывание)
SysTick->CTRL = 0;// Запретил работу SysTick и его прерывания
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP (*(__IO uint32_t*) ApplicationAddress);// устанавливаем указатель стека
Jump_To_Application ( );} //Здесь собственно переход по адресу заданному в глобальных переменных

Вот собственно и всё. Переход работает, осталось дело за програмкой прошивальщиком :)


А у меня практически такой же код на STM32F072 не работает почему-то! Не переходит во встроенный DFU, хоть ты тресни!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB