2025|1

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

完成CCS v5中烧写Flash记录 [复制链接]

环境:Win7 + CCS v5 + XDS100v2仿真器 + TMS320CF2812芯片

烧写方法:将SRAM.cmd替换成FLASH.cmd。一个通用的用于F2812的 FLASH.cmd  例子为

MEMORY
{
PAGE 0 : 
   OTP         : origin = 0x3D7800, length = 0x000800
   FLASHJ      : origin = 0x3D8000, length = 0x002000
   FLASHI      : origin = 0x3DA000, length = 0x002000
   FLASHH      : origin = 0x3DC000, length = 0x004000 
   FLASHG      : origin = 0x3E0000, length = 0x004000
   FLASHF      : origin = 0x3E4000, length = 0x004000
   FLASHE      : origin = 0x3E8000, length = 0x004000 
   FLASHD      : origin = 0x3EC000, length = 0x004000
   FLASHC      : origin = 0x3F0000, length = 0x004000
   FLASHB      : origin = 0x3F4000, length = 0x002000 
   FLASHA      : origin = 0x3F6000, length = 0x001FF6
   BEGIN       : origin = 0x3F7FF6, length = 0x000002
   PASSWDS     : origin = 0x3F7FF8, length = 0x000008
   ROM         : origin = 0x3FF000, length = 0x000FC0
   VECTORS     : origin = 0x3FFFC2, length = 0x00003E
         
PAGE 1 : 
   /* SARAM                     */     
   RAMM0M1    : origin = 0x000000, length = 0x000800
 
   /* Peripheral Frame 0:   */
   DEV_EMU    : origin = 0x000880, length = 0x000180
   FLASH_REGS : origin = 0x000A80, length = 0x000060
   CSM        : origin = 0x000AE0, length = 0x000010
   XINTF      : origin = 0x000B20, length = 0x000020
   CPU_TIMER0 : origin = 0x000C00, length = 0x000008
   CPU_TIMER1 : origin = 0x000C08, length = 0x000008         
   CPU_TIMER2 : origin = 0x000C10, length = 0x000008         
   PIE_CTRL   : origin = 0x000CE0, length = 0x000020
   PIE_VECT   : origin = 0x000D00, length = 0x000100
 
   /* Peripheral Frame 1:   */
   ECAN_A     : origin = 0x006000, length = 0x000100
   ECAN_AMBOX : origin = 0x006100, length = 0x000100
 
   /* Peripheral Frame 2:   */
   SYSTEM     : origin = 0x007010, length = 0x000020
   SPI_A      : origin = 0x007040, length = 0x000010
   SCI_A      : origin = 0x007050, length = 0x000010
   XINTRUPT   : origin = 0x007070, length = 0x000010
   GPIOMUX    : origin = 0x0070C0, length = 0x000020
   GPIODAT    : origin = 0x0070E0, length = 0x000020
   ADC        : origin = 0x007100, length = 0x000020
   EV_A       : origin = 0x007400, length = 0x000040
   EV_B       : origin = 0x007500, length = 0x000040
   SPI_B      : origin = 0x007740, length = 0x000010
   SCI_B      : origin = 0x007750, length = 0x000010
   MCBSP_A    : origin = 0x007800, length = 0x000040
 
   /* CSM Password Locations */
   CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
 
   /* SARAM                    */     
   RAML0L1    : origin = 0x008000, length = 0x002000
   RAMH0      : origin = 0x3F8000, length = 0x002000        
}
 
 
SECTIONS
{
   /* Allocate program areas: */
   .reset              : > BEGIN       PAGE = 0
   vectors             : > VECTORS     PAGE = 0
   .cinit              : > FLASHJ      PAGE = 0
   .text               : > FLASHA       PAGE = 0
 
   /* Allocate data areas: */
   .stack              : > RAMM0M1     PAGE = 1
   .bss                : > RAML0L1     PAGE = 1
   .ebss               : > RAML0L1     PAGE = 1
   .const:            load =     FLASHB PAGE 0, run = RAML0L1 PAGE 1
    {
        /* Get Run Address    */
        __const_run = .;
        /* Mark Load Address*/
        *(.c_mark)
        /* Allocate .const    */
        *(.const)
        /* Compute Length    */
        __const_length = .-__const_run;
    }  
   
   .econst:            load =     FLASHB PAGE 0, run = RAML0L1 PAGE 1
    {
        /* Get Run Address    */
        __econst_run = .;
        /* Mark Load Address*/
        *(.ec_mark)
        /* Allocate .const    */
        *(.econst)
        /* Compute Length    */
        __econst_length = .-__econst_run;
    }    
   .sysmem             : > RAMH0       PAGE = 1
 
   /* Allocate IQ math areas: */
   IQmath              : > FLASHI      PAGE = 0   /* Math Code */
   IQmathFastTables    : > FLASHI      PAGE = 0   /* Math Tables in fast memory */
   IQmathTables        : > ROM         PAGE = 0   /* Math Tables In ROM */
      
   /* Allocate Peripheral Frame 0 Register Structures:   */
   DevEmuRegsFile      : > DEV_EMU     PAGE = 1
   FlashRegsFile       : > FLASH_REGS  PAGE = 1
   CsmRegsFile         : > CSM         PAGE = 1
   XintfRegsFile       : > XINTF       PAGE = 1
   CpuTimer0RegsFile   : > CPU_TIMER0  PAGE = 1      
   CpuTimer1RegsFile   : > CPU_TIMER1  PAGE = 1      
   CpuTimer2RegsFile   : > CPU_TIMER2  PAGE = 1      
   PieCtrlRegsFile     : > PIE_CTRL    PAGE = 1      
   PieVectTable        : > PIE_VECT    PAGE = 1
 
   /* Allocate Peripheral Frame 2 Register Structures:   */
   ECanaRegsFile       : > ECAN_A      PAGE = 1   
   ECanaMboxesFile     : > ECAN_AMBOX  PAGE = 1
 
   /* Allocate Peripheral Frame 1 Register Structures:   */
   SysCtrlRegsFile     : > SYSTEM      PAGE = 1
   SpiaRegsFile        : > SPI_A       PAGE = 1
   SciaRegsFile        : > SCI_A       PAGE = 1
   XIntruptRegsFile    : > XINTRUPT    PAGE = 1
   GpioMuxRegsFile     : > GPIOMUX     PAGE = 1
   GpioDataRegsFile    : > GPIODAT     PAGE = 1
   AdcRegsFile         : > ADC         PAGE = 1
   EvaRegsFile         : > EV_A        PAGE = 1
   EvbRegsFile         : > EV_B        PAGE = 1
   ScibRegsFile        : > SCI_B       PAGE = 1
   McbspaRegsFile      : > MCBSP_A     PAGE = 1
 
   /* CSM Password Locations */
   CsmPwlFile          : > CSM_PWL     PAGE = 1
 
}
重新编译OK!

