This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于F28035 FLASH烧写问题

Other Parts Discussed in Thread: CONTROLSUITE

我编写了一个程序,原来都在RAM里面跑都正常,后来程序大了,就想烧写到FLASH里面进行调试,不过无论怎么修改,当烧写成功后,重新上电都没法启动,不知道是什么原因,而且当烧写完之后,如果不下电,只是把仿真器拔掉是可以正常运行的。不知大家是否有遇到过这种问题?是不是只是在RAM里面运行,而程序没把代码烧写到FLASH里面?或者没调用?

附上CMD代码:

MEMORY
{
PAGE 0:
 progRAM     : origin = 0x008000, length = 0x001000 /* on-chip RAM (L0-L2)*/
 OTP         : origin = 0x3D7800, length = 0x000400     /* on-chip OTP */
 FLASHH      : origin = 0x3E8000, length = 0x002000     /* on-chip FLASH */
 FLASHG      : origin = 0x3EA000, length = 0x002000     /* on-chip FLASH */
 FLASHF      : origin = 0x3EC000, length = 0x002000     /* on-chip FLASH */
 FLASHE      : origin = 0x3EE000, length = 0x002000     /* on-chip FLASH */
 FLASHD      : origin = 0x3F0000, length = 0x002000     /* on-chip FLASH */
 FLASHC      : origin = 0x3F2000, length = 0x002000     /* on-chip FLASH */
 FLASHA      : origin = 0x3F6000, length = 0x001F80     /* on-chip FLASH */
 CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
 BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
 CSM_PWL     : origin = 0x3F7FF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

 IQTABLES    : origin = 0x3FE000, length = 0x000B50     /* IQ Math Tables in Boot ROM */
 IQTABLES2   : origin = 0x3FEB50, length = 0x00008C     /* IQ Math Tables in Boot ROM */
 IQTABLES3   : origin = 0x3FEBDC, length = 0x0000AA     /* IQ Math Tables in Boot ROM */

 BOOTROM     : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
 RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
 VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

PAGE 1 :
 BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
 RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
    RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
 dataRAM     : origin = 0x009000, length = 0x001000     /* data RAM (L3) */
 FLASHB      : origin = 0x3F4000, length = 0x002000     /* on-chip FLASH */

 CLA_CPU_MSGRAM  : origin = 0x001480, length = 0x000080 /* CLA-R/W, CPU-R message RAM */
 CPU_CLA_MSGRAM  : origin = 0x001500, length = 0x000080 /* CPU-R/W, CLA-R message RAM */
}


SECTIONS
{
   /* Allocate program areas: */
   .cinit            : > FLASHA,     PAGE = 0
   .pinit            : > FLASHA,     PAGE = 0
   .text             : > FLASHA,     PAGE = 0

   codestart         : > BEGIN       PAGE = 0
   ramfuncs          : LOAD = FLASHA,
                       RUN = progRAM,
                       LOAD_START(_RamfuncsLoadStart),
                       LOAD_END(_RamfuncsLoadEnd),
                       RUN_START(_RamfuncsRunStart),
                       PAGE = 0

   csmpasswds        : > CSM_PWL     PAGE = 0
   csm_rsvd          : > CSM_RSVD    PAGE = 0

   /* Allocate uninitalized data sections: */
   .stack            : > RAMM0,      PAGE = 1
   .ebss             : > dataRAM,    PAGE = 1
   .esysmem          : > dataRAM,      PAGE = 1

   /* Initalized sections go in Flash */
   /* For SDFlash to program these, they must be allocated to page 0 */
   .econst           : > FLASHC      PAGE = 0
   .switch           : > FLASHA      PAGE = 0

   /* Allocate IQ math areas: */
   IQmath            : > FLASHA      PAGE = 0                  /* Math Code */
   IQmathTables      : > IQTABLES     PAGE = 0, TYPE = NOLOAD   /* Math Tables In ROM */

   Cla1ToCpuMsgRAM   : > CLA_CPU_MSGRAM PAGE = 1
   CpuToCla1MsgRAM   : > CPU_CLA_MSGRAM PAGE = 1

   .reset            : > RESET,      PAGE = 0, TYPE = DSECT
   vectors           : > VECTORS     PAGE = 0, TYPE = DSECT

   DLOG     : > dataRAM,    PAGE = 1


}

主程序为:

void main(void)
 {

       MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
       InitFlash();

    DINT;
       InitSysCtrl();     //系统初始化
    InitPieCtrl();     //外设初始化

    InitGpio();        //IO初始化

    InitEPwm1Gpio();   //PWM口初始化

    InitEPwm3Gpio();   //PWM口初始化

    InitSciaGpio();    //通信口初始化

    IER = 0x0000;
    IFR = 0x0000;

    InitPieVectTable();//外部中断初始化

    InitCpuTimers();   //CPU时钟初始化

    InitAdc();         //init the ADC

    InitSci();         //SCI通信初始化

......

}

  • Boot那几个引脚是如何设置的?

  • Sam,

          看起来确实像引导模式没有配置好,你应该确认一下GPIO34,GPIO37是否都是高电平,因为这两个引脚如果没有外接电路的话,默认上电时上拉使能的,因此可以自动引导到Flash,所以你要查看一下这两个引脚硬件的状态。另外你的工程里面应该有一个DSP2803x_CodeStartBranch.asm源代码,这是Flash入口地址时最开始执行的一些初始化的东西,才会跑到main。关于CMD,我的建议是可以先用TI提高的CMD文件,在controlSUITE中都有,是满足前提的开发的,避免一些错误。另外从TI提供的例程去开始你的项目,在上面做修改,在controlSUITE上也有28035_Flash的工程,你可以导入烧写。

           所以肯定是可以烧写到Flash的,至于有没有烧写进入,可以在编译状态通过memory窗口查看。

          新年快乐!万事如意!

    Eric