Регистры 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 дальше.
Блоки периферии
- GPIO — выводы общего назначения и матрица GPIOGPIO 0x6000 4000; 34 регистра
- IO MUX — мультиплексор функций и электрические настройки выводовIO_MUX 0x6000 9000; 2 регистра
- UART — универсальный асинхронный приёмопередатчикUART0 0x6000 0000, UART1 0x6001 0000, UART2 0x6002 E000; 33 регистра
- SPI — контроллеры SPI общего назначения GP-SPI2 и GP-SPI3SPI2 0x6002 4000, SPI3 0x6002 5000; 23 регистра
- I2C — контроллеры шины I2CI2C0 0x6001 3000, I2C1 0x6002 7000; 27 регистров
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC 0x6001 9000; 13 регистров
- TIMG — группа таймеров: таймеры общего назначения и сторожTIMG0 0x6001 F000, TIMG1 0x6002 0000; 26 регистров
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT 0x6001 6000; 18 регистров
- SYSTIMER — системный таймерSYSTIMER 0x6002 3000; 18 регистров
- RTC_CNTL — управление питанием, сном и RTC-доменомRTC_CNTL 0x6000 8000; 54 регистра
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC 0x6004 0000; 16 регистров
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS 0x6000 8800; 32 регистра
- USB Serial/JTAG — встроенный USB-переходник на последовательный порт и JTAGUSB_DEVICE 0x6003 8000; 17 регистров
- eFuse — однократно программируемая память настроек и ключейEFUSE 0x6000 7000; 48 регистров
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0 0x600C 2000; 63 регистра
Адреса всех блоков
Базовые адреса периферии по SVD-файлу Espressif. Страницы с описанием регистров есть у блоков со ссылкой; остальные — Wi-Fi, Bluetooth, криптографические ускорители, кэш и системные блоки — готовятся.
| Блок | Базовый адрес |
|---|---|
| UART0 | 0x6000 0000 |
| SPI1 | 0x6000 2000 |
| SPI0 | 0x6000 3000 |
| GPIO | 0x6000 4000 |
| GPIO_SD | 0x6000 4F00 |
| EFUSE | 0x6000 7000 |
| RTC_CNTL | 0x6000 8000 |
| RTC_IO | 0x6000 8400 |
| SENS | 0x6000 8800 |
| RTC_I2C | 0x6000 8C00 |
| IO_MUX | 0x6000 9000 |
| UHCI1 | 0x6000 C000 |
| I2S0 | 0x6000 F000 |
| UART1 | 0x6001 0000 |
| I2C0 | 0x6001 3000 |
| UHCI0 | 0x6001 4000 |
| RMT | 0x6001 6000 |
| PCNT | 0x6001 7000 |
| LEDC | 0x6001 9000 |
| BB | 0x6001 D000 |
| MCPWM0 | 0x6001 E000 |
| TIMG0 | 0x6001 F000 |
| TIMG1 | 0x6002 0000 |
| SYSTIMER | 0x6002 3000 |
| SPI2 | 0x6002 4000 |
| SPI3 | 0x6002 5000 |
| APB_CTRL | 0x6002 6000 |
| I2C1 | 0x6002 7000 |
| SDHOST | 0x6002 8000 |
| PERI_BACKUP | 0x6002 A000 |
| TWAI0 | 0x6002 B000 |
| MCPWM1 | 0x6002 C000 |
| I2S1 | 0x6002 D000 |
| UART2 | 0x6002 E000 |
| RNG | 0x6003 4F6C |
| USB_DEVICE | 0x6003 8000 |
| USB_WRAP | 0x6003 9000 |
| AES | 0x6003 A000 |
| SHA | 0x6003 B000 |
| RSA | 0x6003 C000 |
| DS | 0x6003 D000 |
| HMAC | 0x6003 E000 |
| DMA | 0x6003 F000 |
| APB_SARADC | 0x6004 0000 |
| LCD_CAM | 0x6004 1000 |
| USB0 | 0x6008 0000 |
| SYSTEM | 0x600C 0000 |
| SENSITIVE | 0x600C 1000 |
| INTERRUPT_CORE0 | 0x600C 2000 |
| INTERRUPT_CORE1 | 0x600C 2000 |
| EXTMEM | 0x600C 4000 |
| XTS_AES | 0x600C C000 |
| ASSIST_DEBUG | 0x600C E000 |
| WCL | 0x600D 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.
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — таблицы Register Summary и рисунки регистров глав периферии; адреса блоков — глава System and Memory
- 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
Нашли ошибку в регистрах?