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

Регистры OTP RP2350

Регистры управления OTP в RP2350 — 8 КБ однократно программируемой памяти с идентификатором чипа, настройками защиты и ключами: блокировки страниц, программирование через мост SBPI, ключи доступа, критичные флаги, разрешение отладки и выбор архитектуры ядер.

OTP RP2350 — 8 КБ однократно программируемой памяти: 4096 строк по 24 бита, в каждой 16 бит данных с защитой ECC. Там хранятся записанные на заводе уникальный идентификатор и подстройка генераторов, настройки защиты, отпечатки ключей безопасной загрузки, ключи расшифровки, настройки загрузчика USB и даже образы программ. Бит можно перевести из 0 в 1, но не обратно (даташит RP2350, глава 13).

Этот блок — регистры управления по адресу 0x4012 0000; сами данные читаются через окна с 0x4013 0000 — с исправлением ошибок или без, с защищённой проверкой или без. Память разбита на 64 страницы по 64 строки, у каждой — уровни доступа для защищённого и незащищённого кода: чтение и запись, только чтение или недоступна. Уровни загружаются из OTP при сбросе, а SW_LOCK0–SW_LOCK63 позволяют программе повысить их до следующего сброса OTP — например, спрятать ключи от поздних стадий загрузки.

Записывают OTP через мост SBPI — регистры SBPI_INSTR, SBPI_WDATA и SBPI_STATUS, — но удобнее функция загрузочного ПЗУ otp_access или интерфейс PICOBOOT загрузчика USB. CRITICAL показывает критичные флаги, прочитанные при запуске: безопасная загрузка, отключение отладки, архитектура ядер, детектор сбоев. DEBUGEN возвращает отключённую отладку, ARCHSEL выбирает Arm или RISC-V для каждого ядра.

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

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

РегистрСмещениеНазначениеПосле сброса
OTP_SW_LOCKn0x00 + n · 0x04Программная блокировка страницы n0x0000 0000
OTP_SBPI_INSTR0x0100Инструкция для моста SBPI — программирование OTP0x0000 0000
OTP_SBPI_WDATA_00x0104Данные записи SBPI, байты 3…00x0000 0000
OTP_SBPI_WDATA_10x0108Данные записи SBPI, байты 7…40x0000 0000
OTP_SBPI_WDATA_20x010CДанные записи SBPI, байты 11…80x0000 0000
OTP_SBPI_WDATA_30x0110Данные записи SBPI, байты 15…120x0000 0000
OTP_SBPI_RDATA_00x0114Прочитанные данные SBPI, байты 3…0; после чтения обнуляется0x0000 0000
OTP_SBPI_RDATA_10x0118Прочитанные данные SBPI, байты 7…4; после чтения обнуляется0x0000 0000
OTP_SBPI_RDATA_20x011CПрочитанные данные SBPI, байты 11…8; после чтения обнуляется0x0000 0000
OTP_SBPI_RDATA_30x0120Прочитанные данные SBPI, байты 15…12; после чтения обнуляется0x0000 0000
OTP_SBPI_STATUS0x0124Состояние моста SBPI0x0000 0000
OTP_USR0x0128Интерфейс чтения данных по шине APB0x0000 0001
OTP_DBG0x012CОтладка автомата включения OTP0x0000 0000
OTP_BIST0x0134Счётчик ячеек с утечкой при самопроверке0x0FFF 0000
OTP_CRT_KEY_W00x0138Ключ доступа, слово 0 (биты 31…0); только запись, чтение даёт 00x0000 0000
OTP_CRT_KEY_W10x013CКлюч доступа, слово 1 (биты 63…32); только запись, чтение даёт 00x0000 0000
OTP_CRT_KEY_W20x0140Ключ доступа, слово 2 (биты 95…64); только запись, чтение даёт 00x0000 0000
OTP_CRT_KEY_W30x0144Ключ доступа, слово 3 (биты 127…96); только запись, чтение даёт 00x0000 0000
OTP_CRITICAL0x0148Критичные флаги, прочитанные при запуске0x0000 0000
OTP_KEY_VALID0x014CКакие ключи доступа были записаны к моменту загрузки0x0000 0000
OTP_DEBUGEN0x0150Возврат отключённых отладочных функций0x0000 0000
OTP_DEBUGEN_LOCK0x0154Закрепление битов DEBUGEN; сбрасывается холодным сбросом ядер0x0000 0000
OTP_ARCHSEL0x0158Выбор архитектуры ядер: Arm или RISC-V0x0000 0000
OTP_ARCHSEL_STATUS0x015CТекущая архитектура ядер0x0000 0000
OTP_BOOTDIS0x0160Запрет загрузочных векторов из регистров scratch0x0000 0000
OTP_INTR0x0164Необработанные флаги прерываний0x0000 0000
OTP_INTE0x0168Разрешение прерываний0x0000 0000
OTP_INTF0x016CПринудительная установка прерываний0x0000 0000
OTP_INTS0x0170Флаги прерываний после маски и принуждения0x0000 0000

