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

Регистры POWMAN RP2350

Регистры менеджера питания RP2350: стабилизатор ядра и детектор просадки, домены питания и переходы между состояниями P0 и P1, всегда включённый таймер AON с будильником, пробуждение по GPIO, причины сброса и регистры, которые переживают сон.

Ядро RP2350 разделено на пять доменов питания: всегда включённый AON, коммутируемое ядро SWCORE с процессорами и периферией, XIP (кеш и загрузочная память), SRAM0 и SRAM1 — нижняя и верхняя половины основной памяти. Состояние Pc.m описывает, что включено: P0.m — обычная работа, P1.m — пониженное питание с выключенным SWCORE; переход запрашивают полем REQ регистра STATE (даташит RP2350, раздел 6.2).

Запись в регистры POWMAN до смещения 0xAC защищена паролем: в старшие 16 бит записывают 0x5AFE, иначе запись игнорируется и устанавливается BADPASSWD; без пароля пишутся только SCRATCH, BOOT и регистры прерываний (раздел 6.4). Стабилизатор ядра выдаёт от 0,55 до 3,30 В, по умолчанию 1,10 В, а выше 1,30 В — только после снятия ограничения DISABLE_VOLTAGE_LIMIT. Для пониженного питания у стабилизатора и детектора просадки свои настройки — …_LP_ENTRY и …_LP_EXIT.

Таймер AON — единственный, что работает во всех режимах: 64-битный счётчик миллисекунд от низкочастотного генератора LPOSC на 32 кГц, от кварца или от внешнего сигнала на GPIO, с будильником, который может разбудить чип. Он заменил часы RTC из RP2040 (раздел 12.10). Пробуждать чип могут также четыре события на GPIO (PWRUP0–3); CHIP_RESET хранит причину последнего сброса, а SCRATCH0–7 и BOOT0–3 сохраняют значения в пониженном питании.

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

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

РегистрСмещениеНазначениеПосле сброса
POWMAN_BADPASSWD0x00Была запись с неверным паролем; сбрасывается записью 10x0000 0000
POWMAN_VREG_CTRL0x04Управление стабилизатором ядра0x0000 8050
POWMAN_VREG_STS0x08Состояние стабилизатора ядра0x0000 0000
POWMAN_VREG0x0CНастройки стабилизатора ядра0x0000 00B0
POWMAN_VREG_LP_ENTRY0x10Настройки стабилизатора при входе в пониженное питание0x0000 00B4
POWMAN_VREG_LP_EXIT0x14Настройки стабилизатора при выходе из пониженного питания0x0000 00B0
POWMAN_BOD_CTRL0x18Управление детектором просадки0x0000 0000
POWMAN_BOD0x1CНастройки детектора просадки0x0000 00B1
POWMAN_BOD_LP_ENTRY0x20Детектор просадки при входе в пониженное питание0x0000 00B0
POWMAN_BOD_LP_EXIT0x24Детектор просадки при выходе из пониженного питания0x0000 00B1
POWMAN_LPOSC0x28Низкочастотный генератор LPOSC0x0000 0203
POWMAN_CHIP_RESET0x2CПричина последнего сброса и флаги для загрузочного кода0x0000 0000
POWMAN_WDSEL0x30Что сбрасывает сторожевой таймер0x0000 0000
POWMAN_SEQ_CFG0x34Настройка автомата переходов питания0x0010 11F0
POWMAN_STATE0x38Состояние доменов питания и запрос перехода0x0000 000F
POWMAN_POW_FASTDIV0x3CДелитель тактов POWMAN для тика задержек при работе от clk_ref0x0000 0040
POWMAN_POW_DELAY0x40Паузы между шагами включения доменов0x0000 2011
POWMAN_EXT_CTRL00x44Управляющий выход 0 на GPIO, зависящий от режима питания0x0000 003F
POWMAN_EXT_CTRL10x48Управляющий выход 1 на GPIO, зависящий от режима питания0x0000 003F
POWMAN_EXT_TIME_REF0x4CВнешний опорный сигнал времени на GPIO0x0000 0000
POWMAN_LPOSC_FREQ_KHZ_INT0x50Частота LPOSC или внешнего сигнала для таймера AON, целые кГц0x0000 0020
POWMAN_LPOSC_FREQ_KHZ_FRAC0x54Частота LPOSC для таймера AON, дробная часть кГц (после сброса 0,768)0x0000 C49C
POWMAN_XOSC_FREQ_KHZ_INT0x58Частота кварца для таймера AON, целые кГц (после сброса 12 000)0x0000 2EE0
POWMAN_XOSC_FREQ_KHZ_FRAC0x5CЧастота кварца для таймера AON, дробная часть кГц0x0000 0000
POWMAN_SET_TIME_63TO480x60Установка таймера AON, биты 63:48; пишут при TIMER.RUN = 00x0000 0000
POWMAN_SET_TIME_47TO320x64Установка таймера AON, биты 47:32; пишут при TIMER.RUN = 00x0000 0000
POWMAN_SET_TIME_31TO160x68Установка таймера AON, биты 31:16; пишут при TIMER.RUN = 00x0000 0000
POWMAN_SET_TIME_15TO00x6CУстановка таймера AON, биты 15:0; пишут при TIMER.RUN = 00x0000 0000
POWMAN_READ_TIME_UPPER0x70Таймер AON, биты 63:32: читают UPPER, LOWER и снова UPPER; если он изменился, LOWER читают ещё раз0x0000 0000
POWMAN_READ_TIME_LOWER0x74Таймер AON, биты 31:00x0000 0000
POWMAN_ALARM_TIME_63TO480x78Время будильника, биты 63:48; пишут при ALARM_ENAB = 00x0000 0000
POWMAN_ALARM_TIME_47TO320x7CВремя будильника, биты 47:32; пишут при ALARM_ENAB = 00x0000 0000
POWMAN_ALARM_TIME_31TO160x80Время будильника, биты 31:16; пишут при ALARM_ENAB = 00x0000 0000
POWMAN_ALARM_TIME_15TO00x84Время будильника, биты 15:0; пишут при ALARM_ENAB = 00x0000 0000
POWMAN_TIMER0x88Управление и состояние таймера AON0x0000 0000
POWMAN_PWRUPn0x8C + n · 0x04Источник пробуждения n на GPIO0x0000 003F
POWMAN_CURRENT_PWRUP_REQ0x9CТекущие запросы пробуждения0x0000 0000
POWMAN_LAST_SWCORE_PWRUP0xA0Что включило ядро последним: 0 — сброс чипа, 1–4 — PWRUP0–3, 5 — отладчик, 6 — будильник0x0000 0000
POWMAN_DBG_PWRCFG0xA4Запросы пробуждения от отладчика0x0000 0000
POWMAN_BOOTDIS0xA8Запрет загрузочных регистров BOOT0–3 после перезапуска0x0000 0000
POWMAN_DBGCONFIG0xACНастройка порта отладки0x0000 0000
POWMAN_SCRATCHn0xB0 + n · 0x04Регистр общего назначения n; сохраняется в пониженном питании0x0000 0000
POWMAN_BOOTn0xD0 + n · 0x04Регистр n для загрузочного ПЗУ; сохраняется в пониженном питании0x0000 0000
POWMAN_INTR0xE0Необработанные флаги прерываний0x0000 0000
POWMAN_INTE0xE4Разрешение прерываний0x0000 0000
POWMAN_INTF0xE8Принудительная установка прерываний0x0000 0000
POWMAN_INTS0xECФлаги прерываний после маски и принуждения0x0000 0000

