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

Регистры QMI RP2350

Регистры интерфейса QSPI-памяти QMI в RP2350: две микросхемы флеш-памяти или PSRAM в окне XIP, тайминги и формат команд для каждой, прямой режим SPI для программирования и трансляция адресов для нескольких образов программы.

QMI заменил SSI из RP2040 и подключает к окну XIP две внешние микросхемы памяти по SPI, Dual SPI или Quad SPI с общими SCK и линиями данных и отдельными выборами. CS0 (свой вывод) занимает адреса с 0x1000 0000, CS1 (альтернативная функция GPIO) — с 0x1100 0000, по 16 МБ на каждый, до 32 МБ всего (даташит RP2350, раздел 12.14).

Тайминги и формат команд задаются отдельно для каждого выбора: M0_… для CS0, M1_… для CS1. SCK — системная частота, делённая на целое от 1 до 256, выборку входных данных можно сдвигать на полтакта системной частоты (RXDELAY), а режим DTR передаёт адрес и данные по обоим фронтам SCK. Mn_RFMT и Mn_RCMD задают чтение — ширину фаз, код команды, суффикс и пустые такты, Mn_WFMT и Mn_WCMD — запись. После сброса настроены простое чтение командой 03h и запись командой 02h.

Прямой режим (DIRECT_CSR.EN) отдаёт шину программе: она сама управляет выборами и передаёт байты через FIFO DIRECT_TX и DIRECT_RX — так программируют флеш-память. ATRANS0–ATRANS7 делят каждый выбор на четыре окна по 4 МБ с базой и размером в секторах по 4 КБ: загрузчик может выполнять на месте любой из нескольких образов программы, скомпонованных для адреса 0x1000 0000.

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

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

РегистрСмещениеНазначениеПосле сброса
QMI_DIRECT_CSR0x00Прямой режим: управление и состояние0x0180 0000
QMI_DIRECT_TX0x04FIFO передачи прямого режима0x0000 0000
QMI_DIRECT_RX0x08FIFO приёма прямого режима: байт на каждый переданный0x0000 0000
QMI_M0_TIMING0x0CТайминги окна CS00x4000 0004
QMI_M0_RFMT0x10Формат чтения из окна CS00x0000 1000
QMI_M0_RCMD0x14Коды команды чтения для окна CS00x0000 A003
QMI_M0_WFMT0x18Формат записи в окно CS00x0000 1000
QMI_M0_WCMD0x1CКоды команды записи для окна CS00x0000 A002
QMI_M1_TIMING0x20Тайминги окна CS10x4000 0004
QMI_M1_RFMT0x24Формат чтения из окна CS10x0000 1000
QMI_M1_RCMD0x28Коды команды чтения для окна CS10x0000 A003
QMI_M1_WFMT0x2CФормат записи в окно CS10x0000 1000
QMI_M1_WCMD0x30Коды команды записи для окна CS10x0000 A002
QMI_ATRANS00x34Трансляция адресов XIP 0–4 МБ0x0400 0000
QMI_ATRANS10x38Трансляция адресов XIP 4–8 МБ0x0400 0400
QMI_ATRANS20x3CТрансляция адресов XIP 8–12 МБ0x0400 0800
QMI_ATRANS30x40Трансляция адресов XIP 12–16 МБ0x0400 0C00
QMI_ATRANS40x44Трансляция адресов XIP 16–20 МБ0x0400 0000
QMI_ATRANS50x48Трансляция адресов XIP 20–24 МБ0x0400 0400
QMI_ATRANS60x4CТрансляция адресов XIP 24–28 МБ0x0400 0800
QMI_ATRANS70x50Трансляция адресов XIP 28–32 МБ0x0400 0C00

QMI_DIRECT_CSR — прямой режим: управление и состояние

Смещение 0x00, адрес 0x400D 0000, после сброса 0x0180 0000. Макросы pico-sdk: QMI_DIRECT_CSR_…

