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

Регистры ESP32-S3

Регистры периферии ESP32-S3 (два ядра Xtensa LX7): базовые адреса блоков, смещения, поля и значения после сброса по SVD Espressif, сверенные с Technical Reference Manual v1.8, и макросы ESP-IDF для доступа к ним из кода.

Периферия ESP32-S3 лежит в окне с адреса 0x6000 0000: у каждого блока свой базовый адрес, регистры 32-битные. У блоков из нескольких экземпляров — UART0…UART2, GP-SPI2 и GP-SPI3, I2C0 и I2C1, TIMG0 и TIMG1 — набор регистров одинаковый. Макросы ESP-IDF для UART, SPI и групп таймеров принимают номер экземпляра (UART_CONF0_REG(2)), а макросы I2C — нет: они ссылаются на базу DR_REG_I2C_BASE.

Данные взяты из официального SVD-файла Espressif (репозиторий espressif/svd, Apache-2.0) и сверены с главами Technical Reference Manual v1.8 от марта 2026 года: смещения — с таблицами Register Summary, поля и значения после сброса — с рисунками регистров. Где SVD расходится с руководством, страница следует руководству, а противоречия внутри самого руководства названы на страницах блоков.

Регистры Wi-Fi, Bluetooth, USB OTG, LCD_CAM, I2S, MCPWM, PCNT, TWAI, SD/MMC, GDMA, кэша и криптографических ускорителей в эту волну не вошли. Матрица прерываний показана для ядра 0; у ядра 1 такой же набор регистров на 0x800 дальше.

Блоки периферии

Адреса всех блоков

Базовые адреса периферии по SVD-файлу Espressif. Страницы с описанием регистров есть у блоков со ссылкой; остальные — Wi-Fi, Bluetooth, криптографические ускорители, кэш и системные блоки — готовятся.

БлокБазовый адрес
UART00x6000 0000
SPI10x6000 2000
SPI00x6000 3000
GPIO0x6000 4000
GPIO_SD0x6000 4F00
EFUSE0x6000 7000
RTC_CNTL0x6000 8000
RTC_IO0x6000 8400
SENS0x6000 8800
RTC_I2C0x6000 8C00
IO_MUX0x6000 9000
UHCI10x6000 C000
I2S00x6000 F000
UART10x6001 0000
I2C00x6001 3000
UHCI00x6001 4000
RMT0x6001 6000
PCNT0x6001 7000
LEDC0x6001 9000
BB0x6001 D000
MCPWM00x6001 E000
TIMG00x6001 F000
TIMG10x6002 0000
SYSTIMER0x6002 3000
SPI20x6002 4000
SPI30x6002 5000
APB_CTRL0x6002 6000
I2C10x6002 7000
SDHOST0x6002 8000
PERI_BACKUP0x6002 A000
TWAI00x6002 B000
MCPWM10x6002 C000
I2S10x6002 D000
UART20x6002 E000
RNG0x6003 4F6C
USB_DEVICE0x6003 8000
USB_WRAP0x6003 9000
AES0x6003 A000
SHA0x6003 B000
RSA0x6003 C000
DS0x6003 D000
HMAC0x6003 E000
DMA0x6003 F000
APB_SARADC0x6004 0000
LCD_CAM0x6004 1000
USB00x6008 0000
SYSTEM0x600C 0000
SENSITIVE0x600C 1000
INTERRUPT_CORE00x600C 2000
INTERRUPT_CORE10x600C 2000
EXTMEM0x600C 4000
XTS_AES0x600C C000
ASSIST_DEBUG0x600C E000
WCL0x600D 0000

Выводы чипа и функции GPIO — на странице ESP32-S3.

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

Чем регистры ESP32-S3 отличаются от ESP32-C3?

Блоки похожи, но шире: у ESP32-S3 45 выводов в двух банках регистров GPIO, три UART с общей памятью 1 КБ, два контроллера SPI для внешних устройств (SPI2 с восьмилинейным режимом и SPI3), два I2C, восемь каналов LEDC, по два таймера в группе TIMG, восемь каналов RMT, отдельный блок SENS для RTC-контроллеров АЦП и сенсоров касания и матрица прерываний на два ядра Xtensa вместо одного RISC-V.

Как обратиться к регистру ESP32-S3 из программы?

Подключить заголовок блока из components/soc/esp32s3/register/soc, например soc/uart_reg.h: в нём адреса регистров (UART_CONF0_REG(i)) и маски полей (UART_PARITY_EN). Макросы доступа REG_WRITE, REG_READ, REG_SET_BIT, REG_CLR_BIT и REG_SET_FIELD объявлены в soc/soc.h. Перед работой с блоком у него должны быть включены тактирование и снят сброс в регистрах SYSTEM.

Источники

  1. Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — таблицы Register Summary и рисунки регистров глав периферии; адреса блоков — глава System and Memory
  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

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