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

Регистры RESETS RP2350

Регистры контроллера сброса RP2350: какие из 29 блоков периферии держать в сбросе, какие уже готовы к работе и какие перезапускать при срабатывании сторожевого таймера.

После включения питания периферия RP2350 — от АЦП до USB — находится в сбросе: регистр RESET после сброса равен 0x1FFF FFFF, по биту на каждый из 29 блоков. Чтобы пользоваться блоком, его бит сбрасывают и ждут его бита в RESET_DONE (даташит RP2350, раздел 7.5).

По сравнению с RP2040 добавлены HSTX, PIO2, SHA256, TRNG и два таймера TIMER0 и TIMER1, а RTC и единый TIMER исчезли, поэтому остальные биты сдвинулись. Незащищённому коду сброс блока доступен, только если доступен сам блок — это задаёт ACCESSCTRL (раздел 10.6.2.2).

ЭкземплярБазовый адрес
RESETS0x4002 0000

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

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

РегистрСмещениеНазначениеПосле сброса
RESETS_RESET0x00Удержание блоков в сбросе0x1FFF FFFF
RESETS_WDSEL0x04Блоки, которые сбрасывает сторожевой таймер0x0000 0000
RESETS_RESET_DONE0x08Блоки, вышедшие из сброса0x0000 0000

RESETS_RESET — удержание блоков в сбросе

Смещение 0x00, адрес 0x4002 0000, после сброса 0x1FFF FFFF. Макросы pico-sdk: RESETS_RESET_…

  • USBCTRL (бит 28, чтение и запись, после сброса 0x1) — Блок USBCTRL: 1 — держать в сбросе, 0 — работает.
  • UART1 (бит 27, чтение и запись, после сброса 0x1) — Блок UART1: 1 — держать в сбросе, 0 — работает.
  • UART0 (бит 26, чтение и запись, после сброса 0x1) — Блок UART0: 1 — держать в сбросе, 0 — работает.
  • TRNG (бит 25, чтение и запись, после сброса 0x1) — Блок TRNG: 1 — держать в сбросе, 0 — работает.
  • TIMER1 (бит 24, чтение и запись, после сброса 0x1) — Блок TIMER1: 1 — держать в сбросе, 0 — работает.
  • TIMER0 (бит 23, чтение и запись, после сброса 0x1) — Блок TIMER0: 1 — держать в сбросе, 0 — работает.
  • TBMAN (бит 22, чтение и запись, после сброса 0x1) — Блок TBMAN: 1 — держать в сбросе, 0 — работает.
  • SYSINFO (бит 21, чтение и запись, после сброса 0x1) — Блок SYSINFO: 1 — держать в сбросе, 0 — работает.
  • SYSCFG (бит 20, чтение и запись, после сброса 0x1) — Блок SYSCFG: 1 — держать в сбросе, 0 — работает.
  • SPI1 (бит 19, чтение и запись, после сброса 0x1) — Блок SPI1: 1 — держать в сбросе, 0 — работает.
  • SPI0 (бит 18, чтение и запись, после сброса 0x1) — Блок SPI0: 1 — держать в сбросе, 0 — работает.
  • SHA256 (бит 17, чтение и запись, после сброса 0x1) — Блок SHA256: 1 — держать в сбросе, 0 — работает.
  • PWM (бит 16, чтение и запись, после сброса 0x1) — Блок PWM: 1 — держать в сбросе, 0 — работает.
  • PLL_USB (бит 15, чтение и запись, после сброса 0x1) — Блок PLL_USB: 1 — держать в сбросе, 0 — работает.
  • PLL_SYS (бит 14, чтение и запись, после сброса 0x1) — Блок PLL_SYS: 1 — держать в сбросе, 0 — работает.
  • PIO2 (бит 13, чтение и запись, после сброса 0x1) — Блок PIO2: 1 — держать в сбросе, 0 — работает.
  • PIO1 (бит 12, чтение и запись, после сброса 0x1) — Блок PIO1: 1 — держать в сбросе, 0 — работает.
  • PIO0 (бит 11, чтение и запись, после сброса 0x1) — Блок PIO0: 1 — держать в сбросе, 0 — работает.
  • PADS_QSPI (бит 10, чтение и запись, после сброса 0x1) — Блок PADS_QSPI: 1 — держать в сбросе, 0 — работает.
  • PADS_BANK0 (бит 9, чтение и запись, после сброса 0x1) — Блок PADS_BANK0: 1 — держать в сбросе, 0 — работает.
  • JTAG (бит 8, чтение и запись, после сброса 0x1) — Блок JTAG: 1 — держать в сбросе, 0 — работает.
  • IO_QSPI (бит 7, чтение и запись, после сброса 0x1) — Блок IO_QSPI: 1 — держать в сбросе, 0 — работает.
  • IO_BANK0 (бит 6, чтение и запись, после сброса 0x1) — Блок IO_BANK0: 1 — держать в сбросе, 0 — работает.
  • I2C1 (бит 5, чтение и запись, после сброса 0x1) — Блок I2C1: 1 — держать в сбросе, 0 — работает.
  • I2C0 (бит 4, чтение и запись, после сброса 0x1) — Блок I2C0: 1 — держать в сбросе, 0 — работает.
  • HSTX (бит 3, чтение и запись, после сброса 0x1) — Блок HSTX: 1 — держать в сбросе, 0 — работает.
  • DMA (бит 2, чтение и запись, после сброса 0x1) — Блок DMA: 1 — держать в сбросе, 0 — работает.
  • BUSCTRL (бит 1, чтение и запись, после сброса 0x1) — Блок BUSCTRL: 1 — держать в сбросе, 0 — работает.
  • ADC (бит 0, чтение и запись, после сброса 0x1) — Блок ADC: 1 — держать в сбросе, 0 — работает.