OTP_SW_LOCKn — программная блокировка страницы n

64 регистра, n = 0…63: смещение 0x00 + n · 0x04, после сброса 0x0000 0000. Макросы pico-sdk: OTP_SW_LOCKn_…

1514131211109876543210
—NSECSEC
  • NSEC (биты 3:2, чтение и запись, после сброса не определено) — Уровень доступа к странице для незащищённого кода; запись складывается по ИЛИ — уровень только растёт.
    ЗначениеИмя в pico-sdkЧто значит
    0x0read_writeЧтение и запись
    0x1read_onlyТолько чтение
    0x3inaccessibleНедоступна
  • SEC (биты 1:0, чтение и запись, после сброса не определено) — Уровень доступа к странице для защищённого кода; незащищённому коду поле доступно только для чтения.
    ЗначениеИмя в pico-sdkЧто значит
    0x0read_writeЧтение и запись
    0x1read_onlyТолько чтение
    0x3inaccessibleНедоступна

OTP_SBPI_INSTR — инструкция для моста SBPI — программирование OTP

Смещение 0x0100, адрес 0x4012 0100, после сброса 0x0000 0000. Макросы pico-sdk: OTP_SBPI_INSTR_…

31302928272625242322212019181716
—EXECIS_WRHAS_PAYLOADPAYLOAD_SIZE_M1TARGET
1514131211109876543210
CMDSHORT_WDATA
  • EXEC (бит 30, сбрасывается сам, после сброса 0x0) — Выполнить инструкцию.
  • IS_WR (бит 29, чтение и запись, после сброса 0x0) — Данные инструкции — запись.
  • HAS_PAYLOAD (бит 28, чтение и запись, после сброса 0x0) — У инструкции есть данные для записи или чтения.
  • PAYLOAD_SIZE_M1 (биты 27:24, чтение и запись, после сброса 0x0) — Размер данных в байтах минус 1.
  • TARGET (биты 23:16, чтение и запись, после сброса 0x00) — Получатель инструкции: PMC (0x3A) или DAP (0x02).
  • CMD (биты 15:8, чтение и запись, после сброса 0x00) — Код команды SBPI.
  • SHORT_WDATA (биты 7:0, чтение и запись, после сброса 0x00) — Данные записи, когда PAYLOAD_SIZE_M1 = 0.

OTP_SBPI_WDATA_0 — данные записи SBPI, байты 3…0

Смещение 0x0104, адрес 0x4012 0104, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: OTP_SBPI_WDATA_0_…

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

OTP_SBPI_WDATA_1 — данные записи SBPI, байты 7…4

Смещение 0x0108, адрес 0x4012 0108, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: OTP_SBPI_WDATA_1_…

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

OTP_SBPI_WDATA_2 — данные записи SBPI, байты 11…8

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

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

OTP_SBPI_WDATA_3 — данные записи SBPI, байты 15…12

Смещение 0x0110, адрес 0x4012 0110, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: OTP_SBPI_WDATA_3_…

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

OTP_SBPI_RDATA_0 — прочитанные данные SBPI, байты 3…0; после чтения обнуляется

Смещение 0x0114, адрес 0x4012 0114, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: OTP_SBPI_RDATA_0_…

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