31302928272625242322212019181716
RXDELAYCLKDIV—RXLEVELRXFULLRXEMPTY
1514131211109876543210
—TXLEVELTXEMPTYTXFULL—AUTO_CS1NAUTO_CS0N—ASSERT_CS1NASSERT_CS0NBUSYEN
  • RXDELAY (биты 31:30, чтение и запись, после сброса 0x0) — Задержка выборки входных данных в половинах такта системной частоты.
  • CLKDIV (биты 29:22, чтение и запись, после сброса 0x06) — Делитель SCK в прямом режиме: 1–255, 0 — 256; можно менять на лету.
  • RXLEVEL (биты 20:18, только чтение, после сброса 0x0) — Записей в FIFO DIRECT_RX.
  • RXFULL (бит 17, только чтение, после сброса 0x0) — FIFO DIRECT_RX заполнена — передача ждёт чтения.
  • RXEMPTY (бит 16, только чтение, после сброса 0x0) — FIFO DIRECT_RX пуста.
  • TXLEVEL (биты 14:12, только чтение, после сброса 0x0) — Записей в FIFO DIRECT_TX.
  • TXEMPTY (бит 11, только чтение, после сброса 0x0) — FIFO DIRECT_TX пуста — после текущего кадра передача остановится.
  • TXFULL (бит 10, только чтение, после сброса 0x0) — FIFO DIRECT_TX заполнена — новые данные игнорируются.
  • AUTO_CS1N (бит 7, чтение и запись, после сброса 0x0) — Выбирать CS1 автоматически, пока установлен BUSY.
  • AUTO_CS0N (бит 6, чтение и запись, после сброса 0x0) — Выбирать CS0 автоматически, пока установлен BUSY.
  • ASSERT_CS1N (бит 3, чтение и запись, после сброса 0x0) — Выбрать CS1 (низкий уровень); действует и при EN = 0.
  • ASSERT_CS0N (бит 2, чтение и запись, после сброса 0x0) — Выбрать CS0 (низкий уровень); действует и при EN = 0.
  • BUSY (бит 1, только чтение, после сброса 0x0) — Идёт передача — выбор снимать нельзя.
  • EN (бит 0, чтение и запись, после сброса 0x0) — Прямой режим: программа управляет выборами и передаёт данные через FIFO.

QMI_DIRECT_TX — fIFO передачи прямого режима

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

31302928272625242322212019181716
—NOPUSHOEDWIDTHIWIDTH
1514131211109876543210
DATA
  • NOPUSH (бит 20, запись с побочным действием, после сброса 0x0) — Не класть ответ в DIRECT_RX — удобно для команды в начале передачи.
  • OE (бит 19, запись с побочным действием, после сброса 0x0) — Разрешение выхода линий данных в Dual и Quad SPI; в обычном SPI не действует.
  • DWIDTH (бит 18, запись с побочным действием, после сброса 0x0) — Ширина данных: 0 — 8 бит, 1 — 16 бит.
  • IWIDTH (биты 17:16, запись с побочным действием, после сброса 0x0) — Ширина интерфейса для этой записи: SPI, Dual или Quad.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • DATA (биты 15:0, запись с побочным действием, после сброса 0x0000) — Данные для передачи.

QMI_DIRECT_RX — fIFO приёма прямого режима: байт на каждый переданный

Смещение 0x08, адрес 0x400D 0008, после сброса 0x0000 0000, чтение с побочным действием. Макросы pico-sdk: QMI_DIRECT_RX_…

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

QMI_M0_TIMING — тайминги окна CS0

Смещение 0x0C, адрес 0x400D 000C, после сброса 0x4000 0004. Макросы pico-sdk: QMI_M0_TIMING_…

