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.

SMJ320F2812: DSP外扩FLASH,无法从片外FLASH启动

Part Number: SMJ320F2812
  1. 将程序烧写至外部FLASH后,发现并不能启动起来,链接JTAG后检查发现程序一直在boot28.inc中循环,并没有跳至main函数,这是什么原因

  • 你好,从外部flash启动的话相应的启动地址等等也需要更改,不知道你对程序有做过相应修改吗?

  • 3FFFC0地址里填写的内容就是程序的入口地址

  • 你好,你是通过哪个外设外扩flash的?对应的boot mode pin有没有修改?以及,cmd文件具体是如何修改的?

  • 我是直接用zone7,外扩的flash,从外部flash启动应该不需要修改pin脚吧?

    1.map

    MEMORY
    {
    PAGE 0:    /* Program Memory */
               /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
    
       ZONE0       : origin = 0x002000, length = 0x002000     /* XINTF zone 0 */
       ZONE1       : origin = 0x004000, length = 0x002000     /* XINTF zone 1 */
    //   RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
       ZONE2       : origin = 0x080000, length = 0x080000     /* XINTF zone 2 */
       ZONE6       : origin = 0x100000, length = 0x001000     /* XINTF zone 6 allocated for code */
       OTP         : origin = 0x3D7800, length = 0x000800     /* on-chip OTP */
       CSM_RSVD    : origin = 0x3F7F80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
      BEGIN       : origin = 0x3F8000, length = 0x000002
      // BEGIN       : origin = 0x3F8000, 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 */
    
       RAMH0       : origin = 0x3F8002, length = 0x001FFD     /* on-chip RAM block H0 */
    //   RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
       ZONE7       : origin = 0x3FC002, length = 0x001FFE    /* XINTF zone 7 available if MP/MCn=1 */
       //ZONE7       : origin = 0x3FC000, length = 0x001000    /* XINTF zone 7 available if MP/MCn=1 */
       ROM         : origin = 0x3FF000, length = 0x000FC0     /* Boot ROM available if MP/MCn=0 */
       RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
    /*RESET       : origin = 0x3E9908, length = 0x000002   */  /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
       VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
    /*   BEGIN       : origin = 0x3FD000, length = 0x000002  */
    PAGE 1 :   /* Data Memory */
               /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
               /* Registers remain on PAGE1                                                  */
    /*   ZONE7       : origin = 0x3FD000, length = 0x001000  */  /* XINTF zone 7 available if MP/MCn=1 */ 
       RAMM01       : origin = 0x000000, length = 0x000800     /* on-chip RAM block M0 */
     /*  RAMM1       : origin = 0x000400, length = 0x000400  */   /* on-chip RAM block M1 */
      RAML1       : origin = 0x008000, length = 0x002000     /* on-chip RAM block L1 */
       ZONE6       : origin = 0x101000, length = 0x001000     /* XINTF zone 6 allocated for data */
       FLASHB      : origin = 0x3F4000, length = 0x002000     /* on-chip FLASH */
    
    }
    
    /* Allocate sections to memory blocks.
       Note:
             codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code 
                       execution when booting to flash
             ramfuncs  user defined section to store functions that will be copied from Flash into RAM
    */ 
     
    SECTIONS
    {
     
       /* Allocate program areas: */
       .cinit              : > ZONE7      PAGE = 0
       .pinit              : > ZONE7,     PAGE = 0
       .text               : > ZONE7      PAGE = 0
       codestart           : > BEGIN      PAGE = 0
       reset_vec           : > RESET      PAGE = 0   
    //   ramfuncs            : > RAML1      PAGE = 0
    
       ramfuncs            : LOAD = ZONE7,
                             RUN = RAMH0, 
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             PAGE = 0
    
     /*  csmpasswds          : > CSM_PWL     PAGE = 0 */
       ramdata             : > RAMM01       PAGE = 1
    
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM01       PAGE = 1
    //   .ebss               : > RAMM01       PAGE = 1
    	.ebss               : > RAML1       PAGE = 1
       .esysmem            : > RAMM01       PAGE = 1
    
       /* Initalized sections go in Flash */
       .econst             : > RAMM01,      PAGE = 1
       .switch             : > RAMM01,      PAGE = 1      
    
       /* Allocate IQ math areas: */
       IQmath              : > ZONE7       PAGE = 0                  /* Math Code */
       IQmathTables        : > ROM         PAGE = 0, TYPE = NOLOAD   /* Math Tables In ROM */
    
       /* .reset is a standard section used by the compiler.  It contains the */ 
       /* the address of the start of _c_int00 for C Code.   /*
       /* When booting from XINTF this is a pointer to the c_init routine */
       /* For this example we will go through codestart first, in order to*/
       /* disable the watchdog before the init.  Thus this is DSECT       */
       .reset              : > RESET,      PAGE = 0, TYPE = DSECT
       vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
    
    }
    

  • 目前看不是程序没跑起来 而是进不去中断,在主程序内的程序都是正常运行的,但是中断的程序就是进不去,但若是连上仿真器,全速运行,又是没问题的。

    这个是哪不对了