STM32 F407VG Загрузка различных (основных) приложений - PullRequest
0 голосов
/ 14 июля 2020

Для проекта, над которым я только начал работать, мне нужно написать прошивку на 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.

Мои вопросы

  1. Могу ли я просто записать файл .hex в Fla sh, поскольку он без модификация, например
:020000040800F2 
:1000000002200B

et c?

Так как я неопытен с прыжками: Как мне выполнить прыжок из "bootmanager" в прошивку сектора 5? Адреса автоматически относятся к точке входа в секторе 5?

Можете ли вы дать мне ключевые слова или сказать, с какими проблемами я столкнусь?

* РЕДАКТИРОВАТЬ: я знаю, что сам STM содержит загрузчик. К сожалению, устройство RS485 жестко подключено к контактам GPIO, используемым USART2. Согласно справочному руководству, внутренний загрузчик может использоваться только USART1 и USART3, CAN2 и USB OTG FS

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Могу я просто записать файл .hex во Fla sh как есть без изменений, например

нет, вы не можете. Вам нужно изменить скрипт компоновщика, чтобы заархивировать его

Вам нужно, чтобы оба приложения были полностью в FLA SH, поэтому разделите его на 50/50%.

Я обычно добавляю несколько последовательных FLA SH, чтобы получить копию прошивки, если оба образа повреждены.

Вам нужно написать собственный загрузчик.

0 голосов
/ 14 июля 2020

Большинство микроконтроллеров STM32 поддерживают двойной банк памяти и обновление на лету (см. AN4767 - Обновление прошивки на лету для микроконтроллеров STM32 с двумя банками )

Это будет позволяют выполнять именно то, что вам нужно.

Обычно микроконтроллер должен иметь загрузчик и 2 банка для образа. При загрузке загрузчик запустится и проверит, какая версия должна загружаться, и соответствующим образом установит начальный адрес.

Это примечание по применению для серии F7, но вы можете проверить его, чтобы увидеть, как он может работать для ваших конкретных c микроконтроллер (cf AN4826 - STM32F7 Series Fla sh режим двойного банка памяти ).

По поводу ваших вопросов:

  • Код будет написан как обычно, но дважды (или две разные прошивки)
  • Просмотрите упомянутые примечания к приложению и ключевые слова, такие как: двойной банк, обновление на лету, DFU и т. д. c
...