C2000 的内存映射表可以简单分成几类:RAM、Flash、外设寄存器、中断向量表、CLA 区域、启动 ROM、安全区和保留区

从 STM32 转到 C2000 时,最重要的是先记住:
程序主要放 Flash,变量和栈放 RAM,外设寄存器在 Peripheral Frame,外设中断看 PIE Vector。


1. 内存区域总表

地址范围 名称 作用 速记
0x000000 ~ 0x000040 M0 Vector RAM CPU 基础中断向量表 VMAP=0 时使用
0x000000 ~ 0x000400 M0 SARAM 1K×16 片内高速 RAM 可放变量、栈、小段代码
0x000400 ~ 0x000800 M1 SARAM 1K×16 片内高速 RAM 可放变量、栈、小段代码
0x000800 ~ 0x002000 Peripheral Frame 0 外设寄存器区 不是 RAM
0x000D00 ~ 0x000E00 PIE Vector RAM 外设中断向量表 ADC、PWM、SCI 等中断常用
0x001400 ~ 0x001480 CLA Registers CLA 控制寄存器 用 CLA 时关注
0x001480 ~ 0x001500 CLA-to-CPU Message RAM CLA 发数据给 CPU CLA 通信区
0x001500 ~ 0x001580 CPU-to-CLA Message RAM CPU 发数据给 CLA CLA 通信区
0x002000 ~ 0x006000 Reserved 保留区 不要用
0x006000 ~ 0x008000 Peripheral Frame 1/2/3 外设寄存器区 Protected,常需 EALLOW/EDIS
0x008000 ~ 0x008800 L0 SARAM 2K×16 高速 RAM 可放数据或代码,Dual-Mapped
0x008800 ~ 0x008C00 L1 DPSARAM 1K×16 RAM 可作 CLA Data RAM 0
0x008C00 ~ 0x009000 L2 DPSARAM 1K×16 RAM 可作 CLA Data RAM 1
0x009000 ~ 0x00A000 L3 DPSARAM 4K×16 RAM 可作 CLA Program RAM
0x00A000 ~ 0x3D7800 Reserved 保留区 不要用
0x3D7800 ~ 0x3D7C00 User OTP 一次性可编程区 新手不要随便写
0x3D7C80 ~ 0x3D7CC0 Calibration Data 出厂校准数据 不要擦,不要改
0x3D7CC0 ~ 0x3D7CE0 Get_mode function 启动模式判断函数 Boot ROM 使用
0x3D7E80 ~ 0x3D7EB0 PARTID 芯片型号/ID 信息 一般只读
0x3D7EB0 ~ 0x3D7EC0 Calibration Data 出厂校准数据 不要擦,不要改
0x3D7EC0 ~ 0x3E8000 Reserved 保留区 不要用
0x3E8000 ~ 0x3F7FF8 FLASH 主程序存储区 程序主要放这里
0x3F7FF8 ~ 0x3F8000 128-Bit Password 代码安全密码区 不能乱写,可能锁芯片
0x3F8000 ~ 0x3F8800 L0 SARAM 高地址映射 L0 RAM 的另一映射地址 与低地址 L0 是同一块
0x3F8800 ~ 0x3FE000 Reserved 保留区 不要用
0x3FE000 ~ 0x3FFFC0 Boot ROM TI 固化启动程序 用户不能改
0x3FFFC0 ~ 0x400000 Vector CPU 基础向量表 VMAP=1 时使用

2. 分类速记

类型 包含区域 作用
片内 RAM M0、M1、L0、L1、L2、L3 放变量、栈、RAM 运行代码
程序存储区 FLASH 用户程序主要存放位置
外设寄存器区 Peripheral Frame 0/1/2/3 配置 GPIO、ADC、PWM、SCI 等外设
中断向量区 M0 Vector、PIE Vector、Vector 存放中断入口地址
CLA 相关区 CLA Registers、Message RAM、L1/L2/L3 CLA 控制、通信、程序和数据
启动相关区 Boot ROM、Get_mode function 上电启动和启动模式判断
安全相关区 Password、User OTP、Secure Zone 代码保护和一次性配置
保留区 Reserved 不要使用

