0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
Перепрошивка с SD карты01.04.2014, 10:45. Показов 29237. Ответов 30
Метки нет Все метки)
(
Хотелка такая - хочу, чтобы прошивку можно было заменить, записав файл на SD карту и ребутнув контроллер.
Вроде как нашел
Может - есть альтернатива поинтересней? Например - сразу по USB как на флешку писать?
0
|
01.04.2014, 10:45 | |
Ответы с готовыми решениями:
30
Определить вероятность выпадения 4 дам, если из колоды в 32 карты взяли 4 карты Вывести название карты, заданной двумя числами (достоинство и масть карты) Сколькими способами из колоды (52 карты) можно выбрать 4 карты одной масти? |
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 115
|
|
01.04.2014, 11:15 | |
Так а в чем проблема?
Хочется сразу готовую реализацию? Обновление прошивки во Ftosh занимает десяток строчек кода. Примеров куча. Переход из бутлоадера на программу и смена векторов прерываний тоже немного места занимают и в интернете доступны. Остается только реализация чтения файла и подпихивание данных в буфер из которого шьется Ftosh. Есть вариант с FatFS и SD card - замечательно. Перепишите чтение с SD на чтение с USB. Ну и проверок добавить на целостность прошивки перед записью и основной программы перед запуском.
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
01.04.2014, 11:38 | ||
Проблема как раз в том, что тямы пока маловато. Мне как раз с SD карты надо, только чтение по SDIO а не по SPI. Вот тоже интересный вариант, но народ на глюкавость жалуется. http://iosyitistromyss.ru/proshivka-arm ... c1300.html
0
|
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 115
|
|
01.04.2014, 12:11 | |
Я через ethernet обновление делал. Сначала прошивка загружается во внешнюю флэшку at45db.., при перезагрузке, если находится файл прошивки происходит его проверка и обновление.
В рабочем режиме файл загружается через ftp. Бутлоадер умеет загружать файл через tftp. Если в основной программе получать прошивку с нужных носителей умеете, то добавить туда кусок для обновления Ftosh и превратить ее в бутлоадер не сильно сложная задача.
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
01.04.2014, 12:22 | |
Файлы читать с карты могу.
У меня сейчас шаблон заготовлен - SD card(SDIO)+FAT+FriiRTOS В принципе, можно попробовать свой бутлоадер написать. Но пока не ориентируюсь - как сместить код в нужную область. Понятно, что надо переписать в опциях линкера начальные адреса и размер доступной памяти. На этом мои познания заканчиваются. :-( Что ещё необходимо сделать? Вот говорят - переопределить вектора прерываний. Где можно почитать подробней, может подскажете?
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
01.04.2014, 12:36 | |
Глянул это
http://www.feaser.com/openblt/doku.php? ... msm3_stm32 Я правильно понял - бутлоадер пишется по нормальным (дефалтовым) адресам, а вот приложение пользователя нужно собирать с другими параметрами? <Изображение удалено> Здесь смещаем код пользовательского приложения ниже кода бутлоадера, верно? А тут не совсем понял, меняем контрольную сумму какую-то, что за контрольная сумма? <Изображение удалено> Тут инициализируем стек - не понятно, откуда что и куда копируем? <Изображение удалено> Что значат макроопределения? _estack _data _edata
0
|
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 115
|
|
01.04.2014, 12:45 | |
У бутлоадера можно ничего не переписывать.
Для начала сделать копию проекта и выкинуть оттуда FriiRTOS. Сначала просто читаем файл и проверяем его контрольную сумму. Начальные адреса надо будет переписывать у основной программы и вектора прерываний переопределять в ней же. Переопределение векторов прерываний NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 ); - вместо нулей адрес таблицы векторов основной программы относительно начала Ftosh А еще лучше сделать динамическое вычисление адреса. У меня в EmBlocks получилось так NVIC_SetVectorTable(NVIC_VectTab_FLASH, (uint32_t)(&g_pfnVectors[0]-NVIC_VectTab_FLASH)); Конкретная реализация будет зависеть от того под чем пишете.
0
|
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 115
|
|
01.04.2014, 13:00 | |
Для основной программы в debug и release подсовываете разные скрипты линкера.
В дебаге помещаете в начало Ftosh, чтобы можно было тестировать и отлаживаться без бутлоадера. В релизе после бутлоадера. Контрольная сумма - это необязательная штука, а желательная особенность проекта) Надо же как-то проверять целостность прошивки перед ее запуском или записью. Стек и инициализацию переменных не надо трогать, оставляете все как есть. _estack - указатель на вершину стека _data - начало данных _edata - конец данных
0
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
|
01.04.2014, 13:40 | |
Application note от ST, называется AN2557. Содержит описание и исходники. Представляет из себя бутлоадер, который может по УАРТу принимать прошивки, считывать прошивку и отправлять ее в УАРТ, перепрыгивать на исполнение основной программы и закрывать прошивку от чтения. Так же там написано как писать основную программу (сместить вектора прерываний, изменить скрипт линкера). Плюс есть примеры основных программ. Попробуйте потестировать бутлоадер через УАРТ для понимания принципа, а потом перепишите прием прошивки под то, что нравится, а именно USB mass storage (кстати есть Application note про USB, там есть пример эмуляции флешки). И это будет выглядеть как: кидаете прошивку на флешку, и контроллер ее программирует.
Так же можно погуглить готовые исходники как то так.
0
|
ktoks
|
|
01.04.2014, 17:58 | |
Меня тоже очень заинтересовала эта тема. Идея такая приципить внешнюю флешь и считать туда прошивку с USB или SD накопителя. В основной проге сделать функцию которая по нажатию кнопки (например) будет переходить по адресу в конце флеша самого проца, а там разместить код который будет затирать основную прогу и из внешнего флеша заливать на её место новую(которую мы предварительно считали с внешнего накопителя). Програму прошивки которая лежит в конце флеша проца я откомпилировал с помощю кокоса (CoIDE) с указанием адреса компиляции конца флеша и прошил предварительно в настройках сняв галочку стирать флешь перед записью. Так мне удалось в проц залить 2 прошивки - одна основная и вторая загрузчик.
Переход по адресу я делаю так - typedef void(*JumpAddr)(void); и потом в теле программы (JumpAddr)0x080E0000)();. 0x080E0000 - это адрес по которому я откомпилировал и прошил загрузчик. Перед переходом по этому адресу я отключаю все ранее включенные прерывания и SysTick (этой процедурой SysTick->CTRL = 0;). И у меня нифига не вышло, для проверки я по адресу 0x080E0000 разместил процедуру включения светодиода (для проверки) и бесконечный цикл. Светодиод не включился, не подскажите в чём может быть проблема? PS:Может вместе как то и разберёмся :) |
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||||||||||||
01.04.2014, 19:09 | ||||||||||||
в файле system_stm32f10x.c есть:
0
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
|||||||||||
01.04.2014, 19:16 | |||||||||||
2ktoks
Из примера из аппноута выдернул рутину перехода к пользовательской программе
Она определена в файле core_cm3.c (для кортексов m3) и выглядит так
0
|
ktoks
|
|
01.04.2014, 19:18 | |
Я так и не понял, зачем вектор прерывания смещать если я их все запретил? И в какую область я его должен поместить?
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||
01.04.2014, 19:27 | ||
Причем в комментариях в коде написано, что сдвиг таблицы векторов прерываний должен быть кратным 0x200 и указываться как относительное смещение относительно 0x08000000. У вас он будет 0xE0000
0
|
ktoks
|
||
01.04.2014, 19:48 | ||
Причем в комментариях в коде написано, что сдвиг таблицы векторов прерываний должен быть кратным 0x200 и указываться как относительное смещение относительно 0x08000000. У вас он будет 0xE0000 Огромное спасибо! Я писал выше что все прерывания и SysTick отключаю, но на всякий случай попробую вектор прерываний перенести. Через часик полтора попробую Вашу процедуру перехода по адресу, может заработает. |
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
02.04.2014, 08:45 | |
Например.
Пишу простой код, смещаю его и таблицу векторов прерываний смещаю. Прошиваю контроллер. Код запуститься? Или надо все же писать хоть какой-то примитивный "бутлоадер", который, к примеру - просто делает Jump_To_Application();? И размещать его без смещения? Я верно понимаю - после включения питания таблица векторов прерываний ищется по определенному адресу?
0
|
02.04.2014, 08:45 | |
Помогаю со студенческими работами здесь
20
Как задать масштаб гугл карты при добавлении карты на сайт? 1) Дан номер карты k (6 k 14), определить достоинство карты (В чем ошибка?) Поиск дисконтной карты при считывании кода с магнитной карты Сколькими способами из колоды в 52 карты можно выбрать 3 карты различных мастей и достоинств Ввести порядковый номер карты из колоды и вывести в консоль масть и достоинство карты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
|
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
|
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
|
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
|
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
|
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг.
Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя.
Странные серые краски проникают и. . .
|
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
|
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
|
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
|
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
|