OTP_SBPI_RDATA_1 — прочитанные данные SBPI, байты 7…4; после чтения обнуляется

Смещение 0x0118, адрес 0x4012 0118, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: OTP_SBPI_RDATA_1_…

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

OTP_SBPI_RDATA_2 — прочитанные данные SBPI, байты 11…8; после чтения обнуляется

Смещение 0x011C, адрес 0x4012 011C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: OTP_SBPI_RDATA_2_…

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

OTP_SBPI_RDATA_3 — прочитанные данные SBPI, байты 15…12; после чтения обнуляется

Смещение 0x0120, адрес 0x4012 0120, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: OTP_SBPI_RDATA_3_…

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

OTP_SBPI_STATUS — состояние моста SBPI

Смещение 0x0124, адрес 0x4012 0124, после сброса 0x0000 0000. Макросы pico-sdk: OTP_SBPI_STATUS_…

31302928272625242322212019181716
—MISO
1514131211109876543210
—FLAG—INSTR_MISS—INSTR_DONE—RDATA_VLD
  • MISO (биты 23:16, только чтение, после сброса не определено) — Ответ SBPI.
  • FLAG (бит 12, только чтение, после сброса не определено) — Флаг SBPI.
  • INSTR_MISS (бит 8, сброс записью 1, после сброса 0x0) — Инструкция пропущена — предыдущая ещё выполнялась; сбрасывается записью 1.
  • INSTR_DONE (бит 4, сброс записью 1, после сброса 0x0) — Инструкция выполнена; сбрасывается записью 1.
  • RDATA_VLD (бит 0, сброс записью 1, после сброса 0x0) — Команда чтения вернула данные; сбрасывается записью 1.

OTP_USR — интерфейс чтения данных по шине APB

Смещение 0x0128, адрес 0x4012 0128, после сброса 0x0000 0001. Макросы pico-sdk: OTP_USR_…

1514131211109876543210
—PD—DCTRL
  • PD (бит 4, чтение и запись, после сброса 0x0) — Отключение источника опорного тока; для чтения OTP должно быть 0.
  • DCTRL (бит 0, чтение и запись, после сброса 0x1) — 1 — чтение данных по шине APB, 0 — доступ через SBPI; перед программированием OTP бит сбрасывают.

OTP_DBG — отладка автомата включения OTP

Смещение 0x012C, адрес 0x4012 012C, после сброса 0x0000 0000. Макросы pico-sdk: OTP_DBG_…

1514131211109876543210
—CUSTOMER_RMA_FLAG—PSM_STATEROSC_UPROSC_UP_SEENBOOT_DONEPSM_DONE
  • CUSTOMER_RMA_FLAG (бит 12, только чтение, после сброса не определено) — Чип выведен из эксплуатации (режим RMA).
  • PSM_STATE (биты 7:4, только чтение, после сброса не определено) — Состояние автомата включения OTP.
  • ROSC_UP (бит 3, только чтение, после сброса не определено) — Кольцевой генератор OTP работает.
  • ROSC_UP_SEEN (бит 2, сброс записью 1, после сброса 0x0) — Кольцевой генератор был замечен работающим; сбрасывается записью 1.
  • BOOT_DONE (бит 1, только чтение, после сброса не определено) — Автомат включения завершил загрузку.
  • PSM_DONE (бит 0, только чтение, после сброса не определено) — Автомат включения завершил работу.

OTP_BIST — счётчик ячеек с утечкой при самопроверке

Смещение 0x0134, адрес 0x4012 0134, после сброса 0x0FFF 0000. Макросы pico-sdk: OTP_BIST_…

31302928272625242322212019181716
—CNT_FAILCNT_CLRCNT_ENACNT_MAX
1514131211109876543210
—CNT
  • CNT_FAIL (бит 30, только чтение, после сброса не определено) — Ячеек с утечкой больше, чем CNT_MAX.
  • CNT_CLR (бит 29, сбрасывается сам, после сброса 0x0) — Обнулить счётчик перед использованием.
  • CNT_ENA (бит 28, чтение и запись, после сброса 0x0) — Включить счётчик до запуска самопроверки.
  • CNT_MAX (биты 27:16, чтение и запись, после сброса 0xFFF) — Порог для флага CNT_FAIL.
  • CNT (биты 12:0, только чтение, после сброса не определено) — Ячеек хотя бы с одним битом с утечкой.