RESETS_WDSEL — блоки, которые сбрасывает сторожевой таймер

Смещение 0x04, адрес 0x4002 0004, после сброса 0x0000 0000. Макросы pico-sdk: RESETS_WDSEL_…

  • USBCTRL (бит 28, чтение и запись, после сброса 0x0) — Сбрасывать USBCTRL при срабатывании сторожевого таймера.
  • UART1 (бит 27, чтение и запись, после сброса 0x0) — Сбрасывать UART1 при срабатывании сторожевого таймера.
  • UART0 (бит 26, чтение и запись, после сброса 0x0) — Сбрасывать UART0 при срабатывании сторожевого таймера.
  • TRNG (бит 25, чтение и запись, после сброса 0x0) — Сбрасывать TRNG при срабатывании сторожевого таймера.
  • TIMER1 (бит 24, чтение и запись, после сброса 0x0) — Сбрасывать TIMER1 при срабатывании сторожевого таймера.
  • TIMER0 (бит 23, чтение и запись, после сброса 0x0) — Сбрасывать TIMER0 при срабатывании сторожевого таймера.
  • TBMAN (бит 22, чтение и запись, после сброса 0x0) — Сбрасывать TBMAN при срабатывании сторожевого таймера.
  • SYSINFO (бит 21, чтение и запись, после сброса 0x0) — Сбрасывать SYSINFO при срабатывании сторожевого таймера.
  • SYSCFG (бит 20, чтение и запись, после сброса 0x0) — Сбрасывать SYSCFG при срабатывании сторожевого таймера.
  • SPI1 (бит 19, чтение и запись, после сброса 0x0) — Сбрасывать SPI1 при срабатывании сторожевого таймера.
  • SPI0 (бит 18, чтение и запись, после сброса 0x0) — Сбрасывать SPI0 при срабатывании сторожевого таймера.
  • SHA256 (бит 17, чтение и запись, после сброса 0x0) — Сбрасывать SHA256 при срабатывании сторожевого таймера.
  • PWM (бит 16, чтение и запись, после сброса 0x0) — Сбрасывать PWM при срабатывании сторожевого таймера.
  • PLL_USB (бит 15, чтение и запись, после сброса 0x0) — Сбрасывать PLL_USB при срабатывании сторожевого таймера.
  • PLL_SYS (бит 14, чтение и запись, после сброса 0x0) — Сбрасывать PLL_SYS при срабатывании сторожевого таймера.
  • PIO2 (бит 13, чтение и запись, после сброса 0x0) — Сбрасывать PIO2 при срабатывании сторожевого таймера.
  • PIO1 (бит 12, чтение и запись, после сброса 0x0) — Сбрасывать PIO1 при срабатывании сторожевого таймера.
  • PIO0 (бит 11, чтение и запись, после сброса 0x0) — Сбрасывать PIO0 при срабатывании сторожевого таймера.
  • PADS_QSPI (бит 10, чтение и запись, после сброса 0x0) — Сбрасывать PADS_QSPI при срабатывании сторожевого таймера.
  • PADS_BANK0 (бит 9, чтение и запись, после сброса 0x0) — Сбрасывать PADS_BANK0 при срабатывании сторожевого таймера.
  • JTAG (бит 8, чтение и запись, после сброса 0x0) — Сбрасывать JTAG при срабатывании сторожевого таймера.
  • IO_QSPI (бит 7, чтение и запись, после сброса 0x0) — Сбрасывать IO_QSPI при срабатывании сторожевого таймера.
  • IO_BANK0 (бит 6, чтение и запись, после сброса 0x0) — Сбрасывать IO_BANK0 при срабатывании сторожевого таймера.
  • I2C1 (бит 5, чтение и запись, после сброса 0x0) — Сбрасывать I2C1 при срабатывании сторожевого таймера.
  • I2C0 (бит 4, чтение и запись, после сброса 0x0) — Сбрасывать I2C0 при срабатывании сторожевого таймера.
  • HSTX (бит 3, чтение и запись, после сброса 0x0) — Сбрасывать HSTX при срабатывании сторожевого таймера.
  • DMA (бит 2, чтение и запись, после сброса 0x0) — Сбрасывать DMA при срабатывании сторожевого таймера.
  • BUSCTRL (бит 1, чтение и запись, после сброса 0x0) — Сбрасывать BUSCTRL при срабатывании сторожевого таймера.
  • ADC (бит 0, чтение и запись, после сброса 0x0) — Сбрасывать ADC при срабатывании сторожевого таймера.

