Для проекта, над которым я только начал работать, мне нужно написать прошивку на C, которая позволяет мне загружаться с двумя разными версиями прошивки. Задача состоит в том, чтобы иметь возможность обновлять устройство, которое включает STM в полевых условиях, используя порт RS485 с файлом Intel .hex. Моя идея заключалась в том, чтобы разместить две версии прошивки по назначенным начальным адресам в fla sh, включая некую контрольную сумму для целостности данных. Согласно структуре модуля fla sh, найденной в справочном руководстве, моей первой мыслью было поместить одну версию в сектор 10 (начиная с 0x080C0000), а другую версию в сектор 11 (начиная с 0x080E0000). После каждого сброса STM32 должен загружаться в «менеджер загрузки», который представляет собой минимальный код, который определяет, является ли прошивка в секторе 10 или секторе 11 более новой версией. Я хочу пояснить свою идею на следующем графике c: [Примерный процесс] [1] [1]: https://i.stack.imgur.com/xLowh.png
Достаточно 128 Кбайт каждого сектора. До сих пор мне удавалось записывать отдельные байты во Fla sh и потом читать их. Кроме того, я уже настроил работающую связь UART с помощью RS485.
Мои вопросы
- Могу ли я просто записать файл .hex в Fla sh, поскольку он без модификация, например
:020000040800F2
:1000000002200B
et c?
Так как я неопытен с прыжками: Как мне выполнить прыжок из "bootmanager" в прошивку сектора 5? Адреса автоматически относятся к точке входа в секторе 5?
Можете ли вы дать мне ключевые слова или сказать, с какими проблемами я столкнусь?
* РЕДАКТИРОВАТЬ: я знаю, что сам STM содержит загрузчик. К сожалению, устройство RS485 жестко подключено к контактам GPIO, используемым USART2. Согласно справочному руководству, внутренний загрузчик может использоваться только USART1 и USART3, CAN2 и USB OTG FS