Регистры USB RP2350
Регистры контроллера USB 2.0 в RP2350: всё, что было в RP2040, плюс изоляция PHY, выводы DP и DM как GPIO, перестановка DP и DM, остановка транзакции хоста по NAK, счётчики ошибок конечных точек, метки времени SOF и сторожевой таймер автомата устройства.
Содержание
- Регистры блока
- USB_ADDR_ENDP
- USB_ADDR_ENDPn
- USB_MAIN_CTRL
- USB_SOF_WR
- USB_SOF_RD
- USB_SIE_CTRL
- USB_SIE_STATUS
- USB_INT_EP_CTRL
- USB_BUFF_STATUS
- USB_BUFF_CPU_SHOULD_HANDLE
- USB_EP_ABORT
- USB_EP_ABORT_DONE
- USB_EP_STALL_ARM
- USB_NAK_POLL
- USB_EP_STATUS_STALL_NAK
- USB_USB_MUXING
- USB_USB_PWR
- USB_USBPHY_DIRECT
- USB_USBPHY_DIRECT_OVERRIDE
- USB_USBPHY_TRIM
- USB_LINESTATE_TUNING
- USB_INTR
- USB_INTE
- USB_INTF
- USB_INTS
- USB_SOF_TIMESTAMP_RAW
- USB_SOF_TIMESTAMP_LAST
- USB_SM_STATE
- USB_EP_TX_ERROR
- USB_EP_RX_ERROR
- USB_DEV_SM_WATCHDOG
Контроллер USB RP2350 — устройство Full Speed (12 Мбит/с) или хост для устройств Full и Low Speed, со встроенным PHY USB 1.1 и 4 КБ двухпортовой памяти DPSRAM с адреса 0x5010 0000. clk_usb должна быть 48 МГц, clk_sys — выше 48 МГц (эррата RP2350-E12). Регистры — надмножество регистров RP2040, и программы для него работают с одним исключением (даташит RP2350, раздел 12.7).
Это исключение — бит PHY_ISO регистра MAIN_CTRL: после сброса PHY изолирован, и бит сбрасывают при запуске и после каждого выключения питания ядра. Под изоляцию подогнаны и значения после сброса: PULLDOWN_EN = 1 — линии DP и DM подтянуты к земле и не висят в воздухе, TO_PHY = 1. Когда USB не нужен, DP и DM работают как GPIO на 3,3 В (USBPHY_AS_GPIO), а SWAP_DPDM меняет их местами, если они перепутаны на плате.
В RP2350 исправлены эрраты USB из RP2040, включая E2, E3, E4, E5 и E15. Регистр LINESTATE_TUNING включает исправления приёма — даташит советует оставлять его значение после сброса. Хост может останавливать транзакцию по NAK, устройство — EP0 по короткому пакету; EP_TX_ERROR и EP_RX_ERROR считают ошибки каждой конечной точки, а DEV_SM_WATCHDOG возвращает зависший автомат устройства в покой.
| Экземпляр | Базовый адрес |
|---|---|
| USBCTRL_REGS | 0x5011 0000 |
В RP2040 блок USB устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры USB RP2040».
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| USB_ADDR_ENDP | 0x00 | Адрес устройства и конечная точка | 0x0000 0000 |
| USB_ADDR_ENDPn | 0x00 + n · 0x04 | Хост: адрес и конечная точка для опроса прерываний, слот n | 0x0000 0000 |
| USB_MAIN_CTRL | 0x40 | Включение контроллера и режим | 0x0000 0004 |
| USB_SOF_WR | 0x44 | Хост: номер кадра для SOF | 0x0000 0000 |
| USB_SOF_RD | 0x48 | Номер последнего кадра SOF | 0x0000 0000 |
| USB_SIE_CTRL | 0x4C | Управление SIE: подтяжки, VBUS, транзакции хоста, прерывания EP0 | 0x0000 8000 |
| USB_SIE_STATUS | 0x50 | Состояние SIE: события, ошибки, скорость, VBUS | 0x0000 0000 |
| USB_INT_EP_CTRL | 0x54 | Хост: включение опроса прерывающих конечных точек | 0x0000 0000 |
| USB_BUFF_STATUS | 0x58 | Обработанные буферы конечных точек | 0x0000 0000 |
| USB_BUFF_CPU_SHOULD_HANDLE | 0x5C | Какой из двух буферов конечной точки обработать | 0x0000 0000 |
| USB_EP_ABORT | 0x60 | Устройство: отзыв буферов конечных точек | 0x0000 0000 |
| USB_EP_ABORT_DONE | 0x64 | Устройство: отзыв буфера завершён | 0x0000 0000 |
| USB_EP_STALL_ARM | 0x68 | Устройство: разрешение STALL на EP0 | 0x0000 0000 |
| USB_NAK_POLL | 0x6C | Хост: пауза перед повтором после NAK | 0x0010 0010 |
| USB_EP_STATUS_STALL_NAK | 0x70 | Устройство: конечные точки, ответившие NAK или STALL | 0x0000 0000 |
| USB_USB_MUXING | 0x74 | Куда подключён контроллер: встроенный PHY или другое | 0x0000 0001 |
| USB_USB_PWR | 0x78 | Подмена сигналов VBUS и перегрузки по току | 0x0000 0000 |
| USB_USBPHY_DIRECT | 0x7C | Прямое управление PHY — для отладки | 0x0000 0000 |
| USB_USBPHY_DIRECT_OVERRIDE | 0x80 | Какие сигналы PHY брать из USBPHY_DIRECT | 0x0000 0000 |
| USB_USBPHY_TRIM | 0x84 | Подстройка подтягивающих резисторов PHY | 0x0000 1F1F |
| USB_LINESTATE_TUNING | 0x88 | Исправления приёма — для отладки, значение после сброса лучше не менять | 0x0000 00F8 |
| USB_INTR | 0x8C | Необработанные флаги прерываний | 0x0000 0000 |
| USB_INTE | 0x90 | Разрешение прерываний | 0x0000 0000 |
| USB_INTF | 0x94 | Принудительная установка прерываний | 0x0000 0000 |
| USB_INTS | 0x98 | Флаги прерываний после маски и принуждения | 0x0000 0000 |
| USB_SOF_TIMESTAMP_RAW | 0x0100 | Устройство: свободный счётчик PHY на 48 МГц | 0x0000 0000 |
| USB_SOF_TIMESTAMP_LAST | 0x0104 | Устройство: значение счётчика PHY в момент последнего SOF | 0x0000 0000 |
| USB_SM_STATE | 0x0108 | Внутреннее состояние модулей контроллера | 0x0000 0000 |
| USB_EP_TX_ERROR | 0x010C | Счётчики ошибок передачи конечных точек | 0x0000 0000 |
| USB_EP_RX_ERROR | 0x0110 | Ошибки приёма конечных точек | 0x0000 0000 |
| USB_DEV_SM_WATCHDOG | 0x0114 | Сторожевой таймер автомата устройства | 0x0000 0000 |
USB_ADDR_ENDP — адрес устройства и конечная точка
Смещение 0x00, адрес 0x5011 0000, после сброса 0x0000 0000. Макросы pico-sdk: USB_ADDR_ENDP_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | ENDPOINT | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ADDRESS | ||||||||||||||
- ENDPOINT (биты 19:16, чтение и запись, после сброса 0x0) — Хост: номер конечной точки устройства.
- ADDRESS (биты 6:0, чтение и запись, после сброса 0x00) — Устройство: свой адрес, его задают по запросу SET_ADDRESS от хоста; хост: адрес устройства, с которым идёт обмен.
USB_ADDR_ENDPn — хост: адрес и конечная точка для опроса прерываний, слот n
15 регистров, n = 1…15: смещение 0x00 + n · 0x04, после сброса 0x0000 0000. Макросы pico-sdk: USB_ADDR_ENDPn_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | INTEP_PREAMBLE | INTEP_DIR | — | ENDPOINT | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ADDRESS | ||||||||||||||
- INTEP_PREAMBLE (бит 26, чтение и запись, после сброса 0x0) — Нужна преамбула: устройство Low Speed за хабом Full Speed.
- INTEP_DIR (бит 25, чтение и запись, после сброса 0x0) — Направление прерывающей конечной точки: 0 — IN, 1 — OUT.
- ENDPOINT (биты 19:16, чтение и запись, после сброса 0x0) — Номер прерывающей конечной точки.
- ADDRESS (биты 6:0, чтение и запись, после сброса 0x00) — Адрес устройства.
USB_MAIN_CTRL — включение контроллера и режим
Смещение 0x40, адрес 0x5011 0040, после сброса 0x0000 0004. Макросы pico-sdk: USB_MAIN_CTRL_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SIM_TIMING | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | PHY_ISO | HOST_NDEVICE | CONTROLLER_EN | ||||||||||||
- SIM_TIMING (бит 31, чтение и запись, после сброса 0x0) — Укороченные интервалы для моделирования.
- PHY_ISO (бит 2, чтение и запись, после сброса 0x1) — Изоляция PHY: после сброса 1; сбрасывают, когда контроллер настроен, — при запуске и после выключения питания ядра.
- HOST_NDEVICE (бит 1, чтение и запись, после сброса 0x0) — Режим: 0 — устройство, 1 — хост.
- CONTROLLER_EN (бит 0, чтение и запись, после сброса 0x0) — Включение контроллера.
USB_SOF_WR — хост: номер кадра для SOF
Смещение 0x44, адрес 0x5011 0044, после сброса 0x0000 0000. Макросы pico-sdk: USB_SOF_WR_…
- COUNT (биты 10:0, запись с побочным действием, после сброса 0x000) — Номер кадра; SOF уходит раз в 1 мс, и хост увеличивает номер на 1.
USB_SOF_RD — номер последнего кадра SOF
Смещение 0x48, адрес 0x5011 0048, после сброса 0x0000 0000. Макросы pico-sdk: USB_SOF_RD_…
- COUNT (биты 10:0, только чтение, после сброса 0x000) — У устройства — номер принятого SOF, у хоста — отправленного.
USB_SIE_CTRL — управление SIE: подтяжки, VBUS, транзакции хоста, прерывания EP0
Смещение 0x4C, адрес 0x5011 004C, после сброса 0x0000 8000. Макросы pico-sdk: USB_SIE_CTRL_…
- EP0_INT_STALL (бит 31, чтение и запись, после сброса 0x0) — Устройство: флаг в EP_STATUS_STALL_NAK, когда EP0 отвечает STALL.
- EP0_DOUBLE_BUF (бит 30, чтение и запись, после сброса 0x0) — Устройство: двойная буферизация EP0.
- EP0_INT_1BUF (бит 29, чтение и запись, после сброса 0x0) — Устройство: флаг в BUFF_STATUS после каждого буфера EP0.
- EP0_INT_2BUF (бит 28, чтение и запись, после сброса 0x0) — Устройство: флаг в BUFF_STATUS после каждых двух буферов EP0.
- EP0_INT_NAK (бит 27, чтение и запись, после сброса 0x0) — Устройство: флаг в EP_STATUS_STALL_NAK, когда EP0 отвечает NAK.
- DIRECT_EN (бит 26, чтение и запись, после сброса 0x0) — Прямое управление линиями шины.
- DIRECT_DP (бит 25, чтение и запись, после сброса 0x0) — Уровень DP при прямом управлении.
- DIRECT_DM (бит 24, чтение и запись, после сброса 0x0) — Уровень DM при прямом управлении.
- EP0_STOP_ON_SHORT_PACKET (бит 19, чтение и запись, после сброса 0x0) — Устройство: останавливать EP0 на коротком пакете.
- TRANSCEIVER_PD (бит 18, чтение и запись, после сброса 0x0) — Отключение питания приёмопередатчика.
- RPU_OPT (бит 17, чтение и запись, после сброса 0x0) — Устройство: сопротивление подтяжки — 0: 1,2 кОм, 1: 2,3 кОм.
- PULLUP_EN (бит 16, чтение и запись, после сброса 0x0) — Устройство: подтяжка DP к питанию — хост видит устройство Full Speed.
- PULLDOWN_EN (бит 15, чтение и запись, после сброса 0x1) — Хост: слабая подтяжка DP и DM к земле.
- RESET_BUS (бит 13, сбрасывается сам, после сброса 0x0) — Хост: сброс шины.
- RESUME (бит 12, сбрасывается сам, после сброса 0x0) — Устройство: удалённое пробуждение — выход из приостановки по своей инициативе.
- VBUS_EN (бит 11, чтение и запись, после сброса 0x0) — Хост: включение VBUS.
- KEEP_ALIVE_EN (бит 10, чтение и запись, после сброса 0x0) — Хост: пакеты поддержания связи для шины Low Speed.
- SOF_EN (бит 9, чтение и запись, после сброса 0x0) — Хост: пакеты SOF для шины Full Speed.
- SOF_SYNC (бит 8, чтение и запись, после сброса 0x0) — Хост: отложить транзакцию до следующего SOF.
- PREAMBLE_EN (бит 6, чтение и запись, после сброса 0x0) — Хост: преамбула для устройства Low Speed за хабом Full Speed.
- STOP_TRANS (бит 4, сбрасывается сам, после сброса 0x0) — Хост: остановить текущую транзакцию.
- RECEIVE_DATA (бит 3, чтение и запись, после сброса 0x0) — Хост: транзакция IN — приём от устройства.
- SEND_DATA (бит 2, чтение и запись, после сброса 0x0) — Хост: транзакция OUT — передача устройству.
- SEND_SETUP (бит 1, чтение и запись, после сброса 0x0) — Хост: отправить пакет SETUP из первых 8 байт DPSRAM.
- START_TRANS (бит 0, сбрасывается сам, после сброса 0x0) — Хост: начать транзакцию; бит устанавливают отдельно, когда остальные биты уже записаны и прошло не меньше двух тактов clk_usb.
USB_SIE_STATUS — состояние SIE: события, ошибки, скорость, VBUS
Смещение 0x50, адрес 0x5011 0050, после сброса 0x0000 0000. Макросы pico-sdk: USB_SIE_STATUS_…
- DATA_SEQ_ERROR (бит 31, сброс записью 1, после сброса 0x0) — Ошибка последовательности DATA0/DATA1: у устройства — DATA1 после SETUP или PID пакета OUT не тот, что в регистре буфера; у хоста — неверный PID данных IN.
- ACK_REC (бит 30, сброс записью 1, после сброса 0x0) — Получено подтверждение ACK — у хоста и у устройства.
- STALL_REC (бит 29, сброс записью 1, после сброса 0x0) — Хост: получен STALL.
- NAK_REC (бит 28, сброс записью 1, после сброса 0x0) — Хост: получен NAK.
- RX_TIMEOUT (бит 27, сброс записью 1, после сброса 0x0) — ACK не пришёл за время, заданное спецификацией USB.
- RX_OVERFLOW (бит 26, сброс записью 1, после сброса 0x0) — Входящие данные идут слишком быстро для приёмника.
- BIT_STUFF_ERROR (бит 25, сброс записью 1, после сброса 0x0) — Ошибка битстаффинга при приёме.
- CRC_ERROR (бит 24, сброс записью 1, после сброса 0x0) — Ошибка CRC при приёме.
- ENDPOINT_ERROR (бит 23, сброс записью 1, после сброса 0x0) — Ошибка конечной точки — какой, показывают EP_RX_ERROR и EP_TX_ERROR; сбрасывается записью 1.
- BUS_RESET (бит 19, сброс записью 1, после сброса 0x0) — Устройство: получен сброс шины.
- TRANS_COMPLETE (бит 18, сброс записью 1, после сброса 0x0) — Транзакция завершена: передан или принят буфер с флагом LAST_BUFF; у хоста также SETUP без фазы данных и IN нулевой длины.
- SETUP_REC (бит 17, сброс записью 1, после сброса 0x0) — Устройство: принят пакет SETUP, он в первых 8 байтах DPSRAM.
- CONNECTED (бит 16, только чтение, после сброса 0x0) — Устройство: подключено.
- RX_SHORT_PACKET (бит 12, сброс записью 1, после сброса 0x0) — Принят короткий пакет — меньше, чем задано в управлении буфером; сбрасывается записью 1.
- RESUME (бит 11, сброс записью 1, после сброса 0x0) — Хост: устройство запросило пробуждение; устройство: хост начал пробуждение.
- VBUS_OVER_CURR (бит 10, только чтение, после сброса 0x0) — Обнаружена перегрузка VBUS по току.
- SPEED (биты 9:8, только чтение, после сброса 0x0) — Хост: скорость устройства — 00 нет устройства, 01 Low Speed, 10 Full Speed.
- SUSPENDED (бит 4, сброс записью 1, после сброса 0x0) — Шина приостановлена: нет ни SOF, ни пакетов поддержания связи.
- LINE_STATE (биты 3:2, только чтение, после сброса 0x0) — Состояние линий шины USB.
- VBUS_DETECTED (бит 0, только чтение, после сброса 0x0) — Устройство: обнаружено напряжение VBUS.
USB_INT_EP_CTRL — хост: включение опроса прерывающих конечных точек
Смещение 0x54, адрес 0x5011 0054, после сброса 0x0000 0000. Макросы pico-sdk: USB_INT_EP_CTRL_…
- INT_EP_ACTIVE (биты 15:1, чтение и запись, после сброса 0x0000) — Опрос прерывающих конечных точек: бит на слот 1–15.
USB_BUFF_STATUS — обработанные буферы конечных точек
Смещение 0x58, адрес 0x5011 0058, после сброса 0x0000 0000. Макросы pico-sdk: USB_BUFF_STATUS_…
- EPn_OUT, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; сброс записью 1, после сброса 0x0) — Буфер конечной точки n OUT обработан; сбрасывается записью 1.
- EPn_IN, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; сброс записью 1, после сброса 0x0) — Буфер конечной точки n IN обработан; сбрасывается записью 1.
USB_BUFF_CPU_SHOULD_HANDLE — какой из двух буферов конечной точки обработать
Смещение 0x5C, адрес 0x5011 005C, после сброса 0x0000 0000. Макросы pico-sdk: USB_BUFF_CPU_SHOULD_HANDLE_…
- EPn_OUT, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; только чтение, после сброса 0x0) — Какой буфер конечной точки n OUT обработать — 0 или 1.
- EPn_IN, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; только чтение, после сброса 0x0) — Какой буфер конечной точки n IN обработать — 0 или 1.
USB_EP_ABORT — устройство: отзыв буферов конечных точек
Смещение 0x60, адрес 0x5011 0060, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_ABORT_…
- EPn_OUT, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; чтение и запись, после сброса 0x0) — Отозвать буфер конечной точки n OUT: на все обращения уходит NAK, пока бит не сброшен.
- EPn_IN, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; чтение и запись, после сброса 0x0) — Отозвать буфер конечной точки n IN: на все обращения уходит NAK, пока бит не сброшен.
USB_EP_ABORT_DONE — устройство: отзыв буфера завершён
Смещение 0x64, адрес 0x5011 0064, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_ABORT_DONE_…
- EPn_OUT, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; сброс записью 1, после сброса 0x0) — Конечная точка n OUT свободна, буфер можно менять; сбрасывается записью 1.
- EPn_IN, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; сброс записью 1, после сброса 0x0) — Конечная точка n IN свободна, буфер можно менять; сбрасывается записью 1.
USB_EP_STALL_ARM — устройство: разрешение STALL на EP0
Смещение 0x68, адрес 0x5011 0068, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_STALL_ARM_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | EP0_OUT | EP0_IN | |||||||||||||
- EP0_OUT (бит 1, чтение и запись, после сброса 0x0) — Разрешить STALL на EP0 OUT вместе с битом STALL буфера; сбрасывается при приёме SETUP.
- EP0_IN (бит 0, чтение и запись, после сброса 0x0) — Разрешить STALL на EP0 IN вместе с битом STALL буфера; сбрасывается при приёме SETUP.
USB_NAK_POLL — хост: пауза перед повтором после NAK
Смещение 0x6C, адрес 0x5011 006C, после сброса 0x0010 0010. Макросы pico-sdk: USB_NAK_POLL_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RETRY_COUNT_HI | EPX_STOPPED_ON_NAK | STOP_EPX_ON_NAK | DELAY_FS | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RETRY_COUNT_LO | DELAY_LS | ||||||||||||||
- RETRY_COUNT_HI (биты 31:28, только чтение, после сброса 0x0) — Биты 9:6 счётчика повторов после NAK.
- EPX_STOPPED_ON_NAK (бит 27, сброс записью 1, после сброса 0x0) — Хост остановил опрос EPX из-за NAK; сбрасывается записью 1.
- STOP_EPX_ON_NAK (бит 26, чтение и запись, после сброса 0x0) — Хост: останавливать EPX при получении NAK.
- DELAY_FS (биты 25:16, чтение и запись, после сброса 0x010) — Пауза в микросекундах для устройства Full Speed.
- RETRY_COUNT_LO (биты 15:10, только чтение, после сброса 0x00) — Биты 5:0 счётчика повторов после NAK.
- DELAY_LS (биты 9:0, чтение и запись, после сброса 0x010) — Пауза в микросекундах для устройства Low Speed.
USB_EP_STATUS_STALL_NAK — устройство: конечные точки, ответившие NAK или STALL
Смещение 0x70, адрес 0x5011 0070, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_STATUS_STALL_NAK_…
- EPn_OUT, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; сброс записью 1, после сброса 0x0) — Конечная точка n OUT ответила NAK или STALL; сбрасывается записью 1.
- EPn_IN, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; сброс записью 1, после сброса 0x0) — Конечная точка n IN ответила NAK или STALL; сбрасывается записью 1.
USB_USB_MUXING — куда подключён контроллер: встроенный PHY или другое
Смещение 0x74, адрес 0x5011 0074, после сброса 0x0000 0001. Макросы pico-sdk: USB_USB_MUXING_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SWAP_DPDM | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | USBPHY_AS_GPIO | SOFTCON | TO_DIGITAL_PAD | TO_EXTPHY | TO_PHY | ||||||||||
- SWAP_DPDM (бит 31, чтение и запись, после сброса 0x0) — Поменять местами DP и DM со всеми сигналами — если линии перепутаны на плате.
- USBPHY_AS_GPIO (бит 4, чтение и запись, после сброса 0x0) — Использовать выводы DP и DM как GPIO вместо контроллера USB.
- SOFTCON (бит 3, чтение и запись, после сброса 0x0) — Программное подключение; пример из даташита включает его вместе с TO_PHY.
- TO_DIGITAL_PAD (бит 2, чтение и запись, после сброса 0x0) — Подключить контроллер к цифровым выводам.
- TO_EXTPHY (бит 1, чтение и запись, после сброса 0x0) — Подключить контроллер к внешнему PHY.
- TO_PHY (бит 0, чтение и запись, после сброса 0x1) — Подключить контроллер к встроенному PHY — обычный режим.
USB_USB_PWR — подмена сигналов VBUS и перегрузки по току
Смещение 0x78, адрес 0x5011 0078, после сброса 0x0000 0000. Макросы pico-sdk: USB_USB_PWR_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | OVERCURR_DETECT_EN | OVERCURR_DETECT | VBUS_DETECT_OVERRIDE_EN | VBUS_DETECT | VBUS_EN_OVERRIDE_EN | VBUS_EN | |||||||||
- OVERCURR_DETECT_EN (бит 5, чтение и запись, после сброса 0x0) — Брать сигнал перегрузки по току из OVERCURR_DETECT.
- OVERCURR_DETECT (бит 4, чтение и запись, после сброса 0x0) — Значение подмены сигнала перегрузки по току.
- VBUS_DETECT_OVERRIDE_EN (бит 3, чтение и запись, после сброса 0x0) — Брать сигнал наличия VBUS из VBUS_DETECT.
- VBUS_DETECT (бит 2, чтение и запись, после сброса 0x0) — Значение подмены сигнала наличия VBUS.
- VBUS_EN_OVERRIDE_EN (бит 1, чтение и запись, после сброса 0x0) — Брать сигнал включения VBUS из VBUS_EN.
- VBUS_EN (бит 0, чтение и запись, после сброса 0x0) — Значение подмены сигнала включения VBUS.
USB_USBPHY_DIRECT — прямое управление PHY — для отладки
Смещение 0x7C, адрес 0x5011 007C, после сброса 0x0000 0000. Макросы pico-sdk: USB_USBPHY_DIRECT_…
- RX_DM_OVERRIDE (бит 25, чтение и запись, после сброса 0x0) — Подменённое значение rx_dm для контроллера.
- RX_DP_OVERRIDE (бит 24, чтение и запись, после сброса 0x0) — Подменённое значение rx_dp для контроллера.
- RX_DD_OVERRIDE (бит 23, чтение и запись, после сброса 0x0) — Подменённые дифференциальные данные rx_dd для контроллера.
- DM_OVV (бит 22, только чтение, после сброса 0x0) — Флаг состояния PHY по линии DM (OVV).
- DP_OVV (бит 21, только чтение, после сброса 0x0) — Флаг состояния PHY по линии DP (OVV).
- DM_OVCN (бит 20, только чтение, после сброса 0x0) — Флаг состояния PHY по линии DM (OVCN).
- DP_OVCN (бит 19, только чтение, после сброса 0x0) — Флаг состояния PHY по линии DP (OVCN).
- RX_DM (бит 18, только чтение, после сброса 0x0) — Уровень на выводе DM.
- RX_DP (бит 17, только чтение, после сброса 0x0) — Уровень на выводе DP.
- RX_DD (бит 16, только чтение, после сброса 0x0) — Принятые дифференциальные данные.
- TX_DIFFMODE (бит 15, чтение и запись, после сброса 0x0) — Дифференциальный режим передатчика.
- TX_FSSLEW (бит 14, чтение и запись, после сброса 0x0) — Скорость нарастания фронтов передатчика для Full Speed.
- TX_PD (бит 13, чтение и запись, после сброса 0x0) — Отключение питания передатчика.
- RX_PD (бит 12, чтение и запись, после сброса 0x0) — Отключение питания приёмника.
- TX_DM (бит 11, чтение и запись, после сброса 0x0) — Уровень на DM при подмене — только в несимметричном режиме.
- TX_DP (бит 10, чтение и запись, после сброса 0x0) — Уровень на DP при подмене; в дифференциальном режиме DM получает инверсию.
- TX_DM_OE (бит 9, чтение и запись, после сброса 0x0) — Разрешение выхода DM при подмене — только в несимметричном режиме: 0 — высокий импеданс.
- TX_DP_OE (бит 8, чтение и запись, после сброса 0x0) — Разрешение выхода при подмене: в дифференциальном режиме для пары DP/DM, 0 — высокий импеданс.
- DM_PULLDN_EN (бит 6, чтение и запись, после сброса 0x0) — Подтяжка DM к земле при подмене.
- DM_PULLUP_EN (бит 5, чтение и запись, после сброса 0x0) — Подтяжка DM к питанию при подмене.
- DM_PULLUP_HISEL (бит 4, чтение и запись, после сброса 0x0) — Второй резистор подтяжки DM: 0 — только Rpu2, 1 — Rpu1 + Rpu2.
- DP_PULLDN_EN (бит 2, чтение и запись, после сброса 0x0) — Подтяжка DP к земле при подмене.
- DP_PULLUP_EN (бит 1, чтение и запись, после сброса 0x0) — Подтяжка DP к питанию при подмене.
- DP_PULLUP_HISEL (бит 0, чтение и запись, после сброса 0x0) — Второй резистор подтяжки DP: 0 — только Rpu2, 1 — Rpu1 + Rpu2.
USB_USBPHY_DIRECT_OVERRIDE — какие сигналы PHY брать из USBPHY_DIRECT
Смещение 0x80, адрес 0x5011 0080, после сброса 0x0000 0000. Макросы pico-sdk: USB_USBPHY_DIRECT_OVERRIDE_…
- RX_DM_OVERRIDE_EN (бит 18, чтение и запись, после сброса 0x0) — Подавать контроллеру rx_dm из USBPHY_DIRECT.
- RX_DP_OVERRIDE_EN (бит 17, чтение и запись, после сброса 0x0) — Подавать контроллеру rx_dp из USBPHY_DIRECT.
- RX_DD_OVERRIDE_EN (бит 16, чтение и запись, после сброса 0x0) — Подавать контроллеру rx_dd из USBPHY_DIRECT.
- TX_DIFFMODE_OVERRIDE_EN (бит 15, чтение и запись, после сброса 0x0) — Брать TX_DIFFMODE из USBPHY_DIRECT вместо сигнала контроллера.
- DM_PULLUP_OVERRIDE_EN (бит 12, чтение и запись, после сброса 0x0) — Брать DM_PULLUP из USBPHY_DIRECT вместо сигнала контроллера.
- TX_FSSLEW_OVERRIDE_EN (бит 11, чтение и запись, после сброса 0x0) — Брать TX_FSSLEW из USBPHY_DIRECT вместо сигнала контроллера.
- TX_PD_OVERRIDE_EN (бит 10, чтение и запись, после сброса 0x0) — Брать TX_PD из USBPHY_DIRECT вместо сигнала контроллера.
- RX_PD_OVERRIDE_EN (бит 9, чтение и запись, после сброса 0x0) — Брать RX_PD из USBPHY_DIRECT вместо сигнала контроллера.
- TX_DM_OVERRIDE_EN (бит 8, чтение и запись, после сброса 0x0) — Брать TX_DM из USBPHY_DIRECT вместо сигнала контроллера.
- TX_DP_OVERRIDE_EN (бит 7, чтение и запись, после сброса 0x0) — Брать TX_DP из USBPHY_DIRECT вместо сигнала контроллера.
- TX_DM_OE_OVERRIDE_EN (бит 6, чтение и запись, после сброса 0x0) — Брать TX_DM_OE из USBPHY_DIRECT вместо сигнала контроллера.
- TX_DP_OE_OVERRIDE_EN (бит 5, чтение и запись, после сброса 0x0) — Брать TX_DP_OE из USBPHY_DIRECT вместо сигнала контроллера.
- DM_PULLDN_EN_OVERRIDE_EN (бит 4, чтение и запись, после сброса 0x0) — Брать DM_PULLDN_EN из USBPHY_DIRECT вместо сигнала контроллера.
- DP_PULLDN_EN_OVERRIDE_EN (бит 3, чтение и запись, после сброса 0x0) — Брать DP_PULLDN_EN из USBPHY_DIRECT вместо сигнала контроллера.
- DP_PULLUP_EN_OVERRIDE_EN (бит 2, чтение и запись, после сброса 0x0) — Брать DP_PULLUP_EN из USBPHY_DIRECT вместо сигнала контроллера.
- DM_PULLUP_HISEL_OVERRIDE_EN (бит 1, чтение и запись, после сброса 0x0) — Брать DM_PULLUP_HISEL из USBPHY_DIRECT вместо сигнала контроллера.
- DP_PULLUP_HISEL_OVERRIDE_EN (бит 0, чтение и запись, после сброса 0x0) — Брать DP_PULLUP_HISEL из USBPHY_DIRECT вместо сигнала контроллера.
USB_USBPHY_TRIM — подстройка подтягивающих резисторов PHY
Смещение 0x84, адрес 0x5011 0084, после сброса 0x0000 1F1F. Макросы pico-sdk: USB_USBPHY_TRIM_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | DM_PULLDN_TRIM | — | DP_PULLDN_TRIM | ||||||||||||
- DM_PULLDN_TRIM (биты 12:8, чтение и запись, после сброса 0x1F) — Подстройка резистора подтяжки DM к земле; по опыту Raspberry Pi значение после сброса подходит.
- DP_PULLDN_TRIM (биты 4:0, чтение и запись, после сброса 0x1F) — Подстройка резистора подтяжки DP к земле; по опыту Raspberry Pi значение после сброса подходит.
USB_LINESTATE_TUNING — исправления приёма — для отладки, значение после сброса лучше не менять
Смещение 0x88, адрес 0x5011 0088, после сброса 0x0000 00F8. Макросы pico-sdk: USB_LINESTATE_TUNING_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SPARE_FIX | DEV_LS_WAKE_FIX | DEV_RX_ERR_QUIESCE | SIE_RX_CHATTER_SE0_FIX | SIE_RX_BITSTUFF_FIX | DEV_BUFF_CONTROL_DOUBLE_READ_FIX | MULTI_HUB_FIX | LINESTATE_DELAY | RCV_DELAY | ||||||
- SPARE_FIX (биты 11:8, чтение и запись, после сброса 0x0) — Резерв для исправлений.
- DEV_LS_WAKE_FIX (бит 7, чтение и запись, после сброса 0x1) — Устройство: выходить из приостановки при любой активности на линии, не дожидаясь 1 мс.
- DEV_RX_ERR_QUIESCE (бит 6, чтение и запись, после сброса 0x1) — Устройство: после первой ошибки в передаче переводить приёмник в покой — одно прерывание на ошибку.
- SIE_RX_CHATTER_SE0_FIX (бит 5, чтение и запись, после сброса 0x1) — Приём: после дребезга или ошибки битстаффинга считать окончанием и SE0, а не только 8 бит покоя.
- SIE_RX_BITSTUFF_FIX (бит 4, чтение и запись, после сброса 0x1) — Приём: прекращать декодирование при ошибке битстаффинга — исправление эрраты RP2040-E15.
- DEV_BUFF_CONTROL_DOUBLE_READ_FIX (бит 3, чтение и запись, после сброса 0x1) — Устройство: дважды читать слово управления буфером и брать буфер, только если чтения совпали.
- MULTI_HUB_FIX (бит 2, чтение и запись, после сброса 0x0) — Хост: увеличенные паузы под худшие задержки цепочки хабов.
- LINESTATE_DELAY (бит 1, чтение и запись, после сброса 0x0) — Дополнительная однобитная фильтрация состояния линии.
- RCV_DELAY (бит 0, чтение и запись, после сброса 0x0) — Устройство: учитывать лишние биты некоторых хабов перед EOP.
USB_INTR — необработанные флаги прерываний
Смещение 0x8C, адрес 0x5011 008C, после сброса 0x0000 0000. Макросы pico-sdk: USB_INTR_…
- EPX_STOPPED_ON_NAK (бит 23, только чтение, после сброса 0x0) — Событие: хост остановил опрос EPX из-за NAK.
- DEV_SM_WATCHDOG_FIRED (бит 22, только чтение, после сброса 0x0) — Событие: сработал сторожевой таймер автомата устройства.
- ENDPOINT_ERROR (бит 21, только чтение, после сброса 0x0) — Событие: ошибка конечной точки.
- RX_SHORT_PACKET (бит 20, только чтение, после сброса 0x0) — Событие: принят короткий пакет.
- EP_STALL_NAK (бит 19, только чтение, после сброса 0x0) — Событие: есть флаг в EP_STATUS_STALL_NAK.
- ABORT_DONE (бит 18, только чтение, после сброса 0x0) — Событие: есть флаг в EP_ABORT_DONE.
- DEV_SOF (бит 17, только чтение, после сброса 0x0) — Событие: устройство приняло SOF; сбрасывается чтением SOF_RD.
- SETUP_REQ (бит 16, только чтение, после сброса 0x0) — Событие: устройство приняло пакет SETUP.
- DEV_RESUME_FROM_HOST (бит 15, только чтение, после сброса 0x0) — Событие: хост пробудил устройство.
- DEV_SUSPEND (бит 14, только чтение, после сброса 0x0) — Событие: у устройства изменилось состояние приостановки.
- DEV_CONN_DIS (бит 13, только чтение, после сброса 0x0) — Событие: у устройства изменилось состояние подключения.
- BUS_RESET (бит 12, только чтение, после сброса 0x0) — Событие: сброс шины.
- VBUS_DETECT (бит 11, только чтение, после сброса 0x0) — Событие: обнаружено напряжение VBUS.
- STALL (бит 10, только чтение, после сброса 0x0) — Событие: получен STALL.
- ERROR_CRC (бит 9, только чтение, после сброса 0x0) — Событие: ошибка CRC.
- ERROR_BIT_STUFF (бит 8, только чтение, после сброса 0x0) — Событие: ошибка битстаффинга.
- ERROR_RX_OVERFLOW (бит 7, только чтение, после сброса 0x0) — Событие: переполнение приёмника.
- ERROR_RX_TIMEOUT (бит 6, только чтение, после сброса 0x0) — Событие: ACK не пришёл вовремя.
- ERROR_DATA_SEQ (бит 5, только чтение, после сброса 0x0) — Событие: ошибка последовательности DATA0/DATA1.
- BUFF_STATUS (бит 4, только чтение, после сброса 0x0) — Событие: есть флаг в BUFF_STATUS.
- TRANS_COMPLETE (бит 3, только чтение, после сброса 0x0) — Событие: транзакция завершена.
- HOST_SOF (бит 2, только чтение, после сброса 0x0) — Событие: хост отправил SOF; сбрасывается чтением SOF_RD.
- HOST_RESUME (бит 1, только чтение, после сброса 0x0) — Событие: устройство пробудило хост.
- HOST_CONN_DIS (бит 0, только чтение, после сброса 0x0) — Событие: к хосту подключили устройство или отключили его.
USB_INTE — разрешение прерываний
Смещение 0x90, адрес 0x5011 0090, после сброса 0x0000 0000. Макросы pico-sdk: USB_INTE_…
- EPX_STOPPED_ON_NAK (бит 23, чтение и запись, после сброса 0x0) — Разрешение прерывания: хост остановил опрос EPX из-за NAK.
- DEV_SM_WATCHDOG_FIRED (бит 22, чтение и запись, после сброса 0x0) — Разрешение прерывания: сработал сторожевой таймер автомата устройства.
- ENDPOINT_ERROR (бит 21, чтение и запись, после сброса 0x0) — Разрешение прерывания: ошибка конечной точки.
- RX_SHORT_PACKET (бит 20, чтение и запись, после сброса 0x0) — Разрешение прерывания: принят короткий пакет.
- EP_STALL_NAK (бит 19, чтение и запись, после сброса 0x0) — Разрешение прерывания: есть флаг в EP_STATUS_STALL_NAK.
- ABORT_DONE (бит 18, чтение и запись, после сброса 0x0) — Разрешение прерывания: есть флаг в EP_ABORT_DONE.
- DEV_SOF (бит 17, чтение и запись, после сброса 0x0) — Разрешение прерывания: устройство приняло SOF; сбрасывается чтением SOF_RD.
- SETUP_REQ (бит 16, чтение и запись, после сброса 0x0) — Разрешение прерывания: устройство приняло пакет SETUP.
- DEV_RESUME_FROM_HOST (бит 15, чтение и запись, после сброса 0x0) — Разрешение прерывания: хост пробудил устройство.
- DEV_SUSPEND (бит 14, чтение и запись, после сброса 0x0) — Разрешение прерывания: у устройства изменилось состояние приостановки.
- DEV_CONN_DIS (бит 13, чтение и запись, после сброса 0x0) — Разрешение прерывания: у устройства изменилось состояние подключения.
- BUS_RESET (бит 12, чтение и запись, после сброса 0x0) — Разрешение прерывания: сброс шины.
- VBUS_DETECT (бит 11, чтение и запись, после сброса 0x0) — Разрешение прерывания: обнаружено напряжение VBUS.
- STALL (бит 10, чтение и запись, после сброса 0x0) — Разрешение прерывания: получен STALL.
- ERROR_CRC (бит 9, чтение и запись, после сброса 0x0) — Разрешение прерывания: ошибка CRC.
- ERROR_BIT_STUFF (бит 8, чтение и запись, после сброса 0x0) — Разрешение прерывания: ошибка битстаффинга.
- ERROR_RX_OVERFLOW (бит 7, чтение и запись, после сброса 0x0) — Разрешение прерывания: переполнение приёмника.
- ERROR_RX_TIMEOUT (бит 6, чтение и запись, после сброса 0x0) — Разрешение прерывания: ACK не пришёл вовремя.
- ERROR_DATA_SEQ (бит 5, чтение и запись, после сброса 0x0) — Разрешение прерывания: ошибка последовательности DATA0/DATA1.
- BUFF_STATUS (бит 4, чтение и запись, после сброса 0x0) — Разрешение прерывания: есть флаг в BUFF_STATUS.
- TRANS_COMPLETE (бит 3, чтение и запись, после сброса 0x0) — Разрешение прерывания: транзакция завершена.
- HOST_SOF (бит 2, чтение и запись, после сброса 0x0) — Разрешение прерывания: хост отправил SOF; сбрасывается чтением SOF_RD.
- HOST_RESUME (бит 1, чтение и запись, после сброса 0x0) — Разрешение прерывания: устройство пробудило хост.
- HOST_CONN_DIS (бит 0, чтение и запись, после сброса 0x0) — Разрешение прерывания: к хосту подключили устройство или отключили его.
USB_INTF — принудительная установка прерываний
Смещение 0x94, адрес 0x5011 0094, после сброса 0x0000 0000. Макросы pico-sdk: USB_INTF_…
- EPX_STOPPED_ON_NAK (бит 23, чтение и запись, после сброса 0x0) — Принудительное прерывание: хост остановил опрос EPX из-за NAK.
- DEV_SM_WATCHDOG_FIRED (бит 22, чтение и запись, после сброса 0x0) — Принудительное прерывание: сработал сторожевой таймер автомата устройства.
- ENDPOINT_ERROR (бит 21, чтение и запись, после сброса 0x0) — Принудительное прерывание: ошибка конечной точки.
- RX_SHORT_PACKET (бит 20, чтение и запись, после сброса 0x0) — Принудительное прерывание: принят короткий пакет.
- EP_STALL_NAK (бит 19, чтение и запись, после сброса 0x0) — Принудительное прерывание: есть флаг в EP_STATUS_STALL_NAK.
- ABORT_DONE (бит 18, чтение и запись, после сброса 0x0) — Принудительное прерывание: есть флаг в EP_ABORT_DONE.
- DEV_SOF (бит 17, чтение и запись, после сброса 0x0) — Принудительное прерывание: устройство приняло SOF; сбрасывается чтением SOF_RD.
- SETUP_REQ (бит 16, чтение и запись, после сброса 0x0) — Принудительное прерывание: устройство приняло пакет SETUP.
- DEV_RESUME_FROM_HOST (бит 15, чтение и запись, после сброса 0x0) — Принудительное прерывание: хост пробудил устройство.
- DEV_SUSPEND (бит 14, чтение и запись, после сброса 0x0) — Принудительное прерывание: у устройства изменилось состояние приостановки.
- DEV_CONN_DIS (бит 13, чтение и запись, после сброса 0x0) — Принудительное прерывание: у устройства изменилось состояние подключения.
- BUS_RESET (бит 12, чтение и запись, после сброса 0x0) — Принудительное прерывание: сброс шины.
- VBUS_DETECT (бит 11, чтение и запись, после сброса 0x0) — Принудительное прерывание: обнаружено напряжение VBUS.
- STALL (бит 10, чтение и запись, после сброса 0x0) — Принудительное прерывание: получен STALL.
- ERROR_CRC (бит 9, чтение и запись, после сброса 0x0) — Принудительное прерывание: ошибка CRC.
- ERROR_BIT_STUFF (бит 8, чтение и запись, после сброса 0x0) — Принудительное прерывание: ошибка битстаффинга.
- ERROR_RX_OVERFLOW (бит 7, чтение и запись, после сброса 0x0) — Принудительное прерывание: переполнение приёмника.
- ERROR_RX_TIMEOUT (бит 6, чтение и запись, после сброса 0x0) — Принудительное прерывание: ACK не пришёл вовремя.
- ERROR_DATA_SEQ (бит 5, чтение и запись, после сброса 0x0) — Принудительное прерывание: ошибка последовательности DATA0/DATA1.
- BUFF_STATUS (бит 4, чтение и запись, после сброса 0x0) — Принудительное прерывание: есть флаг в BUFF_STATUS.
- TRANS_COMPLETE (бит 3, чтение и запись, после сброса 0x0) — Принудительное прерывание: транзакция завершена.
- HOST_SOF (бит 2, чтение и запись, после сброса 0x0) — Принудительное прерывание: хост отправил SOF; сбрасывается чтением SOF_RD.
- HOST_RESUME (бит 1, чтение и запись, после сброса 0x0) — Принудительное прерывание: устройство пробудило хост.
- HOST_CONN_DIS (бит 0, чтение и запись, после сброса 0x0) — Принудительное прерывание: к хосту подключили устройство или отключили его.
USB_INTS — флаги прерываний после маски и принуждения
Смещение 0x98, адрес 0x5011 0098, после сброса 0x0000 0000. Макросы pico-sdk: USB_INTS_…
- EPX_STOPPED_ON_NAK (бит 23, только чтение, после сброса 0x0) — Прерывание после маски: хост остановил опрос EPX из-за NAK.
- DEV_SM_WATCHDOG_FIRED (бит 22, только чтение, после сброса 0x0) — Прерывание после маски: сработал сторожевой таймер автомата устройства.
- ENDPOINT_ERROR (бит 21, только чтение, после сброса 0x0) — Прерывание после маски: ошибка конечной точки.
- RX_SHORT_PACKET (бит 20, только чтение, после сброса 0x0) — Прерывание после маски: принят короткий пакет.
- EP_STALL_NAK (бит 19, только чтение, после сброса 0x0) — Прерывание после маски: есть флаг в EP_STATUS_STALL_NAK.
- ABORT_DONE (бит 18, только чтение, после сброса 0x0) — Прерывание после маски: есть флаг в EP_ABORT_DONE.
- DEV_SOF (бит 17, только чтение, после сброса 0x0) — Прерывание после маски: устройство приняло SOF; сбрасывается чтением SOF_RD.
- SETUP_REQ (бит 16, только чтение, после сброса 0x0) — Прерывание после маски: устройство приняло пакет SETUP.
- DEV_RESUME_FROM_HOST (бит 15, только чтение, после сброса 0x0) — Прерывание после маски: хост пробудил устройство.
- DEV_SUSPEND (бит 14, только чтение, после сброса 0x0) — Прерывание после маски: у устройства изменилось состояние приостановки.
- DEV_CONN_DIS (бит 13, только чтение, после сброса 0x0) — Прерывание после маски: у устройства изменилось состояние подключения.
- BUS_RESET (бит 12, только чтение, после сброса 0x0) — Прерывание после маски: сброс шины.
- VBUS_DETECT (бит 11, только чтение, после сброса 0x0) — Прерывание после маски: обнаружено напряжение VBUS.
- STALL (бит 10, только чтение, после сброса 0x0) — Прерывание после маски: получен STALL.
- ERROR_CRC (бит 9, только чтение, после сброса 0x0) — Прерывание после маски: ошибка CRC.
- ERROR_BIT_STUFF (бит 8, только чтение, после сброса 0x0) — Прерывание после маски: ошибка битстаффинга.
- ERROR_RX_OVERFLOW (бит 7, только чтение, после сброса 0x0) — Прерывание после маски: переполнение приёмника.
- ERROR_RX_TIMEOUT (бит 6, только чтение, после сброса 0x0) — Прерывание после маски: ACK не пришёл вовремя.
- ERROR_DATA_SEQ (бит 5, только чтение, после сброса 0x0) — Прерывание после маски: ошибка последовательности DATA0/DATA1.
- BUFF_STATUS (бит 4, только чтение, после сброса 0x0) — Прерывание после маски: есть флаг в BUFF_STATUS.
- TRANS_COMPLETE (бит 3, только чтение, после сброса 0x0) — Прерывание после маски: транзакция завершена.
- HOST_SOF (бит 2, только чтение, после сброса 0x0) — Прерывание после маски: хост отправил SOF; сбрасывается чтением SOF_RD.
- HOST_RESUME (бит 1, только чтение, после сброса 0x0) — Прерывание после маски: устройство пробудило хост.
- HOST_CONN_DIS (бит 0, только чтение, после сброса 0x0) — Прерывание после маски: к хосту подключили устройство или отключили его.
USB_SOF_TIMESTAMP_RAW — устройство: свободный счётчик PHY на 48 МГц
Смещение 0x0100, адрес 0x5011 0100, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: USB_SOF_TIMESTAMP_RAW_…
Отдельных полей нет: значение занимает биты 20:0, остальные биты не используются.
USB_SOF_TIMESTAMP_LAST — устройство: значение счётчика PHY в момент последнего SOF
Смещение 0x0104, адрес 0x5011 0104, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: USB_SOF_TIMESTAMP_LAST_…
Отдельных полей нет: значение занимает биты 20:0, остальные биты не используются.
USB_SM_STATE — внутреннее состояние модулей контроллера
Смещение 0x0108, адрес 0x5011 0108, после сброса 0x0000 0000. Макросы pico-sdk: USB_SM_STATE_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | RX_DASM | BC_STATE | STATE | ||||||||||||
- RX_DASM (биты 11:8, только чтение, после сброса 0x0) — Внутреннее состояние модуля RX_DASM.
- BC_STATE (биты 7:5, только чтение, после сброса 0x0) — Внутреннее состояние модуля BC.
- STATE (биты 4:0, только чтение, после сброса 0x00) — Внутреннее состояние автомата контроллера.
USB_EP_TX_ERROR — счётчики ошибок передачи конечных точек
Смещение 0x010C, адрес 0x5011 010C, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_TX_ERROR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| EP15 | EP14 | EP13 | EP12 | EP11 | EP10 | EP9 | EP8 | ||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| EP7 | EP6 | EP5 | EP4 | EP3 | EP2 | EP1 | EP0 | ||||||||
- EPn, n = 0…15 (биты 1:0, 3:2, 5:4, 7:6, 9:8, 11:10, 13:12, 15:14, 17:16, 19:18, 21:20, 23:22, 25:24, 27:26, 29:28, 31:30; сброс записью 1, после сброса 0x0) — Счётчик ошибок передачи конечной точки n; запись обнуляет.
USB_EP_RX_ERROR — ошибки приёма конечных точек
Смещение 0x0110, адрес 0x5011 0110, после сброса 0x0000 0000. Макросы pico-sdk: USB_EP_RX_ERROR_…
- EPn_SEQ, n = 0…15 (биты 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31; сброс записью 1, после сброса 0x0) — Ошибка последовательности DATA0/DATA1 при приёме на точке n; сбрасывается записью.
- EPn_TRANSACTION, n = 0…15 (биты 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30; сброс записью 1, после сброса 0x0) — Ошибка транзакции при приёме на точке n; сбрасывается записью.
USB_DEV_SM_WATCHDOG — сторожевой таймер автомата устройства
Смещение 0x0114, адрес 0x5011 0114, после сброса 0x0000 0000. Макросы pico-sdk: USB_DEV_SM_WATCHDOG_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | FIRED | RESET | ENABLE | LIMIT | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| LIMIT | |||||||||||||||
- FIRED (бит 20, сброс записью 1, после сброса 0x0) — Сторожевой таймер автомата устройства сработал; сбрасывается записью 1.
- RESET (бит 19, чтение и запись, после сброса 0x0) — Принудительно сбрасывать автомат устройства по истечении таймера.
- ENABLE (бит 18, чтение и запись, после сброса 0x0) — Включение таймера; LIMIT задают до включения.
- LIMIT (биты 17:0, чтение и запись, после сброса 0x00000) — Предел пребывания автомата вне покоя; счёт сбрасывается при каждом переходе.
Частые вопросы
Почему USB на RP2350 не работает с кодом для RP2040?
Скорее всего, не сброшен бит PHY_ISO в MAIN_CTRL: после сброса PHY изолирован, и изоляцию нужно снять при запуске и после выключения питания ядра. По даташиту это единственное обязательное изменение — остальные регистры совместимы с RP2040.
Можно ли использовать выводы USB RP2350 как GPIO?
Да: бит USBPHY_AS_GPIO в USB_MUXING отключает DP и DM от контроллера и делает их обычными выводами на 3,3 В. Так получают два дополнительных вывода, если USB не нужен.
Нужно ли на RP2350 устанавливать AVAILABLE отдельной записью?
Нет, если в LINESTATE_TUNING оставлен включённым DEV_BUFF_CONTROL_DOUBLE_READ_FIX: контроллер дважды читает слово управления буфером и берёт буфер, только если оба чтения совпали. На RP2040 AVAILABLE приходилось записывать отдельно.
Источники
- Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.7.5: список регистров, назначение полей, тип доступа и значения после сброса
- Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause
Нашли ошибку в регистрах?
Другие регистры RP2350
- Все регистры RP2350Блоки периферии и базовые адреса
- SHA256 — ускоритель SHA-256SHA256_CSR, SHA256_WDATA, SHA256_SUMn
- TICKS — генераторы тиковTICKS_PROC0_CTRL, TICKS_PROC0_CYCLES, TICKS_PROC0_COUNT, TICKS_PROC1_CTRL, TICKS_PROC1_CYCLES, TICKS_PROC1_COUNT
- TRNG — генератор случайных чиселTRNG_RNG_IMR, TRNG_RNG_ISR, TRNG_RNG_ICR, TRNG_TRNG_CONFIG, TRNG_TRNG_VALID, TRNG_EHR_DATA0
- GLITCH_DETECTOR — детектор сбоевGLITCH_DETECTOR_ARM, GLITCH_DETECTOR_DISARM, GLITCH_DETECTOR_SENSITIVITY, GLITCH_DETECTOR_LOCK, GLITCH_DETECTOR_TRIG_STATUS, GLITCH_DETECTOR_TRIG_FORCE
- HSTX — быстрый последовательный выводHSTX_CTRL_CSR, HSTX_CTRL_BITn, HSTX_CTRL_EXPAND_SHIFT, HSTX_CTRL_EXPAND_TMDS
- HSTX_FIFO — FIFO быстрого выводаHSTX_FIFO_STAT, HSTX_FIFO_FIFO
- QMI — интерфейс QSPI-памятиQMI_DIRECT_CSR, QMI_DIRECT_TX, QMI_DIRECT_RX, QMI_M0_TIMING, QMI_M0_RFMT, QMI_M0_RCMD
- XIP_AUX — быстрый порт FIFO XIPXIP_AUX_STREAM, XIP_AUX_QMI_DIRECT_TX, XIP_AUX_QMI_DIRECT_RX
- BOOTRAM — регистры загрузочной памятиBOOTRAM_WRITE_ONCE0, BOOTRAM_WRITE_ONCE1, BOOTRAM_BOOTLOCK_STAT, BOOTRAM_BOOTLOCKn
- CORESIGHT_TRACE — FIFO трассировкиCORESIGHT_TRACE_CTRL_STATUS, CORESIGHT_TRACE_TRACE_CAPTURE_FIFO
- EPPB — регистры ядра от Raspberry PiM33_EPPB_NMI_MASK0, M33_EPPB_NMI_MASK1, M33_EPPB_SLEEPCTRL
- OTP — однократно программируемая памятьOTP_SW_LOCKn, OTP_SBPI_INSTR, OTP_SBPI_WDATA_0, OTP_SBPI_WDATA_1, OTP_SBPI_WDATA_2, OTP_SBPI_WDATA_3
- POWMAN — менеджер питанияPOWMAN_BADPASSWD, POWMAN_VREG_CTRL, POWMAN_VREG_STS, POWMAN_VREG, POWMAN_VREG_LP_ENTRY, POWMAN_VREG_LP_EXIT
- ACCESSCTRL — права доступа к шинеACCESSCTRL_LOCK, ACCESSCTRL_FORCE_CORE_NS, ACCESSCTRL_CFGRESET, ACCESSCTRL_GPIO_NSMASK0, ACCESSCTRL_GPIO_NSMASK1, ACCESSCTRL_ROM
- TIMER — системные таймерыTIMER_TIMEHW, TIMER_TIMELW, TIMER_TIMEHR, TIMER_TIMELR, TIMER_ALARMn, TIMER_ARMED
- WATCHDOG — сторожевой таймерWATCHDOG_CTRL, WATCHDOG_LOAD, WATCHDOG_REASON, WATCHDOG_SCRATCHn
- ADC — аналого-цифровой преобразовательADC_CS, ADC_RESULT, ADC_FCS, ADC_FIFO, ADC_DIV, ADC_INTR
- PWM — широтно-импульсная модуляцияPWM_CHn_CSR, PWM_CHn_DIV, PWM_CHn_CTR, PWM_CHn_CC, PWM_CHn_TOP, PWM_EN
- XOSC — кварцевый генераторXOSC_CTRL, XOSC_STATUS, XOSC_DORMANT, XOSC_STARTUP, XOSC_COUNT
- PLL — умножители частотыPLL_CS, PLL_PWR, PLL_FBDIV_INT, PLL_PRIM, PLL_INTR, PLL_INTE
- PADS_BANK0 — электрические настройки GPIOPADS_BANK0_VOLTAGE_SELECT, PADS_BANK0_GPIOn, PADS_BANK0_SWCLK, PADS_BANK0_SWD
- PADS_QSPI — электрические настройки выводов QSPIPADS_QSPI_VOLTAGE_SELECT, PADS_QSPI_GPIO_QSPI_SCLK, PADS_QSPI_GPIO_QSPI_SD0, PADS_QSPI_GPIO_QSPI_SD1, PADS_QSPI_GPIO_QSPI_SD2, PADS_QSPI_GPIO_QSPI_SD3
- RESETS — сброс подсистемRESETS_RESET, RESETS_WDSEL, RESETS_RESET_DONE
- PSM — автомат включения питанияPSM_FRCE_ON, PSM_FRCE_OFF, PSM_WDSEL, PSM_DONE
- SYSINFO — сведения о чипеSYSINFO_CHIP_ID, SYSINFO_PACKAGE_SEL, SYSINFO_PLATFORM, SYSINFO_GITREF_RP2350
- BUSCTRL — управление шинойBUSCTRL_BUS_PRIORITY, BUSCTRL_BUS_PRIORITY_ACK, BUSCTRL_PERFCTR_EN, BUSCTRL_PERFCTRn, BUSCTRL_PERFSELn
- ROSC — кольцевой генераторROSC_CTRL, ROSC_FREQA, ROSC_FREQB, ROSC_RANDOM, ROSC_DORMANT, ROSC_DIV
- SYSCFG — системные настройкиSYSCFG_PROC_CONFIG, SYSCFG_PROC_IN_SYNC_BYPASS, SYSCFG_PROC_IN_SYNC_BYPASS_HI, SYSCFG_DBGFORCE, SYSCFG_MEMPOWERDOWN, SYSCFG_AUXCTRL
- XIP_CTRL — кеш выполнения из флеш-памятиXIP_CTRL, XIP_STAT, XIP_CTR_HIT, XIP_CTR_ACC, XIP_STREAM_ADDR, XIP_STREAM_CTR
- PIO — программируемый ввод-выводPIO_CTRL, PIO_FSTAT, PIO_FDEBUG, PIO_FLEVEL, PIO_TXFn, PIO_RXFn
- DMA — прямой доступ к памятиDMA_CHn_READ_ADDR, DMA_CHn_WRITE_ADDR, DMA_CHn_TRANS_COUNT, DMA_CHn_CTRL_TRIG, DMA_CHn_AL1_CTRL, DMA_CHn_AL1_READ_ADDR
- SIO — однотактный ввод-вывод ядерSIO_CPUID, SIO_GPIO_IN, SIO_GPIO_HI_IN, SIO_GPIO_OUT, SIO_GPIO_HI_OUT, SIO_GPIO_OUT_SET
- CLOCKS — тактированиеCLOCKS_CLK_GPOUT0_CTRL, CLOCKS_CLK_GPOUTn_DIV, CLOCKS_CLK_GPOUTn_SELECTED, CLOCKS_CLK_GPOUT1_CTRL, CLOCKS_CLK_GPOUT2_CTRL, CLOCKS_CLK_GPOUT3_CTRL
- IO_BANK0 — мультиплексор GPIOIO_BANK0_GPIOn_STATUS, IO_BANK0_GPIOn_CTRL, IO_BANK0_IRQSUMMARY_PROC0_SECURE0, IO_BANK0_IRQSUMMARY_PROC0_SECURE1, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE0, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE1
- IO_QSPI — мультиплексор выводов QSPI и USBIO_QSPI_USBPHY_DP_STATUS, IO_QSPI_USBPHY_DP_CTRL, IO_QSPI_USBPHY_DM_STATUS, IO_QSPI_USBPHY_DM_CTRL, IO_QSPI_GPIO_QSPI_SCLK_STATUS, IO_QSPI_GPIO_QSPI_SCLK_CTRL
- M33 — системные регистры Cortex-M33M33_ITM_STIMn, M33_ITM_TER0, M33_ITM_TPR, M33_ITM_TCR, M33_INT_ATREADY, M33_INT_ATVALID