OTP_CRT_KEY_W0 — ключ доступа, слово 0 (биты 31…0); только запись, чтение даёт 0

Смещение 0x0138, адрес 0x4012 0138, после сброса 0x0000 0000, только запись. Макросы pico-sdk: OTP_CRT_KEY_W0_…

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

OTP_CRT_KEY_W1 — ключ доступа, слово 1 (биты 63…32); только запись, чтение даёт 0

Смещение 0x013C, адрес 0x4012 013C, после сброса 0x0000 0000, только запись. Макросы pico-sdk: OTP_CRT_KEY_W1_…

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

OTP_CRT_KEY_W2 — ключ доступа, слово 2 (биты 95…64); только запись, чтение даёт 0

Смещение 0x0140, адрес 0x4012 0140, после сброса 0x0000 0000, только запись. Макросы pico-sdk: OTP_CRT_KEY_W2_…

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

OTP_CRT_KEY_W3 — ключ доступа, слово 3 (биты 127…96); только запись, чтение даёт 0

Смещение 0x0144, адрес 0x4012 0144, после сброса 0x0000 0000, только запись. Макросы pico-sdk: OTP_CRT_KEY_W3_…

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

OTP_CRITICAL — критичные флаги, прочитанные при запуске

Смещение 0x0148, адрес 0x4012 0148, после сброса 0x0000 0000. Макросы pico-sdk: OTP_CRITICAL_…

31302928272625242322212019181716
—RISCV_DISABLEARM_DISABLE
1514131211109876543210
—GLITCH_DETECTOR_SENSGLITCH_DETECTOR_ENABLEDEFAULT_ARCHSELDEBUG_DISABLESECURE_DEBUG_DISABLESECURE_BOOT_ENABLE
  • RISCV_DISABLE (бит 17, только чтение, после сброса 0x0) — Флаг запрета RISC-V: архитектура принудительно Arm.
  • ARM_DISABLE (бит 16, только чтение, после сброса 0x0) — Флаг запрета Arm; начиная с ревизии A3 не действует.
  • GLITCH_DETECTOR_SENS (биты 6:5, только чтение, после сброса 0x0) — Начальная чувствительность детектора сбоев.
  • GLITCH_DETECTOR_ENABLE (бит 4, только чтение, после сброса 0x0) — Детектор сбоев взводится до запуска программ.
  • DEFAULT_ARCHSEL (бит 3, только чтение, после сброса 0x0) — Архитектура по умолчанию: 0 — Arm, 1 — RISC-V.
  • DEBUG_DISABLE (бит 2, только чтение, после сброса 0x0) — Отладка отключена полностью, Mem-AP выключены.
  • SECURE_DEBUG_DISABLE (бит 1, только чтение, после сброса 0x0) — Отключена защищённая отладка: заводской JTAG, защищённые обращения Mem-AP и остановка защищённых ядер.
  • SECURE_BOOT_ENABLE (бит 0, только чтение, после сброса 0x0) — Безопасная загрузка: ПЗУ проверяет подписи, заводской JTAG выключен, архитектура — Arm.

OTP_KEY_VALID — какие ключи доступа были записаны к моменту загрузки

Смещение 0x014C, адрес 0x4012 014C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: OTP_KEY_VALID_…

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

OTP_DEBUGEN — возврат отключённых отладочных функций

Смещение 0x0150, адрес 0x4012 0150, после сброса 0x0000 0000. Макросы pico-sdk: OTP_DEBUGEN_…

1514131211109876543210
—MISC—PROC1_SECUREPROC1PROC0_SECUREPROC0
  • MISC (бит 8, чтение и запись, после сброса 0x0) — Включить прочие отладочные блоки — CTI и APB-AP модуля отладки RISC-V.
  • PROC1_SECURE (бит 3, чтение и запись, после сброса 0x0) — Разрешить Mem-AP ядра 1 защищённые обращения и защищённую отладку ядра 1.
  • PROC1 (бит 2, чтение и запись, после сброса 0x0) — Включить Mem-AP ядра 1, если он отключён.
  • PROC0_SECURE (бит 1, чтение и запись, после сброса 0x0) — Разрешить Mem-AP ядра 0 защищённые обращения и защищённую отладку ядра 0.
  • PROC0 (бит 0, чтение и запись, после сброса 0x0) — Включить Mem-AP ядра 0, если он отключён.