POWMAN_BADPASSWD — была запись с неверным паролем; сбрасывается записью 1

Смещение 0x00, адрес 0x4010 0000, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: POWMAN_BADPASSWD_…

Отдельных полей нет: значение занимает бит 0, остальные биты не используются.

POWMAN_VREG_CTRL — управление стабилизатором ядра

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

1514131211109876543210
RST_N—UNLOCKISOLATE—DISABLE_VOLTAGE_LIMIT—HT_TH—
  • RST_N (бит 15, чтение и запись, после сброса 0x1) — 0 — вернуть стабилизатор к настройкам запуска.
  • UNLOCK (бит 13, чтение и запись, после сброса 0x0) — Разблокировать управление стабилизатором после включения; обратно не блокируется.
  • ISOLATE (бит 12, чтение и запись, после сброса 0x0) — Изолировать интерфейс управления стабилизатором.
  • DISABLE_VOLTAGE_LIMIT (бит 8, чтение и запись, после сброса 0x0) — Снять ограничение выходного напряжения 1,30 В.
  • HT_TH (биты 6:4, чтение и запись, после сброса 0x5) — Порог защиты от перегрева, выше которого отключаются силовые ключи: 100, 105, 110, 115, 120, 125 (после сброса), 135 или 150 °C.

POWMAN_VREG_STS — состояние стабилизатора ядра

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

1514131211109876543210
—VOUT_OK—STARTUP
  • VOUT_OK (бит 4, только чтение, после сброса 0x0) — Выходное напряжение в норме.
  • STARTUP (бит 0, только чтение, после сброса 0x0) — Идёт запуск стабилизатора.

POWMAN_VREG — настройки стабилизатора ядра

Смещение 0x0C, адрес 0x4010 000C, после сброса 0x0000 00B0. Макросы pico-sdk: POWMAN_VREG_…

1514131211109876543210
UPDATE_IN_PROGRESS—VSEL—HIZ—
  • UPDATE_IN_PROGRESS (бит 15, только чтение, после сброса 0x0) — Идёт обновление настроек — запись в VREG игнорируется.
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Выходное напряжение: от 0,55 В (00000) до 3,30 В (11111), после сброса 01011 — 1,10 В; выше 1,30 В — только при снятом DISABLE_VOLTAGE_LIMIT.
  • HIZ (бит 1, чтение и запись, после сброса 0x0) — Выход стабилизатора в высокоимпедансном состоянии.

POWMAN_VREG_LP_ENTRY — настройки стабилизатора при входе в пониженное питание

