存储器组织

简介

芯片集成了几个不同的地址区域:ROM 存放出厂固化的启动代码,SRAM 作为程序运行的主工作内存,Flash 提供固件与持久化数据的非易失性存储,DRAM(PSRAM/DDR)则为大容量扩展存储场景提供支持。此外,芯片通过内存映射将各种外设挂载至总线系统,使得可以通过外设寄存器区域访问外设。所有这些资源均映射在统一的 4GB 线性地址空间中,数据遵循小端序 (Little-Endian) 格式编码。

地址空间分为多个主块,如下表和图所示。所有未分配给片上存储器和外设的区域都被视为 RSVD (保留区域)。

存储器布局

下表列出了各芯片的存储器地址分配。

RTL8721Dx:

基地址

结束地址

大小 (bytes)

描述

类型

TrustZone

0x0000_0000

0x0007_FFFF

512K

KM4 Internal ROM

ROM

-

0x0000_0000

0x0007_FFFF

512K

KM0 Internal ROM

ROM

-

0x0008_0000

0x000F_FFFF

512K

RSVD

-

-

0x0010_0000

0x07FF_FFFF

127M

RSVD

-

-

0x0800_0000

0x0FFF_FFFF

128M

SPI Flash

Flash

-

0x1000_0000

0x1FFF_FFFF

256M

RSVD

-

-

0x2000_0000

0x2007_FFFF

512K

SRAM

SRAM

-

0x2008_0000

0x200F_FFFF

512K

Shared SRAM

SRAM

-

0x2010_0000

0x2FFF_FFFF

255M

RSVD

-

-

0x3000_0000

0x3FFF_FFFF

256M

TrustZone secure address (SRAM)

-

Secure

0x4000_0000

0x40FF_FFFF

16M

High-Speed peripherals group

Peripherals

-

0x4100_0000

0x41FF_FFFF

16M

Low-Speed peripherals group

Peripherals

-

0x4200_0000

0x4FFF_FFFF

224M

RSVD

-

-

0x5000_0000

0x5FFF_FFFF

256M

TrustZone secure address (Peripherals)

-

Secure

0x6000_0000

0x6FFF_FFFF

256M

PSRAM

DRAM

-

0x7000_0000

0x7FFF_FFFF

256M

TrustZone secure address (PSRAM)

-

Secure

0x8000_0000

0xFFFF_FFFF

2048M

RSVD

-

-

备注

  • 这是地址空间的划分,并不代表实际的物理占用。

  • TrustZone 功能仅适用于 KM4,因此安全地址空间只能从 KM4 的安全世界以及其他具有安全能力的主机访问。

  • 地址空间的安全属性由该地址的 bit[28] 决定。

  • 除指定的各处理器专用地址空间外,KM0 和 KM4 可以直接访问所有其他地址空间

下图为对应的内存地址空间示意图:

RTL8721Dx:
../../_images/memory_map_rtl8721dx.svg

存储器映射

下表列出了芯片中可用的存储器映射和寄存器边界地址。

RTL8721Dx:

端口 ID

端口名称

安全属性

基地址

结束地址

大小 (bytes)

S0

SPIC_AUTO_MODE

Non-secure

0x0800_0000

0x0FFF_FFFF

128M

S1

HS SRAM0

MPC

0x2000_0000

0x2007_FFFF

512K

S2

HS_SHARE_SRAM

MPC

0x2008_0000

0x200F_FFFF

512K

S3

WIFI_REG

PPC

0x4000_0000

0x4007_FFFF

512K

S3

BT_REG

PPC

0x4008_0000

0x400F_FFFF

512K

S3

AES_REG

PPC

0x4010_0000

0x4010_7FFF

32K

S3

SHA_REG

PPC

0x4010_8000

0x4010_FFFF

32K

S3

GDMA0_REG

PPC

0x4011_0000

0x4011_7FFF

32K

S3

PPE_REG

PPC

0x4011_8000

0x4011_FFFF

32K

S3

SDIO_REG