31302928272625242322212019181716
COOLDOWNPAGEBREAK—SELECT_SETUPSELECT_HOLDMAX_SELECTMIN_DESELECT
1514131211109876543210
MIN_DESELECT—RXDELAYCLKDIV
  • COOLDOWN (биты 31:30, чтение и запись, после сброса 0x1) — После передачи выбор держится ещё 64 × COOLDOWN тактов системной частоты и полпериода SCK — следующее последовательное обращение продолжит передачу.
  • PAGEBREAK (биты 29:28, чтение и запись, после сброса 0x0) — Снимать выбор на границах страниц, кратных степени двойки, — для PSRAM.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneГраницы страниц не учитываются
    0x1256Прерывать передачу на границе страницы 256 байт
    0x21024Прерывать передачу на границе 1024 байт
    0x34096Прерывать передачу на границе сектора 4096 байт
  • SELECT_SETUP (бит 25, чтение и запись, после сброса 0x0) — Добавить до одного такта между выбором и первым фронтом SCK.
  • SELECT_HOLD (биты 24:23, чтение и запись, после сброса 0x0) — Добавить до трёх тактов удержания выбора после последнего спада SCK.
  • MAX_SELECT (биты 22:17, чтение и запись, после сброса 0x00) — Наибольшее время активного выбора в единицах по 64 такта, 0 — без ограничения.
  • MIN_DESELECT (биты 16:12, чтение и запись, после сброса 0x00) — Дополнительные такты паузы между снятием и новым выбором.
  • RXDELAY (биты 10:8, чтение и запись, после сброса 0x0) — Задержка выборки входных данных в половинах такта системной частоты.
  • CLKDIV (биты 7:0, чтение и запись, после сброса 0x04) — Делитель SCK от системной частоты: 1–255, 0 — 256; чётный или нечётный.

QMI_M0_RFMT — формат чтения из окна CS0

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

31302928272625242322212019181716
—DTR—DUMMY_LEN
1514131211109876543210
SUFFIX_LEN—PREFIX_LEN—DATA_WIDTHDUMMY_WIDTHSUFFIX_WIDTHADDR_WIDTHPREFIX_WIDTH
  • DTR (бит 28, чтение и запись, после сброса 0x0) — Удвоенная скорость (DTR): адрес, суффикс и данные передаются по обоим фронтам SCK.
  • DUMMY_LEN (биты 18:16, чтение и запись, после сброса 0x0) — Пустые такты между суффиксом и данными, в единицах по 4 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез пустых тактов
    0x144 пустых бит
    0x288 пустых бит
    0x31212 пустых бит
    0x41616 пустых бит
    0x52020 пустых бит
    0x62424 пустых бит
    0x72828 пустых бит
  • SUFFIX_LEN (биты 15:14, чтение и запись, после сброса 0x0) — Длина суффикса после адреса: 0 или 8 бит.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез суффикса
    0x28Суффикс 8 бит
  • PREFIX_LEN (бит 12, чтение и запись, после сброса 0x1) — Длина префикса — кода команды: 0 или 8 бит.
  • DATA_WIDTH (биты 9:8, чтение и запись, после сброса 0x0) — Ширина фазы данных: SPI, Dual или Quad.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • DUMMY_WIDTH (биты 7:6, чтение и запись, после сброса 0x0) — Ширина фазы пустых тактов.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • SUFFIX_WIDTH (биты 5:4, чтение и запись, после сброса 0x0) — Ширина суффикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • ADDR_WIDTH (биты 3:2, чтение и запись, после сброса 0x0) — Ширина адреса; адрес всегда 24 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • PREFIX_WIDTH (биты 1:0, чтение и запись, после сброса 0x0) — Ширина префикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита

QMI_M0_RCMD — коды команды чтения для окна CS0

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

1514131211109876543210
SUFFIXPREFIX
  • SUFFIX (биты 15:8, чтение и запись, после сброса 0xA0) — Суффикс после адреса, если SUFFIX_LEN не 0.
  • PREFIX (биты 7:0, чтение и запись, после сброса 0x03) — Код команды чтения перед адресом, если PREFIX_LEN не 0.

QMI_M0_WFMT — формат записи в окно CS0

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

