IO MUX
У каждого вывода ESP32 есть несколько прямых подключений к периферии: UART0, JTAG, шине флеш-памяти. Какое из них сейчас работает, выбирает IO MUX — мультиплексор выводов. Всё остальное идёт через матрицу GPIO.
Обновлено Редакция GAW
IO MUX (мультиплексор ввода-вывода) — блок ESP32, который подключает каждый внешний вывод к одной из нескольких закреплённых за ним функций. Номер функции записывают в регистр вывода: например, у ESP32-S3 вывод GPIO43 в функции F0 — передатчик UART0 U0TXD, а в функции F1 — обычный GPIO43.
Функций у вывода немного:
| Чип | Функций IO MUX | Прямые периферии |
|---|---|---|
| ESP32 | до 6 (Function 0–5) | UART, SPI, SDIO, JTAG, Ethernet MAC |
| ESP32-S3 | 5 (F0–F4) | UART0/1, JTAG, SPI0/1, SPI2 |
| ESP32-C6 | 3 (F0–F2) | UART0, JTAG, SPI0/1, SPI2, SDIO |
Одна из функций — GPIO: через неё вывод подключается к матрице GPIO, которая выводит почти любой сигнал периферии на любой вывод. Прямое подключение через IO MUX быстрее: Espressif предупреждает, что маршрутизация через матрицу может добавить задержку. Поэтому для быстрых сигналов предпочтительны выводы с прямой функцией, а для UART, I²C или ШИМ удобна матрица.
Идея та же, что альтернативные функции выводов у STM32 и AVR: вывод один, а назначений несколько, и выбирает их программа.
Глубокий сон. В глубоком сне IO MUX не работает. Часть выводов подключена ещё к RTC IO MUX (ESP32, S2, S3) или LP IO MUX (C5, C6) — через него ими управляют ULP-сопроцессор или LP-ядро. Функции IO MUX каждого вывода собраны в таблицах на страницах чипов: ESP32, ESP32-S3, ESP32-C6.
Частые вопросы
Чем IO MUX отличается от матрицы GPIO?
IO MUX подключает вывод к одной из нескольких периферий напрямую — например, U0TXD или MTCK. Матрица GPIO может вывести почти любой сигнал на любой вывод, но, как предупреждает Espressif, это может добавить задержку. Для быстрых сигналов вроде шины SPI лучше брать выводы с прямой функцией IO MUX.
Сколько функций у вывода ESP32?
Зависит от чипа: у классического ESP32 до шести (Function 0–5), у ESP32-S3 и S2 — пять (F0–F4), у ESP32-C3, C5 и C6 — три (F0–F2). Одна из функций — сам GPIO, через который вывод подключается к матрице GPIO.
Работает ли IO MUX в глубоком сне?
Нет. По даташитам Espressif в глубоком сне обычный IO MUX не работает; часть выводов подключена ещё и к RTC IO MUX (ESP32, S2, S3) или LP IO MUX (C5, C6) — через него ими управляют сопроцессор или малопотребляющее ядро.
Источники
- Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 2.3.1 — каждый вывод подключается к одному из пяти сигналов IO MUX, F0–F4; часть идёт через матрицу GPIO, которая даёт доступ почти к любой периферии ценой задержки сигнала, часть подключена напрямую — UART0/1, JTAG, SPI0/1, SPI2; табл. 2-4 — функции выводов; разд. 2.3.2 — в глубоком сне IO MUX не работает, его заменяет RTC IO MUX
- Espressif. ESP32-C6 Series Datasheet v1.5 — разд. 2.3.1 — три функции IO MUX, F0–F2, прямые — UART0, JTAG, SPI0/1, SPI2, SDIO; разд. 2.3.2 — LP IO MUX на GPIO0–7 работает в глубоком сне, выводы подключены к LP CPU или периферии LP
- Espressif. ESP32 Series Datasheet v5.3 — приложение A.1, примечание 6 — до шести цифровых функций, Function 0–5, регистр выбора функции принимает номер N; примечание 12 — матрица GPIO выводит сигналы модулей на любой вывод
Нашли ошибку?
Смотрите также
- Матрица GPIOПрограммное соединение сигналов периферии ESP32 с любыми выводами
- ESP32-S3: выводы и GPIO45 GPIO: функции, свободные и занятые выводы, флеш и PSRAM, strapping, USB, JTAG, токи
- ESP32: выводы и GPIO34 GPIO: функции, свободные выводы, только входы, флеш-память, strapping, JTAG, токи
- Альтернативная функция выводаAF: вывод под управлением периферии вместо порта