3. 重点区域说明

FLASH

0x3E8000 ~ 0x3F7FF8

这是用户程序最主要的存储区域,类似 STM32 的内部 Flash。

常用于存放:

内容 说明
程序代码 主程序、函数
const 常量 固定参数、查表数据
初始化数据 上电后需要拷贝到 RAM 的数据

SARAM

包括 M0、M1、L0、L1、L2、L3。

这些是片内 RAM,速度快,可用于:

用途 说明
全局变量 普通运行数据
函数调用、局部变量
RAM 运行代码 对速度要求高的函数
CLA 数据/程序 使用 CLA 时分配给 CLA

Peripheral Frame

Peripheral Frame 是外设寄存器区,类似 STM32 的外设寄存器地址空间。

常见外设寄存器包括:

外设 示例
GPIO IO 输入输出配置
ADC 采样配置、中断配置
ePWM PWM 周期、占空比、触发
SCI 串口通信
SPI SPI 通信
I2C I2C 通信
CAN CAN 通信

Protected 的寄存器,写入前通常需要:

EALLOW;
// 写受保护寄存器
EDIS;

PIE Vector RAM

0x000D00 ~ 0x000E00

PIE Vector RAM 是外设中断向量表。

C2000 的外设中断一般不是直接进 CPU,而是先经过 PIE 模块。

中断路径可以记成:

外设中断 → PIE → CPU INTx → PIE Vector Table → ISR

常见写法:

EALLOW;
PieVectTable.ADCA1_INT = &adca1_isr;
PieVectTable.EPWM1_INT = &epwm1_isr;
EDIS;

中断函数末尾通常需要清 PIE ACK:

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

M0 Vector、PIE Vector、Vector 的区别

名称 作用 速记
M0 Vector CPU 基础中断向量表 VMAP=0 时使用
PIE Vector 外设中断向量表 ADC、PWM、SCI 等常用
Vector 高地址 CPU 基础向量表 VMAP=1 时使用

简单记法:

CPU 基础中断:看 M0 Vector / Vector
外设中断:看 PIE Vector

CLA 区域

CLA 是 C2000 的控制算法协处理器,常用于电机控制、数字电源等实时控制场景。

区域 作用
CLA Registers CLA 控制寄存器
CLA-to-CPU Message RAM CLA 发数据给 CPU
CPU-to-CLA Message RAM CPU 发数据给 CLA
L1 DPSARAM CLA Data RAM 0
L2 DPSARAM CLA Data RAM 1
L3 DPSARAM CLA Program RAM

不用 CLA 时,可以先把这些区域当作普通 RAM 理解,但工程链接文件要配置正确。


4. 从 STM32 角度类比

STM32 概念 C2000 对应概念
内部 Flash FLASH
SRAM M0/M1/L0/L1/L2/L3 SARAM
外设寄存器区 Peripheral Frame
NVIC PIE + CPU INTx
中断向量表 CPU Vector + PIE Vector
System Memory Bootloader Boot ROM
Option Bytes / 读保护 Password / Secure Zone / OTP
出厂校准值 Calibration Data
Device ID PARTID

5. 最容易踩坑的地方

说明
Reserved 区域不要用 不要放代码、变量,也不要主动访问
OTP 不要随便写 一次性可编程,写错难恢复
Password 区不要乱动 可能导致芯片被锁,调试器无法访问
Calibration Data 不要擦 里面可能有出厂校准参数
Dual-Mapped 不是两块 RAM 同一块 RAM 有两个地址映射,不能重复分配
Protected 寄存器要 EALLOW 否则写操作可能无效
PIE 中断要 PIEACK 否则同组中断可能无法继续响应

6. 总结

序号 记忆点
1 程序主要放在 FLASH
2 变量、栈、高速函数放在 SARAM
3 外设寄存器在 Peripheral Frame
4 外设中断入口看 PIE Vector RAM
5 Reserved / OTP / Password / Calibration Data 不要乱碰
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