文章目录
- 一、ESP32S3内存地址映射
-
- [ 1、映射框图](# 1、映射框图)
- [ 2、相关概念](# 2、相关概念)
-
- [ 1.Data bus(数据总线):](# 1.Data bus(数据总线):)
- [ 2.Instruction bus(指令总线):](# 2.Instruction bus(指令总线):)
- [ 3.Cache:](# 3.Cache:)
- [ 4.MMU:](# 4.MMU:)
- [ 5.ROM:](# 5.ROM:)
- [ 6.SRAM:](# 6.SRAM:)
- [ 7.GDMA:](# 7.GDMA:)
- [ 8.RTC Slow Memory(0x50000000 段)](# 8.RTC Slow Memory(0x50000000 段))
- [ 9.RTC Fast Memory(0x600FE000 段)](# 9.RTC Fast Memory(0x600FE000 段))
- 二、地址分区详解
-
- [ 1、数据总线地址范围(0x00000000 ~ 0x3FFFFFFF)](# 1、数据总线地址范围(0x00000000 ~ 0x3FFFFFFF))
-
- [ 1. 0x0000_0000 ~ 0x3BFF_FFFF:Reserved 保留区](# 1. 0x0000_0000 ~ 0x3BFF_FFFF:Reserved 保留区)
- [ 2. 0x3C00_0000 ~ 0x3DFF_FFFF 32MB External memory(PSRAM)](# 2. 0x3C00_0000 ~ 0x3DFF_FFFF 32MB External memory(PSRAM))
- [ 3. 0x3E00_0000 ~ 0x3FC7_FFFF:Reserved 保留](# 3. 0x3E00_0000 ~ 0x3FC7_FFFF:Reserved 保留)
- [ 4. 0x3FC8_8000 ~ 0x3FCF_FFFF 480KB Internal memory(SRAM1 SRAM2)](# 4. 0x3FC8_8000 ~ 0x3FCF_FFFF 480KB Internal memory(SRAM1 SRAM2))
- [ 5. 0x3FD0_0000 ~ 0x3FEF_FFFF:Reserved 保留](# 5. 0x3FD0_0000 ~ 0x3FEF_FFFF:Reserved 保留)
- [ 6. 0x3FF0_0000 ~ 0x3FF1_FFFF 128KB Internal memory(ROM1)](# 6. 0x3FF0_0000 ~ 0x3FF1_FFFF 128KB Internal memory(ROM1))
- [ 7. 0x3FF2_0000 ~ 0x3FFF_FFFF:Reserved 保留](# 7. 0x3FF2_0000 ~ 0x3FFF_FFFF:Reserved 保留)
- [ 2、指令总线地址范围(0x40000000 ~ 0x4FFFFFFF)](# 2、指令总线地址范围(0x40000000 ~ 0x4FFFFFFF))
-
- [ 1. 0x4000_0000 ~ 0x4005_FFFF 384KB Internal memory(ROM0 ROM1)](# 1. 0x4000_0000 ~ 0x4005_FFFF 384KB Internal memory(ROM0 ROM1))
- [ 2. 0x4006_0000 ~ 0x4036_FFFF:Reserved 保留](# 2. 0x4006_0000 ~ 0x4036_FFFF:Reserved 保留)
- [ 3. 0x4037_0000 ~ 0x403D_FFFF 448KB Internal memory(SRAM0 SRAM1)](# 3. 0x4037_0000 ~ 0x403D_FFFF 448KB Internal memory(SRAM0 SRAM1))
- [ 4. 0x403E_0000 ~ 0x41FF_FFFF:Reserved 保留](# 4. 0x403E_0000 ~ 0x41FF_FFFF:Reserved 保留)
- [ 5. 0x4200_0000 ~ 0x43FF_FFFF 32MB External memory(Flash 虚拟指令映射)](# 5. 0x4200_0000 ~ 0x43FF_FFFF 32MB External memory(Flash 虚拟指令映射))
- [ 6. 0x4400_0000 ~ 0x4FFFF_FFFF:Reserved 缓存预留区](# 6. 0x4400_0000 ~ 0x4FFFF_FFFF:Reserved 缓存预留区)
- [ 3、共享总线地址范围(0x50000000 ~ 0xFFFFFFFF)](# 3、共享总线地址范围(0x50000000 ~ 0xFFFFFFFF))
-
- [ 1. 0x5000_0000 ~ 0x5000_1FFF 8KB Internal memory (RTC SLOW Memory)](# 1. 0x5000_0000 ~ 0x5000_1FFF 8KB Internal memory (RTC SLOW Memory))
- [ 2. 0x5000_2000 ~ 0x5FFF_FFFF:Reserved 保留](# 2. 0x5000_2000 ~ 0x5FFF_FFFF:Reserved 保留)
- [ 3. 0x6000_0000 ~ 0x600D_0FFF 836KB Peripherals 外设寄存器区](# 3. 0x6000_0000 ~ 0x600D_0FFF 836KB Peripherals 外设寄存器区)
- [ 4. 0x600D_1000 ~ 0x600F_DFFF:Reserved 保留](# 4. 0x600D_1000 ~ 0x600F_DFFF:Reserved 保留)
- [ 5. 0x600F_E000 ~ 0x600F_FFFF 8KB Internal memory (RTCFAST Memory)](# 5. 0x600F_E000 ~ 0x600F_FFFF 8KB Internal memory (RTCFAST Memory))
- [ 6. 0x6010_0000 ~ 0xFFFFFFFF:全保留,禁止访问,触发硬件崩溃](# 6. 0x6010_0000 ~ 0xFFFFFFFF:全保留,禁止访问,触发硬件崩溃)
- 三、功能分区详解
-
- [ 1、PSRAM](# 1、PSRAM)
- [ 2、Internal ROM 0](# 2、Internal ROM 0)
- [ 3、Internal ROM 1](# 3、Internal ROM 1)
- [ 4、Internal SRAM 0 (DRAM 数据内存)](# 4、Internal SRAM 0 (DRAM 数据内存))
- [ 5、Internal SRAM 1 (IRAM 指令内存)](# 5、Internal SRAM 1 (IRAM 指令内存))
- [ 6、Internal SRAM 2 (双核共享 RAM)](# 6、Internal SRAM 2 (双核共享 RAM))
- [ 7、RTC FAST Memory](# 7、RTC FAST Memory)
- [ 8、RTC SLOW Memory](# 8、RTC SLOW Memory)
- [ 9、Flash(虚拟指令映射区)](# 9、Flash(虚拟指令映射区))
- 四、外设寄存器区
一、ESP32S3内存地址映射
1、映射框图

2、相关概念
1.Data bus(数据总线):
仅用于读写变量、缓冲区、外设寄存器,不能取指令执行代码;
2.Instruction bus(指令总线):
仅用于 CPU 读取程序代码运行,仅支持 4 字节对齐数据访问;
3.Cache:
CPU 统一缓存,数据 / 指令总线访问都会经过缓存,提升读写速度。
4.MMU:
外部内存(PSRAM/Flash)地址映射硬件,实现虚拟地址访问外设存储。
5.ROM:
0x40000000 固化固件,仅指令总线读取;
6.SRAM:
片内 IRAM/DRAM/ 共享 RAM,CPU 高速读写;
7.GDMA:
直接访问外设、PSRAM、RTC 内存,硬件搬运数据,无需 CPU 介入;
8.RTC Slow Memory(0x50000000 段)
ULP 超低功耗协处理器专用,主 CPU 也可读写,超低功耗场景存放传感器数据。
9.RTC Fast Memory(0x600FE000 段)
主 CPU 高速读写,深度睡眠不掉电,唤醒逻辑专用。
二、地址分区详解
1、数据总线地址范围(0x00000000 ~ 0x3FFFFFFF)
1. 0x0000_0000 ~ 0x3BFF_FFFF:Reserved 保留区
灰色不可使用,访问触发硬件异常、CPU 死机。
2. 0x3C00_0000 ~ 0x3DFF_FFFF 32MB External memory(PSRAM)
总线:Data bus;
对应外接 SPI PSRAM,存放大缓冲区、图片帧缓存;
代码修饰:PSRAM_ATTR 全局数组分配到此;
仅硬件焊接 PSRAM、menuconfig 开启后才能访问。
3. 0x3E00_0000 ~ 0x3FC7_FFFF:Reserved 保留
4. 0x3FC8_8000 ~ 0x3FCF_FFFF 480KB Internal memory(SRAM1 SRAM2)
总线:Data bus;
0x3FC8_8000 0x3FCE_FFFF 416 Internal SRAM 1:
CPU可以通过数据或指令总线访问。
用于Icache,缓存外部存储器指令数据,承载绝大多数运行时数据:
.data 初始化全局变量。
.bss 未初始化全局 / 静态变量。
FreeRTOS 任务栈、队列、信号量、事件组。
系统堆 malloc 默认分配池。
0x3FCF_0000 0x3FCF_FFFF 64 Internal SRAM 2:
CPU只可以通过数据总线访问。
用于CPU0/CPU1 双核高速互通数据,并发访问必须加互斥锁;
作用:
部分双核临时交换缓冲;
RTC Fast 内存配套数据缓存;
GDMA 本地临时缓冲区;
系统底层预留内存,用户少量自定义静态缓冲区可放置此处。
5. 0x3FD0_0000 ~ 0x3FEF_FFFF:Reserved 保留
6. 0x3FF0_0000 ~ 0x3FF1_FFFF 128KB Internal memory(ROM1)
总线:Data bus;
内置 AES/SHA/CRC 加密算法、浮点库、底层硬件驱动,节省 Flash 固件体积。
7. 0x3FF2_0000 ~ 0x3FFF_FFFF:Reserved 保留
2、指令总线地址范围(0x40000000 ~ 0x4FFFFFFF)
1. 0x4000_0000 ~ 0x4005_FFFF 384KB Internal memory(ROM0 ROM1)
总线:Instruction bus,只读;
芯片出厂固化一级引导、USB 底层、JTAG 固件、算法库,不可修改。
0x4000_0000 0x4003_FFFF 256KB Internal ROM 0:
芯片上电第一执行代码(一级 ROM Bootloader);
初始化 CPU、时钟、SPI Flash、USB-JTAG 外设;
读取分区表并加载二级 bootloader 到 IRAM;
内置底层下载协议、安全启动基础逻辑。
0x4004_0000 0x4005_FFFF 128KB Internal ROM 1:
内置 AES/SHA/CRC、随机数、浮点运算、数学标准库、底层硬件驱动;
用户代码可直接调用 ROM 接口,节省 Flash 固件空间;
可通过数据总线镜像地址读取 ROM 内置常量表。
2. 0x4006_0000 ~ 0x4036_FFFF:Reserved 保留
3. 0x4037_0000 ~ 0x403D_FFFF 448KB Internal memory(SRAM0 SRAM1)
总线:Instruction bus;
IRAM_ATTR 中断函数、高频实时代码存放区,零等待高速运行;
二级 bootloader 运行于此,引导完成后内存被应用覆盖。
0x4037_0000 0x4037_7FFF 32KB Internal SRAM 0:
中断向量表存放区、硬件紧急异常处理入口;
二级 bootloader 启动代码优先占用此段,系统底层硬件中断调度专用。
0x4037_8000 0x403D_FFFF 416KB Internal SRAM 1:
存放 IRAM_ATTR 修饰的中断服务函数、高频实时循环代码;
二级 bootloader 业务运行代码;
CPU 零等待取指,避免 Flash 访问延迟卡顿。
4. 0x403E_0000 ~ 0x41FF_FFFF:Reserved 保留
5. 0x4200_0000 ~ 0x43FF_FFFF 32MB External memory(Flash 虚拟指令映射)
总线:Instruction bus;
普通业务函数、const常量字符串存放区,MMU 硬件自动映射 SPI Flash;
不拷贝到 RAM,CPU 取指时实时读取 Flash,速度慢于 IRAM。
6. 0x4400_0000 ~ 0x4FFFF_FFFF:Reserved 缓存预留区
3、共享总线地址范围(0x50000000 ~ 0xFFFFFFFF)
1. 0x5000_0000 ~ 0x5000_1FFF 8KB Internal memory (RTC SLOW Memory)
ULP 超低功耗协处理器专属运行 / 数据内存,ULP 程序、传感器采集缓冲区存放于此;
深度睡眠下不掉电,唤醒后数据保留,无需重新初始化;
存放低功耗场景参数、唤醒计数、传感器阈值;
主 CPU 正常运行时也可读写,读写速度低于 RTC Fast Memory。
2. 0x5000_2000 ~ 0x5FFF_FFFF:Reserved 保留
3. 0x6000_0000 ~ 0x600D_0FFF 836KB Peripherals 外设寄存器区
总线:Data/Instruction bus;
包含 GPIO、UART、SPI、USB Serial/JTAG (0x60090000)、I2S 等全部外设寄存器;
GDMA 可直接操作本段地址,无需 CPU 中转。
4. 0x600D_1000 ~ 0x600F_DFFF:Reserved 保留
5. 0x600F_E000 ~ 0x600F_FFFF 8KB Internal memory (RTCFAST Memory)
深度睡眠、休眠模式下持续供电,内存数据不丢失;
主 CPU 高速读写,存放唤醒标志、运行计数、低功耗配置参数;
ULP 协处理器无法访问,仅主 CPU 操作;
适合存放少量关键状态标记,唤醒后直接读取无需重新初始化。
6. 0x6010_0000 ~ 0xFFFFFFFF:全保留,禁止访问,触发硬件崩溃
三、功能分区详解
1、PSRAM
地址:0x3C00_0000~ 0x3DFF_FFFF
大小:32MB
类型:片外扩展 SPI RAM
访问总线:Data bus(仅数据访问,不可跑代码)
读写属性:可读可写
核心作用:
存放超大缓冲区、图片帧缓存、音视频数据、大数组;
使用PSRAM_ATTR分配,缓解片内 DRAM 内存压力,需硬件焊接 PSRAM 并在 menuconfig 开启。
2、Internal ROM 0
地址:0x4000_0000~ 0x4003_FFFF
大小:256KB
类型:片内固化只读 ROM
访问总线:Instruction bus(仅取指令执行)
读写属性:只读(出厂固化,无法擦写)
核心作用:
芯片上电一级 ROM 引导程序;
初始化 CPU、SPI Flash、USB-JTAG 外设;
读取分区表、加载二级 bootloader;
内置底层硬件基础驱动。
3、Internal ROM 1
地址:0x4004_0000~ 0x4005_FFFF
大小:128KB
类型:片内固化只读 ROM
访问总线:Instruction bus;数据镜像地址 0x3FF0_8000~0x3FF1_FFFF(Data bus)
读写属性:只读
核心作用:
内置 AES/SHA/CRC 加密算法、浮点运算库、标准数学函数;
用户代码可直接调用,节省 Flash 固件存储空间。
4、Internal SRAM 0 (DRAM 数据内存)
地址:0x3FC8_8000~ 0x3FCF_FFFF
大小:480KB
类型:片内读写 SRAM
访问总线:Data bus(仅数据,不能执行代码)
读写属性:可读可写
核心作用:
程序核心数据内存;
存放全局 / 静态变量、FreeRTOS 任务栈、系统堆、队列 / 信号量 / 事件组、函数局部栈;
内存溢出、栈溢出、内存泄漏均发生在此区域。
5、Internal SRAM 1 (IRAM 指令内存)
地址:0x4037_0000~ 0x403D_FFFF
大小:448KB
类型:片内读写 SRAM
访问总线:Instruction bus(仅取指令运行)
读写属性:可读可写
核心作用:
IRAM_ATTR修饰的中断函数、高频实时循环代码;
二级 bootloader 完整加载到此运行;
零等待高速执行,避免 Flash 访问卡顿。
6、Internal SRAM 2 (双核共享 RAM)
地址:0x3FF0_0000~ 0x3FF0_7FFF
大小:32KB
类型:片内共享读写 SRAM
访问总线:Data bus
读写属性:可读可写
核心作用:
CPU0 与 CPU1 双核高速交互数据;
并发读写必须搭配互斥锁 / 信号量,防止数据错乱。
7、RTC FAST Memory
地址:0x600F_E000~ 0x600F_FFFF
大小:8KB
类型:RTC 域不掉电 SRAM
访问总线:Data/Instruction bus 双总线均可访问
读写属性:可读可写
核心作用:
深度睡眠供电不丢失;
主 CPU 高速读写,存放唤醒标志、计数、低功耗配置参数。
8、RTC SLOW Memory
地址:0x3FF0_8000~ 0x3FF1_FFFF
大小:96KB
类型:ROM1 数据镜像(ULP 可访问)
访问总线:Data bus(ULP 协处理器可访问)
读写属性:只读(物理为 ROM 镜像,禁止写入)
核心作用:
ULP 超低功耗协处理器读取内置常量;
非用户可读写内存,仅底层硬件调用。
9、Flash(虚拟指令映射区)
地址:0x4200_0000~ 0x43FF_FFFF
大小:32MB
类型:片外 SPI Flash MMU 虚拟映射
访问总线:Instruction bus
读写属性:只读(仅 esptool/bootloader 可烧录写入)
核心作用:
存放普通业务函数、const常量、字符串字面量;
CPU 取指时 MMU 自动转发 SPI 读取,不占用片内 IRAM/DRAM。
四、外设寄存器区
地址区间:0x6000_0000 ~ 0x600D_0FFF,总大小 836KB,双总线(Data/Instruction bus)均可访问,可读可写。
