CCS v5中烧写Flash实录:成功+失败

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

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

  1. MEMORY  
  2. {  
  3. PAGE 0 :   
  4.    OTP         : origin = 0x3D7800, length = 0x000800  
  5.    FLASHJ      : origin = 0x3D8000, length = 0x002000  
  6.    FLASHI      : origin = 0x3DA000, length = 0x002000  
  7.    FLASHH      : origin = 0x3DC000, length = 0x004000   
  8.    FLASHG      : origin = 0x3E0000, length = 0x004000  
  9.    FLASHF      : origin = 0x3E4000, length = 0x004000  
  10.    FLASHE      : origin = 0x3E8000, length = 0x004000   
  11.    FLASHD      : origin = 0x3EC000, length = 0x004000  
  12.    FLASHC      : origin = 0x3F0000, length = 0x004000  
  13.    FLASHB      : origin = 0x3F4000, length = 0x002000   
  14.    FLASHA      : origin = 0x3F6000, length = 0x001FF6  
  15.    BEGIN       : origin = 0x3F7FF6, length = 0x000002  
  16.    PASSWDS     : origin = 0x3F7FF8, length = 0x000008  
  17.    ROM         : origin = 0x3FF000, length = 0x000FC0  
  18.    VECTORS     : origin = 0x3FFFC2, length = 0x00003E  
  19.            
  20. PAGE 1 :   
  21.    /* SARAM                     */       
  22.    RAMM0M1    : origin = 0x000000, length = 0x000800  
  23.   
  24.    /* Peripheral Frame 0:   */  
  25.    DEV_EMU    : origin = 0x000880, length = 0x000180  
  26.    FLASH_REGS : origin = 0x000A80, length = 0x000060  
  27.    CSM        : origin = 0x000AE0, length = 0x000010  
  28.    XINTF      : origin = 0x000B20, length = 0x000020  
  29.    CPU_TIMER0 : origin = 0x000C00, length = 0x000008  
  30.    CPU_TIMER1 : origin = 0x000C08, length = 0x000008           
  31.    CPU_TIMER2 : origin = 0x000C10, length = 0x000008           
  32.    PIE_CTRL   : origin = 0x000CE0, length = 0x000020  
  33.    PIE_VECT   : origin = 0x000D00, length = 0x000100  
  34.   
  35.    /* Peripheral Frame 1:   */  
  36.    ECAN_A     : origin = 0x006000, length = 0x000100  
  37.    ECAN_AMBOX : origin = 0x006100, length = 0x000100  
  38.   
  39.    /* Peripheral Frame 2:   */  
  40.    SYSTEM     : origin = 0x007010, length = 0x000020  
  41.    SPI_A      : origin = 0x007040, length = 0x000010  
  42.    SCI_A      : origin = 0x007050, length = 0x000010  
  43.    XINTRUPT   : origin = 0x007070, length = 0x000010  
  44.    GPIOMUX    : origin = 0x0070C0, length = 0x000020  
  45.    GPIODAT    : origin = 0x0070E0, length = 0x000020  
  46.    ADC        : origin = 0x007100, length = 0x000020  
  47.    EV_A       : origin = 0x007400, length = 0x000040  
  48.    EV_B       : origin = 0x007500, length = 0x000040  
  49.    SPI_B      : origin = 0x007740, length = 0x000010  
  50.    SCI_B      : origin = 0x007750, length = 0x000010  
  51.    MCBSP_A    : origin = 0x007800, length = 0x000040  
  52.   
  53.    /* CSM Password Locations */  
  54.    CSM_PWL    : origin = 0x3F7FF8, length = 0x000008  
  55.   
  56.    /* SARAM                    */       
  57.    RAML0L1    : origin = 0x008000, length = 0x002000  
  58.    RAMH0      : origin = 0x3F8000, length = 0x002000          
  59. }  
  60.    
  61.    
  62. SECTIONS  
  63. {  
  64.    /* Allocate program areas: */  
  65.    .reset              : > BEGIN       PAGE = 0  
  66.    vectors             : > VECTORS     PAGE = 0  
  67.    .cinit              : > FLASHJ      PAGE = 0  
  68.    .text               : > FLASHA       PAGE = 0  
  69.   
  70.    /* Allocate data areas: */  
  71.    .stack              : > RAMM0M1     PAGE = 1  
  72.    .bss                : > RAML0L1     PAGE = 1  
  73.    .ebss               : > RAML0L1     PAGE = 1  
  74.    .const:          load =  FLASHB PAGE 0, run = RAML0L1 PAGE 1  
  75.     {  
  76.         /* Get Run Address  */  
  77.         __const_run = .;  
  78.         /* Mark Load Address*/  
  79.         *(.c_mark)  
  80.         /* Allocate .const  */  
  81.         *(.const)  
  82.         /* Compute Length   */  
  83.         __const_length = .-__const_run;  
  84.     }    
  85.      
  86.    .econst:         load =  FLASHB PAGE 0, run = RAML0L1 PAGE 1  
  87.     {  
  88.         /* Get Run Address  */  
  89.         __econst_run = .;  
  90.         /* Mark Load Address*/  
  91.         *(.ec_mark)  
  92.         /* Allocate .const  */  
  93.         *(.econst)  
  94.         /* Compute Length   */  
  95.         __econst_length = .-__econst_run;  
  96.     }      
  97.    .sysmem             : > RAMH0       PAGE = 1  
  98.   
  99.    /* Allocate IQ math areas: */  
  100.    IQmath              : > FLASHI      PAGE = 0   /* Math Code */  
  101.    IQmathFastTables    : > FLASHI      PAGE = 0   /* Math Tables in fast memory */  
  102.    IQmathTables        : > ROM         PAGE = 0   /* Math Tables In ROM */  
  103.         
  104.    /* Allocate Peripheral Frame 0 Register Structures:   */  
  105.    DevEmuRegsFile      : > DEV_EMU     PAGE = 1  
  106.    FlashRegsFile       : > FLASH_REGS  PAGE = 1  
  107.    CsmRegsFile         : > CSM         PAGE = 1  
  108.    XintfRegsFile       : > XINTF       PAGE = 1  
  109.    CpuTimer0RegsFile   : > CPU_TIMER0  PAGE = 1        
  110.    CpuTimer1RegsFile   : > CPU_TIMER1  PAGE = 1        
  111.    CpuTimer2RegsFile   : > CPU_TIMER2  PAGE = 1        
  112.    PieCtrlRegsFile     : > PIE_CTRL    PAGE = 1        
  113.    PieVectTable        : > PIE_VECT    PAGE = 1  
  114.   
  115.    /* Allocate Peripheral Frame 2 Register Structures:   */  
  116.    ECanaRegsFile       : > ECAN_A      PAGE = 1     
  117.    ECanaMboxesFile     : > ECAN_AMBOX  PAGE = 1  
  118.   
  119.    /* Allocate Peripheral Frame 1 Register Structures:   */  
  120.    SysCtrlRegsFile     : > SYSTEM      PAGE = 1  
  121.    SpiaRegsFile        : > SPI_A       PAGE = 1  
  122.    SciaRegsFile        : > SCI_A       PAGE = 1  
  123.    XIntruptRegsFile    : > XINTRUPT    PAGE = 1  
  124.    GpioMuxRegsFile     : > GPIOMUX     PAGE = 1  
  125.    GpioDataRegsFile    : > GPIODAT     PAGE = 1  
  126.    AdcRegsFile         : > ADC         PAGE = 1  
  127.    EvaRegsFile         : > EV_A        PAGE = 1  
  128.    EvbRegsFile         : > EV_B        PAGE = 1  
  129.    ScibRegsFile        : > SCI_B       PAGE = 1  
  130.    McbspaRegsFile      : > MCBSP_A     PAGE = 1  
  131.   
  132.    /* CSM Password Locations */  
  133.    CsmPwlFile          : > CSM_PWL     PAGE = 1  
  134.   
  135. }  

重新编译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不能热插拔 

================ 喜剧 ===============

不过还好,毕竟是一块实验板,Flash锁死但还可以从SRAM跑程序,谢天谢地!

 

永不止步步 发表于02-16 09:35 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号