Как работает программирование в приложении для ARM (Cortex M3)?

Я работаю над настраиваемым устройством на базе Cortex-M3, и мне нужно реализовать механизм программирования приложений (IAP), чтобы можно было обновить прошивку устройства без JTAG (мы будем использовать TFTP или HTTP вместо). Хотя примеры кода, относящиеся к IAP, доступные от ST Microelectronics, для меня достаточно ясны, я действительно не понимаю, как работает повторное мигание.

Насколько я понимаю, инструкции извлекаются CPU из Flash через шину ICode (и, конечно, блок предварительной выборки). Итак, вот мой довольно глупый вопрос: почему программа не повреждена, когда она снова мигает (т.е. Изменяет флеш-память, с которой она запускается)?

Ответы

Ответ 1

Общим решением является наличие небольшой резервной области во флэш-памяти, где сохраняется актуальная мигающая программа. Когда новая прошивка была загружена, просто сделайте переход к коду в этой области.

Конечно, эта маленькая область не перезаписывается при прошивке прошивки, ее можно выполнять только другими способами (например, JTAG). Поэтому убедитесь, что эта мигающая программа работает хорошо.:)

Ответ 2

Я не знаком с реализацией STM, но в чипах NXP процедуры IAP хранятся в отдельной зарезервированной области ПЗУ, которая не может быть стерта с помощью кода пользователя.

Если вы сами внедряете код для написания флэш-памяти, используя напрямую HW-регистры, вам нужно либо убедиться, что он не касается секторов, от которых он работает, либо работает из ОЗУ.

Ответ 3

В настоящее время многие микроконтроллеры, поддерживающие IAP, могут программировать флеш-память во время выполнения программы в одной и той же вспышке.

Для IAP память программ во флэш-памяти может быть разделена на 2 части, одну исполняемую и другие резервные части.

Обычно мы программируем флэш-память в месте (например, часть 1) через JTAG, чья версия прошивки 0.01. Для IAP, т.е. Запрограммируйте флеш-память в другой части (часть-2) во время выполнения кода, соответствующий API должен быть предоставлен в версии прошивки 0.01, которая помогает запрограммировать флеш-часть-2. После завершения программирования версия прошивки будет обновлено как 0,02. При перезапуске процессора выполнение программы переходит к последней версии прошивки, проверяя версию прошивки при инициализации.

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

Ответ 4

Еще один хороший способ сделать это - использовать пользовательский загрузчик. Однако STM IAP не хранится во Flash, поэтому его нельзя перезаписать самостоятельно. То, что обычно делают люди, - это пролить вспышку в две части, одна из них зарезервирована для пользовательских загрузочных и других для приложения. Загрузочный загрузчик гарантирует, что он не записывается в свою назначенную область. Загрузочный загрузчик можно запрограммировать через JTAG, а позднее приложение может использовать загрузчик для самой программы.

Ответ 5

Насколько я понимаю, инструкции выбираются процессором из Flash через шину ICode (и, конечно, блок предварительной выборки). Итак, вот мой довольно глупый вопрос: почему работающая программа не повреждается, когда она самопроизвольно мигает (т.е. изменяет флэш-память, из которой она запускается)?

Это связано с тем, что в общем случае запись/программирование на флэш-память не допускается во время чтения из нее (т.е. Выполнения кода).

Посмотрите на это для некоторых идей по реализации IAP.