Регистры USB Serial/JTAG ESP32-S3
Регистры USB Serial/JTAG ESP32-S3: обмен данными последовательного порта CDC-ACM через конечную точку EP1, настройки встроенного USB PHY — подтяжки, пороги, перестановка D+ и D− — состояния конечных точек, FIFO JTAG и флаги прерываний.
Содержание
- Пример на 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
Контроллер по адресу 0x6003 8000 — USB-устройство Full-speed (12 Мбит/с) с жёстко заданной функцией: последовательный порт CDC-ACM и JTAG-адаптер для отладки ядер. Он подключается к хосту выводами GPIO19 (USB_D−) и GPIO20 (USB_D+) через встроенный PHY, который делит с USB OTG; выбор задают eFuse или регистр RTC_CNTL_RTC_USB_CONF_REG.
Программа передаёт байты, записывая их в поле RDWR_BYTE регистра USB_SERIAL_JTAG_EP1_REG, пока установлен SERIAL_IN_EP_DATA_FREE, и отправляет пакет записью 1 в WR_DONE; размер пакета — до 64 байт. Принятые байты читаются из того же поля, когда установлен SERIAL_OUT_EP_DATA_AVAIL.
В регистре USB_SERIAL_JTAG_CONF0_REG при VREF_OVERRIDE = 1 задаются пороги приёмника: VREFH (биты 4:3) — верхний порог 1,76…2 В, VREFL (биты 6:5) — нижний 0,8…1,04 В, шаг 80 мВ. У ESP32-S3 TRM, SVD и ESP-IDF здесь согласны, в отличие от ESP32-C3, где имена полей переставлены.
| Экземпляр | Базовый адрес |
|---|---|
| USB_DEVICE | 0x6003 8000 |
Пример на C
Отправить строку в порт CDC (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"
const char *s = "Hello\r\n";
while (*s && 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++); // байт в буфер IN
}
REG_WRITE(USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_WR_DONE); // отправить пакетРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| USB_SERIAL_JTAG_EP1_REG | 0x0000 | Данные последовательного порта: запись в IN, чтение из OUT | 0x0000 0000 |
| USB_SERIAL_JTAG_EP1_CONF_REG | 0x0004 | Буферы последовательного порта: свободно, есть данные, отправить | 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 | USB 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 (данные CDC от хоста) | 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 | Версия блока: дата ревизии аппаратуры | 0x0210 1200 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
USB_SERIAL_JTAG_EP1_REG — данные последовательного порта: запись в IN, чтение из OUT
Смещение 0x0000, адрес 0x6003 8000, после сброса 0x0000 0000. TRM: регистр 33.1.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| RDWR_BYTE | 7:0 | R/W | 0x00 | Запись — байт в буфер IN (до 64 байт), чтение — байт из буфера OUT |
USB_SERIAL_JTAG_EP1_CONF_REG — буферы последовательного порта: свободно, есть данные, отправить
Смещение 0x0004, адрес 0x6003 8004, после сброса 0x0000 0002. TRM: регистр 33.2.
| 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 | 1 — в буфере OUT есть принятые данные |
| SERIAL_IN_EP_DATA_FREE | 1 | RO | 1 | 1 — в буфер IN можно писать; после WR_DONE 0, пока хост не заберёт данные |
| WR_DONE | 0 | WT | 0 | Запись 1 — данные в буфере IN готовы к отправке |
USB_SERIAL_JTAG_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x0008, адрес 0x6003 8008, после сброса 0x0000 0008. TRM: регистр 33.6.
| 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 | Точка OUT 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_RAW | 10 | R/WTC/SS | 0 | Точка OUT 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 | Точка IN последовательного порта пуста |
| SERIAL_OUT_RECV_PKT_INT_RAW | 2 | R/W | 0 | Точка OUT последовательного порта приняла пакет |
| SOF_INT_RAW | 1 | R/WTC/SS | 0 | Принят кадр SOF |
| JTAG_IN_FLUSH_INT_RAW | 0 | R/W | 0 | Получена команда flush для точки IN 2 JTAG |
USB_SERIAL_JTAG_INT_ST_REG — флаги прерываний после маски разрешения
Смещение 0x000C, адрес 0x6003 800C, после сброса 0x0000 0000. TRM: регистр 33.7.
| 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 | Точка OUT 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_ST | 10 | RO | 0 | Точка OUT 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 | Точка IN последовательного порта пуста |
| SERIAL_OUT_RECV_PKT_INT_ST | 2 | RO | 0 | Точка OUT последовательного порта приняла пакет |
| SOF_INT_ST | 1 | RO | 0 | Принят кадр SOF |
| JTAG_IN_FLUSH_INT_ST | 0 | RO | 0 | Получена команда flush для точки IN 2 JTAG |
USB_SERIAL_JTAG_INT_ENA_REG — разрешение прерываний
Смещение 0x0010, адрес 0x6003 8010, после сброса 0x0000 0000. TRM: регистр 33.8.
| 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 | Точка OUT 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_ENA | 10 | R/W | 0 | Точка OUT 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 | Точка IN последовательного порта пуста |
| SERIAL_OUT_RECV_PKT_INT_ENA | 2 | R/W | 0 | Точка OUT последовательного порта приняла пакет |
| SOF_INT_ENA | 1 | R/W | 0 | Принят кадр SOF |
| JTAG_IN_FLUSH_INT_ENA | 0 | R/W | 0 | Получена команда flush для точки IN 2 JTAG |
USB_SERIAL_JTAG_INT_CLR_REG — сброс флагов прерываний записью 1
Смещение 0x0014, адрес 0x6003 8014, после сброса 0x0000 0000. TRM: регистр 33.9.
| 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 | Точка OUT 2 приняла пакет нулевой длины |
| OUT_EP1_ZERO_PAYLOAD_INT_CLR | 10 | WT | 0 | Точка OUT 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 | Точка IN последовательного порта пуста |
| SERIAL_OUT_RECV_PKT_INT_CLR | 2 | WO | 0 | Точка OUT последовательного порта приняла пакет |
| SOF_INT_CLR | 1 | WT | 0 | Принят кадр SOF |
| JTAG_IN_FLUSH_INT_CLR | 0 | WO | 0 | Получена команда flush для точки IN 2 JTAG |
USB_SERIAL_JTAG_CONF0_REG — uSB PHY: подтяжки, пороги, перестановка D+ и D−
Смещение 0x0018, адрес 0x6003 8018, после сброса 0x0000 4200. TRM: регистр 33.3.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | USB_JTAG_BRIDGE_EN | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PHY_TX_EDGE_SEL | USB_PAD_ENABLE | PULLUP_VALUE | DM_PULLDOWN | DM_PULLUP | DP_PULLDOWN | DP_PULLUP | PAD_PULL_OVERRIDE | VREF_OVERRIDE | VREFL | VREFH | EXCHG_PINS | EXCHG_PINS_OVERRIDE | PHY_SEL | ||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USB_JTAG_BRIDGE_EN | 16 | R/W | 0 | 1 — JTAG отключён от ядер, сигналы MTMS, MTDI, MTCK и MTDO идут через матрицу GPIO |
| PHY_TX_EDGE_SEL | 15 | R/W | 0 | Выдача передатчика: 0 — по спаду такта, 1 — по фронту |
| USB_PAD_ENABLE | 14 | R/W | 1 | 1 — выводы работают как USB |
| PULLUP_VALUE | 13 | R/W | 0 | Подтяжка: 0 — 2,2 кОм, 1 — 1,1 кОм (в главе 10 TRM — 2,4 и 1,2 кОм) |
| DM_PULLDOWN | 12 | R/W | 0 | Подтяжка D− к земле (при PAD_PULL_OVERRIDE) |
| DM_PULLUP | 11 | R/W | 0 | Подтяжка D− к питанию (при PAD_PULL_OVERRIDE) |
| DP_PULLDOWN | 10 | R/W | 0 | Подтяжка D+ к земле (при PAD_PULL_OVERRIDE) |
| DP_PULLUP | 9 | R/W | 1 | Подтяжка D+ к питанию (при PAD_PULL_OVERRIDE); после сброса 1 |
| PAD_PULL_OVERRIDE | 8 | R/W | 0 | 1 — подтяжками D+ и D− управляет программа |
| VREF_OVERRIDE | 7 | R/W | 0 | 1 — пороги приёмника задаются программно |
| VREFL | 6:5 | R/W | 0x0 | Нижний порог одиночного входа 0,8…1,04 В, шаг 80 мВ |
| VREFH | 4:3 | R/W | 0x0 | Верхний порог одиночного входа 1,76…2 В, шаг 80 мВ |
| EXCHG_PINS | 2 | R/W | 0 | 1 — поменять D+ и D− местами |
| EXCHG_PINS_OVERRIDE | 1 | R/W | 0 | 1 — перестановкой D+ и D− управляет программа |
| PHY_SEL | 0 | R/W | 0 | PHY: 0 — встроенный, 1 — внешний |
USB_SERIAL_JTAG_TEST_REG — тестовый режим выводов USB
Смещение 0x001C, адрес 0x6003 801C, после сброса 0x0000 0000. TRM: регистр 33.10.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TEST_RX_DM | TEST_RX_DP | TEST_RX_RCV | TEST_TX_DM | TEST_TX_DP | TEST_USB_OE | TEST_ENABLE | ||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TEST_RX_DM | 6 | RO | 0 | Вход D− в тесте |
| TEST_RX_DP | 5 | RO | 0 | Вход D+ в тесте |
| TEST_RX_RCV | 4 | RO | 0 | Дифференциальный вход в тесте |
| TEST_TX_DM | 3 | R/W | 0 | Уровень D− в тесте |
| TEST_TX_DP | 2 | R/W | 0 | Уровень D+ в тесте |
| TEST_USB_OE | 1 | R/W | 0 | Разрешение выхода выводов USB в тесте |
| TEST_ENABLE | 0 | R/W | 0 | 1 — тестовый режим выводов USB |
USB_SERIAL_JTAG_JFIFO_ST_REG — состояние FIFO JTAG
Смещение 0x0020, адрес 0x6003 8020, после сброса 0x0000 0044. TRM: регистр 33.11.
| 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 | Запись 1 сбрасывает FIFO OUT JTAG |
| IN_FIFO_RESET | 8 | R/W | 0 | Запись 1 сбрасывает FIFO IN JTAG |
| OUT_FIFO_FULL | 7 | RO | 0 | 1 — FIFO OUT JTAG полон |
| OUT_FIFO_EMPTY | 6 | RO | 1 | 1 — FIFO OUT JTAG пуст |
| OUT_FIFO_CNT | 5:4 | RO | 0x0 | Счётчик FIFO OUT JTAG |
| IN_FIFO_FULL | 3 | RO | 0 | 1 — FIFO IN JTAG полон |
| IN_FIFO_EMPTY | 2 | RO | 1 | 1 — FIFO IN JTAG пуст |
| IN_FIFO_CNT | 1:0 | RO | 0x0 | Счётчик FIFO IN JTAG |
USB_SERIAL_JTAG_FRAM_NUM_REG — номер последнего кадра SOF
Смещение 0x0024, адрес 0x6003 8024, после сброса 0x0000 0000. TRM: регистр 33.12.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| 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: регистр 33.13.
| 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 n |
| IN_EPn_WR_ADDR | 8:2 | RO | 0x00 | Адрес записи данных точки IN n |
| IN_EPn_STATE | 1:0 | RO | 0x1 | Состояние точки IN n |
USB_SERIAL_JTAG_OUT_EP0_ST_REG — состояние конечной точки OUT 0
Смещение 0x0038, адрес 0x6003 8038, после сброса 0x0000 0000. TRM: регистр 33.17.
| 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 (данные CDC от хоста)
Смещение 0x003C, адрес 0x6003 803C, после сброса 0x0000 0000. TRM: регистр 33.18.
| 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 1 |
| 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, адрес 0x6003 8040, после сброса 0x0000 0000. TRM: регистр 33.19.
| 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, адрес 0x6003 8044, после сброса 0x0000 0000. TRM: регистр 33.4.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_EN | 0 | R/W | 0 | 1 — такт регистров всегда включён |
USB_SERIAL_JTAG_MEM_CONF_REG — питание и тактирование памяти USB
Смещение 0x0048, адрес 0x6003 8048, после сброса 0x0000 0002. TRM: регистр 33.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 | 1 — такт памяти USB всегда включён |
| USB_MEM_PD | 0 | R/W | 0 | 1 — выключить память USB |
USB_SERIAL_JTAG_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x0080, адрес 0x6003 8080, после сброса 0x0210 1200. TRM: регистр 33.20.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 31:0 | R/W | 0x0210 1200 |
Частые вопросы
Как передать данные в USB Serial/JTAG ESP32-S3 без драйвера?
Пока бит SERIAL_IN_EP_DATA_FREE регистра USB_SERIAL_JTAG_EP1_CONF_REG равен 1, записывать байты в USB_SERIAL_JTAG_EP1_REG, затем записать 1 в WR_DONE — пакет уйдёт хосту, когда тот его запросит. Так устроены функции usb_serial_jtag_ll_write_txfifo и usb_serial_jtag_ll_txfifo_flush ESP-IDF.
Почему после включения USB OTG пропал порт USB Serial/JTAG ESP32-S3?
Встроенный USB PHY один на два контроллера. Какой из них к нему подключён, задаёт eFuse USB_PHY_SEL или, если установлен SW_HW_USB_PHY_SEL регистра RTC_CNTL_RTC_USB_CONF_REG, бит SW_USB_PHY_SEL: 1 — PHY у USB OTG, 0 — у USB Serial/JTAG.
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 33: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- 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
Нашли ошибку в регистрах?
Другие регистры ESP32-S3
- Все регистры ESP32-S3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллеры SPI общего назначения GP-SPI2 и GP-SPI3SPI_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_TnCONFIG_REG, TIMG_TnLO_REG, TIMG_TnHI_REG, TIMG_TnUPDATE_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 — управление питанием, сном и RTC-доменомRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR1_PATT_TABn_REG
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS_SAR_READER1_CTRL_REG, SENS_SAR_MEAS1_CTRL2_REG, SENS_SAR_MEAS1_MUX_REG, SENS_SAR_ATTENn_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_MAC_INTR_MAP_REG, INTERRUPT_CORE0_MAC_NMI_MAP_REG, INTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_BB_INT_MAP_REG
Статьи, инструменты и термины
- USB Serial/JTAGВстроенный в ESP32 контроллер USB: COM-порт и JTAG без внешних микросхем
- USBСкорости, распиновка Type-A, Micro-B и Type-C, питание, CC, USB PD
- Конечная точка USB (endpoint)Номер, направление и тип канала внутри устройства USB
- USB OTGUSB-контроллер, работающий устройством и хостом: HNP, SRP, ESP32-S2/S3