点击Debug进入调试,点击Load Program...选择刚编译生成的*.out文件进行烧写!然后会出现Erase……

烧写成功!

=============== 悲剧 ================

为了调试方便,我设置了点击Debug按钮后自动装载程序,悲剧就在这时发生了!

在一次烧写时由于鼠标抖动,连续点了两次Debug,弹出两个烧写进度条,结果发大了,直接烧写失败,Flash锁死!如下

C28xx: Flash Programmer: Device is locked or not connected. Operation cancelled.
C28xx: Trouble Writing Memory Block at 0x3f7ff6 on Page 0 of Length 0x2 
C28xx: GEL: File: E:\dsp\zx_dsp2000\zx_project_c2000\Debug\zx_project_c2000.out: Load failed.

为吸取经验教训,总结了Flash锁死的可能原因,以后注意这些方面:

(1)由于PC的原因,这里就是这样,中途打断了Flash的烧写过程造成Flash锁死。仿真器在烧写时挂起也会造成Flash锁死,比如有些仿真器速度比较慢,很容易发生挂起的现象。

(2)由于DSP的原因,DSP的电压、时钟等操作条件不对容易造成锁死。

另外,顺便注意DSP与JTAG的上电顺序:

关闭电源开关 ——> JTAG连接DSP ——> DSP连接PC,JTAG连接PC ——> 开启DSP电源开关,给DSP上电

原则:JTAG不能热插拔
 

最新回复

不错的分享。   详情 回复 发表于 2019-8-12 09:13
 
点赞 关注

回复
举报

2618

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

不错的分享。

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表