OTP_DEBUGEN_LOCK — закрепление битов DEBUGEN; сбрасывается холодным сбросом ядер

Смещение 0x0154, адрес 0x4012 0154, после сброса 0x0000 0000. Макросы pico-sdk: OTP_DEBUGEN_LOCK_…

1514131211109876543210
—MISC—PROC1_SECUREPROC1PROC0_SECUREPROC0
  • MISC (бит 8, чтение и запись, после сброса 0x0) — Запись 1 закрепляет бит MISC в DEBUGEN; снять нельзя.
  • PROC1_SECURE (бит 3, чтение и запись, после сброса 0x0) — Запись 1 закрепляет бит PROC1_SECURE в DEBUGEN; снять нельзя.
  • PROC1 (бит 2, чтение и запись, после сброса 0x0) — Запись 1 закрепляет бит PROC1 в DEBUGEN; снять нельзя.
  • PROC0_SECURE (бит 1, чтение и запись, после сброса 0x0) — Запись 1 закрепляет бит PROC0_SECURE в DEBUGEN; снять нельзя.
  • PROC0 (бит 0, чтение и запись, после сброса 0x0) — Запись 1 закрепляет бит PROC0 в DEBUGEN; снять нельзя.

OTP_ARCHSEL — выбор архитектуры ядер: Arm или RISC-V

Смещение 0x0158, адрес 0x4012 0158, после сброса 0x0000 0000. Макросы pico-sdk: OTP_ARCHSEL_…

1514131211109876543210
—CORE1CORE0
  • CORE1 (бит 1, чтение и запись, после сброса 0x0) — Архитектура ядра 1 после следующего тёплого сброса.
  • CORE0 (бит 0, чтение и запись, после сброса 0x0) — Архитектура ядра 0 после следующего тёплого сброса.

OTP_ARCHSEL_STATUS — текущая архитектура ядер

Смещение 0x015C, адрес 0x4012 015C, после сброса 0x0000 0000. Макросы pico-sdk: OTP_ARCHSEL_STATUS_…

1514131211109876543210
—CORE1CORE0
  • CORE1 (бит 1, только чтение, после сброса 0x0) — Текущая архитектура ядра 1; обновляется при тёплом сбросе ядра.
  • CORE0 (бит 0, только чтение, после сброса 0x0) — Текущая архитектура ядра 0; обновляется при тёплом сбросе ядра.

OTP_BOOTDIS — запрет загрузочных векторов из регистров scratch

Смещение 0x0160, адрес 0x4012 0160, после сброса 0x0000 0000. Макросы pico-sdk: OTP_BOOTDIS_…

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

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

Смещение 0x0164, адрес 0x4012 0164, после сброса 0x0000 0000. Макросы pico-sdk: OTP_INTR_…

1514131211109876543210
—APB_RD_NSEC_FAILAPB_RD_SEC_FAILAPB_DCTRL_FAILSBPI_WR_FAILSBPI_FLAG_N
  • APB_RD_NSEC_FAIL (бит 4, сброс записью 1, после сброса 0x0) — Событие: неудачное чтение по шине APB из незащищённого режима.
  • APB_RD_SEC_FAIL (бит 3, сброс записью 1, после сброса 0x0) — Событие: неудачное чтение по шине APB из защищённого режима.
  • APB_DCTRL_FAIL (бит 2, сброс записью 1, после сброса 0x0) — Событие: неудачное обращение по шине APB, связанное с битом USR.DCTRL.
  • SBPI_WR_FAIL (бит 1, сброс записью 1, после сброса 0x0) — Событие: неудачная запись через SBPI.
  • SBPI_FLAG_N (бит 0, только чтение, после сброса 0x0) — Событие: флаг SBPI (инверсный).

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

