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

Регистры XIP_CTRL RP2350

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

Кеш XIP — 16 КБ, двухканальный ассоциативный, попадание за один такт; физически это два банка по 8 КБ с чётными и нечётными строками. Окно XIP повторяется четыре раза: с 0x1000 0000 — с кешем, с 0x1400 0000 — без кеша, с 0x1800 0000 — обслуживание кеша, с 0x1C00 0000 — без кеша и без трансляции адресов QMI (даташит RP2350, раздел 4.4).

По сравнению с RP2040 кеш включают раздельно для защищённого и незащищённого кода (EN_SECURE и EN_NONSECURE), а биты NO_UNCACHED_… и NO_UNTRANSLATED_… закрывают обходные окна, чтобы не тратить области SAU, MPU или PMP на их защиту. SPLIT_WAYS отдаёт каждому домену свой канал кеша, так что незащищённый код не видит изменений, вызванных защищённым.

XIP по умолчанию только для чтения: WRITABLE_M0 и WRITABLE_M1 разрешают запись в окна CS0 и CS1, если там подключена PSRAM. Регистра FLUSH больше нет — кеш обслуживают записью в окно 0x1800 0000. Потоковое чтение для DMA задают STREAM_ADDR и STREAM_CTR, данные забирают из STREAM_FIFO или быстрее — через XIP_AUX.

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

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

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

РегистрСмещениеНазначениеПосле сброса
XIP_CTRL0x00Управление кэшем0x0000 0083
XIP_STAT0x08Состояние кэша и FIFO потокового чтения0x0000 0002
XIP_CTR_HIT0x0CСчётчик попаданий в кэш0x0000 0000
XIP_CTR_ACC0x10Счётчик обращений к XIP0x0000 0000
XIP_STREAM_ADDR0x14Адрес потокового чтения0x0000 0000
XIP_STREAM_CTR0x18Число слов потокового чтения0x0000 0000
XIP_STREAM_FIFO0x1CFIFO потокового чтения0x0000 0000

XIP_CTRL — управление кэшем

Смещение 0x00, адрес 0x400C 8000, после сброса 0x0000 0083. Макросы pico-sdk: XIP_CTRL_…

1514131211109876543210
—WRITABLE_M1WRITABLE_M0SPLIT_WAYSMAINT_NONSECNO_UNTRANSLATED_NONSECNO_UNTRANSLATED_SECNO_UNCACHED_NONSECNO_UNCACHED_SECPOWER_DOWN—EN_NONSECUREEN_SECURE
  • WRITABLE_M1 (бит 11, чтение и запись, после сброса 0x0) — Разрешить запись в окно CS1 (0x1100 0000…0x11FF FFFF) — для PSRAM; иначе только чтение.
  • WRITABLE_M0 (бит 10, чтение и запись, после сброса 0x0) — Разрешить запись в окно CS0 (0x1000 0000…0x10FF FFFF) — для PSRAM; иначе только чтение.
  • SPLIT_WAYS (бит 9, чтение и запись, после сброса 0x0) — Разделить кеш: защищённые обращения — в канал 0, незащищённые — в канал 1.
  • MAINT_NONSEC (бит 8, чтение и запись, после сброса 0x0) — Разрешить незащищённому коду обслуживание кеша; при 0 — ошибка шины.
  • NO_UNTRANSLATED_NONSEC (бит 7, чтение и запись, после сброса 0x1) — Ошибка шины при незащищённом обращении к окну без кеша и трансляции.
  • NO_UNTRANSLATED_SEC (бит 6, чтение и запись, после сброса 0x0) — Ошибка шины при защищённом обращении к окну без кеша и трансляции.
  • NO_UNCACHED_NONSEC (бит 5, чтение и запись, после сброса 0x0) — Ошибка шины при незащищённом обращении к окну без кеша.
  • NO_UNCACHED_SEC (бит 4, чтение и запись, после сброса 0x0) — Ошибка шины при защищённом обращении к окну без кеша.
  • POWER_DOWN (бит 3, чтение и запись, после сброса 0x0) — Отключение питания памяти кеша: содержимое сохраняется, но недоступно; запись 1 выключает кеш для обоих доменов.
  • EN_NONSECURE (бит 1, чтение и запись, после сброса 0x1) — Включение кеша для незащищённых обращений.
  • EN_SECURE (бит 0, чтение и запись, после сброса 0x1) — Включение кеша для защищённых обращений.

XIP_STAT — состояние кэша и FIFO потокового чтения

Смещение 0x08, адрес 0x400C 8008, после сброса 0x0000 0002. Макросы pico-sdk: XIP_STAT_…

1514131211109876543210
—FIFO_FULLFIFO_EMPTY—
  • FIFO_FULL (бит 2, только чтение, после сброса 0x0) — FIFO потокового чтения заполнено (в нём два слова).
  • FIFO_EMPTY (бит 1, только чтение, после сброса 0x1) — FIFO потокового чтения пусто.

XIP_CTR_HIT — счётчик попаданий в кэш

Смещение 0x0C, адрес 0x400C 800C, после сброса 0x0000 0000, сброс записью 1. Макросы pico-sdk: XIP_CTR_HIT_…

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

XIP_CTR_ACC — счётчик обращений к XIP

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

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

XIP_STREAM_ADDR — адрес потокового чтения

Смещение 0x14, адрес 0x400C 8014, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: XIP_STREAM_ADDR_…

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

XIP_STREAM_CTR — число слов потокового чтения

Смещение 0x18, адрес 0x400C 8018, после сброса 0x0000 0000, чтение и запись. Макросы pico-sdk: XIP_STREAM_CTR_…

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

XIP_STREAM_FIFO — fIFO потокового чтения

Смещение 0x1C, адрес 0x400C 801C, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: XIP_STREAM_FIFO_…

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

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

Как разрешить запись в PSRAM через XIP на RP2350?

Установите WRITABLE_M1 (или WRITABLE_M0, если PSRAM на CS0) в регистре CTRL блока XIP_CTRL: по умолчанию окна XIP только для чтения. Сам QMI тоже нужно настроить на команды записи в M1_WFMT и M1_WCMD.

Чем XIP RP2350 отличается от RP2040?

Кеш включается раздельно для защищённого и незащищённого кода и может делиться между ними по каналам, окна в обход кеша можно закрыть, появилась запись для PSRAM, а вместо регистра FLUSH кеш обслуживают записью в окно с адреса 0x1800 0000. Контроллер памяти — QMI вместо SSI.

Источники

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

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

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

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