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

Регистры RP2350

Регистры периферии RP2350: базовые адреса всех блоков по заголовкам pico-sdk 2.1.1, назначение регистров и полей, тип доступа и значение после сброса. Блоки, одинаковые с RP2040, описаны на его страницах.

RP2350 — следующий чип Raspberry Pi после RP2040, с двумя ядрами Arm Cortex-M33 или RISC-V Hazard3. Карта адресов устроена так же: периферия APB начинается с 0x4000 0000, периферия AHB — DMA, USB, PIO, FIFO HSTX — с 0x5000 0000, SIO — с 0xD000 0000, системные регистры Cortex-M33 (PPB) — с 0xE000 0000 (даташит RP2350, раздел 2.2).

Появились блоки защиты и питания: ACCESSCTRL задаёт права доступа к периферии по шине, OTP на 8 КБ хранит идентификаторы чипа, настройки защиты и ключи, TRNG и SHA256 — генератор случайных чисел и хеш SHA-256, POWMAN управляет стабилизатором ядра, детектором просадки и сбросами, GLITCH_DETECTOR сбрасывает чип при вмешательстве в такты или питание ядра. Флеш-память и PSRAM подключает QMI вместо SSI, а HSTX выводит быстрый поток данных на GPIO12–19. У SIO и PPB есть зеркала SIO_NONSEC и PPB_NONSEC: через них защищённый код видит банк регистров незащищённого режима (раздел 3.1.1).

Блоки UART, SPI, I2C и USB DPRAM совпадают с RP2040 полностью — регистры, поля и значения после сброса одинаковы, другие только базовые адреса, — поэтому ссылки ведут на страницы RP2040. Отличающиеся и новые блоки RP2350 описаны на собственных страницах.

Блоки периферии

Адреса всех блоков

Базовые адреса блоков периферии по файлу addressmap.h pico-sdk. Страницы с описанием регистров есть у блоков со ссылкой; блоки, одинаковые с RP2040, ведут на его страницы; у TBMAN слишком мало регистров для отдельной страницы.

БлокЭкземпляры и адресаРегистров
ACCESSCTRLACCESSCTRL 0x4006 000059
ADCADC 0x400A 00009
BOOTRAMBOOTRAM 0x400E 000011
BUSCTRLBUSCTRL 0x4006 800011
CLOCKSCLOCKS 0x4001 000053
CORESIGHT_TRACECORESIGHT_TRACE 0x5070 00002
DMADMA 0x5000 0000349
GLITCH_DETECTORGLITCH_DETECTOR 0x4015 80006
HSTX_CTRLHSTX_CTRL 0x400C 000011
HSTX_FIFOHSTX_FIFO 0x5060 00002
I2C (как у RP2040)I2C0 0x4009 0000, I2C1 0x4009 800042
IO_BANK0IO_BANK0 0x4002 8000168
IO_QSPIIO_QSPI 0x4003 000032
M33PPB 0xE000 0000313
M33_EPPBEPPB 0xE008 00003
OTPOTP 0x4012 000092
PADS_BANK0PADS_BANK0 0x4003 800051
PADS_QSPIPADS_QSPI 0x4004 00007
PIOPIO0 0x5020 0000, PIO1 0x5030 0000, PIO2 0x5040 000098
PLLPLL_SYS 0x4005 0000, PLL_USB 0x4005 80008
POWMANPOWMAN 0x4010 000060
PSMPSM 0x4001 80004
PWMPWM 0x400A 800068
QMIXIP_QMI 0x400D 000021
RESETSRESETS 0x4002 00003
ROSCROSC 0x400E 800010
SHA256SHA256 0x400F 800010
SIOSIO 0xD000 0000108
SPI (как у RP2040)SPI0 0x4008 0000, SPI1 0x4008 800018
SYSCFGSYSCFG 0x4000 80006
SYSINFOSYSINFO 0x4000 00004
TBMANTBMAN 0x4016 00001
TICKSTICKS 0x4010 800018
TIMERTIMER0 0x400B 0000, TIMER1 0x400B 800019
TRNGTRNG 0x400F 000023
UART (как у RP2040)UART0 0x4007 0000, UART1 0x4007 800022
USBUSBCTRL_REGS 0x5011 000045
USB_DEVICE_DPRAM (как у RP2040)USBCTRL_DPRAM 0x5010 000064
WATCHDOGWATCHDOG 0x400D 800011
XIPXIP_CTRL 0x400C 80007
XIP_AUXXIP_AUX 0x5050 00003
XOSCXOSC 0x4004 80005

Выводы чипа и функции GPIO — на странице RP2350.

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

Совместимы ли регистры UART и SPI у RP2040 и RP2350?

Да: по заголовкам pico-sdk 2.1.1 у блоков UART, SPI и I2C обоих чипов одинаковые регистры, поля, типы доступа и значения после сброса. Отличаются базовые адреса: у RP2350 UART0 по адресу 0x4007 0000, SPI0 — 0x4008 0000, I2C0 — 0x4009 0000.

Где у RP2350 регистры контроллера флеш-памяти?

В блоке QMI по адресу 0x400D 0000: он заменил SSI из RP2040 и подключает к окну XIP с адреса 0x1000 0000 флеш-память и PSRAM. Регистры кеша XIP — в блоке XIP_CTRL, а прямой доступ к FIFO потоковой передачи — в XIP_AUX.

Источники

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

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