Регистры USB Serial/JTAG ESP32-C3
Регистры контроллера USB Serial/JTAG ESP32-C3: обмен через виртуальный COM-порт (CDC-ACM) по конечной точке EP1, флаги свободного места и принятых данных, настройки PHY и подтяжек D+ и D−, состояние конечных точек и прерывания.
Содержание
- Пример на C
- Регистры блока
- USB_SERIAL_JTAG_EP1_REG
- USB_SERIAL_JTAG_EP1_CONF_REG
- USB_SERIAL_JTAG_INT_RAW_REG
- USB_SERIAL_JTAG_INT_ST_REG
- USB_SERIAL_JTAG_INT_ENA_REG
- USB_SERIAL_JTAG_INT_CLR_REG
- USB_SERIAL_JTAG_CONF0_REG
- USB_SERIAL_JTAG_TEST_REG
- USB_SERIAL_JTAG_JFIFO_ST_REG
- USB_SERIAL_JTAG_FRAM_NUM_REG
- USB_SERIAL_JTAG_IN_EPn_ST_REG
- USB_SERIAL_JTAG_OUT_EP0_ST_REG
- USB_SERIAL_JTAG_OUT_EP1_ST_REG
- USB_SERIAL_JTAG_OUT_EP2_ST_REG
- USB_SERIAL_JTAG_MISC_CONF_REG
- USB_SERIAL_JTAG_MEM_CONF_REG
- USB_SERIAL_JTAG_DATE_REG
Контроллер по адресу 0x6004 3000 даёт ESP32-C3 USB-порт на выводах GPIO18 (D−) и GPIO19 (D+) без внешнего преобразователя: компьютер видит виртуальный COM-порт для консоли и прошивки и отладчик JTAG для OpenOCD. Драйвер в компьютере стандартный, настройка не нужна.
Программа пишет байты в USB_SERIAL_JTAG_EP1_REG, пока установлен флаг SERIAL_IN_EP_DATA_FREE, и отдаёт пакет хосту записью 1 в WR_DONE. Принятые от хоста байты читаются из того же регистра, пока стоит SERIAL_OUT_EP_DATA_AVAIL. Буфер конечной точки — 64 байта.
| Экземпляр | Базовый адрес |
|---|---|
| USB_DEVICE | 0x6004 3000 |
Пример на C
Отправить строку в виртуальный COM-порт (soc/usb_serial_jtag_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/usb_serial_jtag_reg.h"
static void usb_puts(const char *s) {
while (*s) {
while (!REG_GET_BIT(USB_SERIAL_JTAG_EP1_CONF_REG,
USB_SERIAL_JTAG_SERIAL_IN_EP_DATA_FREE)) {}
REG_WRITE(USB_SERIAL_JTAG_EP1_REG, *s++);
}
REG_SET_BIT(USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_WR_DONE); // отправить пакет
}Регистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| USB_SERIAL_JTAG_EP1_REG | 0x0000 | Данные конечной точки CDC: запись и чтение байтов | 0x0000 0000 |
| USB_SERIAL_JTAG_EP1_CONF_REG | 0x0004 | Флаги конечной точки CDC и отправка пакета | 0x0000 0002 |
| USB_SERIAL_JTAG_INT_RAW_REG | 0x0008 | Необработанные флаги прерываний | 0x0000 0008 |
| USB_SERIAL_JTAG_INT_ST_REG | 0x000C | Флаги прерываний после маски разрешения | 0x0000 0000 |
| USB_SERIAL_JTAG_INT_ENA_REG | 0x0010 | Разрешение прерываний | 0x0000 0000 |
| USB_SERIAL_JTAG_INT_CLR_REG | 0x0014 | Сброс флагов прерываний записью 1 | 0x0000 0000 |
| USB_SERIAL_JTAG_CONF0_REG | 0x0018 | PHY, подтяжки D+ и D−, перестановка линий | 0x0000 4200 |
| USB_SERIAL_JTAG_TEST_REG | 0x001C | Тестовый режим выводов USB | 0x0000 0000 |
| USB_SERIAL_JTAG_JFIFO_ST_REG | 0x0020 | Состояние FIFO JTAG | 0x0000 0044 |
| USB_SERIAL_JTAG_FRAM_NUM_REG | 0x0024 | Номер последнего кадра SOF | 0x0000 0000 |
| USB_SERIAL_JTAG_IN_EPn_ST_REG | 0x0028 + n · 0x0004 | Состояние конечной точки IN n | 0x0000 0001 |
| USB_SERIAL_JTAG_OUT_EP0_ST_REG | 0x0038 | Состояние конечной точки OUT 0 | 0x0000 0000 |
| USB_SERIAL_JTAG_OUT_EP1_ST_REG | 0x003C | Состояние конечной точки OUT 1 | 0x0000 0000 |
| USB_SERIAL_JTAG_OUT_EP2_ST_REG | 0x0040 | Состояние конечной точки OUT 2 | 0x0000 0000 |
| USB_SERIAL_JTAG_MISC_CONF_REG | 0x0044 | Тактирование регистров | 0x0000 0000 |
| USB_SERIAL_JTAG_MEM_CONF_REG | 0x0048 | Питание и такт памяти USB | 0x0000 0002 |
| USB_SERIAL_JTAG_DATE_REG | 0x0080 | Версия блока: дата ревизии аппаратуры | 0x0200 7300 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
USB_SERIAL_JTAG_EP1_REG — данные конечной точки CDC: запись и чтение байтов
Смещение 0x0000, адрес 0x6004 3000, после сброса 0x0000 0000. TRM: регистр 30.1.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| RDWR_BYTE | 7:0 | R/W | 0x00 | Запись кладёт байт в буфер передачи хосту, чтение забирает принятый байт |
USB_SERIAL_JTAG_EP1_CONF_REG — флаги конечной точки CDC и отправка пакета
Смещение 0x0004, адрес 0x6004 3004, после сброса 0x0000 0002. TRM: регистр 30.6.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SERIAL_OUT_EP_DATA_AVAIL | SERIAL_IN_EP_DATA_FREE | WR_DONE | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| SERIAL_OUT_EP_DATA_AVAIL | 2 | RO | 0 | Есть принятые от хоста байты |
| SERIAL_IN_EP_DATA_FREE | 1 | RO | 1 | В буфере передачи есть место |
| WR_DONE | 0 | WT | 0 | Запись 1 отправляет накопленные байты хосту |
USB_SERIAL_JTAG_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x0008, адрес 0x6004 3008, после сброса 0x0000 0008. TRM: регистр 30.16.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OUT_EP2_ZERO_PAYLOAD_INT_RAW | OUT_EP1_ZERO_PAYLOAD_INT_RAW | USB_BUS_RESET_INT_RAW | IN_TOKEN_REC_IN_EP1_INT_RAW | STUFF_ERR_INT_RAW | CRC16_ERR_INT_RAW | CRC5_ERR_INT_RAW | PID_ERR_INT_RAW | SERIAL_IN_EMPTY_INT_RAW | SERIAL_OUT_RECV_PKT_INT_RAW | SOF_INT_RAW | JTAG_IN_FLUSH_INT_RAW | |||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_EP2_ZERO_PAYLOAD_INT_RAW | 11 | R/WTC/SS | 0 | Конечная точка 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_RAW | 10 | R/WTC/SS | 0 | Конечная точка 1 приняла пакет нулевой длины |
| USB_BUS_RESET_INT_RAW | 9 | R/WTC/SS | 0 | Хост сбросил шину USB |
| IN_TOKEN_REC_IN_EP1_INT_RAW | 8 | R/WTC/SS | 0 | Принят токен IN для конечной точки 1 |
| STUFF_ERR_INT_RAW | 7 | R/WTC/SS | 0 | Ошибка битстаффинга |
| CRC16_ERR_INT_RAW | 6 | R/WTC/SS | 0 | Ошибка CRC16 в принятом пакете |
| CRC5_ERR_INT_RAW | 5 | R/WTC/SS | 0 | Ошибка CRC5 в принятом пакете |
| PID_ERR_INT_RAW | 4 | R/WTC/SS | 0 | Ошибка PID в принятом пакете |
| SERIAL_IN_EMPTY_INT_RAW | 3 | R/WTC/SS | 1 | Буфер CDC IN пуст: хост забрал данные |
| SERIAL_OUT_RECV_PKT_INT_RAW | 2 | R/WTC/SS | 0 | Конечная точка CDC OUT приняла пакет от хоста |
| SOF_INT_RAW | 1 | R/WTC/SS | 0 | Принят кадр SOF от хоста (раз в миллисекунду) |
| JTAG_IN_FLUSH_INT_RAW | 0 | R/WTC/SS | 0 | Отправлен пакет JTAG IN |
USB_SERIAL_JTAG_INT_ST_REG — флаги прерываний после маски разрешения
Смещение 0x000C, адрес 0x6004 300C, после сброса 0x0000 0000. TRM: регистр 30.17.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OUT_EP2_ZERO_PAYLOAD_INT_ST | OUT_EP1_ZERO_PAYLOAD_INT_ST | USB_BUS_RESET_INT_ST | IN_TOKEN_REC_IN_EP1_INT_ST | STUFF_ERR_INT_ST | CRC16_ERR_INT_ST | CRC5_ERR_INT_ST | PID_ERR_INT_ST | SERIAL_IN_EMPTY_INT_ST | SERIAL_OUT_RECV_PKT_INT_ST | SOF_INT_ST | JTAG_IN_FLUSH_INT_ST | |||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_EP2_ZERO_PAYLOAD_INT_ST | 11 | RO | 0 | Конечная точка 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_ST | 10 | RO | 0 | Конечная точка 1 приняла пакет нулевой длины |
| USB_BUS_RESET_INT_ST | 9 | RO | 0 | Хост сбросил шину USB |
| IN_TOKEN_REC_IN_EP1_INT_ST | 8 | RO | 0 | Принят токен IN для конечной точки 1 |
| STUFF_ERR_INT_ST | 7 | RO | 0 | Ошибка битстаффинга |
| CRC16_ERR_INT_ST | 6 | RO | 0 | Ошибка CRC16 в принятом пакете |
| CRC5_ERR_INT_ST | 5 | RO | 0 | Ошибка CRC5 в принятом пакете |
| PID_ERR_INT_ST | 4 | RO | 0 | Ошибка PID в принятом пакете |
| SERIAL_IN_EMPTY_INT_ST | 3 | RO | 0 | Буфер CDC IN пуст: хост забрал данные |
| SERIAL_OUT_RECV_PKT_INT_ST | 2 | RO | 0 | Конечная точка CDC OUT приняла пакет от хоста |
| SOF_INT_ST | 1 | RO | 0 | Принят кадр SOF от хоста (раз в миллисекунду) |
| JTAG_IN_FLUSH_INT_ST | 0 | RO | 0 | Отправлен пакет JTAG IN |
USB_SERIAL_JTAG_INT_ENA_REG — разрешение прерываний
Смещение 0x0010, адрес 0x6004 3010, после сброса 0x0000 0000. TRM: регистр 30.18.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OUT_EP2_ZERO_PAYLOAD_INT_ENA | OUT_EP1_ZERO_PAYLOAD_INT_ENA | USB_BUS_RESET_INT_ENA | IN_TOKEN_REC_IN_EP1_INT_ENA | STUFF_ERR_INT_ENA | CRC16_ERR_INT_ENA | CRC5_ERR_INT_ENA | PID_ERR_INT_ENA | SERIAL_IN_EMPTY_INT_ENA | SERIAL_OUT_RECV_PKT_INT_ENA | SOF_INT_ENA | JTAG_IN_FLUSH_INT_ENA | |||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_EP2_ZERO_PAYLOAD_INT_ENA | 11 | R/W | 0 | Конечная точка 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_ENA | 10 | R/W | 0 | Конечная точка 1 приняла пакет нулевой длины |
| USB_BUS_RESET_INT_ENA | 9 | R/W | 0 | Хост сбросил шину USB |
| IN_TOKEN_REC_IN_EP1_INT_ENA | 8 | R/W | 0 | Принят токен IN для конечной точки 1 |
| STUFF_ERR_INT_ENA | 7 | R/W | 0 | Ошибка битстаффинга |
| CRC16_ERR_INT_ENA | 6 | R/W | 0 | Ошибка CRC16 в принятом пакете |
| CRC5_ERR_INT_ENA | 5 | R/W | 0 | Ошибка CRC5 в принятом пакете |
| PID_ERR_INT_ENA | 4 | R/W | 0 | Ошибка PID в принятом пакете |
| SERIAL_IN_EMPTY_INT_ENA | 3 | R/W | 0 | Буфер CDC IN пуст: хост забрал данные |
| SERIAL_OUT_RECV_PKT_INT_ENA | 2 | R/W | 0 | Конечная точка CDC OUT приняла пакет от хоста |
| SOF_INT_ENA | 1 | R/W | 0 | Принят кадр SOF от хоста (раз в миллисекунду) |
| JTAG_IN_FLUSH_INT_ENA | 0 | R/W | 0 | Отправлен пакет JTAG IN |
USB_SERIAL_JTAG_INT_CLR_REG — сброс флагов прерываний записью 1
Смещение 0x0014, адрес 0x6004 3014, после сброса 0x0000 0000. TRM: регистр 30.19.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OUT_EP2_ZERO_PAYLOAD_INT_CLR | OUT_EP1_ZERO_PAYLOAD_INT_CLR | USB_BUS_RESET_INT_CLR | IN_TOKEN_REC_IN_EP1_INT_CLR | STUFF_ERR_INT_CLR | CRC16_ERR_INT_CLR | CRC5_ERR_INT_CLR | PID_ERR_INT_CLR | SERIAL_IN_EMPTY_INT_CLR | SERIAL_OUT_RECV_PKT_INT_CLR | SOF_INT_CLR | JTAG_IN_FLUSH_INT_CLR | |||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_EP2_ZERO_PAYLOAD_INT_CLR | 11 | WT | 0 | Конечная точка 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_CLR | 10 | WT | 0 | Конечная точка 1 приняла пакет нулевой длины |
| USB_BUS_RESET_INT_CLR | 9 | WT | 0 | Хост сбросил шину USB |
| IN_TOKEN_REC_IN_EP1_INT_CLR | 8 | WT | 0 | Принят токен IN для конечной точки 1 |
| STUFF_ERR_INT_CLR | 7 | WT | 0 | Ошибка битстаффинга |
| CRC16_ERR_INT_CLR | 6 | WT | 0 | Ошибка CRC16 в принятом пакете |
| CRC5_ERR_INT_CLR | 5 | WT | 0 | Ошибка CRC5 в принятом пакете |
| PID_ERR_INT_CLR | 4 | WT | 0 | Ошибка PID в принятом пакете |
| SERIAL_IN_EMPTY_INT_CLR | 3 | WT | 0 | Буфер CDC IN пуст: хост забрал данные |
| SERIAL_OUT_RECV_PKT_INT_CLR | 2 | WT | 0 | Конечная точка CDC OUT приняла пакет от хоста |
| SOF_INT_CLR | 1 | WT | 0 | Принят кадр SOF от хоста (раз в миллисекунду) |
| JTAG_IN_FLUSH_INT_CLR | 0 | WT | 0 | Отправлен пакет JTAG IN |
USB_SERIAL_JTAG_CONF0_REG — pHY, подтяжки D+ и D−, перестановка линий
Смещение 0x0018, адрес 0x6004 3018, после сброса 0x0000 4200. TRM: регистр 30.2.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | USB_PAD_ENABLE | PULLUP_VALUE | DM_PULLDOWN | DM_PULLUP | DP_PULLDOWN | DP_PULLUP | PAD_PULL_OVERRIDE | VREF_OVERRIDE | VREFH | VREFL | EXCHG_PINS | EXCHG_PINS_OVERRIDE | PHY_SEL | ||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USB_PAD_ENABLE | 14 | R/W | 1 | Выводы GPIO18 и GPIO19 работают как USB |
| PULLUP_VALUE | 13 | R/W | 0 | Сопротивление подтяжки |
| DM_PULLDOWN | 12 | R/W | 0 | Подтяжка D− к земле |
| DM_PULLUP | 11 | R/W | 0 | Подтяжка D− к питанию |
| DP_PULLDOWN | 10 | R/W | 0 | Подтяжка D+ к земле |
| DP_PULLUP | 9 | R/W | 1 | Подтяжка D+ к питанию |
| PAD_PULL_OVERRIDE | 8 | R/W | 0 | Управлять подтяжками программно |
| VREF_OVERRIDE | 7 | R/W | 0 | Задавать пороги полями VREFH и VREFL |
| VREFH | 6:5 | R/W | 0x0 | Нижний порог входа одиночных уровней: 0,8…1,04 В с шагом 80 мВ — несмотря на имя, по TRM и ESP-IDF это нижний порог |
| VREFL | 4:3 | R/W | 0x0 | Верхний порог входа одиночных уровней: 1,76…2 В с шагом 80 мВ — имя поля тоже перевёрнуто |
| EXCHG_PINS | 2 | R/W | 0 | Поменять местами D+ и D− |
| EXCHG_PINS_OVERRIDE | 1 | R/W | 0 | Разрешить перестановку D+ и D− |
| PHY_SEL | 0 | R/W | 0 | PHY: 0 — встроенный, 1 — внешний |
USB_SERIAL_JTAG_TEST_REG — тестовый режим выводов USB
Смещение 0x001C, адрес 0x6004 301C, после сброса 0x0000 0000. TRM: регистр 30.3.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TEST_TX_DM | TEST_TX_DP | TEST_USB_OE | TEST_ENABLE | |||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TEST_TX_DM | 3 | R/W | 0 |
| TEST_TX_DP | 2 | R/W | 0 |
| TEST_USB_OE | 1 | R/W | 0 |
| TEST_ENABLE | 0 | R/W | 0 |
USB_SERIAL_JTAG_JFIFO_ST_REG — состояние FIFO JTAG
Смещение 0x0020, адрес 0x6004 3020, после сброса 0x0000 0044. TRM: регистр 30.7.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OUT_FIFO_RESET | IN_FIFO_RESET | OUT_FIFO_FULL | OUT_FIFO_EMPTY | OUT_FIFO_CNT | IN_FIFO_FULL | IN_FIFO_EMPTY | IN_FIFO_CNT | |||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OUT_FIFO_RESET | 9 | R/W | 0 | |
| IN_FIFO_RESET | 8 | R/W | 0 | |
| OUT_FIFO_FULL | 7 | RO | 0 | |
| OUT_FIFO_EMPTY | 6 | RO | 1 | |
| OUT_FIFO_CNT | 5:4 | RO | 0x0 | Число слов в выходном FIFO JTAG |
| IN_FIFO_FULL | 3 | RO | 0 | |
| IN_FIFO_EMPTY | 2 | RO | 1 | |
| IN_FIFO_CNT | 1:0 | RO | 0x0 | Число слов во входном FIFO JTAG |
USB_SERIAL_JTAG_FRAM_NUM_REG — номер последнего кадра SOF
Смещение 0x0024, адрес 0x6004 3024, после сброса 0x0000 0000. TRM: регистр 30.8.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| SOF_FRAME_INDEX | 10:0 | RO | 0x000 | Номер кадра последнего SOF |
USB_SERIAL_JTAG_IN_EPn_ST_REG — состояние конечной точки IN n
4 копии, n = 0…3: смещение 0x0028 + n · 0x0004, после сброса 0x0000 0001. TRM: регистр 30.9.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| IN_EPn_RD_ADDR | IN_EPn_WR_ADDR | IN_EPn_STATE | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| IN_EPn_RD_ADDR | 15:9 | RO | 0x00 |
| IN_EPn_WR_ADDR | 8:2 | RO | 0x00 |
| IN_EPn_STATE | 1:0 | RO | 0x1 |
USB_SERIAL_JTAG_OUT_EP0_ST_REG — состояние конечной точки OUT 0
Смещение 0x0038, адрес 0x6004 3038, после сброса 0x0000 0000. TRM: регистр 30.13.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OUT_EP0_RD_ADDR | OUT_EP0_WR_ADDR | OUT_EP0_STATE | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT_EP0_RD_ADDR | 15:9 | RO | 0x00 |
| OUT_EP0_WR_ADDR | 8:2 | RO | 0x00 |
| OUT_EP0_STATE | 1:0 | RO | 0x0 |
USB_SERIAL_JTAG_OUT_EP1_ST_REG — состояние конечной точки OUT 1
Смещение 0x003C, адрес 0x6004 303C, после сброса 0x0000 0000. TRM: регистр 30.14.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | OUT_EP1_REC_DATA_CNT | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OUT_EP1_RD_ADDR | OUT_EP1_WR_ADDR | OUT_EP1_STATE | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT_EP1_REC_DATA_CNT | 22:16 | RO | 0x00 |
| OUT_EP1_RD_ADDR | 15:9 | RO | 0x00 |
| OUT_EP1_WR_ADDR | 8:2 | RO | 0x00 |
| OUT_EP1_STATE | 1:0 | RO | 0x0 |
USB_SERIAL_JTAG_OUT_EP2_ST_REG — состояние конечной точки OUT 2
Смещение 0x0040, адрес 0x6004 3040, после сброса 0x0000 0000. TRM: регистр 30.15.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OUT_EP2_RD_ADDR | OUT_EP2_WR_ADDR | OUT_EP2_STATE | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| OUT_EP2_RD_ADDR | 15:9 | RO | 0x00 |
| OUT_EP2_WR_ADDR | 8:2 | RO | 0x00 |
| OUT_EP2_STATE | 1:0 | RO | 0x0 |
USB_SERIAL_JTAG_MISC_CONF_REG — тактирование регистров
Смещение 0x0044, адрес 0x6004 3044, после сброса 0x0000 0000. TRM: регистр 30.4.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CLK_EN | 0 | R/W | 0 |
USB_SERIAL_JTAG_MEM_CONF_REG — питание и такт памяти USB
Смещение 0x0048, адрес 0x6004 3048, после сброса 0x0000 0002. TRM: регистр 30.5.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | USB_MEM_CLK_EN | USB_MEM_PD | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| USB_MEM_CLK_EN | 1 | R/W | 1 |
| USB_MEM_PD | 0 | R/W | 0 |
USB_SERIAL_JTAG_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x0080, адрес 0x6004 3080, после сброса 0x0200 7300. TRM: регистр 30.20.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 31:0 | R/W | 0x0200 7300 |
Частые вопросы
Как вывести текст в USB-консоль ESP32-C3 без драйвера?
Ждать флага USB_SERIAL_JTAG_SERIAL_IN_EP_DATA_FREE в USB_SERIAL_JTAG_EP1_CONF_REG, писать байты в USB_SERIAL_JTAG_EP1_REG (не больше 64 за пакет) и записать 1 в бит USB_SERIAL_JTAG_WR_DONE, чтобы отправить пакет. Если хост не открыл порт, данные не забираются и флаг свободного места не появится — нужен таймаут.
Можно ли использовать GPIO18 и GPIO19 ESP32-C3 как обычные выводы?
Можно, но тогда пропадёт USB-консоль и JTAG. Выводы отдаются USB битом USB_PAD_ENABLE регистра USB_SERIAL_JTAG_CONF0_REG (установлен после сброса); на время работы как GPIO его сбрасывают. Подтяжка D+ в этом режиме тоже выключается.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 30: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- 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
Нашли ошибку в регистрах?
Другие регистры ESP32-C3
- Все регистры ESP32-C3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG, IO_MUX_DATE_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллер SPI общего назначения GP-SPI2SPI_CMD_REG, SPI_ADDR_REG, SPI_CTRL_REG, SPI_CLOCK_REG
- I2C — контроллер шины I2CI2C_SCL_LOW_PERIOD_REG, I2C_CTR_REG, I2C_SR_REG, I2C_TO_REG
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC_LSCHn_CONF0_REG, LEDC_LSCHn_HPOINT_REG, LEDC_LSCHn_DUTY_REG, LEDC_LSCHn_CONF1_REG
- TIMG — группа таймеров: таймер общего назначения и сторожTIMG_T0CONFIG_REG, TIMG_T0LO_REG, TIMG_T0HI_REG, TIMG_T0UPDATE_REG
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT_CHnDATA_REG, RMT_CHnCONF0_REG, RMT_CHnCONF0_REG, RMT_CHnCONF1_REG
- SYSTIMER — системный таймерSYSTIMER_CONF_REG, SYSTIMER_UNITn_OP_REG, SYSTIMER_UNITn_LOAD_HI_REG, SYSTIMER_UNITn_LOAD_LO_REG
- RTC_CNTL — управление питанием, сном и RTCRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- АЦП — 12-битный SAR АЦП и датчик температурыAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR_PATT_TABn_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA0_REG, EFUSE_RD_REPEAT_DATA1_REG, EFUSE_RD_REPEAT_DATA2_REG
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_I2C_MST_INT_MAP_REG, INTERRUPT_CORE0_SLCn_INTR_MAP_REG, INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG
Статьи, инструменты и термины
- USB Serial/JTAGВстроенный в ESP32 контроллер USB: COM-порт и JTAG без внешних микросхем
- Прошивка ESP32Загрузчик ПЗУ, GPIO0 и автосброс, write-flash и адреса, ошибки esptool и питание
- USBСкорости, распиновка Type-A, Micro-B и Type-C, питание, CC, USB PD
- Конечная точка USB (endpoint)Номер, направление и тип канала внутри устройства USB