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.

[参考译文] TMS320F280039C-Q1:Fapi_setActiveFlashBank 从应用程序跳转到引导加载程序后进入非法指令

Guru**** 2589530 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1498332/tms320f280039c-q1-fapi_setactiveflashbank-goes-into-illegal-instruction-after-jumping-from-application-to-bootloader

器件型号:TMS320F280039C-Q1
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好:

我已经为280039c 器件创建了自定义引导加载程序、在基于引导加载程序通过 CAN 刷写固件时一切都运行良好。 但是、当 程序从应用程序固件跳回引导加载程序、并尝试调用 Fapi_setActiveFlashBank 时、程序将进入非法指令、请提供有关该问题的调试提示

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了清晰说明、下面是引导加载程序的链接器文件  

    /*//#######################################################################
    
    ////
    文件:f28003x_flash_api_lnk.cmd
    
    //标题:f28003x 器件的闪存 API 链接器 cmd 文件
    
    ////##############################################################################################################
    */
    
    memory
    {
    开始:origin = 0x00080000、长度= 0x00000002
    BOOT_RSVD :origin = 0x00000002、length = 0x00000126
    
    RAMM0 :origin = 0x00000128、length = 0x000002D8
    RAMM1 :origin = 0x00000400、length = 0x00000380 /*片上 RAM 块 M1 */
    BOOT_RSVD_SYSBIOS:origin = 0x00000780、length = 0x00000080
    
    /* RAMLS0 :origin = 0x00008000、长度= 0x00000800
    RAMLS1 :origin = 0x00008800、长度= 0x00000800
    RAMLS2 :origin = 0x00009000、length = 0x00000800
    RAMLS3 :origin = 0x00009800、length = 0x00000800 */
    RAMLS03 :origin = 0x00008000、length = 0x00002000
    RAMLS4 :origin = 0x0000A000、长度= 0x00000800
    RAMLS5 :origin = 0x0000A800、长度= 0x00000800
    RAMLS6 :origin = 0x0000B000、长度= 0x00000800
    RAMLS7 :origin = 0x0000B800、length = 0x00000800
    
    /*组合所有 LS RAM *//
    RAMLS :origin = 0x00008000、length = 0x00004000
    
    RAMGS0 :origin = 0x0000C000、长度= 0x00001000
    RAMGS1 :origin = 0x0000D000、length = 0x00001000
    RAMGS2 :origin = 0x0000E000、长度= 0x00001000
    RAMGS3 :origin = 0x0000F000、长度= 0x00001000
    
    BootROM :origin = 0x003F8000、length = 0x00007FC0
    SECURE_ROM :origin = 0x003F2000、length = 0x00006000
    
    
    reset :origin = 0x003FFFC0、length = 0x00000002
    
    /*闪存扇区
    *//*
    Bank 0 */ FLASH_BANK_BOOT_MARKER:origin
    
    
    
    
    = 0x080008、length
    = 0x000008 FLASH_BANK0_SEC0:origin = 0x080010、length = 0x000FF0 FLASH_BANK0_SEC1:origin = 0x081000、length = 0x001000 FLASH_BANK0_SEC0 = 0x081000_SE1000、0x01000 CRY= 0x081000_SE1000 CRY= 0x081000CRY0_SE1000
    origin = 0x086000、length = 0x001000
    FLASH_BANK0_sec7:origin = 0x087000
    、length = 0x001000 FLASH_BANK0_SEC8:
    
    
    origin = 0x088000、length
    
    = 0x001000 FLASH_BANK0_SEC9
    
    :origin = 0x089000、length = 0x001000 FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000 FLASH_BANK0_SEC1000 = 0x08B0_CRY= 0x01000、CRY= 0x08B0_SEC1000、CRY= 0x08B000、0x1000:0x1000 origin = 0x08F000、length = 0x001000
    
    /* Bank 1 */
    FLASH_BANK1_SEC0:origin
    = 0x090000、length =
    
    
    
    0x001000 FLASH_BANK1_SEC1
    :origin = 0x091000
    、length = 0x001000 FLASH_BANK1_SEC2:origin = 0x092000、length = 0x001000 FLASH_BANK1_SEC3:origin = 0x093000、length = 0x001000 flash1_BANK1_SE91000、BANK1_SE1000 = 0x01000 CRY1_SE9000 = 0x01000、BANK1_SE91000:0x01000
    origin = 0x098000、length = 0x001000
    FLASH_BANK1_SEC9:origin = 0x099000
    、length = 0x001000 FLASH_BANK1_SEC10:origin = 0x09A000
    、
    
    length
    
    = 0x001000 FLASH_BANK1_SEC11:origin = 0x09B000、length = 0x001000 FLASH_BANK1_SEC12:origin = 0x09C000、length = 0x001000 FLASH_BANK1_SEC9000、0x100000 = 0x09000、sec长度= 0x091000;BANK1_SEC9000
    
    
    
    
    
    :>开始、align(8)
    .text :>> FLASH_BANK0_sec2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4、ALIGN (8)
    .cinit :> FLASH_BANK0_SEC4、align(8)
    .switch :> FLASH_BANK0_SEC1、ALIGN(8)
    .reset :>重置、 TYPE = DSECT /*未使用、*/
    
    .stack :> RAMM0
    
    #if 已定义(__TI_EABI__)
    .init_array :> FLASH_BANK0_SEC1、ALIGN (8)
    .bss :> RAMLS03
    .bss:输出 :> RAMLS03
    .bss:CIO :> RAMLS03
    .data :> RAMLS03
    .sysmem :> RAMLS03
    .const :> FLASH_BANK0_SEC4、align(8)
    #else
    .pinit :> FLASH_BANK0_SEC1、ALIGN(8)
    .ebss :> RAMLS03
    .esysmem :> RAMLS03
    .cio :> RAMLS03
    .econst :> FLASH_BANK0_SEC4、align(8)
    #endif
    
    ramgs0 :> RAMGS0
    RAMGS1 :> RAMGS0
    
    /*分配 IQ 数学区域:*/
    IQmath :> FLASH_BANK0_SEC1、ALIGN(8)
    IQmathTables :> FLASH_BANK0_sec2、ALIGN (8)
    
    
    组{
    .TI.ramfunc
    {-l FAPI_F28003x_EABI_v1.58.10.lib}
    
    load = FLASH_BANK0_SEC1、
    RUN = RAMLS03、
    LOAD_START (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    LOAD_END (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    RUN_SIZE (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    ALIGN (8)
    
    AppToBoot :> RAMLS7、键入= NOINIT
    bootloader_marker {*(bootloader_marker)}> flash_Bank_boot_marker、align (8)
    DataBufferSection :> RAMM0, ALIGN(8)
    }/*//#########################################################################################################
    
    
    //文件结尾。
    //##########################################################################
    */ 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kai:

    它如何再次从应用程序跳转到引导加载程序代码、这是在器件正在寻找固件更新的上电复位之后发生的吗?

    此外、该自定义引导加载程序是否是对 C2000ware 中提供的引导加载程序进行修改、正确吗?

    您能否为这个非法指令提供程序地址?

    谢谢。此致、

    Charles