Большинство микроконтроллеров ARM Cortex M не имеют памяти EEPROM. Вместо этого постоянные данные могут быть записаны в ту же флэш-память, которая также содержит программу.
- Каково состояние процессора во время процесса стирания / записи?
- Это останавливается? Поддерживает ли он нормальную работу?
- Зависит ли поведение процессора от конкретного используемого семейства MCU (например, STM32, Kinetis L)?
(Для некоторых это может показаться глупым вопросом, но PIC16 от Microchip останавливает процессор до 40 мс во время самопрограммирования флэш-памяти.)
Ответы:
Поведение ядра зависит от реализации. Flash не является неотъемлемой частью ядра ARM, и поэтому каждый поставщик реализует его по-своему. Как правило, во время процесса стирания / записи можно выполнить из ОЗУ, и выполнение не должно быть затронуто.
На STM32 я полагаю, что чтение из флэш-памяти происходит во время циклов стирания / записи. Это приведет к остановке работы ядра до завершения операции. Я полагаю, что с некоторыми конфигурациями флэш-памяти вы можете продолжать выполнять / читать флэш-память, и она остановится только при доступе к той части флэш-памяти, которую вы стираете / программируете.
Я использовал другие Cortex M, где вы должны выполнять из ОЗУ при изменении содержимого флэш-памяти, в противном случае вы столкнетесь с ошибкой шины (и, скорее всего, сбоем системы, если ваши обработчики ошибок шины / жесткого сбоя находятся во флэш-памяти). Некоторые микроэлементы с большим количеством флэш-памяти реализуют его как два независимых флэш-массива, и они, как правило, обеспечивают полный доступ к одному банку при работе с другим.
Вам нужно будет обратиться к документации по вашей конкретной части, чтобы увидеть ограничения выполнения при изменении содержимого флэш-памяти.
источник