0x20000000 是什么?RP2040 地址映射表背后的内存管理逻辑
系统特性和结构简介
1.总线互联结构
总线互联结构是 芯片内部的 “数据交通系统 —— 它决定了各功能模块(内核、内存、外设)之间如何传输数据与指令,是影响芯片运行效率的核心架构之一。了解它,能清楚芯片 “如何避免数据传输拥堵”“不同模块的通信优先级”,这是理解芯片性能瓶颈与资源调度逻辑的关键。

这个图呈现的是 RP2040 的 “内部通信路网”,核心逻辑如下:
- AHB-Lite 主机(上游端口:是 “数据请求的发起方”,对应 4 个 “交通发起端”—— 两个处理器内核(Core0、Core1)、DMA 的读端口、DMA 的写端口,它们负责向其他模块发送 “读 / 写数据” 的请求。
- AHB-Lite Crossbar(总线枢纽:是 “交通调度中心”,把 4 个主机的请求,分配到 10 个 “下游端口”(即数据要送达的模块);它每周期最多能完成 4 次 32 位数据的传输,保证了数据交互的效率。
- 下游端口(目的地模块:是 “数据请求的接收方”,分三类:
- 存储类模块:包括 ROM、Flash XIP,以及拆分后的 SRAM0~5(每个 SRAM 单独占一个端口)—— 把 SRAM 拆成多个端口,是为了 “多模块并行访问”(比如 Core0 访问 SRAM0 时,DMA 可以同时访问 SRAM1),避免存储资源的访问拥堵。
- 高速外设类模块:包括 PIO0、PIO1、USB 等 “Fast AHB-Lite 外设”,它们直接连接到总线枢纽,适配高速数据传输的需求。
- 低速外设类模块:包括 UART、SPI、I2C 等外设,它们通过 “APB 桥” 连接到总线枢纽 ——APB 桥相当于 “慢速车道转接器”,让低速外设的通信不影响高速模块的传输效率。
2.地址映射
要理解地址映射,首先明确其核心定义:地址映射是芯片为内部所有资源(ROM、SRAM、外设寄存器等)分配唯一 “数字地址” 的规则—— 相当于给芯片里的每一块存储、每一个功能模块都编了 “门牌号”,内核、DMA 等模块通过这个 “门牌号”(地址),就能精准找到并访问对应的资源。
之所以需要地址映射,是因为芯片的运算 / 控制模块(如双核、DMA)只能通过 “地址” 来定位资源:比如内核要读取 SRAM 里的数据、要配置 UART 的通信参数,必须先通过对应的地址找到 SRAM 的存储区域、UART 的控制寄存器 —— 没有地址映射,这些模块就像 “没门牌号的房间”,根本无法被定位和访问。地址映射的本质是给资源建立 “可访问的唯一标识”,是芯片内部通信的基础规则。
而地址映射与之前提到的 “SRAM 分区” 是深度配合的 —— 以 RP2040 的 SRAM 为例:之前讲过 SRAM 物理上被分成 6 个 bank(SRAM0~5),目的是支持多模块 “并行访问”(比如 Core0 访问 SRAM0 时,DMA 可以同时访问 SRAM1);而地址映射表则给这 6 个 bank 分配了独立的地址段(比如 SRAM0_BASE 是 0x21000000,SRAM1_BASE 是 0x21010000)。
这样一来,当 Core0 访问 “0x21000000 开头的地址” 时,实际对应物理上的 SRAM0;DMA 访问 “0x21010000 开头的地址” 时,对应物理上的 SRAM1—— 地址映射让不同模块通过 “不同门牌号” 访问 “不同物理分区”,既实现了资源的精准定位,又配合 SRAM 的物理分区实现了 “并行访问”,避免了模块间的资源冲突,提升了数据访问效率。
RP2040 地址映射如下:







IOPORT Peripherals:

从图中的地址映射表也能看到:
- 不同类型的资源被划分到不同的地址区间(比如 ROM 是 0x00000000 开头、SRAM 是 0x20000000 开头、外设是 0x40000000 开头),方便模块区分 “要访问的是存储还是外设”;
- 同一类资源的不同子模块(比如 SRAM0~5),地址段是连续但独立的,既保证了存储的整体性,又支持了分区访问。
总线互联结构是 **芯片内部的 “数据交通系统** —— 它决定了各功能模块(内核、内存、外设)之间如何传输数据与指令,是影响芯片运行效率的核心架构之一。了解它,能清楚芯片 “如何避免数据传输拥堵”“不同模块的通信优先级”,这是理解芯片性能瓶颈与资源调度逻辑的关键。