Запутался в функции 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 примера документов:
Микрочип AN44065 дает обзор XiP: http://ww1.microchip.com/downloads/en/AppNotes/Atmel-44065-Execute-in-Place-XIP-with-Quad-SPI-Interface-SAM-V7-SAM-E7-SAM-S7_Application-Note.pdf
ST.com AN5188 стр. 15 содержит сравнение производительности инструкций в ОЗУ и внешней Flash, которые могут представлять особый интерес: https://www.st.com/content/ccc/resource/technical/document/application_note/group0/d8/39/10/2f/ee/c9/4b/19/DM00514974/files/DM00514974.pdf/jcr:content/translations/en.DM00514974.pdf
В ST.com AN4760 на стр. 26 описано, как можно добиться улучшения скорости, а также подробно описать архитектуру XiP, здесь также есть несколько интересных формул: https://www.st.com/content/ccc/resource/technical/document/application_note/group0/b0/7e/46/a8/5e/c1/48/01/DM00227538/files/DM00227538.pdf/jcr:content/translations/en.DM00227538.pdf
XIP — это функция контроллера QSPI в MCU, а не функция самого флэш-устройства.QSPI может быть достаточно быстрым, чтобы его можно было отображать в памяти. То есть существует выделенная область памяти, и при доступе к ней контроллер QSPI автоматически выдает соответствующие команды и извлекает данные. Ядру приходится ждать доступа, который обычно занимает гораздо больше времени, чем доступ к параллельной памяти. Конечно, это зависит от частоты ядра и конфигурации QSPI.
В некоторых устройствах к QSPI могут быть подключены как шины данных, так и шины инструкций, в то время как в других подключена только шина данных. Последние устройства поддерживают работу с отображением в памяти, но не XIP. Некоторые устройства могут выполнять только чтение из памяти, тогда как другие также могут записывать. Некоторые устройства оснащены выделенной кэш-памятью/буферной памятью внутри контроллера QSPI и выполняют предварительную выборку данных для повышения производительности, в то время как другие напрямую преобразуют доступы AHB, не «думая особо». Существует множество различных реализаций с разной производительностью.
Для флэш-устройства XIP — это всего лишь операция чтения. Никакой специальной поддержки не требуется.