RESETS_RESET_DONE — блоки, вышедшие из сброса

Смещение 0x08, адрес 0x4002 0008, после сброса 0x0000 0000. Макросы pico-sdk: RESETS_RESET_DONE_…

  • USBCTRL (бит 28, только чтение, после сброса 0x0) — USBCTRL вышел из сброса, его регистры доступны.
  • UART1 (бит 27, только чтение, после сброса 0x0) — UART1 вышел из сброса, его регистры доступны.
  • UART0 (бит 26, только чтение, после сброса 0x0) — UART0 вышел из сброса, его регистры доступны.
  • TRNG (бит 25, только чтение, после сброса 0x0) — TRNG вышел из сброса, его регистры доступны.
  • TIMER1 (бит 24, только чтение, после сброса 0x0) — TIMER1 вышел из сброса, его регистры доступны.
  • TIMER0 (бит 23, только чтение, после сброса 0x0) — TIMER0 вышел из сброса, его регистры доступны.
  • TBMAN (бит 22, только чтение, после сброса 0x0) — TBMAN вышел из сброса, его регистры доступны.
  • SYSINFO (бит 21, только чтение, после сброса 0x0) — SYSINFO вышел из сброса, его регистры доступны.
  • SYSCFG (бит 20, только чтение, после сброса 0x0) — SYSCFG вышел из сброса, его регистры доступны.
  • SPI1 (бит 19, только чтение, после сброса 0x0) — SPI1 вышел из сброса, его регистры доступны.
  • SPI0 (бит 18, только чтение, после сброса 0x0) — SPI0 вышел из сброса, его регистры доступны.
  • SHA256 (бит 17, только чтение, после сброса 0x0) — SHA256 вышел из сброса, его регистры доступны.
  • PWM (бит 16, только чтение, после сброса 0x0) — PWM вышел из сброса, его регистры доступны.
  • PLL_USB (бит 15, только чтение, после сброса 0x0) — PLL_USB вышел из сброса, его регистры доступны.
  • PLL_SYS (бит 14, только чтение, после сброса 0x0) — PLL_SYS вышел из сброса, его регистры доступны.
  • PIO2 (бит 13, только чтение, после сброса 0x0) — PIO2 вышел из сброса, его регистры доступны.
  • PIO1 (бит 12, только чтение, после сброса 0x0) — PIO1 вышел из сброса, его регистры доступны.
  • PIO0 (бит 11, только чтение, после сброса 0x0) — PIO0 вышел из сброса, его регистры доступны.
  • PADS_QSPI (бит 10, только чтение, после сброса 0x0) — PADS_QSPI вышел из сброса, его регистры доступны.
  • PADS_BANK0 (бит 9, только чтение, после сброса 0x0) — PADS_BANK0 вышел из сброса, его регистры доступны.
  • JTAG (бит 8, только чтение, после сброса 0x0) — JTAG вышел из сброса, его регистры доступны.
  • IO_QSPI (бит 7, только чтение, после сброса 0x0) — IO_QSPI вышел из сброса, его регистры доступны.
  • IO_BANK0 (бит 6, только чтение, после сброса 0x0) — IO_BANK0 вышел из сброса, его регистры доступны.
  • I2C1 (бит 5, только чтение, после сброса 0x0) — I2C1 вышел из сброса, его регистры доступны.
  • I2C0 (бит 4, только чтение, после сброса 0x0) — I2C0 вышел из сброса, его регистры доступны.
  • HSTX (бит 3, только чтение, после сброса 0x0) — HSTX вышел из сброса, его регистры доступны.
  • DMA (бит 2, только чтение, после сброса 0x0) — DMA вышел из сброса, его регистры доступны.
  • BUSCTRL (бит 1, только чтение, после сброса 0x0) — BUSCTRL вышел из сброса, его регистры доступны.
  • ADC (бит 0, только чтение, после сброса 0x0) — ADC вышел из сброса, его регистры доступны.

Частые вопросы

Почему периферия RP2350 не отвечает после записи в её регистры?

Скорее всего, блок ещё в сбросе: после включения все 29 битов RESET равны 1. Сбросьте бит нужного блока и дождитесь его бита в RESET_DONE; в pico-sdk это делает unreset_block_wait().

Можно ли перенести код сброса периферии с RP2040 на RP2350?

Только по именам, а не по номерам битов: у RP2350 добавились HSTX, PIO2, SHA256, TRNG, TIMER0 и TIMER1, и остальные биты сдвинулись — например, UART0 перешёл с бита 22 на бит 26. Макросы pico-sdk вроде RESETS_RESET_UART0_BITS учитывают это сами.

Источники

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

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

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

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