Регистры IO MUX ESP32-S3
Регистры IO MUX ESP32-S3: функция каждого из 45 выводов, подтяжки к питанию и к земле, разрешение входа, сила выходного тока, фильтр помех и отдельные настройки на время лёгкого сна, а также выход тактов I2S на CLK_OUT1…3.
Блок IO MUX по адресу 0x6000 9000 содержит по регистру на вывод: IO_MUX_GPIOn_REG лежит по смещению 0x04 + 4 · n для n = 0…21 и 26…48. В ESP-IDF у этих регистров два имени — по номеру GPIO (IO_MUX_GPIO40_REG) и по названию площадки (PERIPHS_IO_MUX_MTDO_U для GPIO40).
Поле MCU_SEL выбирает функцию по таблице IO MUX: функция 1 у всех выводов — GPIO через матрицу, остальные — прямые подключения SPI, JTAG и UART в обход матрицы. Поля FUN_* действуют в обычной работе; если установлен SLP_SEL, в лёгком сне силу выхода, подтяжки и разрешение выхода берут из полей MCU_* (таблица 6.8-1 TRM).
Регистр PIN_CTRL выбирает такт I2S0 или I2S1 для выходов CLK_OUT1…CLK_OUT3 и питание выводов GPIO33…37, 47 и 48: VDD_SPI 1,8 В или VDD3P3_CPU 3,3 В.
| Экземпляр | Базовый адрес |
|---|---|
| IO_MUX | 0x6000 9000 |
Пример на C
GPIO4 — вход с подтяжкой, сила выхода GPIO5 (soc/io_mux_reg.h). Макросы доступа REG_WRITE, REG_READ, REG_SET_BIT, REG_CLR_BIT, REG_GET_BIT, REG_SET_FIELD и REG_GET_FIELD объявлены в soc/soc.h ESP-IDF; поле задаётся именем макроса без суффикса, маска и сдвиг берутся из его вариантов _V и _S.
#include "soc/io_mux_reg.h"
PIN_FUNC_SELECT(IO_MUX_GPIO4_REG, PIN_FUNC_GPIO); // функция 1 — GPIO
PIN_INPUT_ENABLE(IO_MUX_GPIO4_REG); // FUN_IE = 1
REG_SET_BIT(IO_MUX_GPIO4_REG, FUN_PU); // подтяжка к питанию
REG_CLR_BIT(IO_MUX_GPIO4_REG, FUN_PD); // без подтяжки к земле
REG_SET_FIELD(IO_MUX_GPIO5_REG, FUN_DRV, 3); // около 40 мАРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| PIN_CTRL | 0x0000 | Такты на CLK_OUT1…3 и питание GPIO33…37, 47, 48 | 0x0000 2000 |
| IO_MUX_GPIOn_REG | 0x0004 + n · 0x0004 | Функция и электрические настройки вывода GPIOn | 0x0000 0800 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
PIN_CTRL — такты на CLK_OUT1…3 и питание GPIO33…37, 47, 48
Смещение 0x0000, адрес 0x6000 9000, после сброса 0x0000 2000. TRM: регистр 6.35.
Значение после сброса по рисунку 6.35 TRM — 0x2000: SWITCH_PRT_NUM = 2, остальные поля 0. В SVD Espressif у регистра 0x7FF и нет полей PAD_POWER_CTRL и SWITCH_PRT_NUM; страница следует TRM.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PAD_POWER_CTRL | SWITCH_PRT_NUM | PIN_CTRL_CLK3 | PIN_CTRL_CLK2 | PIN_CTRL_CLK1 | |||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| PAD_POWER_CTRL | 15 | R/W | 0 | Питание GPIO33…37, 47 и 48: 1 — VDD_SPI 1,8 В, 0 — VDD3P3_CPU 3,3 В (PAD_POWER_SEL в ESP-IDF) |
| SWITCH_PRT_NUM | 14:12 | R/W | 0x2 | Задержка переключения питания выводов в тактах APB (PAD_POWER_SWITCH_DELAY в ESP-IDF) |
| PIN_CTRL_CLK3 | 11:8 | R/W | 0x0 | Такт на CLK_OUT3: 0x0 — I2S0, 0xF — I2S1 (CLK_OUT3 в ESP-IDF) |
| PIN_CTRL_CLK2 | 7:4 | R/W | 0x0 | Такт на CLK_OUT2: 0x0 — I2S0, 0xF — I2S1 (CLK_OUT2 в ESP-IDF) |
| PIN_CTRL_CLK1 | 3:0 | R/W | 0x0 | Такт на CLK_OUT1: 0x0 — I2S0, 0xF — I2S1 (CLK_OUT1 в ESP-IDF) |
IO_MUX_GPIOn_REG — функция и электрические настройки вывода GPIOn
45 копий, n = 0…21, 26…48: смещение 0x0004 + n · 0x0004, после сброса 0x0000 0800. TRM: регистр 6.36.
Значения после сброса на общем рисунке 6.36 TRM (0x800: FUN_DRV = 2) одинаковы для всех выводов; фактическое состояние каждого вывода после сброса — подтяжки и разрешение входа — дано в таблице IO MUX TRM. Поле MCU_DRV (биты 6:5) есть в TRM, но отсутствует в SVD.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| FILTER_EN | MCU_SEL | FUN_DRV | FUN_IE | FUN_WPU | FUN_WPD | MCU_DRV | MCU_IE | MCU_WPU | MCU_WPD | SLP_SEL | MCU_OE | ||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| FILTER_EN | 15 | R/W | 0 | 1 — фильтр входа: проходят импульсы длиннее двух тактов APB |
| MCU_SEL | 14:12 | R/W | 0x0 | Функция вывода по таблице IO MUX: 0 — функция 0, 1 — функция 1 (GPIO) и так далее |
| FUN_DRV | 11:10 | R/W | 0x2 | Сила выхода: 0 — ~5 мА, 1 — ~10 мА, 2 — ~20 мА, 3 — ~40 мА; у GPIO17 и GPIO18 1 — ~20 мА, 2 — ~10 мА |
| FUN_IE | 9 | R/W | 0 | 1 — вход разрешён |
| FUN_WPU | 8 | R/W | 0 | 1 — подтяжка к питанию (FUN_PU в ESP-IDF) |
| FUN_WPD | 7 | R/W | 0 | 1 — подтяжка к земле (FUN_PD в ESP-IDF) |
| MCU_DRV | 6:5 | R/W | 0x0 | Сила выхода во сне, значения как у FUN_DRV |
| MCU_IE | 4 | R/W | 0 | 1 — вход разрешён во сне |
| MCU_WPU | 3 | R/W | 0 | 1 — подтяжка к питанию во сне |
| MCU_WPD | 2 | R/W | 0 | 1 — подтяжка к земле во сне |
| SLP_SEL | 1 | R/W | 0 | 1 — в лёгком сне действуют поля MCU_* вместо FUN_* |
| MCU_OE | 0 | R/W | 0 | 1 — выход разрешён во сне |
Частые вопросы
Какой ток даёт вывод ESP32-S3 при разных FUN_DRV?
По TRM: 0 — около 5 мА, 1 — около 10 мА, 2 — около 20 мА, 3 — около 40 мА; у GPIO17 и GPIO18 значения 1 и 2 переставлены (1 — около 20 мА, 2 — около 10 мА). После сброса на общем рисунке регистра записано 2.
Что делает поле PAD_POWER_CTRL регистра PIN_CTRL ESP32-S3?
Выбирает питание выводов GPIO33…37, GPIO47 и GPIO48: 1 — VDD_SPI 1,8 В, 0 — VDD3P3_CPU 3,3 В. Поля нет в SVD Espressif, но оно есть в TRM и в заголовке ESP-IDF под именем PAD_POWER_SEL; рядом лежит задержка переключения питания SWITCH_PRT_NUM (PAD_POWER_SWITCH_DELAY в ESP-IDF) в тактах APB.
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 6: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32s3.svd, версия 21 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32s3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-S3
- Все регистры ESP32-S3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллеры SPI общего назначения GP-SPI2 и GP-SPI3SPI_CMD_REG, SPI_ADDR_REG, SPI_CTRL_REG, SPI_CLOCK_REG
- I2C — контроллеры шины I2CI2C_SCL_LOW_PERIOD_REG, I2C_CTR_REG, I2C_SR_REG, I2C_TO_REG
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC_LSCHn_CONF0_REG, LEDC_LSCHn_HPOINT_REG, LEDC_LSCHn_DUTY_REG, LEDC_LSCHn_CONF1_REG
- TIMG — группа таймеров: таймеры общего назначения и сторожTIMG_TnCONFIG_REG, TIMG_TnLO_REG, TIMG_TnHI_REG, TIMG_TnUPDATE_REG
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT_CHnDATA_REG, RMT_CHnCONF0_REG, RMT_CHnCONF0_REG, RMT_CHnCONF1_REG
- SYSTIMER — системный таймерSYSTIMER_CONF_REG, SYSTIMER_UNITn_OP_REG, SYSTIMER_UNITn_LOAD_HI_REG, SYSTIMER_UNITn_LOAD_LO_REG
- RTC_CNTL — управление питанием, сном и RTC-доменомRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR1_PATT_TABn_REG
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS_SAR_READER1_CTRL_REG, SENS_SAR_MEAS1_CTRL2_REG, SENS_SAR_MEAS1_MUX_REG, SENS_SAR_ATTENn_REG
- USB Serial/JTAG — встроенный USB-переходник на последовательный порт и JTAGUSB_SERIAL_JTAG_EP1_REG, USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_INT_RAW_REG, USB_SERIAL_JTAG_INT_ST_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA0_REG, EFUSE_RD_REPEAT_DATA1_REG, EFUSE_RD_REPEAT_DATA2_REG
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0_MAC_INTR_MAP_REG, INTERRUPT_CORE0_MAC_NMI_MAP_REG, INTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_BB_INT_MAP_REG