Стерло ли ядро ​​Cortex-M3 STM32F103 во время удаления страницы флэш-памяти, поскольку FPEC занят и не может получить дополнительные инструкции из флэш-памяти?

На STM32F103 удаление флэш-страницы занимает 20 мс, в течение которых ядро ​​останавливается для меня. Из руководства по программированию флэш-памяти ST PM00042 неясно, будет ли ядро всегда зависать при удалении флэш-страницы или просто останавливается, потому что сам поток команд находится во флэш-памяти (в моем проекте), а FPEC (интерфейс флэш-памяти) занят и не может получить больше инструкций.

Еще один способ задать этот вопрос - "не запустит ли мой флэш-программный код из ОЗУ сбой флэш-страницы?

Спасибо,

2 ответа

Я полагаю, что во время программирования флэш-памяти любая попытка доступа к флэш-памяти остановит процессор.

Поэтому вы должны убедиться, что критический код (например, обработчики прерываний, сторожевой таймер и т. Д.) Может быть исчерпан из ОЗУ во время работы программы. В последний раз, когда я использовал STM32 (вероятно, около 2 лет назад), именно это я и сделал.

Так что для ясности ответьте на вопрос в конце вашего поста:

Еще один способ задать этот вопрос - "не запустит ли мой флэш-программный код из ОЗУ сбой флэш-страницы?

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

Я точно знаю, что именно так работает NXP на их ARM UC, но я также хотел процитировать главу и стих для STM32. По какой-то причине руководство по программированию флэш-памяти кажется сейчас недоступным, но я нашел следующий язык в аналогичном документе (я полагаю, PM0068):

Текущая операция с флэш-памятью не будет блокировать процессор, если он не имеет доступа к флэш-памяти.

а также

Если во время программирования инициируется операция чтения / записи [на флэш] (установлен бит BSY), ЦП останавливается, пока не закончится текущее программирование основной флэш-памяти.

Это автобус глохнет, а не ядро. Ядру, возможно, придется подождать в автобусе, если конечно.

SRAM и Flash находятся на отдельных шинах, поэтому код может продолжать выполняться из ОЗУ.

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

Аналогичным образом код во внешней SRAM может продолжать работать. Отдельная шина может решить проблему конкуренции данных/инструкций, если вы разместите одну во внутренней, а другую во внешней оперативной памяти, но внешняя шина в любом случае работает медленнее, поэтому производительность все равно будет затронута.

Проблемы и компромиссы таковы, что вы можете рассмотреть возможность использования отдельной EEPROM для хранения NV.

Другие вопросы по тегам