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

相关推荐
XINVRY-FPGA1 个月前
EPM240T100I5N Altera FPGA MAX II CPLD
人工智能·嵌入式硬件·fpga开发·硬件工程·dsp开发·射频工程·fpga
XINVRY-FPGA2 个月前
XCKU115-2FLVB2104E AMD Xilinx Kintex UltraScale FPGA
嵌入式硬件·计算机视觉·fpga开发·云计算·硬件工程·dsp开发·fpga
XINVRY-FPGA2 个月前
XCZU19EG-2FFVB1517I FPGA Xilinx AMD ZynqUltraScale+ MPSoC
arm开发·嵌入式硬件·fpga开发·硬件架构·硬件工程·dsp开发·fpga
ChipCamp2 个月前
Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
开发语言·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
ChipCamp2 个月前
Chisel芯片开发入门系列 -- 14. CPU芯片开发和解释4(Load/Store指令再探)
arm开发·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
FF-Studio3 个月前
万物皆数:构建数字信号处理的数学基石
算法·数学建模·fpga开发·自动化·音视频·信号处理·dsp开发
PN杰4 个月前
Matlab解决无法读取路径中的空格
开发语言·matlab·dsp开发
ADI_OP4 个月前
ADI的BF609双核DSP怎么做开发,我来说一说(四)CMOS摄像头采集
dsp开发·adi音频dsp·adi dsp开发教程
小赵哦4 个月前
TMS320F28388D使用sysconfig配置IPC
单片机·dsp开发