DSP28335开发中的Flash与RAM模式切换详解

CCS5.5 开发 DSP28335 Flash RAM 模式快速切换指南

在 DSP28335 开发中,Flash 和 RAM 模式的灵活切换是提升调试效率与保证产品稳定性的关键。本文将详解两种模式的核心区别,并提供仅需修改三处的快速切换方法。

1 Flash RAM 模式的核心定义与区别

RAM 模式

  • 定义:程序加载到 DSP 内部 RAM 中运行,依赖临时存储介质
  • 核心特点
    • 读写速度快(无 Flash 擦写延迟),调试时程序下载速度快
    • 断电后程序丢失,需重新下载
    • 适合开发阶段的功能验证与调试

Flash 模式

  • 定义:程序烧录到 DSP 的非易失性 Flash 存储器中运行
  • 核心特点
    • 断电后程序不丢失,适合最终产品发布
    • 首次烧录需擦写 Flash,速度较慢
    • 部分高频函数需复制到 RAM 运行(解决 Flash 访问延迟问题)

关键区别对照表

维度 RAM 模式 Flash 模式
存储介质 内部 RAM 片上 Flash
断电保存
下载速度 快(毫秒级) 慢(需擦写,秒级)
适用场景 开发调试阶段 最终产品部署
函数运行位置 全部在 RAM 部分核心函数需复制到 RAM

2. 对应的 CMD 文件配置

Flash 模式 CMD 文件

bash 复制代码
/* F28335.cmd - Flash版本 */

MEMORY

{

    PAGE 0:   /* Program Memory */

    PRAML0  : origin = 0x008000, length = 0x001000

    FLASHA  : origin = 0x3F0000, length = 0x008000

   

    PAGE 1:   /* Data Memory */

    DRAML1  : origin = 0x009000, length = 0x001000

}


SECTIONS

{

    .text     : > FLASHA,   PAGE = 0  /* 代码段放在Flash */

    .cinit    : > FLASHA,   PAGE = 0

    .switch   : > FLASHA,   PAGE = 0

    /* 其他段配置... */

}

RAM 模式 CMD 文件

bash 复制代码
/* F28335_RAM_lnk.cmd - RAM版本 */

MEMORY

{

    PAGE 0:   /* Program Memory */

    PRAML0  : origin = 0x008000, length = 0x001000

    RAML0   : origin = 0x009000, length = 0x001000

   

    PAGE 1:   /* Data Memory */

    DRAML1  : origin = 0x00A000, length = 0x001000

}


SECTIONS

{

    .text     : > RAML0,    PAGE = 0  /* 代码段放在RAM */

    .cinit    : > RAML0,    PAGE = 0

    .switch   : > RAML0,    PAGE = 0

    /* 其他段配置... */

}

3. 关键源文件解析

DSP2833x_CodeStartBranch.asm

  • 用途:Flash模式下的启动分支代码
  • 功能
    • 在Flash启动时执行必要的初始化
    • 处理Flash等待状态配置
    • 跳转到主程序入口
  • 调用时机:系统复位后首先执行

DSP2833x_SectionCopy_nonBIOS.asm

  • 用途:非BIOS环境下的段复制功能
  • 功能
    • 将初始化数据从Flash复制到RAM
    • 处理.cinit段的初始化
    • 支持运行时内存初始化
  • 适用模式:主要用于Flash模式

DSP2833x_CodeStartBranchRAM.asm

  • 用途:RAM模式下的启动分支代码
  • 功能
    • 简化版的启动代码
    • 直接跳转到主程序,无需Flash初始化
    • 适合调试和快速启动
  • 调用时机:RAM调试时使用

4. 最方便的切换方式:修改三处

第一处:主函数的宏定义

cpp 复制代码
// 运行模式定义

#define RUNMODE FLASH    // FLASH模式

// #define RUNMODE RAM   // RAM模式


//===================== Flash 专用函数声明 =====================

#if RUNMODE == FLASH

extern void MemCopy(Uint16 *SourceAddr, Uint16 *SourceEndAddr, Uint16 *DestAddr);

extern Uint16 RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart;

#endif

第二处:切换 CMD 文件

在CCS项目属性中修改链接器命令文件:

Flash 模式

  • F28335.cmd

RAM 模式

  • F28335_RAM_lnk.cmd

第三处:禁用及释放相关源文件

在项目文件管理器中:

Flash模式配置:

✅ 包含 DSP2833x_CodeStartBranch.asm

✅ 包含 DSP2833x_SectionCopy_nonBIOS.asm

❌ 排除 DSP2833x_CodeStartBranchRAM.asm

RAM模式配置:

❌ 排除 DSP2833x_CodeStartBranch.asm

❌ 排除 DSP2833x_SectionCopy_nonBIOS.asm

✅ 包含 DSP2833x_CodeStartBranchRAM.asm

相关推荐
LCMICRO-133108477466 天前
长芯微LDM63085完全P2P替代ADM2483,是一款基于数字隔离技术的高可靠性的半双工隔离RS-485收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发
LCMICRO-133108477466 天前
长芯微LSC3490完全P2P替代MAX3490,3.3V 高静电防护 10M 全双工 RS485/RS422 收发器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发
dgaf9 天前
求助,《信号与系统》是做什么的?
物联网·硬件工程·信息与通信·信号处理·dsp开发
我 see your eyes15 天前
CLA_TASK 任务的理解
c语言·c++·dsp开发
浩子智控15 天前
高精度高速模拟采集电路挑战
硬件架构·硬件工程·信号处理·dsp开发
AtItAgain22 天前
DSP TZ 模块梳理
dsp开发
XINVRY-FPGA25 天前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
小郭团队1 个月前
2_6_五段式SVPWM(经典算法+DPWM2)算法理论与MATLAB实现详解
算法·matlab·硬件架构·arm·dsp开发
yrZXiZUdP1 个月前
玩转光伏储能充电:PI双闭环控制仿真之旅
dsp开发
小郭团队1 个月前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发