В меню Serial flasher config → Flash SPI mode команды idf.py menuconfig можно выбрать один из 4 режимов подключения Flash SPI:
( ) QIO ( ) QOUT (X) DIO ( ) DOUT
Режимы SPI flash отличаются количеством контактных линий для передачи данных и адреса, а также скоростью работы. Выбор режима влияет на производительность и зависит от возможностей вашей микросхемы flash памяти и платы.
Для быстрого сравнения ознакомьтесь с таблицей:
Режим
Название
Сигналы
Скорость (относительно QIO)
Лучше всего подходит для
QIO
Quad I/O
4 линии для адреса и данных
Самая высокая
Платы с полной разводкой и поддерживаемыми flash-чипами
QOUT
Quad Output
4 линии только для данных
~ На 15% медленнее
Flash-чипы, не поддерживающие QIO
DIO
Dual I/O
2 линии для адреса и данных
~ На 45% медленнее
Проблемные платы; надежная замена QIO
DOUT
Dual Output
2 линии только для данных
~ На 50% медленнее
Устаревшие или ограниченные flash-чипы
Как работают режимы. В основе всех режимов лежит стандартный SPI, который использует отдельные линии для передачи данных от ведущего к ведомому (MOSI) и обратно (MISO). Более быстрые режимы задействуют эти линии иначе.
- Dual SPI: линии MOSI и MISO превращаются в две равнозначные линии данных (D0, D1), что позволяет передавать по два бита за такт.
- Quad SPI: для передачи данных используются уже четыре линии (D0, D1, D2, D3), что позволяет передавать четыре бита за такт. Для этого могут быть задействованы сигналы WP (Write Protect) и HOLD (Удержание) flash-чипа.
Пример подключения W25Q128 к ESP32-S3:
Ключевое различие I/O против Output: режимы I/O (Input/Output) эффективнее, так как используют несколько линий не только для приема данных, но и для передачи адреса команды. Это ускоряет весь процесс чтения. В режимах Output адрес передается по одной линии, и только данные читаются по нескольким.
DOUT - это режим работы SPI Flash, при котором данные на чтение передаются по двум линиям (IO0 и IO1), в то время как команда и адрес по-прежнему передаются по одной линии. Это следующий шаг после стандартного SPI, который значительно увеличивает скорость чтения.
Эволюция интерфейсов:
1. Standard SPI: данные на вход и выход по одной линии (SI, SO) 2. DOUT (Dual Output): данные на чтение по двум линиям (IO0, IO1) 3. DIO (Dual I/O): команды, адреса и данные по двум линиям 4. QOUT (Quad Output): данные на чтение по четырем линиям 5. QIO (Quad I/O): Полностью 4-проводный интерфейс
[Примеры популярных микросхем с поддержкой DOUT]
1. Winbond - W25X/W25Q Series
Winbond является одним из самых популярных производителей SPI Flash, и многие их микросхемы поддерживают режим DOUT.
Модель: W25X32 Объем: 32 Мбит (4 МБ) Интерфейсы: Standard SPI, DOUT Скорость в DOUT: До 80 МГц = 20 МБайт/с Особенности: классическая модель, хорошая совместимость
Модель: W25Q32 Объем: 32 Мбит (4 МБ) Интерфейсы: Standard SPI, DOUT, Dual SPI, Quad SPI Скорость в DOUT: до 104 МГц = 26 МБайт/с Особенности: более новая версия с поддержкой всех современных режимов
2. Macronix - MX25L Series
Модель: MX25L3206E Объем: 32 Мбит (4 МБ) Интерфейсы: SPI, DOUT, Dual I/O Скорость в DOUT: до 86 МГц = 21.5 МБайт/с Особенности: надежная работа, промышленный температурный диапазон
Модель: MX25L6406E Объем: 64 Мбит (8 МБ) Интерфейсы: SPI, DOUT, Dual I/O Скорость в DOUT: до 86 МГц = 21.5 МБайт/с Особенности: удвоенный объем при сохранении характеристик
3. Micron - M25P Series
Модель: M25P32 Объем: 32 Мбит (4 МБ) Интерфейсы: Standard SPI, DOUT Скорость в DOUT: до 50 МГц = 12.5 МБайт/с Особенности: проверенная временем надежность
4. Spansion/Cypress - S25FL Series
Модель: S25FL032P Объем: 32 Мбит (4 МБ) Интерфейсы: SPI, DOUT, Dual I/O Скорость в DOUT: до 104 МГц = 26 МБайт/с Особенности: высокая производительность, автомобильный класс
5. GigaDevice - GD25 Series
Модель: GD25Q32 Объем: 32 Мбит (4 МБ) Интерфейсы: SPI, DOUT, Dual SPI, Quad SPI Скорость в DOUT: до 104 МГц = 26 МБайт/с Особенности: хорошее соотношение цена/качество, популярна в Китае
[Сравнительная таблица примеров DOUT Flash]
Производитель
Модель
Объем
Макс. скорость DOUT
Особенности
Winbond
W25X32
32 Мбит (4 мегабайта)
20 МБайт/с
Классическая модель
W25Q32
26 МБайт/с
Полная поддержка всех режимов
Macronix
MX25L3206E
32 Мбит (4 мегабайта)
21.5 МБайт/с
Промышленный температурный диапазон
MX25L6406E
Больший объем
Micron
M25P32
32 Мбит (4 мегабайта)
12.5 МБайт/с
Проверенная надежность
Spansion
S25FL032P
32 Мбит (4 мегабайта)
26 МБайт/с
Высокая производительность
GigaDevice
GD25Q32
32 Мбит (4 мегабайта)
26 МБайт/с
Бюджетное решение
[Как активировать режим DOUT?]
Для использования режима DOUT необходимо:
1. Использовать специальную команду чтения для Dual Output режима
2. Команда чтения в режиме DOUT обычно имеет код 0x3B (Fast Read Dual Output)
3. Последовательность передачи:
- Команда (1 байт) передается по SI - Адрес (3 байта) передается по SI - Данные читаются одновременно по IO0 и IO1
Пример последовательности для DOUT:
Команда: 0x3B (Fast Read Dual Output) Адрес: 3 байта [A23-A16][A15-A8][A7-A0] Dummy cycles: 1-8 тактов (зависит от микросхемы) Данные: читаются по IO0 и IO1
Преимущества DOUT перед стандартным SPI:
- В 2 раза выше скорость чтения по сравнению с Standard SPI - Обратная совместимость со стандартным SPI - Простота реализации - не требует сложной конфигурации - Широкая поддержка практически всеми современными микроконтроллерами
[Скоростные характеристики]
Режим
Линии данных
Скорость (при 80 МГц)
Пропускная способность
Standard SPI
1
80 Мбит/с
10 МБайт/с
DOUT
2
160 Мбит/с
20 МБайт/с
DIO
2
160 Мбит/с
20 МБайт/с
QOUT
4
320 Мбит/с
40 МБайт/с
[Когда использовать DOUT?]
DOUT идеально подходит для:
- Систем, где требуется повышенная скорость чтения - Проектов с ограниченными выводами микроконтроллера - Приложений с обратной совместимостью со стандартным SPI - Устройств, где не требуется максимальная производительность Quad режимов
Важные замечания:
1. Только для чтения - режим DOUT используется только для операций чтения 2. Запись всегда через SI - операции записи выполняются через стандартную линию SI 3. Dummy cycles - требуются дополнительные такты для внутренней работы памяти 4. Проверьте даташит - конкретные команды и количество dummy cycles могут отличаться
Большинство современных SPI Flash микросхем поддерживают DOUT, что делает этот режим отличным компромиссом между скоростью и сложностью реализации. Даташиты на некоторые микросхемы Flash SPI DOUT см. в архиве [1].
QOUT - это режим работы SPI Flash, при котором данные на чтение передаются по четырем линиям (IO0-IO3), в то время как команда и адрес по-прежнему передаются по одной линии (MOSI). Это не то же самое, что полноценный QPI (Quad Peripheral Interface), где и команды, и адреса, и данные передаются по четырем линиям.
Эволюция интерфейсов:
1. Standard SPI: данные на вход и выход по одной линии (SO, SI) 2. Dual SPI: данные на чтение и запись по двум линиям (IO0, IO1) 3. QOUT (Quad Output): данные только на чтение по четырем линиям 4. QIO (Quad I/O): данные на чтение и запись по четырем линиям 5. QPI (Quad Peripheral Interface): полностью 4-линейный интерфейс
[Примеры популярных микросхем с поддержкой QOUT]
1. Winbond - W25Q Series
Winbond является одним из самых популярных производителей SPI Flash, и многие микросхемы их серии W25Q поддерживают режим QOUT.
Модель: W25Q128JV Объем: 128 Мбит (16 МБ) Интерфейсы: Standard SPI, Dual SPI, QOUT, QIO, QPI Скорость в QOUT: до 80 МГц = 40 МБайт/с Особенности: одна из самых распространенных микросхем на рынке. Поддержка всех современных режимов.
Модель: W25Q256JV Объем: 256 Мбит (32 МБ) Интерфейсы: Standard SPI, Dual SPI, QOUT, QIO, QPI Скорость в QOUT: До 80 МГц = 40 МБайт/с Особенности: больший объем при сохранении совместимости с предыдущими моделями.
2. Macronix - MX25L Series
Macronix также предлагает широкий ассортимент SPI Flash с поддержкой Quad режимов.
Модель: MX25L25645G Объем: 256 Мбит (32 МБ) Интерфейсы: SPI, Dual SPI, QOUT, QIO Скорость в QOUT: до 80 МГц = 40 МБайт/с Особенности: высокая надежность, широкий температурный диапазон.
Модель: MX25L51245G Объем: 512 Мбит (64 МБ) Интерфейсы: SPI, Dual SPI, QOUT, QIO Скорость в QOUT: до 80 МГц = 40 МБайт/с Особенности: один из самых больших объемов в серии MX25L.
3. Micron - MT25Q Series
Micron (ранее Numonyx) производит высоконадежные SPI Flash микросхемы.
Модель: MT25QL256ABA Объем: 256 Мбит (32 МБ) Интерфейсы: SPI, Dual SPI, QOUT, QIO Скорость в QOUT: до 80 МГц = 40 МБайт/с Особенности: Поддержка 4-байтной адресации, высокая производительность.
4. Adesto (Renesas) - AT25 Series
Модель: AT25SF641 Объем: 64 Мбит (8 МБ) Интерфейсы: SPI, Dual SPI, QOUT Скорость в QOUT: до 66 МГц = 33 МБайт/с Особенности: фокус на низкое энергопотребление для IoT устройств.
[Сравнительная таблица примеров QOUT Flash]
Производитель
Модель
Объем
Макс. скорость QOUT
Особенности
Winbond
W25Q128JV
128 Мбит (16 мегабайт)
40 МБайт/с
Самая популярная, полная поддержка Quad
W25Q256JV
256 Мбит (32 мегабайта)
Больший объем, обратная совместимость
Macronix
MX25L25645G
256 Мбит (32 мегабайта)
40 МБайт/с
Высокая надежность
MX25L51245G
512 Мбит (64 мегабайта)
Больший объем
Micron
MT25QL256ABA
256 Мбит (32 мегабайта)
40 МБайт/с
Промышленные применения
Adesto
AT25SF641
64 Мбит (8 мегабайт)
33 МБайт/с
Высокая производительность
[Как активировать режим QOUT?]
Для использования режима QOUT необходимо:
1. Отправить специальную команду включения Quad режима (обычно команда `0x35` или `0x38`) 2. Установить соответствующие биты в регистрах конфигурации 3. Для чтения данных использовать команды Quad Output Read (например, `0x6B`)
Пример последовательности команд для QOUT:
1. Write Enable (0x06) 2. Write Status Register (0x01) - установить биты для QE (Quad Enable) 3. Quad Output Read (0x6B) - команда чтения в режиме QOUT
Преимущества QOUT перед стандартным SPI:
- В 4 раза выше скорость чтения по сравнению с Standard SPI - Обратная совместимость с контроллерами, не поддерживающими полноценный QPI - Простота реализации - не требуется переводить всю микросхему в Quad режим
[Когда использовать QOUT?]
QOUT идеально подходит для:
- Систем загрузки, где требуется быстрая загрузка прошивки - Приложений с преимущественно операциями чтения - Проектов, где важна обратная совместимость со старыми контроллерами - Устройств с ограниченными выводами микроконтроллера
Важные замечания:
1. QE (Quad Enable) бит должен быть установлен в регистре конфигурации перед использованием QOUT 2. Проверьте даташит - конкретные команды и биты конфигурации могут отличаться у разных производителей 3. Настройка задержки - может потребоваться настройка dummy cycles для оптимальной работы
Большинство современных SPI Flash микросхем поддерживают QOUT, что делает этот режим отличным выбором для ускорения операций чтения без перехода на более сложные интерфейсы типа Octal SPI. Даташиты на некоторые микросхемы Flash SPI QOUT см. в архиве [1].
Практический выбор для ESP32-S3:
- Начните с DIO: этот режим часто является самым надежным по умолчанию для прошивки и начальной загрузки, даже если в проекте затем активируется QIO. - Перейдите на QIO для скорости: если ваша плата и flash-чип поддерживают Quad SPI (все необходимые выводы подключены, а чип из списка поддерживаемых, например, от ISSI, GD, Winbond или MXIC), смело выбирайте QIO в menuconfig для максимальной производительности готового устройства. - Проверьте поддержку железа: Режимы QIO/QOUT могут не работать, если на плате не подключены выводы WP и HOLD flash-чипа или если сам чип их не поддерживает.
[Enable Octal Flash]
Опция Enable Octal Flash (или CONFIG_ESPTOOLPY_OCT_FLASH) активирует поддержку работы с чипами внешней flash-памяти, которые используют высокоскоростной 8-битный интерфейс (OPI), что значительно увеличивает скорость обмена данными по сравнению со стандартным 4-битным (Quad SPI) режимом.
Пример подключения MT35XU512 к ESP32-S3:
Что такое Octal Flash: это flash-память с 8-линейным (Octal) интерфейсом. Вместо традиционной передачи 1 или 4 бит за такт, такой чип может передавать 8 бит одновременно. В конфигурации ESP-IDF эта опция сообщает системе, что на вашей плате установлен именно такой чип. Главное преимущество такого подключения — многократное увеличение пропускной способности при работе с внешней памятью. Это критически важно для задач, требующих обработки больших объемов данных: распознавание речи и изображений, работа с графическими интерфейсами (LVGL), аудио-потоки.
Совместная работа с PSRAM: часто высокоскоростная Octal flash используется в паре с Octal PSRAM, что позволяет создать мощную связку для хранения и выполнения ресурсоемких приложений.
Активировать опцию можно командой idf.py menuconfig в разделе Serial flasher config.
Чтобы избежать ошибок, важно понимать разницу между типами памяти. В таблице ниже сравниваются два основных типа:
Octal SPI Flash это развитие стандартной SPI Flash (Serial Peripheral Interface). Если классическая SPI использует 4 линии для данных (SI, SO, WP#, HOLD#), а в режиме Quad SPI — все 4 линии для передачи данных, то Octal SPI использует 8 линий данных (IO0-IO7) для передачи.
Основные преимущества:
- Высокая скорость: скорость передачи данных может достигать 400 МБайт/с и выше, что в 4-8 раз быстрее, чем у обычной NOR Flash. - Широкая шина: 8 бит за такт вместо 1 или 4. - XIP (Execute-In-Place): позволяет процессору исполнять код напрямую из flash-памяти, без предварительной загрузки в оперативную память, что критично для высокопроизводительных встроенных систем.
Они часто используются в качестве загрузочной памяти в устройствах, требующих высокой скорости: маршрутизаторы, автомобильные системы, телевизоры, SSD-накопители (для хранения прошивки контроллера) и т.д.
[Примеры микросхем по производителям]
1. Micron / Winbond
Эти производители являются одними из лидеров на рынке.
Модель: MT35 Series (от Micron) Пример: MT35XU512ABA1G12 Объем: 512 Мбит (64 МБ) Интерфейс: Octal SPI (x8 DDR) Скорость: lо 200 МГц (DDR) = 400 МБайт/с Особенности: gоддержка режима XIP, низкое энергопотребление, высокая надежность. Часто используется в сетевом оборудовании и автомобильной электронике.
Модель: W25Q Series (от Winbond) Пример: W25Q256JWDIQ / W25Q01JVEIQ Объем: 256 Мбит (32 МБ) и 1 Гбит (128 МБ) соответственно. Интерфейс: Quad SPI / Dual SPI, но с поддержкой QPI (Quad Peripheral Interface) и команд для ускоренной работы. Некоторые модели в этой линейке имеют режимы, близкие к Octal. Скорость: до 166 МГц (в режиме QPI) = ~80 МБайт/с. Особенности: очень популярная серия благодаря надежности и доступности. Winbond также имеет более новые серии (например, W74M), которые являются полноценными Octal Flash.
2. Macronix
Macronix активно развивает эту технологию и предлагает решения с очень высокой скоростью.
Модель: MX66U Series Пример: MX66U2G45GXDI00 Объем: 2 Гбита (256 МБ) Интерфейс: Octal DDR SPI Скорость: до 200 МГц (DDR) = 400 МБайт/с Особенности: один из самых больших объемов в классе Octal SPI NOR Flash. Идеально для хранения и исполнения сложной прошивки и графических данных.
Модель: MX25U Series Пример: MX25UM51345GXDI00 Объем: 512 Мбит (64 МБ) Интерфейс: Octal DDR SPI Скорость: до 166 МГц (DDR) = 332 МБайт/с Особенности: поддержка HyperBus (об этом ниже), что делает их совместимыми с широким спектром процессоров.
3. Cypress (ныне часть Infineon)
Cypress (ранее Spansion) — пионер в области высокоскоростной flash-памяти. Их интерфейс HyperFlash™ является фактическим стандартом для Octal SPI.
Модель: S26KS Series (HyperFlash™) Пример: S26KS512SDPBHI020 Объем: 512 Мбит (64 МБ) Интерфейс: HyperBus™ (который использует 8-битную шину данных + сигналы дифференциальных тактовых импульсов) Скорость: до 166 МГц (DDR) = 332 МБайт/с Особенности: специально разработан для режима XIP. Широко используется в промышленных и автомобильных применениях. HyperBus — это не "чистый" SPI, а более продвинутый протокол, построенный на той же физической 8-битной шине.
4. Adesto (ныне часть Dialog Semiconductor, а затем Renesas)
Модель: ATXP Series Пример: ATXP032 Объем: 32 Мбит (4 МБ) Интерфейс: Octal SPI Скорость: до 80 МГц (SDR) = 80 МБайт/с. Особенности: фокус на низкое энергопотребление и надежность для IoT-устройств.
[Ключевые отличия и что искать в даташите]
Когда вы ищете микросхему Octal Flash, обращайте внимание на следующие параметры в документации:
SDR (Single Data Rate): данные передаются только по одному фронту тактового импульса. DDR (Double Data Rate): данные передаются и по фронту, и по спаду тактового импульса. DDR — это то, что дает максимальную производительность.
3. Тактовая частота: указывается в МГц. Для DDR скорость в МБайт/с = (Частота * 8 бит * 2) / 8 = Частота * 2.
NOR Flash: Подавляющее большинство Octal-микросхем — это NOR. Они обеспечивают быстрый произвольный доступ, что необходимо для XIP. NAND Flash: Существуют и Octal NAND решения (например, от Micron), но они используются для последовательного хранения больших объемов данных, а не для исполнения кода.
[Сравнительная таблица примеров]
Производитель
Модель
Объем
Интерфейс
Макс. скорость
Ключевая особенность
Micron
MT35XU512ABA1G12
512 Мбит (64 мегабайта)
Octal DDR SPI
400 МБайт/с
Высокая надежность, XIP
Macronix
MX66U2G45GXDI00
2 Гбита (256 мегабайт)
Очень большой объем
Cypress
S26KS512SDPBHI020
512 Мбит (64 мегабайта)
HyperBus
332 МБайт/с
Стандарт HyperFlash, XIP
Winbond
W25Q256JWDIQ
256 Мбит (32 мегабайта)
Quad SPI
~80 МБайт/с
Популярность, доступность
Выбор конкретной микросхемы Octal SPI зависит от требований вашего проекта:
- Для максимальной производительности и XIP смотрите в сторону Micron MT35 или Cypress HyperFlash. - Для больших объемов данных рассматривайте Macronix MX66U. - Для бюджетных решений, где достаточно высокой скорости Quad SPI, подойдут Winbond W25Q.
Перед выбором всегда проверяйте совместимость с вашим процессором или микроконтроллером, так как для работы с Octal SPI требуется аппаратная поддержка этого интерфейса на стороне хоста.
Даташиты на некоторые микросхемы Octal Flash SPI см. в архиве [1].
Важные предупреждения и частые ошибки:
- Самая распространенная ошибка — активировать `Enable Octal Flash` на плате с обычной Quad flash. Это приведет к ошибке на этапе загрузки, так как система не сможет найти и проинициализировать ожидаемый чип памяти.
- Проверка eFuse: для работы Octal flash на аппаратном уровне должен быть записан специальный eFuse-бит `FLASH_TYPE`. На модулях от Espressif (например, WROOM-2) это делается на производстве. Если вы собираете собственную плату, может потребоваться записать этот бит самостоятельно командой `idf.py efuse-burn FLASH_TYPE 1`. Помните, что эта операция необратима.
- Типичные симптомы ошибки: если вы столкнулись с ошибками `Octal Flash option selected, but EFUSE not configured!` или `Detected MXIC Flash, but memory type is not Octal` — первым делом проверьте, тот ли тип памяти вы выбрали в menuconfig.