Смещение 0x10, адрес 0x4010 0010, после сброса 0x0000 00B4. Макросы pico-sdk: POWMAN_VREG_LP_ENTRY_…

1514131211109876543210
—VSEL—MODEHIZ—
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Выходное напряжение: от 0,55 В (00000) до 3,30 В (11111), после сброса 01011 — 1,10 В; выше 1,30 В — только при снятом DISABLE_VOLTAGE_LIMIT.
  • MODE (бит 2, чтение и запись, после сброса 0x1) — 0 — обычный импульсный режим, 1 — линейный режим малого потребления, только до 1,30 В.
  • HIZ (бит 1, чтение и запись, после сброса 0x0) — Выход стабилизатора в высокоимпедансном состоянии.

POWMAN_VREG_LP_EXIT — настройки стабилизатора при выходе из пониженного питания

Смещение 0x14, адрес 0x4010 0014, после сброса 0x0000 00B0. Макросы pico-sdk: POWMAN_VREG_LP_EXIT_…

1514131211109876543210
—VSEL—MODEHIZ—
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Выходное напряжение: от 0,55 В (00000) до 3,30 В (11111), после сброса 01011 — 1,10 В; выше 1,30 В — только при снятом DISABLE_VOLTAGE_LIMIT.
  • MODE (бит 2, чтение и запись, после сброса 0x0) — 0 — обычный импульсный режим, 1 — линейный режим малого потребления, только до 1,30 В.
  • HIZ (бит 1, чтение и запись, после сброса 0x0) — Выход стабилизатора в высокоимпедансном состоянии.

POWMAN_BOD_CTRL — управление детектором просадки

Смещение 0x18, адрес 0x4010 0018, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_BOD_CTRL_…

  • ISOLATE (бит 12, чтение и запись, после сброса 0x0) — Изолировать интерфейс управления детектором просадки.

POWMAN_BOD — настройки детектора просадки

Смещение 0x1C, адрес 0x4010 001C, после сброса 0x0000 00B1. Макросы pico-sdk: POWMAN_BOD_…

1514131211109876543210
—VSEL—EN
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Порог от 0,473 В (00000) до 1,204 В (10001) с шагом около 0,043 В; в описании поля значением по умолчанию названо 01001 — 0,860 В, а после сброса в поле 01011 — 0,946 В.
  • EN (бит 0, чтение и запись, после сброса 0x1) — Включение детектора просадки.

POWMAN_BOD_LP_ENTRY — детектор просадки при входе в пониженное питание

Смещение 0x20, адрес 0x4010 0020, после сброса 0x0000 00B0. Макросы pico-sdk: POWMAN_BOD_LP_ENTRY_…

1514131211109876543210
—VSEL—EN
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Порог от 0,473 В (00000) до 1,204 В (10001) с шагом около 0,043 В; в описании поля значением по умолчанию названо 01001 — 0,860 В, а после сброса в поле 01011 — 0,946 В.
  • EN (бит 0, чтение и запись, после сброса 0x0) — Включение детектора просадки.

POWMAN_BOD_LP_EXIT — детектор просадки при выходе из пониженного питания

Смещение 0x24, адрес 0x4010 0024, после сброса 0x0000 00B1. Макросы pico-sdk: POWMAN_BOD_LP_EXIT_…

1514131211109876543210
—VSEL—EN
  • VSEL (биты 8:4, чтение и запись, после сброса 0x0B) — Порог от 0,473 В (00000) до 1,204 В (10001) с шагом около 0,043 В; в описании поля значением по умолчанию названо 01001 — 0,860 В, а после сброса в поле 01011 — 0,946 В.
  • EN (бит 0, чтение и запись, после сброса 0x1) — Включение детектора просадки.

POWMAN_LPOSC — низкочастотный генератор LPOSC

Смещение 0x28, адрес 0x4010 0028, после сброса 0x0000 0203. Макросы pico-sdk: POWMAN_LPOSC_…

1514131211109876543210
—TRIM—MODE
  • TRIM (биты 9:4, чтение и запись, после сброса 0x20) — Подстройка частоты: шаг обычно 1 % от частоты после сброса, до 3 %.
  • MODE (биты 1:0, чтение и запись, после сброса 0x3) — Функция удалена.

POWMAN_CHIP_RESET — причина последнего сброса и флаги для загрузочного кода

Смещение 0x2C, адрес 0x4010 002C, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_CHIP_RESET_…