31302928272625242322212019181716
—DTR—DUMMY_LEN
1514131211109876543210
SUFFIX_LEN—PREFIX_LEN—DATA_WIDTHDUMMY_WIDTHSUFFIX_WIDTHADDR_WIDTHPREFIX_WIDTH
  • DTR (бит 28, чтение и запись, после сброса 0x0) — Удвоенная скорость (DTR): адрес, суффикс и данные передаются по обоим фронтам SCK.
  • DUMMY_LEN (биты 18:16, чтение и запись, после сброса 0x0) — Пустые такты между суффиксом и данными, в единицах по 4 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез пустых тактов
    0x144 пустых бит
    0x288 пустых бит
    0x31212 пустых бит
    0x41616 пустых бит
    0x52020 пустых бит
    0x62424 пустых бит
    0x72828 пустых бит
  • SUFFIX_LEN (биты 15:14, чтение и запись, после сброса 0x0) — Длина суффикса после адреса: 0 или 8 бит.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез суффикса
    0x28Суффикс 8 бит
  • PREFIX_LEN (бит 12, чтение и запись, после сброса 0x1) — Длина префикса — кода команды: 0 или 8 бит.
  • DATA_WIDTH (биты 9:8, чтение и запись, после сброса 0x0) — Ширина фазы данных: SPI, Dual или Quad.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • DUMMY_WIDTH (биты 7:6, чтение и запись, после сброса 0x0) — Ширина фазы пустых тактов.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • SUFFIX_WIDTH (биты 5:4, чтение и запись, после сброса 0x0) — Ширина суффикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • ADDR_WIDTH (биты 3:2, чтение и запись, после сброса 0x0) — Ширина адреса; адрес всегда 24 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • PREFIX_WIDTH (биты 1:0, чтение и запись, после сброса 0x0) — Ширина префикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита

QMI_M0_WCMD — коды команды записи для окна CS0

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

1514131211109876543210
SUFFIXPREFIX
  • SUFFIX (биты 15:8, чтение и запись, после сброса 0xA0) — Суффикс после адреса, если SUFFIX_LEN не 0.
  • PREFIX (биты 7:0, чтение и запись, после сброса 0x02) — Код команды записи перед адресом, если PREFIX_LEN не 0.

QMI_M1_TIMING — тайминги окна CS1

Смещение 0x20, адрес 0x400D 0020, после сброса 0x4000 0004. Макросы pico-sdk: QMI_M1_TIMING_…

31302928272625242322212019181716
COOLDOWNPAGEBREAK—SELECT_SETUPSELECT_HOLDMAX_SELECTMIN_DESELECT
1514131211109876543210
MIN_DESELECT—RXDELAYCLKDIV
  • COOLDOWN (биты 31:30, чтение и запись, после сброса 0x1) — После передачи выбор держится ещё 64 × COOLDOWN тактов системной частоты и полпериода SCK — следующее последовательное обращение продолжит передачу.
  • PAGEBREAK (биты 29:28, чтение и запись, после сброса 0x0) — Снимать выбор на границах страниц, кратных степени двойки, — для PSRAM.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneГраницы страниц не учитываются
    0x1256Прерывать передачу на границе страницы 256 байт
    0x21024Прерывать передачу на границе 1024 байт
    0x34096Прерывать передачу на границе сектора 4096 байт
  • SELECT_SETUP (бит 25, чтение и запись, после сброса 0x0) — Добавить до одного такта между выбором и первым фронтом SCK.
  • SELECT_HOLD (биты 24:23, чтение и запись, после сброса 0x0) — Добавить до трёх тактов удержания выбора после последнего спада SCK.
  • MAX_SELECT (биты 22:17, чтение и запись, после сброса 0x00) — Наибольшее время активного выбора в единицах по 64 такта, 0 — без ограничения.
  • MIN_DESELECT (биты 16:12, чтение и запись, после сброса 0x00) — Дополнительные такты паузы между снятием и новым выбором.
  • RXDELAY (биты 10:8, чтение и запись, после сброса 0x0) — Задержка выборки входных данных в половинах такта системной частоты.
  • CLKDIV (биты 7:0, чтение и запись, после сброса 0x04) — Делитель SCK от системной частоты: 1–255, 0 — 256; чётный или нечётный.

