Начальный загрузчик EEPROM -> SPIFI (SPI, QSPI, QPI и XIP)
Обновлённый пример начального загрузчика "HAL_EEPROM_to_SPIFI_XIP" позволяет настраивать SPIFI с внешней микросхемой флеш-памяти на максимально возможное быстродействие, причём не только вручную, но и автоматически. Теперь он умеет переводить в режим XIP и те микросхемы флеш-памяти из серии W25Qxx, которые не поддерживают режим QPI.
Скачать пример можно в репозитории сообщества на GitFlic:
https://gitflic.ru/project/mik32-amur/platform_mik32_amur/
Блок SPIFI микроконтроллера К1948ВК018 позволяет уменьшить задержки чтения из микросхемы внешней памяти до предела на уровне протокола связи, и разработчикам MIK32 Амур за это особая благодарность.
Популярные микросхемы флеш-памяти с интерфейсом QSPI:
Отечественные: GSN2516Y и GSN2517Y (функциональные аналоги W25Q16JL).
Импортные: W25Q16JL, W25Q16JV, W25Q32JV, W25Q64JV, W25Q128JV, W25Q256JV, W25Q512JV, W25Q32FV, W25Q64FV, W25Q128FV, W25Q256FV, W25Q16JV-DTR, W25Q32JV-DTR, W25Q64JV-DTR, W25Q128JV-DTR, W25Q256JV-DTR, W25Q512JV-DTR, P25Q80H, P25Q16H, P25Q32H, P25Q64H, P25Q128H, EN25Q80B, GD25Q128C, PY25Q64HA, PY25Q128HA.
У всех этих микросхем имеется так называемый режим "Continuous Read Mode" или "Performance Enhance Mode" или "XIP" (eXecute-In-Place), который позволяет при каждой последующей операции не отправлять повторно ту же самую команду (код операции). Это экономит 8 тактов команды в QSPI режиме и 2 такта команды в QPI режиме. Таким образом при случайном побайтовом доступе к внешней флеш-памяти количество тактов в режиме QPI сокращается на 16,66% (с 12 до 10), а в режиме QSPI Quad Input/Output на 36,36% (с 22 до 14). Проверено на микросхемах W25Q64FV, W25Q128FV, W25Q256FV и W25Q128JV-DTR. Судя по документации, и другие модели будут работать без проблем. Для этого нужно выполнить операцию чтения любого адреса, где в промежуточных данных после него нужно отправить 0x20. Затем переключить SPIFI в режим без команды, где только 3 байта адреса в запросе плюс промежуточный байт данных 0x20. Для микросхемы EN25Q80B этот байт должен иметь исключающие друг друга полубайты, например: 0xA5, 0x5A, 0x0F, 0xF0 и т.п. Об этом написано на странице 28 в документации по EN25Q80B. У самых дешёвых микросхем время ожидания вывода данных даже на относительно низких тактовых частотах может составлять от 4 до 6 тактов (от 2 до 3 промежуточных байтов) и больше.
Документация на все эти микросхемы имеется в
файлах сообщества К1948ВК018 (MIK32 Amur) ВКонтакте.
Микросхема W25Q128FV на сегодня имеет лучшее соотношение цены, объёма и быстродействия. К тому же она адресуется полностью в режиме старта со SPIFI (128 Мбит или 16 Мбайт — это использование всего диапазона 24-битного адреса SPIFI по умолчанию). Продаётся на различных торговых площадках, в том числе и в сети радиомагазинов "ЧИП и ДИП":
https://www.chipdip.ru/search?searchtext=W25Q128FV
Часто встречаются более современные чипы микросхем типа W25Q128JV-DTR с названиями от старых версий. Это легко определить с помощью данного начального загрузчика. Если при старте MIK32 Амур выведет в последовательный порт, что он запустился в режиме XIP, то значит микросхема перемаркирована под старину. Все старые протоколы связи данные чипы поддерживают, поэтому китайским заводам не выгодно производить и корпусировать разные устаревшие кристаллы, а достаточно лишь сменить название на корпусе. Не верьте тому, что написано на заборе, ведь при ближайшем рассмотрении там обнаруживаются всё те же доски.
Более новая и/или подробная информация может находиться
в обсуждении сообщества К1948ВК018 (MIK32 Amur) ВКонтакте