31302928272625242322212019181716
—HAD_WATCHDOG_RESET_RSMHAD_HZD_SYS_RESET_REQHAD_GLITCH_DETECTHAD_SWCORE_PDHAD_WATCHDOG_RESET_SWCOREHAD_WATCHDOG_RESET_POWMANHAD_WATCHDOG_RESET_POWMAN_ASYNCHAD_RESCUE—HAD_DP_RESET_REQHAD_RUN_LOWHAD_BORHAD_POR
1514131211109876543210
—RESCUE_FLAG—DOUBLE_TAP
  • HAD_WATCHDOG_RESET_RSM (бит 28, только чтение, после сброса 0x0) — Сброс сторожевым таймером с перезапуском автомата включения.
  • HAD_HZD_SYS_RESET_REQ (бит 27, только чтение, после сброса 0x0) — Системный сброс от отладчика ядер Hazard3.
  • HAD_GLITCH_DETECT (бит 26, только чтение, после сброса 0x0) — Сброс детектором сбоев.
  • HAD_SWCORE_PD (бит 25, только чтение, после сброса 0x0) — Выключение коммутируемого ядра.
  • HAD_WATCHDOG_RESET_SWCORE (бит 24, только чтение, после сброса 0x0) — Сброс сторожевым таймером коммутируемого ядра.
  • HAD_WATCHDOG_RESET_POWMAN (бит 23, только чтение, после сброса 0x0) — Сброс сторожевым таймером менеджера питания.
  • HAD_WATCHDOG_RESET_POWMAN_ASYNC (бит 22, только чтение, после сброса 0x0) — Асинхронный сброс сторожевым таймером менеджера питания.
  • HAD_RESCUE (бит 21, только чтение, после сброса 0x0) — Аварийный сброс (rescue) от отладчика.
  • HAD_DP_RESET_REQ (бит 19, только чтение, после сброса 0x0) — Запрос сброса от отладчика Arm.
  • HAD_RUN_LOW (бит 18, только чтение, после сброса 0x0) — Сброс выводом RUN.
  • HAD_BOR (бит 17, только чтение, после сброса 0x0) — Сброс детектором просадки.
  • HAD_POR (бит 16, только чтение, после сброса 0x0) — Сброс при включении питания.
  • RESCUE_FLAG (бит 4, сброс записью 1, после сброса 0x0) — Аварийный сброс через RP-AP: ПЗУ останавливается до загрузки из флеш-памяти, чтобы выйти из зависания; сбрасывается записью 1.
  • DOUBLE_TAP (бит 0, чтение и запись, после сброса 0x0) — Двойное нажатие RUN — загрузочному коду перейти в загрузчик.

POWMAN_WDSEL — что сбрасывает сторожевой таймер

Смещение 0x30, адрес 0x4010 0030, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_WDSEL_…

1514131211109876543210
—RESET_RSM—RESET_SWCORE—RESET_POWMAN—RESET_POWMAN_ASYNC
  • RESET_RSM (бит 12, чтение и запись, после сброса 0x0) — Сторожевой таймер полностью перезапускает автомат включения.
  • RESET_SWCORE (бит 8, чтение и запись, после сброса 0x0) — Сторожевой таймер сбрасывает коммутируемое ядро и перезапускает автомат включения.
  • RESET_POWMAN (бит 4, чтение и запись, после сброса 0x0) — Сторожевой таймер восстанавливает настройки POWMAN, сбрасывает таймер, ядро и автомат включения.
  • RESET_POWMAN_ASYNC (бит 0, чтение и запись, после сброса 0x0) — То же, что RESET_POWMAN, но асинхронно.

POWMAN_SEQ_CFG — настройка автомата переходов питания

Смещение 0x34, адрес 0x4010 0034, после сброса 0x0010 11F0. Макросы pico-sdk: POWMAN_SEQ_CFG_…

31302928272625242322212019181716
—USING_FAST_POWCK—USING_BOD_LPUSING_VREG_LP
1514131211109876543210
—USE_FAST_POWCK—RUN_LPOSC_IN_LPUSE_BOD_HPUSE_BOD_LPUSE_VREG_HPUSE_VREG_LP—HW_PWRUP_SRAM0HW_PWRUP_SRAM1
  • USING_FAST_POWCK (бит 20, только чтение, после сброса 0x1) — Тактирование POWMAN: 0 — LPOSC 32 кГц, 1 — clk_ref.
  • USING_BOD_LP (бит 17, только чтение, после сброса 0x0) — Детектор просадки в режиме малого потребления.
  • USING_VREG_LP (бит 16, только чтение, после сброса 0x0) — Стабилизатор в режиме малого потребления.
  • USE_FAST_POWCK (бит 12, чтение и запись, после сброса 0x1) — Тактировать POWMAN от clk_ref, пока коммутируемое ядро включено.
  • RUN_LPOSC_IN_LP (бит 8, чтение и запись, после сброса 0x1) — Не останавливать LPOSC при выключенном ядре — нужно, если от него идёт таймер.
  • USE_BOD_HP (бит 7, чтение и запись, после сброса 0x1) — Переключать детектор просадки в обычный режим при включении ядра.
  • USE_BOD_LP (бит 6, чтение и запись, после сброса 0x1) — Переключать детектор просадки в режим малого потребления при выключении ядра.
  • USE_VREG_HP (бит 5, чтение и запись, после сброса 0x1) — Переключать стабилизатор в обычный режим при включении ядра.
  • USE_VREG_LP (бит 4, чтение и запись, после сброса 0x1) — Переключать стабилизатор в режим малого потребления при выключении ядра.
  • HW_PWRUP_SRAM0 (бит 1, чтение и запись, после сброса 0x0) — SRAM0 при пробуждении: 0 — включить, 1 — не менять.
  • HW_PWRUP_SRAM1 (бит 0, чтение и запись, после сброса 0x0) — SRAM1 при пробуждении: 0 — включить, 1 — не менять.

