Матрица 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.
Источники
- 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
- Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.1.3.1 — IO MUX и матрица GPIO: входные сигналы периферии с любых выводов, выходные — на любые; разд. 2.3.4 — интерфейсы без фиксированных выводов, например UART1, назначают на любые GPIO через матрицу
Нашли ошибку?
Смотрите также
- Альтернативная функция выводаAF: вывод под управлением периферии вместо порта
- ESP32-S3-DevKitC-144 контакта, АЦП, сенсоры, обвязка загрузки, два USB, RGB-светодиод, PSRAM
- ESP32-C3-DevKitM-130 контактов, 15 GPIO, АЦП, обвязка загрузки, USB, RGB-светодиод на GPIO8
- ESP32ESP32, S2, S3, C2, C3, C5, C6, H2, P4: ядра, радио, USB, GPIO — сравнение и выбор