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

Регистры XIP_AUX RP2350

Регистры порта XIP_AUX в RP2350: доступ за один такт по шине AHB к потоковой FIFO XIP и к FIFO прямого режима QMI, чтобы DMA забирал данные флеш-памяти, не задерживаясь на медленной шине APB.

Флеш-память обычно больше SRAM, и данные из неё удобно подкачивать DMA в фоне, пока программа выполняется из той же флеш-памяти. Потоковое чтение задают регистры STREAM_ADDR и STREAM_CTR блока XIP_CTRL; прочитанные слова попадают в небольшую FIFO, и DMA забирает их через порт XIP_AUX, не простаивая на последовательной передаче (даташит RP2350, разделы 4.4.3 и 4.4.6).

Потоковое чтение уступает обычным обращениям XIP и после промаха кеша ждёт 9 тактов, поэтому почти не замедляет код во флеш-памяти. Через XIP_AUX доступны и FIFO прямого режима QMI — быстрее, чем через DIRECT_TX и DIRECT_RX на шине APB. Запросы DMA в pico-sdk: DREQ_XIP_STREAM (49) для потоковой FIFO, DREQ_XIP_QMITX (50) и DREQ_XIP_QMIRX (51) для прямого режима.

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

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

РегистрСмещениеНазначениеПосле сброса
XIP_AUX_STREAM0x00Чтение потоковой FIFO XIP0x0000 0000
XIP_AUX_QMI_DIRECT_TX0x04Запись в FIFO передачи прямого режима QMI0x0000 0000
XIP_AUX_QMI_DIRECT_RX0x08Чтение FIFO приёма прямого режима QMI0x0000 0000

XIP_AUX_STREAM — чтение потоковой FIFO XIP

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

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

XIP_AUX_QMI_DIRECT_TX — запись в FIFO передачи прямого режима QMI

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

31302928272625242322212019181716
—NOPUSHOEDWIDTHIWIDTH
1514131211109876543210
DATA
  • NOPUSH (бит 20, запись с побочным действием, после сброса 0x0) — Не класть ответ в FIFO приёма — удобно для команды в начале передачи.
  • 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) — Данные для передачи.

XIP_AUX_QMI_DIRECT_RX — чтение FIFO приёма прямого режима QMI

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

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

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

Как читать флеш-память RP2350 через DMA, не останавливая программу?

Задайте адрес и число слов в STREAM_ADDR и STREAM_CTR блока XIP_CTRL и настройте канал DMA на чтение регистра STREAM порта XIP_AUX (0x5050 0000) по запросу DREQ_XIP_STREAM. Потоковое чтение уступает обычным обращениям XIP, так что код из флеш-памяти продолжает выполняться.

Источники

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

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

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

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