Процессор ARM Cortex M останавливается во время самопрограммирования флэш-памяти?

8

Большинство микроконтроллеров ARM Cortex M не имеют памяти EEPROM. Вместо этого постоянные данные могут быть записаны в ту же флэш-память, которая также содержит программу.

  • Каково состояние процессора во время процесса стирания / записи?
  • Это останавливается? Поддерживает ли он нормальную работу?
  • Зависит ли поведение процессора от конкретного используемого семейства MCU (например, STM32, Kinetis L)?

(Для некоторых это может показаться глупым вопросом, но PIC16 от Microchip останавливает процессор до 40 мс во время самопрограммирования флэш-памяти.)

в режиме реального времени
источник
У вас есть ссылки на остановку PIC16?
Даниэль Грилло,
@Wouter Какие? Вы проверяли это, скажем, с прерыванием, полностью выполненным в ОЗУ?
голубой
2
Вопреки тому, что я прокомментировал перед чтением из своих пользовательских руководств, чипы NXP, по-видимому, отключают только интерфейс флэш-памяти во время программирования приложений, поэтому прерывание, которое выполняется полностью из ОЗУ, может быть возможным во время стирания или записи флэш-памяти. Но это в значительной степени неисследованная территория, я мог бы, например, представить себе проблемы с синхронизацией, когда прерывание занимает значительное время с последствиями для выносливости Flash.
Воутер ван Оойен
Да, у них нет eeprom, но для этой ситуации у некоторых Cortex-M, таких как ST32, есть резервный регистр, в котором вы можете сохранить свою информацию там и о PIC16, я думаю, что это интересно. Пожалуйста, укажите ваш источник о PIC16. (Лист данных?)
Roh
@ Ваутер Да, время может быть проблемой. За исключением LPC8xx, команды IAP «Копирование ОЗУ во флэш» принимают тактовую частоту в качестве параметра, поэтому я подозреваю, что они используют простой цикл задержки.
звездно-голубой

Ответы:

4

Поведение ядра зависит от реализации. Flash не является неотъемлемой частью ядра ARM, и поэтому каждый поставщик реализует его по-своему. Как правило, во время процесса стирания / записи можно выполнить из ОЗУ, и выполнение не должно быть затронуто.

На STM32 я полагаю, что чтение из флэш-памяти происходит во время циклов стирания / записи. Это приведет к остановке работы ядра до завершения операции. Я полагаю, что с некоторыми конфигурациями флэш-памяти вы можете продолжать выполнять / читать флэш-память, и она остановится только при доступе к той части флэш-памяти, которую вы стираете / программируете.

Я использовал другие Cortex M, где вы должны выполнять из ОЗУ при изменении содержимого флэш-памяти, в противном случае вы столкнетесь с ошибкой шины (и, скорее всего, сбоем системы, если ваши обработчики ошибок шины / жесткого сбоя находятся во флэш-памяти). Некоторые микроэлементы с большим количеством флэш-памяти реализуют его как два независимых флэш-массива, и они, как правило, обеспечивают полный доступ к одному банку при работе с другим.

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

RJP
источник