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

Матрица GPIO

У большинства микроконтроллеров интерфейс можно вывести только на несколько фиксированных выводов. У ESP32 есть матрица GPIO: сигнал почти любого периферийного блока программно соединяется почти с любым выводом.

Обновлено Редакция GAW

Матрица GPIO — коммутатор внутри ESP32, который программно соединяет сигналы периферийных блоков с выводами чипа. Благодаря ей UART, I²C, ШИМ и другие интерфейсы можно назначить почти на любой GPIO, а не только на фиксированные выводы.

У ESP32 два пути от периферии к выводу:

ПутьКак работаетКогда использовать
IO MUXу каждого вывода несколько фиксированных функций, как альтернативные функции у других МКбыстрые интерфейсы на их родных выводах: SPI, JTAG, UART0
Матрица GPIOлюбой сигнал периферии на любой выводвсё остальное: дополнительные UART, I²C, ШИМ, удобная разводка платы

По даташиту ESP32-S3 матрица — полный коммутатор: 175 входных сигналов периферии можно взять с любого вывода, а 184 выходных сигнала вывести на любой вывод. В матрице есть синхронизация и фильтр входных сигналов. Цена гибкости — задержка: сигнал проходит через дополнительную логику, поэтому быстрые интерфейсы лучше подключать через IO MUX к их фиксированным выводам.

Какие выводы брать. Даташиты ESP32-S3 и ESP32-C3 делят выводы по приоритетам:

  • свободные — можно использовать без ограничений;
  • с осторожностью — выводы обвязки загрузки, линии USB, JTAG и UART0: на них есть важные функции;
  • занятые — выводы флеш-памяти и PSRAM: их не используют.

Поэтому на отладочных платах вроде ESP32-S3-DevKitC-1 и ESP32-C3-DevKitM-1 у выводов показаны только функции IO MUX: остальные интерфейсы через матрицу доступны почти везде.

Частые вопросы

Можно ли на ESP32 вывести UART на любой пин?

Почти на любой. По даташитам Espressif сигналы периферии через матрицу GPIO соединяются с любыми выводами: у ESP32-S3 это 175 входных и 184 выходных сигнала. Ограничения — выводы флеш-памяти, выводы обвязки загрузки и выводы только для входа у старого ESP32.

Чем матрица GPIO отличается от IO MUX?

IO MUX подключает к выводу один из нескольких фиксированных сигналов напрямую, как альтернативные функции у других микроконтроллеров. Матрица GPIO подключает почти любой сигнал, но программно и через дополнительную логику. По даташиту ESP32-S3 у этого есть цена — сигнал может получить задержку, поэтому быстрые интерфейсы лучше выводить на их фиксированные выводы через IO MUX.

Какие выводы ESP32 выбирать в первую очередь?

По таблице приоритетов даташитов Espressif: сначала свободные выводы без ограничений, потом с осторожностью — выводы обвязки загрузки, USB, JTAG и UART0, и не трогать выводы, занятые флеш-памятью и PSRAM.

Источники

  1. Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 2.3.1 — часть функций идёт через матрицу GPIO, которая даёт выводу доступ почти к любому сигналу периферии, но может добавить задержку; часть — напрямую через IO MUX (UART0/1, JTAG, SPI0/1, SPI2); разд. 4.1.3.1 — полный коммутатор: 175 входных сигналов периферии от любого вывода, 184 выходных на любой вывод, синхронизация и фильтр входов, сигма-дельта выход; разд. 2.3.5 — приоритеты выводов P1–P4
  2. Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.1.3.1 — IO MUX и матрица GPIO: входные сигналы периферии с любых выводов, выходные — на любые; разд. 2.3.4 — интерфейсы без фиксированных выводов, например UART1, назначают на любые GPIO через матрицу

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