
第 2 章 存储器体系文档定位TMS320F28388D 高性能伺服控制器开发——存储器体系学习笔记文档风格工程技术文档 / 论文式整理主要资料《TMS320F2838x 数据手册》《TMS320F2838x Real-Time Microcontrollers With Connectivity Manager Technical Reference ManualTRM》说明本文依据当前学习过程中使用的 TI 数据手册与 TRM 内容整理。配套图片为学习型技术示意图若图片中的简化标注与 TI 原始手册存在差异应以正文及 TI 原始手册为准。目录2.1 C28x Memory Map 与片上 RAM 分类2.2 存储器访问控制、Ownership 与错误保护机制2.3 Flash、OTP 与 Boot ROM 存储体系2.4 Linker Command File 与代码/数据段的存储分配第 2 章总结本章重点手册索引2.1 C28x Memory Map 与片上 RAM 分类2.1.1 C28x 存储体系概述TMS320F28388D 的 CPU1 与 CPU2 具有基本相同的 C28x Memory Map。片上 RAM 并不是统一的一块 SRAM而是按照访问主体、共享范围和用途划分为多种存储类型Dedicated RAMM0、M1、D0、D1Local Shared RAMLS0LS7Global Shared RAMGS0GS15Message RAMCPU↔CPU、CPU↔CLA、CLA↔DMA、CPU↔CM其他存储区域还包括 Flash、OTP、Boot ROM、Secure ROM、EtherCAT RAM 与外设地址空间。TRM 的 Memory Controller 章节明确指出CPU1/CPU2 子系统内不同 RAM 具有不同的访问主体、权限控制、ECC/Parity 保护及共享属性。手册位置内容手册位置C28x Memory Map《TMS320F2838x 数据手册》P259P2608.3.1Memory Architecture《TMS320F2838x TRM》P182Figure 3-16RAM 分类与访问机制《TMS320F2838x TRM》P183P1843.12.12.1.2 Dedicated RAMM0、M1、D0、D1每个 C28x CPU 子系统都包含 4 个 Dedicated RAM BlockM0、M1、D0、D1。其中 M0/M1 与 CPU 紧耦合仅本地 CPU 可访问包括 DMA 在内的其他 Master 不具备访问权限。D0/D1 同样属于对应 CPU 子系统的专用 RAM。RAM手册容量实际字节容量C28x 地址范围M01K × 162 KB0x0000 0000 ~ 0x0000 03FFM11K × 162 KB0x0000 0400 ~ 0x0000 07FFD02K × 164 KB0x0000 C000 ~ 0x0000 C7FFD12K × 164 KB0x0000 C800 ~ 0x0000 CFFF每个 C28x 子系统的 Dedicated RAM 总容量为 12 KB。2.1.3 Local Shared RAMLS0LS7每个 C28x 子系统包含 8 个 Local Shared RAM BlockLS0LS7。每块容量为 2K×16即 4 KB总容量 32 KB。RAM地址范围LS00x0000 8000 ~ 0x0000 87FFLS10x0000 8800 ~ 0x0000 8FFFLS20x0000 9000 ~ 0x0000 97FFLS30x0000 9800 ~ 0x0000 9FFFLS40x0000 A000 ~ 0x0000 A7FFLS50x0000 A800 ~ 0x0000 AFFFLS60x0000 B000 ~ 0x0000 B7FFLS70x0000 B800 ~ 0x0000 BFFFLS RAM 的“Local Shared”是指同一 CPU 子系统内部的 C28x 与对应 CLA 共享不是 CPU1 与 CPU2 共享。复位后 LS RAM 默认归 CPU 使用通过LSxMSEL与LSxCLAPGM可配置 CLA Ownership 以及 CLA Program/Data 属性。2.1.4 Global Shared RAMGS0GS15器件具有 16 块 Global Shared RAMGS0GS15。每块 4K×16即 8 KB总容量 128 KB。GS RAM 是 CPU1 与 CPU2 跨子系统共享的重要 RAM。其 Master 由GSxMSEL配置。当 GSx 属于 CPU1 时CPU1Fetch / Read / WriteCPU1 DMARead / WriteCPU2ReadCPU2 DMAReadCPU2 不允许 Fetch / Write。当 Master 切换为 CPU2 时权限关系反向。2.1.5 Message RAMTMS320F28388D 具有多种 Message RAM包括CPU1 ↔ CPU2CPUx ↔ CMCPU ↔ CLACLA ↔ DMA。Message RAM 主要用于 IPC 命令、参数传输、状态量、控制数据和多核同步信息并采用 Parity 保护。2.1.6 ECC 与 ParityRAM 类型保护机制M0/M1ECCD0/D1ECCLS0LS7ECCGS0GS15ParityCPU/CLA Message RAMParityIPC Message RAMParityTRM规定 Dedicated RAM 与 LS RAM 使用 SECDED ECC而其他 Shared RAM 主要使用 Even Parity。2.1.7 工程存储规划方向数据/代码类型推荐存储方向CPU 高频局部变量M/D RAMCLA Program / DataLS RAMCPU1/CPU2 共享过程数据GS RAMIPC 命令与小规模消息Message RAM主程序与常量Flash2.1.8 配套技术图2.2 存储器访问控制、Ownership 与错误保护机制2.2.1 Memory Controller 的功能Memory Controller Module 用于管理 CPU1/CPU2 RAM 的 Ownership、Program Fetch 权限、CPU Write 权限、CLA Access、RAM Initialization、ECC/Parity、Access Violation 与 Shared RAM Arbitration。手册位置《TMS320F2838x TRM》P182P1903.12 Memory Controller Module。2.2.2 Dedicated RAM 的访问属性M0/M1/D0/D1 为对应 CPU 的 Dedicated RAM不参与 CPU1/CPU2 的 Ownership 切换。M0/M1 仅允许对应 CPU 访问。2.2.3 LSx RAM 的 CPU/CLA OwnershipLSx RAM 的 Ownership 配置发生在 CPUx 与 CPUx.CLA1 之间。MSEL_LSxCLAPGM_LSxCPU 访问CLA 访问RAM 属性0X完整访问不允许CPU Dedicated10允许Data Read/WriteCPU/CLA Shared Data11普通 CPU 访问受限Program FetchCLA Program RAM手册位置TRM P1833.12.1.2Table 3-9 Local Shared RAM2.2.4 GSx RAM 的 CPU1/CPU2 OwnershipGS RAM 的 Master 由GSxMSEL决定。CPU1 可修改 GSxMSELCPU2 对应寄存器主要用于读取 Ownership 状态。配置还可通过 Lock/Commit 固化。手册位置TRM P183P1843.12.1.32.2.5 Fetch Protection 与 Write Protection通过FETCHPROTx可禁止 CPU 从指定 RAM Program Fetch。非法 Fetch 会设置 Violation Flag、锁存违规地址并引起 ITRAP。通过CPUWRPROTx可禁止 CPU 对指定 RAM 写入。非法 Write 会被忽略同时记录 Flag 和违规地址并可触发 Access Violation Interrupt。手册位置TRM P1863.12.1.8.1TRM P1863.12.1.8.22.2.6 CLA Fetch Protection若 CLA 从不具备 Program Fetch 权限的 LS RAM 取指将产生 CLA Fetch Protection Violation可能导致 MSTOP、Flag、违规地址记录及对 Master CPU 的访问违规中断。手册位置TRM P186P1873.12.1.8.42.2.7 Shared RAM ArbitrationF28388D 使用 Fixed Priority Round-Robin 的组合仲裁机制。CPU 内部访问固定优先级Data Write / Program WriteData ReadProgram Read / Program FetchCLA 内部访问固定优先级Data WriteData Read / Program Fetch不同 Master 之间采用 Round-Robin。手册位置TRM P184P1853.12.1.72.2.8 RAM ECC / ParityDedicated RAM、LS RAM 采用 SECDED ECC其他 Shared RAM 主要采用 Even Parity。ECC 行为Single-bit ECC ErrorCorrectableDouble-bit ECC ErrorUncorrectableAddress ECC ErrorUncorrectableParity ErrorUncorrectableCorrectable Error 由 Memory Controller 自动修正并写回 RAM。Uncorrectable Error 会记录错误地址并触发对应 CPU NMI。手册位置TRM P188P1893.12.1.92.2.9 Correctable Error ThresholdMemory Controller 具有 Correctable Error Counter 与 Threshold 机制。当 Error Count 达到 Threshold 且相应中断开启时可向对应 CPU 产生中断。2.2.10 RAM Error InjectionTRM提供 RAM Test Mode可主动注入 Data Bit、ECC Bit 或 Parity Error用于验证 ECC/Parity、Interrupt、NMI 与 Fault Handler。手册位置TRM P1903.12.1.102.2.11 面向伺服控制器的意义Memory Controller 对伺服控制系统主要体现为确定性高频数据尽量放在本地 RAM减少共享仲裁隔离性通过 Ownership 与 Protection 建立 CPU/CLA 边界安全性ECC / Parity / Violation / NMI 构成存储故障检测链。2.3 Flash、OTP 与 Boot ROM 存储体系2.3.1 CPU1/CPU2 独立 FlashF28388D 的 CPU1 与 CPU2 各具有一个 512 KB Flash Bank。两个 C28x 子系统总 Flash 容量为 1 MB。CPU1、CPU2 和 CM 各自具有独立 FMC。手册位置数据手册 P261P2628.3.2TRM P1504P1506Chapter 132.3.2 C28x Flash Sector每个 C28x Flash Bank 划分为 14 个 Sector。Sector大小地址范围08K×160x0008 0000 ~ 0x0008 1FFF18K×160x0008 2000 ~ 0x0008 3FFF28K×160x0008 4000 ~ 0x0008 5FFF38K×160x0008 6000 ~ 0x0008 7FFF432K×160x0008 8000 ~ 0x0008 FFFF532K×160x0009 0000 ~ 0x0009 7FFF632K×160x0009 8000 ~ 0x0009 FFFF732K×160x000A 0000 ~ 0x000A 7FFF832K×160x000A 8000 ~ 0x000A FFFF932K×160x000B 0000 ~ 0x000B 7FFF108K×160x000B 8000 ~ 0x000B 9FFF118K×160x000B A000 ~ 0x000B BFFF128K×160x000B C000 ~ 0x000B DFFF138K×160x000B E000 ~ 0x000B FFFF2.3.3 Flash Pump 与 Pump SemaphoreCPU1、CPU2 与 CM 分别拥有独立 Flash Bank 和 FMC但 Program/Erase 共享一个 Charge Pump。因此同一时刻只有一个子系统可以占用 Pump 进行 Program/Erase。手册位置TRM P1505P1506TRM P152113.132.3.4 Flash Program/Erase 必须从 RAM 运行Flash Program/Erase 代码以及修改 Flash Control Register 的代码必须从 RAM 执行避免 Flash 配置期间继续从 Flash/OTP 取指或访问数据。2.3.5 Flash Wait-StateTRM给出的 C28x Flash Wait-State 关系[RWAIT\left\lceil\frac{SYSCLK}{FCLK}-1\right\rceil]复位时 RWAIT 为保守值应用应根据实际系统频率重新配置。手册位置TRM P150913.62.3.6 Prefetch 与 Data CacheFMC 提供 Code Prefetch 与 Data Cache用于提高 Flash 执行吞吐。高 SYSCLK 运行时应根据器件要求重新配置。DriverLib 中通常使用Flash_initModule()。手册位置TRM P1509P15142.3.7 User OTP 与 TI OTPC28x 地址TI OTP0x0007 0000 ~ 0x0007 03FFUser OTP0x0007 8000 ~ 0x0007 83FF重要区别TI OTP用户可读不可编程/擦除User OTP一次可编程不可擦除CPU1 User OTP 主要用于 DCSM Security ConfigurationCPU2 User OTP 可用于一般用途。手册位置数据手册 P261P262TRM P15052.3.8 Flash ECCCPU1、CPU2、CM FMC 均支持 SECDED。地址也参与 ECC。TI建议在 CCS Flash Plugin / UniFlash 中保持 AutoEccGeneration 开启。手册位置TRM P1516P15192.3.9 Boot ROMCore Reset 后首先执行 Boot ROM。Boot ROM 负责 Reset Type 判断、Flash Power-Up、OTP Trim、RAM Initialization、NMI/DCSM 初始化、Boot Mode Decode 以及最终跳转用户程序。ROMCPU1CPU2CMUnsecure Boot ROM192 KB64 KB64 KBSecure ROM64 KB64 KB32 KBCLA Data ROM8 KB8 KBN/A手册位置TRM P7145.12.3.10 CPU1/CPU2/CM Boot 关系CPU1 是 Boot Master。CPU1 完成启动并进入应用后由 CPU1 Application 配置并释放 CPU2 与 CM。启动关系CPU1 Boot ROM → CPU1 Application → CPU2/CM Release → CPU2/CM Boot ROM手册位置TRM P715P7162.3.11 CPU1 默认 Boot Mode默认 Boot PinsGPIO72GPIO84GPIO72GPIO84Boot Mode00Parallel IO01SCI / Wait10CAN11Flash / USB手册位置TRM P716Table 5-62.3.12 配套技术图注该图主要用于辅助理解 C28x 存储映射。Flash Sector、地址及容量以正文表格和数据手册 P261P262 为准。2.4 Linker Command File 与代码/数据段的存储分配2.4.1 Linker Command File 的作用Linker Command File.cmd建立软件 Section 与芯片物理 Memory Map 之间的映射关系。TRM在 RAM 工程迁移至 Flash 工程时明确要求使用 Flash Linker Command File将 initialized sections 映射至 Flash配置 Flash Boot Entry对 RAM Run 函数配置 Load/Run 地址。手册位置TRM P152013.112.4.2 RAM 工程与 Flash 工程RAM 工程中代码/数据主要映射至 RAMFlash 工程中需要长期保存的 initialized sections 映射至 Flash并可将关键函数在启动时搬移至 RAM。2.4.3 Flash Boot 的 BEGINFlash Boot 完成后Boot ROM 跳转至 Linker Command File 中定义的BEGIN地址。C2000Ware 中通常由codestartbranch.asm在 BEGIN 处提供启动跳转然后进入_c_int00等 C Runtime 初始化。启动链Boot ROM → BEGIN → codestartbranch → C Runtime → Application手册位置TRM P15202.4.4 Load Address 与 Run Address同一 Section 可以具有Load Address固件保存位置典型为 FlashRun AddressCPU 实际执行地址典型为 RAM。因此形成Flash Load / RAM Run2.4.5.TI.ramfuncTRM明确使用.TI.ramfunc标记需要从 RAM 执行的函数。典型用途Flash 初始化Flash API修改 Flash Control Register要求 0/1 Wait-State 性能的关键代码。典型分配属性位置LoadFlashRunRAM2.4.6 运行时复制Linker 负责产生 Load/Run 地址及相关符号但芯片启动后仍需要实际执行 Flash→RAM Copy之后 CPU 才能从 Run Address 执行该函数。2.4.7 Flash Section AlignmentTRM要求映射到 Flash 的代码与数据 Section 按 128-bit Address Boundary 对齐使用ALIGNDirective。手册位置TRM P15202.4.8 EABI 与 NOINIT对于 EABI 格式TRM要求映射到 RAM 的未初始化 Section 使用typeNOINIT。手册位置TRM P15202.4.9 Flash ECC ImageFlash 工程需要正确生成 ECC。TI建议 CCS Flash Plugin / UniFlash 保持 AutoEccGeneration 开启。2.4.10 面向伺服控制器的典型 Load/Run 规划内容LoadRun主程序FlashFlash常规逻辑FlashFlashFlash 初始化FlashRAMFlash APIFlashRAM高频关键控制函数FlashRAM依据性能需求CLA ProgramFlashLS RAMCPU1/CPU2 Shared Buffer—GS RAMIPC Data—Message RAM2.4.11 当前手册的覆盖边界当前 F28388D TRM明确支持RAM/Flash Linker ConfigurationBEGIN.TI.ramfuncFlash Load / RAM RunALIGNNOINITFlash ECC。而.text、.bss、.cinit、.const、.stack、GROUP、UNION、LOAD_START、RUN_START等完整 Linker 语义应进一步结合 TI C2000 Compiler / Assembly Tools 文档学习。2.4.12 CLA 存储结构补充图第 2 章总结完成本章后应建立以下完整认识F28388D 的 RAM 按访问主体分为 Dedicated、Local Shared、Global Shared 与 Message RAM。M0/M1/D0/D1 为对应 C28x 的 Dedicated RAM。LS0LS7 面向 CPU 与对应 CLA 的局部共享。GS0GS15 面向 CPU1/CPU2 的跨子系统共享总容量 128 KB。Message RAM 用于 CPU、CLA、DMA、CM 之间的定向通信。GSxMSEL 决定 GS RAM Master Ownership。Memory Controller 提供 Fetch/Write Protection 与 Access Violation 检测。Shared RAM 存在访问仲裁实时路径应避免不必要的多 Master 竞争。Dedicated/LS RAM 使用 SECDED ECC共享 RAM 主要使用 Even Parity。CPU1/CPU2 各具有 512 KB 独立 Flash。Flash Program/Erase 代码和 Flash Control 配置代码必须从 RAM 执行。Flash 存在 RWAIT Wait-State并可通过 Prefetch/Data Cache 改善性能。CPU1、CPU2、CM 的 Flash Program/Erase 共享 Flash Pump。OTP 是一次性可编程、不可擦除的非易失资源。Boot ROM 负责 Reset 后的初始化与 Boot Mode 分发。CPU1 是多核 Boot Master。Linker Command File 建立软件 Section 与物理 Memory 的映射。.TI.ramfunc实现典型 Flash Load / RAM Run。Flash Boot 通过 BEGIN 进入应用启动链。实际工程应统一考虑实时性、共享访问、ECC、多核架构与 Linker 分区。本章重点手册索引学习内容数据手册TRMC28x Memory MapP259P260P182P184Dedicated RAMP259P183LS RAMP259P183GS RAMP259P260P183P184Message RAMP259P260P184Shared RAM Arbitration—P184P185Access Protection—P186P188ECC / Parity—P188P190Flash Memory MapP261P262Chapter 13Flash / OTP Features—P1504P1506Flash Wait-State—P1509Prefetch / Cache—P1509P1514Flash ECC—P1516P1519RAM→Flash Migration—P1520Flash Control from RAM—P1521Pump Semaphore—P1521Boot ROM Overview—P714Boot Sequence—P715P716Boot Modes—P716P717Linker /.TI.ramfunc—P1520