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

Регистры ESP32-C3

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

Периферия ESP32-C3 доступна ядру RISC-V через шину APB в окне с адреса 0x6000 0000: у каждого блока свой базовый адрес, регистры 32-битные и идут с шагом 4 байта. У блоков из нескольких экземпляров — UART0 и UART1, группы таймеров TIMG0 и TIMG1 — набор регистров одинаковый, отличается только базовый адрес, поэтому макросы ESP-IDF для них принимают номер экземпляра: UART_CONF0_REG(1).

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

Регистры Wi-Fi, Bluetooth и криптографических ускорителей (AES, SHA, RSA, HMAC, цифровая подпись) в первую волну не вошли: их почти не трогают напрямую, а драйверы ESP-IDF закрывают их целиком.

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

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

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

БлокБазовый адрес
UART00x6000 0000
SPI10x6000 2000
SPI00x6000 3000
GPIO0x6000 4000
GPIO_SD0x6000 4F00
RTC_CNTL0x6000 8000
EFUSE0x6000 8800
IO_MUX0x6000 9000
UHCI10x6000 C000
UART10x6001 0000
I2C00x6001 3000
UHCI00x6001 4000
RMT0x6001 6000
LEDC0x6001 9000
BB0x6001 D000
TIMG00x6001 F000
TIMG10x6002 0000
SYSTIMER0x6002 3000
SPI20x6002 4000
APB_CTRL0x6002 6000
RNG0x6002 6000
TWAI00x6002 B000
I2S00x6002 D000
AES0x6003 A000
SHA0x6003 B000
RSA0x6003 C000
DS0x6003 D000
HMAC0x6003 E000
DMA0x6003 F000
APB_SARADC0x6004 0000
USB_DEVICE0x6004 3000
SYSTEM0x600C 0000
SENSITIVE0x600C 1000
INTERRUPT_CORE00x600C 2000
EXTMEM0x600C 4000
XTS_AES0x600C C000
ASSIST_DEBUG0x600C E000

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

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

Как записать регистр ESP32-C3 без драйвера ESP-IDF?

Заголовки components/soc/esp32c3/register/soc/*_reg.h задают адрес каждого регистра и маски полей, а soc/soc.h — макросы доступа: REG_WRITE(UART_FIFO_REG(0), 'A') пишет слово, REG_SET_BIT и REG_CLR_BIT меняют биты, REG_SET_FIELD(reg, FIELD, value) записывает поле по его маске _V и сдвигу _S. Перед работой с блоком у него должны быть включены тактирование и снят сброс в регистрах SYSTEM.

Почему регистры SVD и руководства ESP32-C3 иногда не совпадают?

SVD генерируется из исходного описания чипа и содержит отладочные и неиспользуемые биты — например, поля второго ядра APPCPU в RTC_CNTL, которого у ESP32-C3 нет. Руководство описывает то, что поддерживается. Встречаются и опечатки руководства: смещения CPU_INT_PRI_n в заголовках регистров на 4 больше, чем в таблице Register Summary и в ESP-IDF; на страницах оставлены значения таблицы.

Источники

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

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