STM32 F407VG Загрузка различных (основных) приложений
Для проекта, над которым я только начал работать, мне нужно написать прошивку на C, которая позволит мне загружаться с двумя разными версиями прошивки. Задача состоит в том, чтобы иметь возможность обновлять устройство, которое включает STM в полевых условиях, используя порт RS485 с файлом Intel .hex. Моя идея заключалась в том, чтобы разместить две версии прошивки по назначенным начальным адресам во флеш-памяти, включая некую контрольную сумму для целостности данных. В соответствии с организацией флеш-модуля, приведенной в справочном руководстве, моей первой мыслью было поместить одну версию в сектор 10 (начиная с 0x080C0000), а другую версию в сектор 11 (начиная с 0x080E0000). После каждого сброса STM32 должен загружаться в "менеджер загрузки", который представляет собой минимальный код, который решает, является ли прошивка в секторе 10 или секторе 11 более новой версией. Я хочу пояснить свою идею на следующем рисунке: [Примерный процесс][1] [1]: https://stackru.com/images/6724592da88baa9a55fe3304250de8d58a27a9ad.png
Достаточно 128 Кбайт каждого сектора. До сих пор я мог записывать отдельные байты во флэш-память и потом читать их. Кроме того, я уже настроил работающую связь UART с помощью RS485.
Мои вопросы
- Могу ли я просто записать файл.hex во Flash, как есть, без изменений, например
:020000040800F2
:1000000002200B
так далее?
Поскольку у меня нет опыта с прыжками: Как мне выполнить прыжок из "диспетчера загрузки" в прошивку сектора 5? Адреса автоматически относятся к точке входа в секторе 5?
Можете ли вы дать мне ключевые слова или сказать, с какими проблемами я столкнусь?
* РЕДАКТИРОВАТЬ: я знаю, что сам STM содержит загрузчик. К сожалению, устройство RS485 жестко подключено к контактам GPIO, используемым USART2. Согласно справочному руководству, внутренний загрузчик может использоваться только USART1 и USART3, CAN2 и USB OTG FS.
2 ответа
Могу ли я просто записать файл.hex во Flash, как есть, без изменений, например
нет ты не можешь. Вам необходимо изменить сценарий компоновщика, чтобы заархивировать его
Вам нужно, чтобы оба приложения были целиком во FLASH, поэтому разделите их на 50/50%.
Я обычно добавляю несколько серийных FLASH, чтобы иметь копию прошивки, если оба образа повреждены.
Юо нужно написать кастомный загрузчик.
Большинство микроконтроллеров STM32 поддерживают двойной банк памяти и обновление на лету (см. AN4767 - обновление прошивки на лету для микроконтроллеров STM32 с двумя банками)
Это позволит выполнить именно то, что вам нужно.
Обычно микроконтроллер должен иметь загрузчик и 2 банка для образа. При загрузке загрузчик запустится и проверит, какая версия должна загружаться, и соответственно установит начальный адрес.
Это примечание по применению для серии F7, но вы можете проверить его, чтобы увидеть, как он может работать с вашим конкретным микроконтроллером (см. AN4826 - режим двойного банка флэш-памяти серии STM32F7).
По поводу ваших вопросов:
- Код будет написан как обычно, но дважды (или 2 разных прошивки)
- Ознакомьтесь с указанными примечаниями по применению и такими ключевыми словами, как: двойной банк, обновление на лету, DFU и т. Д.