Запутался в функции XIP (eXecute In Place) QSPI FLASH

Существует множество микросхем NOR QSPI FLASH, поддерживающих XIP (eXecute In Place). В этом режиме встроенный процессор (или MCU) может напрямую выполнять коды, хранящиеся во флэш-памяти. Но, как мы знаем, флеш-память qspi может выводить только 4-битные данные за такт, в то время как многим MCU, таким как серии ARM Cortex-M, требуется 32-битная инструкция за такт. Таким образом, MCU должен ждать не менее 8 циклов, чтобы получить правильную инструкцию, которая кажется очень медленной. Кроме того, максимальная частота флэш-чипа nor qspi часто ниже 150 МГц, а частота STM32F407 составляет 168 МГц, что означает более длительную задержку для процессора для получения действительной инструкции.

Я не знаю, неверно ли мое понимание, но я действительно не смог найти подробностей о XIP. В Технических справочных руководствах STM32Fxxx говорится только, что они имеют встроенную флэш-память и поддерживают XIP, но они не показывают никаких подробностей. Кроме того, я полагаю, нам также необходимо реализовать очень сложный контроллер QSPI в MCU для поддержки XIP.

Кто-нибудь может дать мне несколько советов по этому вопросу?

2 ответа

Насколько я знаю, MCU использует буфер в оперативной памяти для чтения инструкций из внешней флэш-памяти и затем выполняет их. Он читает их кусками. Теперь размер одного чанка очень сильно зависит от реализации каждого поставщика (то есть, сколько ОЗУ доступно, как подключена флэш-память: SPI, Dual SPI, Quad SPI, Octal SPI, возможен ли прямой доступ к памяти (DMA), поддерживает ли флэш-память) Режим непрерывного чтения). Так что, если порция мала, ядро ​​остановится в ожидании инструкций. Если чанк большой, то он использует ОЗУ, а также при ветвлении чанков, которые уже были загружены в ОЗУ, будет перезагружен новый код.

Допустим, вспышка связана с Dual SPI и DMA возможно. Затем для XiP контроллер начал бы с выполнения некоторого кода загрузчика (обычно из некоторой внутренней памяти ПЗУ. Загрузчик настраивает контроллер флэш-памяти QSPI и DMA ядра для копирования инструкций из внешней флэш-памяти в буфер ОЗУ. Затем он начинает выполнять код в этот буфер. DMA теперь будет асинхронно копировать инструкции в RAM. Это означает, что реальное ядро ​​MCU почти не тратит время на копирование кода.

Вы сказали, что не можете найти много подробностей о XiP. Лучшим источником информации для меня были замечания по применению различных производителей. Реализации разные, но имеют много общего.

Вот 3 примера документов:

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

В некоторых устройствах к QSPI могут быть подключены как шины данных, так и шины инструкций, в то время как в других подключена только шина данных. Последние устройства поддерживают работу с отображением в памяти, но не XIP. Некоторые устройства могут выполнять только чтение из памяти, тогда как другие также могут записывать. Некоторые устройства оснащены выделенной кэш-памятью/буферной памятью внутри контроллера QSPI и выполняют предварительную выборку данных для повышения производительности, в то время как другие напрямую преобразуют доступы AHB, не «думая особо». Существует множество различных реализаций с разной производительностью.

Для флэш-устройства XIP — это всего лишь операция чтения. Никакой специальной поддержки не требуется.

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