PPC

0x4012_0000

0x4012_3FFF

16K

S3

SPI0_REG

PPC

0x4012_4000

0x4012_4FFF

4K

S3

SPI1_REG

PPC

0x4012_5000

0x4012_5FFF

4K

S3

PSRAM_PHY_REG

PPC

0x4012_6000

0x4012_6FFF

4K

S3

PSRAM_REG

PPC

0x4012_7000

0x4012_7FFF

4K

S3

SPI_FLASH_CTRL

PPC

0x4012_8000

0x4012_8FFF

4K

S3

QSPI_REG

PPC

0x4012_9000

0x4012_9FFF

4K

S3

SPORT0_REG

PPC

0x4012_A000

0x4012_AFFF

4K

S3

SPORT1_REG

PPC

0x4012_B000

0x4012_BFFF

4K

S3

USB_REG

PPC

0x4012_C000

0x4017_FFFF

336K

S4

OTPC_REG

PPC

0x4100_0000

0x4100_7FFF

32K

S4

SYSTEM_CTRL

PPC

0x4100_8000

0x4100_BFFF

16K

S4

PINMUX_REG

PPC

0x4100_8800

0x4100_89FF

512

S4

RTC_REG

PPC

0x4100_8A00

0x4100_8BFF

512

S4

IWDG_REG

PPC

0x4100_8C00

0x4100_8CFF

256

S4

WDG0_REG

PPC

0x4100_8D00

0x4100_8D3F

64

S4

WDG1_REG

PPC

0x4100_8D40

0x4100_8D7F

64

S4

WDG2_REG

PPC

0x4100_8D80

0x4100_8DBF

64

S4

RETENTION_RAM

PPC

0x4100_8E00

0x4100_8FFF

512

S4

UART0_REG

PPC

0x4100_C000

0x4100_CFFF

4K

S4

UART1_REG

PPC

0x4100_D000

0x4100_DFFF

4K

S4

UART2_REG

PPC

0x4100_E000

0x4100_EFFF

4K

S4

LOGUART_REG

PPC

0x4100_F000

0x4100_FFFF

4K

S4

GPIO_REG

PPC

0x4101_0000

0x4101_0FFF

4K

S4

ADC_REG

PPC

0x4101_1000

0x4101_17FF

2K

S4

CMP_REG

PPC

0x4101_1800

0x4101_1FFF

2K

S4

CTC_REG

PPC

0x4101_2000

0x4101_2FFF

4K

S4

KSCAN_REG

PPC

0x4101_3000

0x4101_3FFF

4K

S4

IPC0_REG

PPC

0x4101_4000

0x4101_47FF

2K

S4

IPC1_REG

PPC

0x4101_4800

0x4101_4FFF

2K

S4

DEBUGTIMER_REG

PPC

0x4101_5000

0x4101_5FFF

4K

S4

PMC_TIMER_REG

PPC

0x4101_6000

0x4101_6FFF

4K

S4

TIMER0_REG

PPC

0x4101_7000

0x4101_71FF

512

S4

TIMER1_REG

PPC

0x4101_7200

0x4101_73FF

512

S4

TIMER2_REG

PPC

0x4101_7400

0x4101_75FF

512

S4

TIMER3_REG

PPC

0x4101_7600

0x4101_77FF

512

S4

TIMER4_REG

PPC

0x4101_7800

0x4101_79FF

512

S4

TIMER5_REG

PPC

0x4101_7A00

0x4101_7BFF

512

S4

TIMER6_REG

PPC

0x4101_7C00

0x4101_7DFF

512

S4

TIMER7_REG

PPC

0x4101_7E00

0x4101_7FFF

512

S5

TIMER8_REG

PPC

0x4110_0000

0x4110_01FF

512

S5

TIMER9_REG

PPC

0x4110_0200

0x4110_03FF

512

S5

TIMER10_REG

PPC

0x4110_0400

0x4110_05FF

512

S5

TIMER11_REG

PPC

0x4110_0600