Смещение 0x0168, адрес 0x4012 0168, после сброса 0x0000 0000. Макросы pico-sdk: OTP_INTE_…

1514131211109876543210
—APB_RD_NSEC_FAILAPB_RD_SEC_FAILAPB_DCTRL_FAILSBPI_WR_FAILSBPI_FLAG_N
  • APB_RD_NSEC_FAIL (бит 4, чтение и запись, после сброса 0x0) — Разрешение прерывания: неудачное чтение по шине APB из незащищённого режима.
  • APB_RD_SEC_FAIL (бит 3, чтение и запись, после сброса 0x0) — Разрешение прерывания: неудачное чтение по шине APB из защищённого режима.
  • APB_DCTRL_FAIL (бит 2, чтение и запись, после сброса 0x0) — Разрешение прерывания: неудачное обращение по шине APB, связанное с битом USR.DCTRL.
  • SBPI_WR_FAIL (бит 1, чтение и запись, после сброса 0x0) — Разрешение прерывания: неудачная запись через SBPI.
  • SBPI_FLAG_N (бит 0, чтение и запись, после сброса 0x0) — Разрешение прерывания: флаг SBPI (инверсный).

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

Смещение 0x016C, адрес 0x4012 016C, после сброса 0x0000 0000. Макросы pico-sdk: OTP_INTF_…

1514131211109876543210
—APB_RD_NSEC_FAILAPB_RD_SEC_FAILAPB_DCTRL_FAILSBPI_WR_FAILSBPI_FLAG_N
  • APB_RD_NSEC_FAIL (бит 4, чтение и запись, после сброса 0x0) — Принудительное прерывание: неудачное чтение по шине APB из незащищённого режима.
  • APB_RD_SEC_FAIL (бит 3, чтение и запись, после сброса 0x0) — Принудительное прерывание: неудачное чтение по шине APB из защищённого режима.
  • APB_DCTRL_FAIL (бит 2, чтение и запись, после сброса 0x0) — Принудительное прерывание: неудачное обращение по шине APB, связанное с битом USR.DCTRL.
  • SBPI_WR_FAIL (бит 1, чтение и запись, после сброса 0x0) — Принудительное прерывание: неудачная запись через SBPI.
  • SBPI_FLAG_N (бит 0, чтение и запись, после сброса 0x0) — Принудительное прерывание: флаг SBPI (инверсный).

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

Смещение 0x0170, адрес 0x4012 0170, после сброса 0x0000 0000. Макросы pico-sdk: OTP_INTS_…

1514131211109876543210
—APB_RD_NSEC_FAILAPB_RD_SEC_FAILAPB_DCTRL_FAILSBPI_WR_FAILSBPI_FLAG_N
  • APB_RD_NSEC_FAIL (бит 4, только чтение, после сброса 0x0) — Прерывание после маски: неудачное чтение по шине APB из незащищённого режима.
  • APB_RD_SEC_FAIL (бит 3, только чтение, после сброса 0x0) — Прерывание после маски: неудачное чтение по шине APB из защищённого режима.
  • APB_DCTRL_FAIL (бит 2, только чтение, после сброса 0x0) — Прерывание после маски: неудачное обращение по шине APB, связанное с битом USR.DCTRL.
  • SBPI_WR_FAIL (бит 1, только чтение, после сброса 0x0) — Прерывание после маски: неудачная запись через SBPI.
  • SBPI_FLAG_N (бит 0, только чтение, после сброса 0x0) — Прерывание после маски: флаг SBPI (инверсный).

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

Можно ли стереть OTP RP2350?

Нет: каждый бит можно только перевести из 0 в 1, и это необратимо. Уровни блокировки страниц тоже только растут — и записанные в OTP, и повышенные программно через SW_LOCK до следующего сброса OTP.

Как программно выбрать ядра RISC-V на RP2350?

Запишите 1 в биты CORE0 и CORE1 регистра ARCHSEL блока OTP: ядро возьмёт новую архитектуру при следующем тёплом сбросе, а ARCHSEL_STATUS покажет текущую. Допустимые значения ограничивают критичные флаги — при включённой безопасной загрузке архитектура принудительно Arm.

Источники

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

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

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

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