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.

TMS320F28035: bootloader 将bin文件写入flash,跳转APP失败

Part Number: TMS320F28035

我用bootloader接收完程序后,进入跳转APP始地址后,bootloader程序会复位,重新进入引导程序,这是为什么?这是我CMD文件编写有问题吗?始地址为0x3e8100; APP的begin 为0x3e8100

  • 您好, 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

    始地址为0x3e8100; APP的begin 为0x3e8100

    是同一个地址吗?请重新说明一下。

    关于程序无法运行,请检查BootLoader是否正确地进行擦除并烧写了,另一个是APP程序本身能否正常运行?

  • APP程序单独可以刷进去,BootLoader读取0x3e8100地址写进去了,程序和校验也过了。您看看我的两个CMD有什么问题吗?

    BootLoaderode code
    MEMORY
    {
    PAGE 0 :
    
    	BEGIN      : origin = 0x3F7FF6, length = 0x000002 /* 普通应用或者BOOT应用 = 0x33FFF6。跳转型APP = _APP_HEAD */
    	SECT_POG   : origin = 0x3F0000, length = 0x007F80
    	SECT_RFUN  : origin = 0x008000, length = 0x000800 /* 0x010000 - SECT_RAM */
    
    
    	CSM_RSVD   : origin = 0x3F7F80, length = 0x000076
    	CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
    	OTP        : origin = 0x3D7800, length = 0x000400
    	RESET      : origin = 0x3FFFC0, length = 0x000002
    	IQTABLES   : origin = 0x3FE000, length = 0x000b50
    	IQTABLES2  : origin = 0x3FEB50, length = 0x00008c
    	BOOTROM    : origin = 0x3FF27C, length = 0x000D44
    	VECTORS    : origin = 0x3FFFC2, length = 0x00003E
    
    PAGE 1 :
    	BOOT_RSVD  : origin = 0x000002, length = 0x00004E
    	RAM_STACK  : origin = 0x000050, length = 0x0007B0 /* 堆栈放在M0M1内存 */
    
    	SECT_RAM   : origin = 0x008800, length = 0x00800
    
    
    }
    
    SECTIONS
    {
    	codestart        : > BEGIN,    PAGE = 0
    	.text            : > SECT_POG, PAGE = 0
    
    	/* IQ暂时未使用 */
    
    
    
    	ramfuncs   : LOAD = SECT_POG, RUN = SECT_RFUN,
    		     LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
    		     RUN_START(_RamfuncsRunStart), PAGE = 0
    	Flash28_API:
       {
            -lFlash2803x_API_V100.lib(.econst)
            -lFlash2803x_API_V100.lib(.text)
       }                   LOAD = SECT_POG,
                           RUN = SECT_RFUN,
                           LOAD_START(_Flash28_API_LoadStart),
                           LOAD_END(_Flash28_API_LoadEnd),
                           RUN_START(_Flash28_API_RunStart),
                           PAGE = 0
    
    	.cinit           : > SECT_POG, PAGE = 0 /* cinit、econst段建议放在代码段尾部 */
    	.econst          : > SECT_POG, PAGE = 0
    
    	.stack           : > RAM_STACK,PAGE = 1
    	.esysmem         : > SECT_RAM, PAGE = 1
    	.ebss            : > SECT_RAM, PAGE = 1
    
    	/* DMA暂时未使用 */
    	/*
    	DMARAML4         : > RAML4_7,   PAGE = 1
    	DMARAML5         : > RAML4_7,   PAGE = 1
    	DMARAML6         : > RAML4_7,   PAGE = 1
    	DMARAML7         : > RAML4_7,   PAGE = 1 */
        IQmath              : > IQTABLES,      PAGE = 0     , TYPE = NOLOAD       /* Math Code */
    	IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
    
    	.reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used */
    	vectors          : > VECTORS    PAGE = 0, TYPE = DSECT
    	csm_rsvd         : > CSM_RSVD   PAGE = 0, TYPE = DSECT
    	csmpasswds       : > CSM_PWL    PAGE = 0, TYPE = DSECT
    }
    APP CODE
    MEMORY
    {
    PAGE 0 :
    
    	BEGIN      : origin = 0x3E8100, length = 0x000002  /* 跳转型APP = _APP_HEAD */
        /* BEGIN      : origin = 0x33FFF6, length = 0x000002  /* 普通应用或者BOOT应用 */
    	SECT_POG   : origin = 0x3E8102, length = 0x006EFE
    	SECT_RFUN  : origin = 0x009000, length = 0x000800 /* 0x010000 - SECT_RAM */
    
    	CSM_RSVD   : origin = 0x3F7F80, length = 0x000076
    	CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
    	OTP        : origin = 0x3D7800, length = 0x000400
    	RESET      : origin = 0x3FFFC0, length = 0x000002
    	IQTABLES   : origin = 0x3FE000, length = 0x000b50
    	BOOTROM    : origin = 0x3FF27C, length = 0x000D44
    	VECTORS    : origin = 0x3FFFC2, length = 0x00003E
    
    PAGE 1 :
    	BOOT_RSVD  : origin = 0x000002, length = 0x00004E
    	RAM_STACK  : origin = 0x000050, length = 0x0007B0 /* 堆栈放在M0M1内存 */
    	SECT_RAM   : origin = 0x009800, length = 0x000800
    
    
    }
    
    
    SECTIONS
    {
    	codestart        : > BEGIN,    PAGE = 0
    	.text            : > SECT_POG, PAGE = 0
    
    
    
    
    	ramfuncs   : LOAD = SECT_POG, RUN = SECT_RFUN,
    		     LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
    		     RUN_START(_RamfuncsRunStart), LOAD_SIZE(_RamfuncsLoadSize), PAGE = 0
    
    
    	.cinit           : > SECT_POG, PAGE = 0 /* cinit、econst段建议放在代码段尾部 */
    	.econst          : > SECT_POG, PAGE = 0
    
    	.stack           : > RAM_STACK,PAGE = 1
    	.esysmem         : > SECT_RAM, PAGE = 1
    	.ebss            : > SECT_RAM, PAGE = 1
    
    
        IQmath              : > SECT_POG      PAGE = 0            /* Math Code */
    	IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
    
    	.reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used */
    	vectors          : > VECTORS    PAGE = 0, TYPE = DSECT
    	csm_rsvd         : > CSM_RSVD   PAGE = 0, TYPE = DSECT
    	csmpasswds       : > CSM_PWL    PAGE = 0, TYPE = DSECT
    }

  • 我 bootloader  Flash代码

    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
    InitFlash();
    MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart);

    APP Flash 代码

    memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize);


    InitFlash();

  • 您好,

          我不是很明白下面两行

          BEGIN : origin = 0x3F7FF6, length = 0x000002 /* 普通应用或者BOOT应用 = 0x33FFF6。跳转型APP = _APP_HEAD */
          SECT_POG : origin = 0x3F0000, length = 0x007F80

          BEGIN 地址来自 3F7FF6,SECT_POG 地址小于 3F0000。您能否检查此 BEGIN 地址。

          我在其他配置的部分中没有看到任何问题,但我将继续进一步分析它。

           您能否检查生成的MAP文件,确认section映射正确。