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

相关推荐
轻微的风格艾丝凡2 天前
嵌入式定时器计时技巧:用有符号数省略溢出判断的底层逻辑与实践
数据库·算法·dsp开发·嵌入式软件
ADI_OP3 天前
ADAU1452的开发教程3:常规音频算法的开发(2)
算法·dsp开发·adi dsp中文资料·adi dsp·adi音频dsp·adi dsp开发教程
Nautiluss4 天前
一起调试XVF3800麦克风阵列(九)
linux·人工智能·嵌入式硬件·音频·语音识别·dsp开发
MS189637737465 天前
乾芯课堂系列(二)乾芯DSP开发环境 – QX-IDE安装使用入门
ide·mcu·dsp开发
Nautiluss7 天前
一起调试XVF3800麦克风阵列(六)
人工智能·单片机·音频·语音识别·dsp开发·智能硬件
Nautiluss13 天前
一起调试XVF3800麦克风阵列(三)
linux·人工智能·嵌入式硬件·音频·语音识别·dsp开发·智能音箱
Nautiluss15 天前
一起调试XVF3800麦克风阵列(二)
大数据·人工智能·嵌入式硬件·音频·语音识别·dsp开发
GreenGoblin16 天前
DSP学习记录之eCAP
dsp开发·电机控制
Nautiluss18 天前
一起玩XVF3800麦克风阵列(十)
linux·人工智能·python·音频·语音识别·实时音视频·dsp开发
侠***I1 个月前
双馈风机虚拟惯性与下垂控制参与一次调频及频率二次跌落现象探究
dsp开发