POWMAN_STATE — состояние доменов питания и запрос перехода

Смещение 0x38, адрес 0x4010 0038, после сброса 0x0000 000F. Макросы pico-sdk: POWMAN_STATE_…

1514131211109876543210
—CHANGINGWAITINGBAD_HW_REQBAD_SW_REQPWRUP_WHILE_WAITINGREQ_IGNOREDREQCURRENT
  • CHANGING (бит 13, только чтение, после сброса 0x0) — Идёт смена состояния питания; запись в POWMAN игнорируется.
  • WAITING (бит 12, только чтение, после сброса 0x0) — Запрос принят, менеджер ждёт выполнения условий.
  • BAD_HW_REQ (бит 11, только чтение, после сброса 0x0) — Неверный аппаратный запрос — возврат в P0.0.
  • BAD_SW_REQ (бит 10, только чтение, после сброса 0x0) — Неверный программный запрос — ничего не сделано.
  • PWRUP_WHILE_WAITING (бит 9, сброс записью 1, после сброса 0x0) — Запрос не выполнен из-за ожидающего пробуждения; сбрасывается записью 1.
  • REQ_IGNORED (бит 8, сброс записью 1, после сброса 0x0) — Запрос проигнорирован; сбрасывается записью 1.
  • REQ (биты 7:4, чтение и запись, после сброса 0x0) — Запрошенное состояние: бит 3 — SWCORE, 2 — XIP, 1 — SRAM0, 0 — SRAM1; 1 — выключить.
  • CURRENT (биты 3:0, только чтение, после сброса 0xF) — Текущее состояние в той же кодировке: 0 — домен включён, 1 — выключен.

POWMAN_POW_FASTDIV — делитель тактов POWMAN для тика задержек при работе от clk_ref

Смещение 0x3C, адрес 0x4010 003C, после сброса 0x0000 0040, чтение и запись. Макросы pico-sdk: POWMAN_POW_FASTDIV_…

Отдельных полей нет: значение занимает биты 10:0, остальные биты не используются.

POWMAN_POW_DELAY — паузы между шагами включения доменов

Смещение 0x40, адрес 0x4010 0040, после сброса 0x0000 2011. Макросы pico-sdk: POWMAN_POW_DELAY_…

1514131211109876543210
SRAM_STEPXIP_STEPSWCORE_STEP
  • SRAM_STEP (биты 15:8, чтение и запись, после сброса 0x20) — Пауза между шагами включения SRAM0 и SRAM1 в тиках POWMAN (не меньше 1 мкс).
  • XIP_STEP (биты 7:4, чтение и запись, после сброса 0x1) — Пауза между шагами включения XIP в периодах LPOSC.
  • SWCORE_STEP (биты 3:0, чтение и запись, после сброса 0x1) — Пауза между шагами включения коммутируемого ядра в периодах LPOSC.

POWMAN_EXT_CTRL0 — управляющий выход 0 на GPIO, зависящий от режима питания

Смещение 0x44, адрес 0x4010 0044, после сброса 0x0000 003F. Макросы pico-sdk: POWMAN_EXT_CTRL0_…

1514131211109876543210
—LP_EXIT_STATELP_ENTRY_STATEINIT_STATE—INIT—GPIO_SELECT
  • LP_EXIT_STATE (бит 14, чтение и запись, после сброса 0x0) — Уровень на выходе при выходе из пониженного питания.
  • LP_ENTRY_STATE (бит 13, чтение и запись, после сброса 0x0) — Уровень на выходе при входе в пониженное питание.
  • INIT_STATE (бит 12, чтение и запись, после сброса 0x0) — Начальный уровень выхода.
  • INIT (бит 8, чтение и запись, после сброса 0x0) — Установить начальный уровень.
  • GPIO_SELECT (биты 5:0, чтение и запись, после сброса 0x3F) — GPIO 0–30 для управляющего выхода; 31 выключает функцию.

POWMAN_EXT_CTRL1 — управляющий выход 1 на GPIO, зависящий от режима питания

Смещение 0x48, адрес 0x4010 0048, после сброса 0x0000 003F. Макросы pico-sdk: POWMAN_EXT_CTRL1_…

1514131211109876543210
—LP_EXIT_STATELP_ENTRY_STATEINIT_STATE—INIT—GPIO_SELECT
  • LP_EXIT_STATE (бит 14, чтение и запись, после сброса 0x0) — Уровень на выходе при выходе из пониженного питания.
  • LP_ENTRY_STATE (бит 13, чтение и запись, после сброса 0x0) — Уровень на выходе при входе в пониженное питание.
  • INIT_STATE (бит 12, чтение и запись, после сброса 0x0) — Начальный уровень выхода.
  • INIT (бит 8, чтение и запись, после сброса 0x0) — Установить начальный уровень.
  • GPIO_SELECT (биты 5:0, чтение и запись, после сброса 0x3F) — GPIO 0–30 для управляющего выхода; 31 выключает функцию.

