Перейти к содержанию

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-S35 (F0–F4)UART0/1, JTAG, SPI0/1, SPI2
ESP32-C63 (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) — через него ими управляют сопроцессор или малопотребляющее ядро.

Источники

  1. 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
  2. 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
  3. Espressif. ESP32 Series Datasheet v5.3 — приложение A.1, примечание 6 — до шести цифровых функций, Function 0–5, регистр выбора функции принимает номер N; примечание 12 — матрица GPIO выводит сигналы модулей на любой вывод

Нашли ошибку?