QMI_M1_RFMT — формат чтения из окна CS1

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

31302928272625242322212019181716
—DTR—DUMMY_LEN
1514131211109876543210
SUFFIX_LEN—PREFIX_LEN—DATA_WIDTHDUMMY_WIDTHSUFFIX_WIDTHADDR_WIDTHPREFIX_WIDTH
  • DTR (бит 28, чтение и запись, после сброса 0x0) — Удвоенная скорость (DTR): адрес, суффикс и данные передаются по обоим фронтам SCK.
  • DUMMY_LEN (биты 18:16, чтение и запись, после сброса 0x0) — Пустые такты между суффиксом и данными, в единицах по 4 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез пустых тактов
    0x144 пустых бит
    0x288 пустых бит
    0x31212 пустых бит
    0x41616 пустых бит
    0x52020 пустых бит
    0x62424 пустых бит
    0x72828 пустых бит
  • SUFFIX_LEN (биты 15:14, чтение и запись, после сброса 0x0) — Длина суффикса после адреса: 0 или 8 бит.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез суффикса
    0x28Суффикс 8 бит
  • PREFIX_LEN (бит 12, чтение и запись, после сброса 0x1) — Длина префикса — кода команды: 0 или 8 бит.
  • DATA_WIDTH (биты 9:8, чтение и запись, после сброса 0x0) — Ширина фазы данных: SPI, Dual или Quad.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • DUMMY_WIDTH (биты 7:6, чтение и запись, после сброса 0x0) — Ширина фазы пустых тактов.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • SUFFIX_WIDTH (биты 5:4, чтение и запись, после сброса 0x0) — Ширина суффикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • ADDR_WIDTH (биты 3:2, чтение и запись, после сброса 0x0) — Ширина адреса; адрес всегда 24 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • PREFIX_WIDTH (биты 1:0, чтение и запись, после сброса 0x0) — Ширина префикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита

QMI_M1_RCMD — коды команды чтения для окна CS1

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

1514131211109876543210
SUFFIXPREFIX
  • SUFFIX (биты 15:8, чтение и запись, после сброса 0xA0) — Суффикс после адреса, если SUFFIX_LEN не 0.
  • PREFIX (биты 7:0, чтение и запись, после сброса 0x03) — Код команды чтения перед адресом, если PREFIX_LEN не 0.

QMI_M1_WFMT — формат записи в окно CS1

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

31302928272625242322212019181716
—DTR—DUMMY_LEN
1514131211109876543210
SUFFIX_LEN—PREFIX_LEN—DATA_WIDTHDUMMY_WIDTHSUFFIX_WIDTHADDR_WIDTHPREFIX_WIDTH
  • DTR (бит 28, чтение и запись, после сброса 0x0) — Удвоенная скорость (DTR): адрес, суффикс и данные передаются по обоим фронтам SCK.
  • DUMMY_LEN (биты 18:16, чтение и запись, после сброса 0x0) — Пустые такты между суффиксом и данными, в единицах по 4 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез пустых тактов
    0x144 пустых бит
    0x288 пустых бит
    0x31212 пустых бит
    0x41616 пустых бит
    0x52020 пустых бит
    0x62424 пустых бит
    0x72828 пустых бит
  • SUFFIX_LEN (биты 15:14, чтение и запись, после сброса 0x0) — Длина суффикса после адреса: 0 или 8 бит.
    ЗначениеИмя в pico-sdkЧто значит
    0x0noneБез суффикса
    0x28Суффикс 8 бит
  • PREFIX_LEN (бит 12, чтение и запись, после сброса 0x1) — Длина префикса — кода команды: 0 или 8 бит.
  • DATA_WIDTH (биты 9:8, чтение и запись, после сброса 0x0) — Ширина фазы данных: SPI, Dual или Quad.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • DUMMY_WIDTH (биты 7:6, чтение и запись, после сброса 0x0) — Ширина фазы пустых тактов.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • SUFFIX_WIDTH (биты 5:4, чтение и запись, после сброса 0x0) — Ширина суффикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • ADDR_WIDTH (биты 3:2, чтение и запись, после сброса 0x0) — Ширина адреса; адрес всегда 24 бита.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита
  • PREFIX_WIDTH (биты 1:0, чтение и запись, после сброса 0x0) — Ширина префикса.
    ЗначениеИмя в pico-sdkЧто значит
    0x0sОбычный SPI, 1 бит
    0x1dDual SPI, 2 бита
    0x2qQuad SPI, 4 бита