0x4110_07FF

512

S5

TRNG_REG

PPC

0x4110_1000

0x4110_1FFF

4K

S5

RXI300M4_REG

PPC

0x4110_2000

0x4110_3FFF

8K

S5

RSIP_REG

PPC

0x4110_4000

0x4110_4FFF

4K

S5

LEDC_REG

PPC

0x4110_5000

0x4110_5FFF

4K

S5

AUDIO_REG

PPC

0x4110_6000

0x4110_6FFF

4K

S5

IR_REG

PPC

0x4110_7000

0x4110_7FFF

4K

S5

I2C0_REG

PPC

0x4110_8000

0x4110_9FFF

8K

S5

I2C1_REG

PPC

0x4110_A000

0x4110_BFFF

8K

S6

PSRAM

MPC

0x6000_0000

0x6FFF_FFFF

256M

ROM

ROM 出厂固化,包含 Boot ROM 启动代码,不可修改。一般来说,每个 CPU 拥有物理独立的 ROM,它仅能被各个 CPU 自己访问,以保证启动安全性与核间隔离。也有的芯片有共享 ROM,可以被所有 CPU 访问。

RTL8721Dx:

ROM 地址空间:0x0000_0000 – 0x0007_FFFF。

  • KM4:288KB ITCM ROM

  • KM0:160KB ITCM ROM

TCM

TCM(紧耦合存储器)与 CPU 直接相连,提供最低的访问延迟,适用于对实时性要求严格的任务。它由部分或者全部禁用 I-Cache/D-Cache 后复用而来。同一块区域 Cache 与 TCM 模式二选一,不能同时使用。

RTL8721Dx:

不支持。

SRAM

片上 SRAM 是程序运行的主工作内存,用于系统堆栈、动态内存分配和应用数据。部分 SRAM 区域与 Wi-Fi/BT 协议栈共享,启用相应功能后该区域将被协议栈占用,不再可用作通用 SRAM。

RTL8721Dx:

片上 SRAM 从 0x2000_0000 开始,由两个块组成:

  • 用于系统堆和应用程序的通用 512KB 连续 SRAM,连接到 S1。

  • 专用的 160KB SRAM,其中 40KB 与 Wi-Fi 共享,120KB 与 BT 共享,连接到 S2。如果用户应用程序使用 Wi-Fi 功能或 BT 功能,相应的 SRAM 将被占用,不能再用作通用 SRAM。

所有 SRAM 均支持字节/半字/全字(8/16/32 位)访问。支持通过 PMU 启用或禁用以节省功耗,进入睡眠模式时可切换至保持模式以快速唤醒。

Flash

Flash 是存储固件代码与用户数据的非易失性存储介质,断电后数据不丢失。Flash 存储器由 SPI Flash 控制器和 Flash 存储器阵列模块组成,控制器充当系统总线与 Flash 器件之间的接口,实现擦除/编程操作及读写保护机制,并通过指令预取和缓存行系统加速代码执行速度。

RTL8721Dx:

SPI Flash 控制器支持单/双/四线 SPI NOR Flash,最高 100MHz SDR。

DRAM

部分芯片集成了堆叠式高速 DRAM(DDR 或 PSRAM),用于提供大容量扩展存储空间,适用于音视频处理、图像传输等需要较大数据缓冲区的应用场景。不支持 DRAM 的芯片型号请参考对应 tab 的说明。

PSRAM

PSRAM(伪静态 RAM)基于 HyperBus 接口,采用双数据率(DDR)传输。其内部刷新逻辑对主机透明,主机无需管理刷新操作,使用体验与 SRAM 类似。

RTL8721Dx:

支持 DDR HyperBus PSRAM。

  • 时钟频率:高达 200MHz

  • 8 位 I/O

  • 支持半睡眠模式和深度断电模式

DDR

DDR 接口采用双倍数据速率同步技术,每个时钟周期在 DQ 信号上传输两个数据字节,可实现高速读写吞吐量。

RTL8721Dx:

不支持。