POWMAN_EXT_TIME_REF — внешний опорный сигнал времени на GPIO

Смещение 0x4C, адрес 0x4010 004C, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_EXT_TIME_REF_…

1514131211109876543210
—DRIVE_LPCK—SOURCE_SEL
  • DRIVE_LPCK (бит 4, чтение и запись, после сброса 0x0) — Тактировать низкочастотный домен 32 кГц от выбранного GPIO вместо LPOSC; менять при TIMER.RUN = 0.
  • SOURCE_SEL (биты 1:0, чтение и запись, после сброса 0x0) — Вывод опорного сигнала: 0 — GPIO12, 1 — GPIO20, 2 — GPIO14, 3 — GPIO22.

POWMAN_LPOSC_FREQ_KHZ_INT — частота LPOSC или внешнего сигнала для таймера AON, целые кГц

Смещение 0x50, адрес 0x4010 0050, после сброса 0x0000 0020, чтение и запись. Макросы pico-sdk: POWMAN_LPOSC_FREQ_KHZ_INT_…

Отдельных полей нет: значение занимает биты 5:0, остальные биты не используются.

POWMAN_LPOSC_FREQ_KHZ_FRAC — частота LPOSC для таймера AON, дробная часть кГц (после сброса 0,768)

Смещение 0x54, адрес 0x4010 0054, после сброса 0x0000 C49C, чтение и запись. Макросы pico-sdk: POWMAN_LPOSC_FREQ_KHZ_FRAC_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_XOSC_FREQ_KHZ_INT — частота кварца для таймера AON, целые кГц (после сброса 12 000)

Смещение 0x58, адрес 0x4010 0058, после сброса 0x0000 2EE0, чтение и запись. Макросы pico-sdk: POWMAN_XOSC_FREQ_KHZ_INT_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_XOSC_FREQ_KHZ_FRAC — частота кварца для таймера AON, дробная часть кГц

Смещение 0x5C, адрес 0x4010 005C, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_XOSC_FREQ_KHZ_FRAC_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_SET_TIME_63TO48 — установка таймера AON, биты 63:48; пишут при TIMER.RUN = 0

Смещение 0x60, адрес 0x4010 0060, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_SET_TIME_63TO48_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_SET_TIME_47TO32 — установка таймера AON, биты 47:32; пишут при TIMER.RUN = 0

Смещение 0x64, адрес 0x4010 0064, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_SET_TIME_47TO32_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_SET_TIME_31TO16 — установка таймера AON, биты 31:16; пишут при TIMER.RUN = 0

Смещение 0x68, адрес 0x4010 0068, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_SET_TIME_31TO16_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_SET_TIME_15TO0 — установка таймера AON, биты 15:0; пишут при TIMER.RUN = 0

Смещение 0x6C, адрес 0x4010 006C, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_SET_TIME_15TO0_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_READ_TIME_UPPER — таймер AON, биты 63:32: читают UPPER, LOWER и снова UPPER; если он изменился, LOWER читают ещё раз

Смещение 0x70, адрес 0x4010 0070, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: POWMAN_READ_TIME_UPPER_…

Значение занимает регистр целиком, отдельных полей нет.

POWMAN_READ_TIME_LOWER — таймер AON, биты 31:0

Смещение 0x74, адрес 0x4010 0074, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: POWMAN_READ_TIME_LOWER_…

Значение занимает регистр целиком, отдельных полей нет.

POWMAN_ALARM_TIME_63TO48 — время будильника, биты 63:48; пишут при ALARM_ENAB = 0

Смещение 0x78, адрес 0x4010 0078, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_ALARM_TIME_63TO48_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_ALARM_TIME_47TO32 — время будильника, биты 47:32; пишут при ALARM_ENAB = 0

Смещение 0x7C, адрес 0x4010 007C, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_ALARM_TIME_47TO32_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_ALARM_TIME_31TO16 — время будильника, биты 31:16; пишут при ALARM_ENAB = 0

Смещение 0x80, адрес 0x4010 0080, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_ALARM_TIME_31TO16_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_ALARM_TIME_15TO0 — время будильника, биты 15:0; пишут при ALARM_ENAB = 0

Смещение 0x84, адрес 0x4010 0084, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_ALARM_TIME_15TO0_…

Отдельных полей нет: значение занимает биты 15:0, остальные биты не используются.

POWMAN_TIMER — управление и состояние таймера AON

Смещение 0x88, адрес 0x4010 0088, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_TIMER_…

