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-1331084774617 小时前
长芯微LPS123完全P2P替代ADP123,高性能、低压差的线性稳压器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·线性稳压器
LCMICRO-133108477462 天前
国产长芯微LDC5141完全P2P替代DAC80501,数模转换器 (DAC)
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·数模转换器 dac
Code-keys2 天前
ADSP/ARM 性能/稳定性排查专栏总述
arm开发·算法·边缘计算·dsp开发
淡忘的江南3 天前
【F28377D | 时钟】
dsp开发
xiaoyuchidayuma7 天前
【DC-AC-01概述】
dsp开发
玄奕子9 天前
F280049C + PCA9554A 实战复盘:从 NACK 定位到稳定驱动落地
嵌入式·dsp开发·ti c2000·f280049c
GreenGoblin11 天前
14.DSP学习记录之I2C
单片机·dsp开发·c2000
电源海盗船14 天前
第一讲 单相逆变器原理与硬件设计
stm32·单片机·嵌入式硬件·开源·dsp开发
GreenGoblin16 天前
13.DSP学习记录之SPI
单片机·dsp开发·电机控制
GreenGoblin25 天前
12.DSP学习记录之SCI
单片机·dsp开发·电机控制