QMI_M1_WCMD — коды команды записи для окна CS1

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

1514131211109876543210
SUFFIXPREFIX
  • SUFFIX (биты 15:8, чтение и запись, после сброса 0xA0) — Суффикс после адреса, если SUFFIX_LEN не 0.
  • PREFIX (биты 7:0, чтение и запись, после сброса 0x02) — Код команды записи перед адресом, если PREFIX_LEN не 0.

QMI_ATRANS0 — трансляция адресов XIP 0–4 МБ

Смещение 0x34, адрес 0x400D 0034, после сброса 0x0400 0000. Макросы pico-sdk: QMI_ATRANS0_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x000) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS1 — трансляция адресов XIP 4–8 МБ

Смещение 0x38, адрес 0x400D 0038, после сброса 0x0400 0400. Макросы pico-sdk: QMI_ATRANS1_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x400) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS2 — трансляция адресов XIP 8–12 МБ

Смещение 0x3C, адрес 0x400D 003C, после сброса 0x0400 0800. Макросы pico-sdk: QMI_ATRANS2_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x800) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS3 — трансляция адресов XIP 12–16 МБ

Смещение 0x40, адрес 0x400D 0040, после сброса 0x0400 0C00. Макросы pico-sdk: QMI_ATRANS3_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0xC00) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS4 — трансляция адресов XIP 16–20 МБ

Смещение 0x44, адрес 0x400D 0044, после сброса 0x0400 0000. Макросы pico-sdk: QMI_ATRANS4_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x000) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS5 — трансляция адресов XIP 20–24 МБ

Смещение 0x48, адрес 0x400D 0048, после сброса 0x0400 0400. Макросы pico-sdk: QMI_ATRANS5_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x400) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS6 — трансляция адресов XIP 24–28 МБ

Смещение 0x4C, адрес 0x400D 004C, после сброса 0x0400 0800. Макросы pico-sdk: QMI_ATRANS6_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0x800) — Физическая база окна в секторах по 4 КБ.

QMI_ATRANS7 — трансляция адресов XIP 28–32 МБ

Смещение 0x50, адрес 0x400D 0050, после сброса 0x0400 0C00. Макросы pico-sdk: QMI_ATRANS7_…

31302928272625242322212019181716
—SIZE
1514131211109876543210
—BASE
  • SIZE (биты 26:16, чтение и запись, после сброса 0x400) — Размер окна в секторах по 4 КБ; обращение за его пределами — ошибка шины.
  • BASE (биты 11:0, чтение и запись, после сброса 0xC00) — Физическая база окна в секторах по 4 КБ.

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

Как подключить PSRAM к RP2350?

Вторую микросхему подключают к выбору CS1 — это альтернативная функция GPIO, — и её память появляется с адреса 0x1100 0000. Для неё настраивают M1_TIMING, чтение в M1_RFMT и M1_RCMD и запись в M1_WFMT и M1_WCMD; MAX_SELECT ограничивает время активного выбора, как требуют микросхемы PSRAM.

Зачем в QMI трансляция адресов?

Чтобы программа, скомпонованная для адреса 0x1000 0000, выполнялась на месте из любого места флеш-памяти. Регистры ATRANS0–ATRANS7 задают для каждого окна по 4 МБ физическую базу и размер в секторах по 4 КБ; обращение за пределы размера даёт ошибку шины.

Источники

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

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

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

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