31302928272625242322212019181716
—USING_GPIO_1HZUSING_GPIO_1KHZUSING_LPOSCUSING_XOSC
1514131211109876543210
—USE_GPIO_1HZ—USE_GPIO_1KHZUSE_XOSCUSE_LPOSC—ALARMPWRUP_ON_ALARMALARM_ENAB—CLEARRUNNONSEC_WRITE
  • USING_GPIO_1HZ (бит 19, только чтение, после сброса 0x0) — Таймер синхронизирован с сигналом 1 Гц на GPIO.
  • USING_GPIO_1KHZ (бит 18, только чтение, после сброса 0x0) — Таймер считает тики 1 кГц с GPIO.
  • USING_LPOSC (бит 17, только чтение, после сброса 0x0) — Таймер работает от LPOSC.
  • USING_XOSC (бит 16, только чтение, после сброса 0x0) — Таймер работает от кварца.
  • USE_GPIO_1HZ (бит 13, чтение и запись, после сброса 0x0) — Сверять счёт секунд с сигналом 1 Гц на GPIO; миллисекунды по-прежнему от LPOSC или кварца.
  • USE_GPIO_1KHZ (бит 10, сбрасывается сам, после сброса 0x0) — Перейти на тик 1 кГц с GPIO.
  • USE_XOSC (бит 9, сбрасывается сам, после сброса 0x0) — Перейти на тик от кварца.
  • USE_LPOSC (бит 8, сбрасывается сам, после сброса 0x0) — Перейти на тик от LPOSC.
  • ALARM (бит 6, сброс записью 1, после сброса 0x0) — Будильник сработал; сбрасывается записью 1.
  • PWRUP_ON_ALARM (бит 5, чтение и запись, после сброса 0x0) — Будильник выводит чип из пониженного питания.
  • ALARM_ENAB (бит 4, чтение и запись, после сброса 0x0) — Включение будильника; время будильника пишут при выключенном.
  • CLEAR (бит 2, сбрасывается сам, после сброса 0x0) — Обнулить таймер, не останавливая его и не трогая будильник.
  • RUN (бит 1, чтение и запись, после сброса 0x0) — Запуск таймера: при записи 1 в счётчик загружается значение SET_TIME.
  • NONSEC_WRITE (бит 0, чтение и запись, после сброса 0x0) — Разрешить незащищённому коду запись в регистры таймера.

POWMAN_PWRUPn — источник пробуждения n на GPIO

4 регистра, n = 0…3: смещение 0x8C + n · 0x04, после сброса 0x0000 003F. Макросы pico-sdk: POWMAN_PWRUPn_…

1514131211109876543210
—RAW_STATUSSTATUSMODEDIRECTIONENABLESOURCE
  • RAW_STATUS (бит 10, только чтение, после сброса 0x0) — Уровень на выбранном GPIO (при ENABLE = 1).
  • STATUS (бит 9, сброс записью 1, после сброса 0x0) — Событие пробуждения; защёлкнутый фронт сбрасывается записью 1.
  • MODE (бит 8, чтение и запись, после сброса 0x0) — Пробуждение по уровню (0) или по фронту (1).
  • DIRECTION (бит 7, чтение и запись, после сброса 0x0) — Низкий уровень или спад (0), высокий уровень или фронт (1).
  • ENABLE (бит 6, чтение и запись, после сброса 0x0) — Включение источника; 0 снимает ожидающее событие.
  • SOURCE (биты 5:0, чтение и запись, после сброса 0x3F) — Номер GPIO.

POWMAN_CURRENT_PWRUP_REQ — текущие запросы пробуждения

Смещение 0x9C, адрес 0x4010 009C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: POWMAN_CURRENT_PWRUP_REQ_…

Отдельных полей нет: значение занимает биты 6:0, остальные биты не используются.

POWMAN_LAST_SWCORE_PWRUP — что включило ядро последним: 0 — сброс чипа, 1–4 — PWRUP0–3, 5 — отладчик, 6 — будильник

Смещение 0xA0, адрес 0x4010 00A0, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: POWMAN_LAST_SWCORE_PWRUP_…

Отдельных полей нет: значение занимает биты 6:0, остальные биты не используются.

POWMAN_DBG_PWRCFG — запросы пробуждения от отладчика

Смещение 0xA4, адрес 0x4010 00A4, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_DBG_PWRCFG_…

  • IGNORE (бит 0, чтение и запись, после сброса 0x0) — Не учитывать запрос пробуждения от отладчика.

POWMAN_BOOTDIS — запрет загрузочных регистров BOOT0–3 после перезапуска

Смещение 0xA8, адрес 0x4010 00A8, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_BOOTDIS_…

1514131211109876543210
—NEXTNOW
  • NEXT (бит 1, чтение и запись, после сброса 0x0) — Игнорировать BOOT0–3 после следующего перезапуска автомата включения; программно только устанавливается.
  • NOW (бит 0, сброс записью 1, после сброса 0x0) — Загрузочное ПЗУ сейчас игнорирует BOOT0–3; сбрасывается записью 1.

POWMAN_DBGCONFIG — настройка порта отладки

Смещение 0xAC, адрес 0x4010 00AC, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_DBGCONFIG_…

  • DP_INSTID (биты 3:0, чтение и запись, после сброса 0x0) — Номер экземпляра порта отладки для многоточечного SWD.

POWMAN_SCRATCHn — регистр общего назначения n; сохраняется в пониженном питании

8 регистров, n = 0…7: смещение 0xB0 + n · 0x04, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_SCRATCHn_…

