Регистры 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 закрывают их целиком.
Блоки периферии
- GPIO — выводы общего назначения и матрица GPIOGPIO 0x6000 4000; 19 регистров
- IO MUX — мультиплексор функций и электрические настройки выводовIO_MUX 0x6000 9000; 3 регистра
- UART — универсальный асинхронный приёмопередатчикUART0 0x6000 0000, UART1 0x6001 0000; 33 регистра
- SPI — контроллер SPI общего назначения GP-SPI2SPI2 0x6002 4000; 22 регистра
- I2C — контроллер шины I2CI2C0 0x6001 3000; 27 регистров
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC 0x6001 9000; 13 регистров
- TIMG — группа таймеров: таймер общего назначения и сторожTIMG0 0x6001 F000, TIMG1 0x6002 0000; 26 регистров
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT 0x6001 6000; 18 регистров
- SYSTIMER — системный таймерSYSTIMER 0x6002 3000; 16 регистров
- RTC_CNTL — управление питанием, сном и RTCRTC_CNTL 0x6000 8000; 52 регистра
- АЦП — 12-битный SAR АЦП и датчик температурыAPB_SARADC 0x6004 0000; 21 регистр
- USB Serial/JTAG — встроенный USB-порт: виртуальный COM-порт и JTAGUSB_DEVICE 0x6004 3000; 17 регистров
- eFuse — однократно программируемая память настроек и ключейEFUSE 0x6000 8800; 41 регистр
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0 0x600C 2000; 50 регистров
Адреса всех блоков
Базовые адреса периферии по SVD-файлу Espressif. Страницы с описанием регистров есть у блоков со ссылкой; остальные — Wi-Fi, Bluetooth, криптографические ускорители, кэш и системные блоки — готовятся.
| Блок | Базовый адрес |
|---|---|
| UART0 | 0x6000 0000 |
| SPI1 | 0x6000 2000 |
| SPI0 | 0x6000 3000 |
| GPIO | 0x6000 4000 |
| GPIO_SD | 0x6000 4F00 |
| RTC_CNTL | 0x6000 8000 |
| EFUSE | 0x6000 8800 |
| IO_MUX | 0x6000 9000 |
| UHCI1 | 0x6000 C000 |
| UART1 | 0x6001 0000 |
| I2C0 | 0x6001 3000 |
| UHCI0 | 0x6001 4000 |
| RMT | 0x6001 6000 |
| LEDC | 0x6001 9000 |
| BB | 0x6001 D000 |
| TIMG0 | 0x6001 F000 |
| TIMG1 | 0x6002 0000 |
| SYSTIMER | 0x6002 3000 |
| SPI2 | 0x6002 4000 |
| APB_CTRL | 0x6002 6000 |
| RNG | 0x6002 6000 |
| TWAI0 | 0x6002 B000 |
| I2S0 | 0x6002 D000 |
| AES | 0x6003 A000 |
| SHA | 0x6003 B000 |
| RSA | 0x6003 C000 |
| DS | 0x6003 D000 |
| HMAC | 0x6003 E000 |
| DMA | 0x6003 F000 |
| APB_SARADC | 0x6004 0000 |
| USB_DEVICE | 0x6004 3000 |
| SYSTEM | 0x600C 0000 |
| SENSITIVE | 0x600C 1000 |
| INTERRUPT_CORE0 | 0x600C 2000 |
| EXTMEM | 0x600C 4000 |
| XTS_AES | 0x600C C000 |
| ASSIST_DEBUG | 0x600C 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; на страницах оставлены значения таблицы.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — таблицы Register Summary и рисунки регистров глав периферии; адреса блоков — глава System and Memory
- Espressif. SVD svd/esp32c3.svd, версия 18 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32c3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?