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

Регистры 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 — функция для разработки и в серийных чипах не действует.

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

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

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

РегистрСмещениеНазначениеПосле сброса
PSM_FRCE_ON0x00Принудительное включение стадий — в серийных чипах не действует0x0000 0000
PSM_FRCE_OFF0x04Принудительное удержание стадий в сбросе0x0000 0000
PSM_WDSEL0x08Стадии, которые перезапускает сторожевой таймер0x0000 0000
PSM_DONE0x0CСтадии, готовые к работе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 управляет сбросом периферии, которую программа включает сама.

Источники

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

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

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

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