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

Регистры USB RP2350

Регистры контроллера USB 2.0 в RP2350: всё, что было в RP2040, плюс изоляция PHY, выводы DP и DM как GPIO, перестановка DP и DM, остановка транзакции хоста по NAK, счётчики ошибок конечных точек, метки времени SOF и сторожевой таймер автомата устройства.

Контроллер 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_REGS0x5011 0000

В RP2040 блок USB устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры USB RP2040».

Регистры блока

РегистрСмещениеНазначениеПосле сброса
USB_ADDR_ENDP0x00Адрес устройства и конечная точка0x0000 0000
USB_ADDR_ENDPn0x00 + n · 0x04Хост: адрес и конечная точка для опроса прерываний, слот n0x0000 0000
USB_MAIN_CTRL0x40Включение контроллера и режим0x0000 0004
USB_SOF_WR0x44Хост: номер кадра для SOF0x0000 0000
USB_SOF_RD0x48Номер последнего кадра SOF0x0000 0000
USB_SIE_CTRL0x4CУправление SIE: подтяжки, VBUS, транзакции хоста, прерывания EP00x0000 8000
USB_SIE_STATUS0x50Состояние SIE: события, ошибки, скорость, VBUS0x0000 0000
USB_INT_EP_CTRL0x54Хост: включение опроса прерывающих конечных точек0x0000 0000
USB_BUFF_STATUS0x58Обработанные буферы конечных точек0x0000 0000
USB_BUFF_CPU_SHOULD_HANDLE0x5CКакой из двух буферов конечной точки обработать0x0000 0000
USB_EP_ABORT0x60Устройство: отзыв буферов конечных точек0x0000 0000
USB_EP_ABORT_DONE0x64Устройство: отзыв буфера завершён0x0000 0000
USB_EP_STALL_ARM0x68Устройство: разрешение STALL на EP00x0000 0000
USB_NAK_POLL0x6CХост: пауза перед повтором после NAK0x0010 0010
USB_EP_STATUS_STALL_NAK0x70Устройство: конечные точки, ответившие NAK или STALL0x0000 0000
USB_USB_MUXING0x74Куда подключён контроллер: встроенный PHY или другое0x0000 0001
USB_USB_PWR0x78Подмена сигналов VBUS и перегрузки по току0x0000 0000
USB_USBPHY_DIRECT0x7CПрямое управление PHY — для отладки0x0000 0000
USB_USBPHY_DIRECT_OVERRIDE0x80Какие сигналы PHY брать из USBPHY_DIRECT0x0000 0000
USB_USBPHY_TRIM0x84Подстройка подтягивающих резисторов PHY0x0000 1F1F
USB_LINESTATE_TUNING0x88Исправления приёма — для отладки, значение после сброса лучше не менять0x0000 00F8
USB_INTR0x8CНеобработанные флаги прерываний0x0000 0000
USB_INTE0x90Разрешение прерываний0x0000 0000
USB_INTF0x94Принудительная установка прерываний0x0000 0000
USB_INTS0x98Флаги прерываний после маски и принуждения0x0000 0000
USB_SOF_TIMESTAMP_RAW0x0100Устройство: свободный счётчик PHY на 48 МГц0x0000 0000
USB_SOF_TIMESTAMP_LAST0x0104Устройство: значение счётчика PHY в момент последнего SOF0x0000 0000
USB_SM_STATE0x0108Внутреннее состояние модулей контроллера0x0000 0000
USB_EP_TX_ERROR0x010CСчётчики ошибок передачи конечных точек0x0000 0000
USB_EP_RX_ERROR0x0110Ошибки приёма конечных точек0x0000 0000
USB_DEV_SM_WATCHDOG0x0114Сторожевой таймер автомата устройства0x0000 0000

USB_ADDR_ENDP — адрес устройства и конечная точка

Смещение 0x00, адрес 0x5011 0000, после сброса 0x0000 0000. Макросы pico-sdk: USB_ADDR_ENDP_…

31302928272625242322212019181716
—ENDPOINT
1514131211109876543210
—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_…

31302928272625242322212019181716
—INTEP_PREAMBLEINTEP_DIR—ENDPOINT
1514131211109876543210
—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_…

31302928272625242322212019181716
SIM_TIMING—
1514131211109876543210
—PHY_ISOHOST_NDEVICECONTROLLER_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_…

1514131211109876543210
—EP0_OUTEP0_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_…

31302928272625242322212019181716
RETRY_COUNT_HIEPX_STOPPED_ON_NAKSTOP_EPX_ON_NAKDELAY_FS
1514131211109876543210
RETRY_COUNT_LODELAY_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_…

31302928272625242322212019181716
SWAP_DPDM—
1514131211109876543210
—USBPHY_AS_GPIOSOFTCONTO_DIGITAL_PADTO_EXTPHYTO_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_…

1514131211109876543210
—OVERCURR_DETECT_ENOVERCURR_DETECTVBUS_DETECT_OVERRIDE_ENVBUS_DETECTVBUS_EN_OVERRIDE_ENVBUS_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_…

1514131211109876543210
—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_…

1514131211109876543210
—SPARE_FIXDEV_LS_WAKE_FIXDEV_RX_ERR_QUIESCESIE_RX_CHATTER_SE0_FIXSIE_RX_BITSTUFF_FIXDEV_BUFF_CONTROL_DOUBLE_READ_FIXMULTI_HUB_FIXLINESTATE_DELAYRCV_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_…

1514131211109876543210
—RX_DASMBC_STATESTATE
  • 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_…

31302928272625242322212019181716
EP15EP14EP13EP12EP11EP10EP9EP8
1514131211109876543210
EP7EP6EP5EP4EP3EP2EP1EP0
  • 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_…

31302928272625242322212019181716
—FIREDRESETENABLELIMIT
1514131211109876543210
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 приходилось записывать отдельно.

Источники

  1. Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.7.5: список регистров, назначение полей, тип доступа и значения после сброса
  2. Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause

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

Другие регистры RP2350

Статьи и термины