Значение занимает регистр целиком, отдельных полей нет.

POWMAN_BOOTn — регистр n для загрузочного ПЗУ; сохраняется в пониженном питании

4 регистра, n = 0…3: смещение 0xD0 + n · 0x04, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: POWMAN_BOOTn_…

Значение занимает регистр целиком, отдельных полей нет.

POWMAN_INTR — необработанные флаги прерываний

Смещение 0xE0, адрес 0x4010 00E0, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_INTR_…

1514131211109876543210
—PWRUP_WHILE_WAITINGSTATE_REQ_IGNOREDTIMERVREG_OUTPUT_LOW
  • PWRUP_WHILE_WAITING (бит 3, только чтение, после сброса 0x0) — Событие: запрос перехода не выполнен из-за ожидающего пробуждения.
  • STATE_REQ_IGNORED (бит 2, только чтение, после сброса 0x0) — Событие: запрос состояния проигнорирован.
  • TIMER (бит 1, только чтение, после сброса 0x0) — Событие: таймер AON.
  • VREG_OUTPUT_LOW (бит 0, сброс записью 1, после сброса 0x0) — Событие: низкое напряжение на выходе стабилизатора.

POWMAN_INTE — разрешение прерываний

Смещение 0xE4, адрес 0x4010 00E4, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_INTE_…

1514131211109876543210
—PWRUP_WHILE_WAITINGSTATE_REQ_IGNOREDTIMERVREG_OUTPUT_LOW
  • PWRUP_WHILE_WAITING (бит 3, чтение и запись, после сброса 0x0) — Разрешение прерывания: запрос перехода не выполнен из-за ожидающего пробуждения.
  • STATE_REQ_IGNORED (бит 2, чтение и запись, после сброса 0x0) — Разрешение прерывания: запрос состояния проигнорирован.
  • TIMER (бит 1, чтение и запись, после сброса 0x0) — Разрешение прерывания: таймер AON.
  • VREG_OUTPUT_LOW (бит 0, чтение и запись, после сброса 0x0) — Разрешение прерывания: низкое напряжение на выходе стабилизатора.

POWMAN_INTF — принудительная установка прерываний

Смещение 0xE8, адрес 0x4010 00E8, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_INTF_…

1514131211109876543210
—PWRUP_WHILE_WAITINGSTATE_REQ_IGNOREDTIMERVREG_OUTPUT_LOW
  • PWRUP_WHILE_WAITING (бит 3, чтение и запись, после сброса 0x0) — Принудительное прерывание: запрос перехода не выполнен из-за ожидающего пробуждения.
  • STATE_REQ_IGNORED (бит 2, чтение и запись, после сброса 0x0) — Принудительное прерывание: запрос состояния проигнорирован.
  • TIMER (бит 1, чтение и запись, после сброса 0x0) — Принудительное прерывание: таймер AON.
  • VREG_OUTPUT_LOW (бит 0, чтение и запись, после сброса 0x0) — Принудительное прерывание: низкое напряжение на выходе стабилизатора.

POWMAN_INTS — флаги прерываний после маски и принуждения

Смещение 0xEC, адрес 0x4010 00EC, после сброса 0x0000 0000. Макросы pico-sdk: POWMAN_INTS_…

1514131211109876543210
—PWRUP_WHILE_WAITINGSTATE_REQ_IGNOREDTIMERVREG_OUTPUT_LOW
  • PWRUP_WHILE_WAITING (бит 3, только чтение, после сброса 0x0) — Прерывание после маски: запрос перехода не выполнен из-за ожидающего пробуждения.
  • STATE_REQ_IGNORED (бит 2, только чтение, после сброса 0x0) — Прерывание после маски: запрос состояния проигнорирован.
  • TIMER (бит 1, только чтение, после сброса 0x0) — Прерывание после маски: таймер AON.
  • VREG_OUTPUT_LOW (бит 0, только чтение, после сброса 0x0) — Прерывание после маски: низкое напряжение на выходе стабилизатора.

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

Как записать регистр POWMAN на RP2350?

Добавьте пароль 0x5AFE в старшие 16 бит записываемого значения: запись без него игнорируется и устанавливает флаг BADPASSWD. Пароль не нужен только для SCRATCH0–7, BOOT0–3 и регистров прерываний INTR, INTE и INTF.

Как узнать причину перезапуска RP2350?

Прочитайте CHIP_RESET блока POWMAN: биты HAD_POR, HAD_BOR, HAD_RUN_LOW, HAD_GLITCH_DETECT, HAD_DP_RESET_REQ, HAD_RESCUE и биты сброса от сторожевого таймера показывают источник. Бит DOUBLE_TAP означает двойное нажатие RUN — загрузочный код переходит в загрузчик.

Чем таймер AON RP2350 отличается от RTC в RP2040?

RTC в RP2040 считал дату и время, а таймер AON считает миллисекунды в 64-битном счётчике и работает во всех режимах питания, даже с выключенным ядром. Дату и время при необходимости вычисляет программа, а будильник таймера может разбудить чип.

Источники

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

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

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

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