Регистры PSM RP2350
Регистры автомата включения RP2350, который после сброса чипа по очереди запускает OTP, генераторы, тактирование, шину, память, SIO, контроль доступа и ядра: перезапуск стадий, выбор для сторожевого таймера и готовность.
После сброса чипа автомат PSM снимает сброс с системных блоков по порядку: холодный сброс ядер, OTP (читает данные для загрузки), кольцевой генератор, контроллер XOSC, генераторы clk_ref и clk_sys, шина, контроллеры памяти, SIO, контроль доступа и, наконец, ядра, которые начинают выполнять загрузочное ПЗУ. Каждая стадия запускается, когда предыдущая сообщила о готовности (даташит RP2350, раздел 7.4).
Поля регистров — по одному на стадию, от PROC_COLD (бит 0) до PROC1 (бит 24); по сравнению с RP2040 добавлены OTP, PSM_READY, BOOTRAM, SRAM6–9 и ACCESSCTRL, а биты переставлены. FRCE_OFF запускает частичную последовательность, WDSEL задаёт, какие стадии перезапускает сторожевой таймер, DONE показывает готовые блоки. FRCE_ON — функция для разработки и в серийных чипах не действует.
| Экземпляр | Базовый адрес |
|---|---|
| PSM | 0x4001 8000 |
В RP2040 блок PSM устроен иначе — регистры и поля отличаются, они описаны на странице «Регистры PSM RP2040».
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| PSM_FRCE_ON | 0x00 | Принудительное включение стадий — в серийных чипах не действует | 0x0000 0000 |
| PSM_FRCE_OFF | 0x04 | Принудительное удержание стадий в сбросе | 0x0000 0000 |
| PSM_WDSEL | 0x08 | Стадии, которые перезапускает сторожевой таймер | 0x0000 0000 |
| PSM_DONE | 0x0C | Стадии, готовые к работе | 0x0000 0000 |
PSM_FRCE_ON — принудительное включение стадий — в серийных чипах не действует
Смещение 0x00, адрес 0x4001 8000, после сброса 0x0000 0000. Макросы pico-sdk: PSM_FRCE_ON_…
- PROC1 (бит 24, чтение и запись, после сброса 0x0) — Принудительно включить PROC1.
- PROC0 (бит 23, чтение и запись, после сброса 0x0) — Принудительно включить PROC0.
- ACCESSCTRL (бит 22, чтение и запись, после сброса 0x0) — Принудительно включить ACCESSCTRL.
- SIO (бит 21, чтение и запись, после сброса 0x0) — Принудительно включить SIO.
- XIP (бит 20, чтение и запись, после сброса 0x0) — Принудительно включить XIP.
- SRAM9 (бит 19, чтение и запись, после сброса 0x0) — Принудительно включить SRAM9.
- SRAM8 (бит 18, чтение и запись, после сброса 0x0) — Принудительно включить SRAM8.
- SRAM7 (бит 17, чтение и запись, после сброса 0x0) — Принудительно включить SRAM7.
- SRAM6 (бит 16, чтение и запись, после сброса 0x0) — Принудительно включить SRAM6.
- SRAM5 (бит 15, чтение и запись, после сброса 0x0) — Принудительно включить SRAM5.
- SRAM4 (бит 14, чтение и запись, после сброса 0x0) — Принудительно включить SRAM4.
- SRAM3 (бит 13, чтение и запись, после сброса 0x0) — Принудительно включить SRAM3.
- SRAM2 (бит 12, чтение и запись, после сброса 0x0) — Принудительно включить SRAM2.
- SRAM1 (бит 11, чтение и запись, после сброса 0x0) — Принудительно включить SRAM1.
- SRAM0 (бит 10, чтение и запись, после сброса 0x0) — Принудительно включить SRAM0.
- BOOTRAM (бит 9, чтение и запись, после сброса 0x0) — Принудительно включить BOOTRAM.
- ROM (бит 8, чтение и запись, после сброса 0x0) — Принудительно включить ROM.
- BUSFABRIC (бит 7, чтение и запись, после сброса 0x0) — Принудительно включить BUSFABRIC.
- PSM_READY (бит 6, чтение и запись, после сброса 0x0) — Принудительно включить PSM_READY.
- CLOCKS (бит 5, чтение и запись, после сброса 0x0) — Принудительно включить CLOCKS.
- RESETS (бит 4, чтение и запись, после сброса 0x0) — Принудительно включить RESETS.
- XOSC (бит 3, чтение и запись, после сброса 0x0) — Принудительно включить XOSC.
- ROSC (бит 2, чтение и запись, после сброса 0x0) — Принудительно включить ROSC.
- OTP (бит 1, чтение и запись, после сброса 0x0) — Принудительно включить OTP.
- PROC_COLD (бит 0, чтение и запись, после сброса 0x0) — Принудительно включить PROC_COLD.
PSM_FRCE_OFF — принудительное удержание стадий в сбросе
Смещение 0x04, адрес 0x4001 8004, после сброса 0x0000 0000. Макросы pico-sdk: PSM_FRCE_OFF_…
- PROC1 (бит 24, чтение и запись, после сброса 0x0) — Принудительно держать PROC1 в сбросе.
- PROC0 (бит 23, чтение и запись, после сброса 0x0) — Принудительно держать PROC0 в сбросе.
- ACCESSCTRL (бит 22, чтение и запись, после сброса 0x0) — Принудительно держать ACCESSCTRL в сбросе.
- SIO (бит 21, чтение и запись, после сброса 0x0) — Принудительно держать SIO в сбросе.
- XIP (бит 20, чтение и запись, после сброса 0x0) — Принудительно держать XIP в сбросе.
- SRAM9 (бит 19, чтение и запись, после сброса 0x0) — Принудительно держать SRAM9 в сбросе.
- SRAM8 (бит 18, чтение и запись, после сброса 0x0) — Принудительно держать SRAM8 в сбросе.
- SRAM7 (бит 17, чтение и запись, после сброса 0x0) — Принудительно держать SRAM7 в сбросе.
- SRAM6 (бит 16, чтение и запись, после сброса 0x0) — Принудительно держать SRAM6 в сбросе.
- SRAM5 (бит 15, чтение и запись, после сброса 0x0) — Принудительно держать SRAM5 в сбросе.
- SRAM4 (бит 14, чтение и запись, после сброса 0x0) — Принудительно держать SRAM4 в сбросе.
- SRAM3 (бит 13, чтение и запись, после сброса 0x0) — Принудительно держать SRAM3 в сбросе.
- SRAM2 (бит 12, чтение и запись, после сброса 0x0) — Принудительно держать SRAM2 в сбросе.
- SRAM1 (бит 11, чтение и запись, после сброса 0x0) — Принудительно держать SRAM1 в сбросе.
- SRAM0 (бит 10, чтение и запись, после сброса 0x0) — Принудительно держать SRAM0 в сбросе.
- BOOTRAM (бит 9, чтение и запись, после сброса 0x0) — Принудительно держать BOOTRAM в сбросе.
- ROM (бит 8, чтение и запись, после сброса 0x0) — Принудительно держать ROM в сбросе.
- BUSFABRIC (бит 7, чтение и запись, после сброса 0x0) — Принудительно держать BUSFABRIC в сбросе.
- PSM_READY (бит 6, чтение и запись, после сброса 0x0) — Принудительно держать PSM_READY в сбросе.
- CLOCKS (бит 5, чтение и запись, после сброса 0x0) — Принудительно держать CLOCKS в сбросе.
- RESETS (бит 4, чтение и запись, после сброса 0x0) — Принудительно держать RESETS в сбросе.
- XOSC (бит 3, чтение и запись, после сброса 0x0) — Принудительно держать XOSC в сбросе.
- ROSC (бит 2, чтение и запись, после сброса 0x0) — Принудительно держать ROSC в сбросе.
- OTP (бит 1, чтение и запись, после сброса 0x0) — Принудительно держать OTP в сбросе.
- PROC_COLD (бит 0, чтение и запись, после сброса 0x0) — Принудительно держать PROC_COLD в сбросе.
PSM_WDSEL — стадии, которые перезапускает сторожевой таймер
Смещение 0x08, адрес 0x4001 8008, после сброса 0x0000 0000. Макросы pico-sdk: PSM_WDSEL_…
- PROC1 (бит 24, чтение и запись, после сброса 0x0) — Перезапускать PROC1 при срабатывании сторожевого таймера.
- PROC0 (бит 23, чтение и запись, после сброса 0x0) — Перезапускать PROC0 при срабатывании сторожевого таймера.
- ACCESSCTRL (бит 22, чтение и запись, после сброса 0x0) — Перезапускать ACCESSCTRL при срабатывании сторожевого таймера.
- SIO (бит 21, чтение и запись, после сброса 0x0) — Перезапускать SIO при срабатывании сторожевого таймера.
- XIP (бит 20, чтение и запись, после сброса 0x0) — Перезапускать XIP при срабатывании сторожевого таймера.
- SRAM9 (бит 19, чтение и запись, после сброса 0x0) — Перезапускать SRAM9 при срабатывании сторожевого таймера.
- SRAM8 (бит 18, чтение и запись, после сброса 0x0) — Перезапускать SRAM8 при срабатывании сторожевого таймера.
- SRAM7 (бит 17, чтение и запись, после сброса 0x0) — Перезапускать SRAM7 при срабатывании сторожевого таймера.
- SRAM6 (бит 16, чтение и запись, после сброса 0x0) — Перезапускать SRAM6 при срабатывании сторожевого таймера.
- SRAM5 (бит 15, чтение и запись, после сброса 0x0) — Перезапускать SRAM5 при срабатывании сторожевого таймера.
- SRAM4 (бит 14, чтение и запись, после сброса 0x0) — Перезапускать SRAM4 при срабатывании сторожевого таймера.
- SRAM3 (бит 13, чтение и запись, после сброса 0x0) — Перезапускать SRAM3 при срабатывании сторожевого таймера.
- SRAM2 (бит 12, чтение и запись, после сброса 0x0) — Перезапускать SRAM2 при срабатывании сторожевого таймера.
- SRAM1 (бит 11, чтение и запись, после сброса 0x0) — Перезапускать SRAM1 при срабатывании сторожевого таймера.
- SRAM0 (бит 10, чтение и запись, после сброса 0x0) — Перезапускать SRAM0 при срабатывании сторожевого таймера.
- BOOTRAM (бит 9, чтение и запись, после сброса 0x0) — Перезапускать BOOTRAM при срабатывании сторожевого таймера.
- ROM (бит 8, чтение и запись, после сброса 0x0) — Перезапускать ROM при срабатывании сторожевого таймера.
- BUSFABRIC (бит 7, чтение и запись, после сброса 0x0) — Перезапускать BUSFABRIC при срабатывании сторожевого таймера.
- PSM_READY (бит 6, чтение и запись, после сброса 0x0) — Перезапускать PSM_READY при срабатывании сторожевого таймера.
- CLOCKS (бит 5, чтение и запись, после сброса 0x0) — Перезапускать CLOCKS при срабатывании сторожевого таймера.
- RESETS (бит 4, чтение и запись, после сброса 0x0) — Перезапускать RESETS при срабатывании сторожевого таймера.
- XOSC (бит 3, чтение и запись, после сброса 0x0) — Перезапускать XOSC при срабатывании сторожевого таймера.
- ROSC (бит 2, чтение и запись, после сброса 0x0) — Перезапускать ROSC при срабатывании сторожевого таймера.
- OTP (бит 1, чтение и запись, после сброса 0x0) — Перезапускать OTP при срабатывании сторожевого таймера.
- PROC_COLD (бит 0, чтение и запись, после сброса 0x0) — Перезапускать PROC_COLD при срабатывании сторожевого таймера.
PSM_DONE — стадии, готовые к работе
Смещение 0x0C, адрес 0x4001 800C, после сброса 0x0000 0000. Макросы pico-sdk: PSM_DONE_…
- PROC1 (бит 24, только чтение, после сброса 0x0) — PROC1 включён, его регистры доступны.
- PROC0 (бит 23, только чтение, после сброса 0x0) — PROC0 включён, его регистры доступны.
- ACCESSCTRL (бит 22, только чтение, после сброса 0x0) — ACCESSCTRL включён, его регистры доступны.
- SIO (бит 21, только чтение, после сброса 0x0) — SIO включён, его регистры доступны.
- XIP (бит 20, только чтение, после сброса 0x0) — XIP включён, его регистры доступны.
- SRAM9 (бит 19, только чтение, после сброса 0x0) — SRAM9 включён, его регистры доступны.
- SRAM8 (бит 18, только чтение, после сброса 0x0) — SRAM8 включён, его регистры доступны.
- SRAM7 (бит 17, только чтение, после сброса 0x0) — SRAM7 включён, его регистры доступны.
- SRAM6 (бит 16, только чтение, после сброса 0x0) — SRAM6 включён, его регистры доступны.
- SRAM5 (бит 15, только чтение, после сброса 0x0) — SRAM5 включён, его регистры доступны.
- SRAM4 (бит 14, только чтение, после сброса 0x0) — SRAM4 включён, его регистры доступны.
- SRAM3 (бит 13, только чтение, после сброса 0x0) — SRAM3 включён, его регистры доступны.
- SRAM2 (бит 12, только чтение, после сброса 0x0) — SRAM2 включён, его регистры доступны.
- SRAM1 (бит 11, только чтение, после сброса 0x0) — SRAM1 включён, его регистры доступны.
- SRAM0 (бит 10, только чтение, после сброса 0x0) — SRAM0 включён, его регистры доступны.
- BOOTRAM (бит 9, только чтение, после сброса 0x0) — BOOTRAM включён, его регистры доступны.
- ROM (бит 8, только чтение, после сброса 0x0) — ROM включён, его регистры доступны.
- BUSFABRIC (бит 7, только чтение, после сброса 0x0) — BUSFABRIC включён, его регистры доступны.
- PSM_READY (бит 6, только чтение, после сброса 0x0) — PSM_READY включён, его регистры доступны.
- CLOCKS (бит 5, только чтение, после сброса 0x0) — CLOCKS включён, его регистры доступны.
- RESETS (бит 4, только чтение, после сброса 0x0) — RESETS включён, его регистры доступны.
- XOSC (бит 3, только чтение, после сброса 0x0) — XOSC включён, его регистры доступны.
- ROSC (бит 2, только чтение, после сброса 0x0) — ROSC включён, его регистры доступны.
- OTP (бит 1, только чтение, после сброса 0x0) — OTP включён, его регистры доступны.
- PROC_COLD (бит 0, только чтение, после сброса 0x0) — PROC_COLD включён, его регистры доступны.
Частые вопросы
Работает ли регистр FRCE_ON на RP2350?
Нет: в серийных чипах FRCE_ON отключён, это функция для разработки. Перезапускать стадии можно через FRCE_OFF — установленный бит держит стадию в сбросе, а после его сброса автомат снова проходит последовательность с этой стадии.
Чем PSM отличается от RESETS и POWMAN в RP2350?
POWMAN включает и выключает домены питания, PSM после включения коммутируемого ядра по очереди выводит из сброса системные блоки — генераторы, память, шину, ядра, — а RESETS управляет сбросом периферии, которую программа включает сама.
Источники
- Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 7.4.4: список регистров, назначение полей, тип доступа и значения после сброса
- 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
- 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
- USB — контроллер USBUSB_ADDR_ENDP, USB_ADDR_ENDPn, USB_MAIN_CTRL, USB_SOF_WR, USB_SOF_RD, USB_SIE_CTRL
- 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
Статьи и термины
- Сброс при включении питанияВнутренний сброс до роста питания: пороги, скорость нарастания, примеры
- Сторожевой таймерWatchdog: сброс МК при зависании программы
- RP2350: выводы и функции GPIO30 или 48 GPIO: выводы QFN-60 и QFN-80, функции F0–F11, АЦП, 5 В, токи
- RP2040 и RP2350RP2040 и RP2350: ядра, память, GPIO, PIO, АЦП, 5 В на выводах, эрраты