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

Регистры 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_MUX0x6000 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_CTRL0x0000Такты на CLK_OUT1…3 и питание GPIO33…37, 47, 480x0000 2000
IO_MUX_GPIOn_REG0x0004 + n · 0x0004Функция и электрические настройки вывода GPIOn0x0000 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.

1514131211109876543210
PAD_POWER_CTRLSWITCH_PRT_NUMPIN_CTRL_CLK3PIN_CTRL_CLK2PIN_CTRL_CLK1
ПолеБитыДоступСбросНазначение
PAD_POWER_CTRL15R/W0Питание GPIO33…37, 47 и 48: 1 — VDD_SPI 1,8 В, 0 — VDD3P3_CPU 3,3 В (PAD_POWER_SEL в ESP-IDF)
SWITCH_PRT_NUM14:12R/W0x2Задержка переключения питания выводов в тактах APB (PAD_POWER_SWITCH_DELAY в ESP-IDF)
PIN_CTRL_CLK311:8R/W0x0Такт на CLK_OUT3: 0x0 — I2S0, 0xF — I2S1 (CLK_OUT3 в ESP-IDF)
PIN_CTRL_CLK27:4R/W0x0Такт на CLK_OUT2: 0x0 — I2S0, 0xF — I2S1 (CLK_OUT2 в ESP-IDF)
PIN_CTRL_CLK13:0R/W0x0Такт на 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.

1514131211109876543210
FILTER_ENMCU_SELFUN_DRVFUN_IEFUN_WPUFUN_WPDMCU_DRVMCU_IEMCU_WPUMCU_WPDSLP_SELMCU_OE
ПолеБитыДоступСбросНазначение
FILTER_EN15R/W01 — фильтр входа: проходят импульсы длиннее двух тактов APB
MCU_SEL14:12R/W0x0Функция вывода по таблице IO MUX: 0 — функция 0, 1 — функция 1 (GPIO) и так далее
FUN_DRV11:10R/W0x2Сила выхода: 0 — ~5 мА, 1 — ~10 мА, 2 — ~20 мА, 3 — ~40 мА; у GPIO17 и GPIO18 1 — ~20 мА, 2 — ~10 мА
FUN_IE9R/W01 — вход разрешён
FUN_WPU8R/W01 — подтяжка к питанию (FUN_PU в ESP-IDF)
FUN_WPD7R/W01 — подтяжка к земле (FUN_PD в ESP-IDF)
MCU_DRV6:5R/W0x0Сила выхода во сне, значения как у FUN_DRV
MCU_IE4R/W01 — вход разрешён во сне
MCU_WPU3R/W01 — подтяжка к питанию во сне
MCU_WPD2R/W01 — подтяжка к земле во сне
SLP_SEL1R/W01 — в лёгком сне действуют поля MCU_* вместо FUN_*
MCU_OE0R/W01 — выход разрешён во сне

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

Какой ток даёт вывод 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.

Источники

  1. Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 6: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
  2. Espressif. SVD svd/esp32s3.svd, версия 21 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
  3. Espressif. ESP-IDF v6.1: заголовки components/soc/esp32s3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT

Нашли ошибку в регистрах?

Другие регистры ESP32-S3

Статьи, инструменты и термины