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:实时固件更新后的看门狗复位

Guru**** 657930 points
Other Parts Discussed in Thread: TIDM-02011, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1136045/tms320f280039c-watchdog-reset-after-live-firmware-update

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

您好、专家:

         为了使用 CAN 接口、我修改了实时固件更新示例。

内核接收并刷写程序、不会出现任何问题。 当它完成时、看门狗被激活

但是、它不像预期的那样启动新加载的程序、而是跳到任何地方并被冻结。

如果我关闭并打开器件、则它开始运行新的程序 OK。

我不知道如何找出问题所在。

提前感谢您的参与、

费尔南多

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

    您好、Fernando、

    感谢您联系 E2E。 我已将此问题分配给了我们的专家、您很快就会听到他们的提问

    此致、

    Peter

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

    您好、Fernando、

    您是否在 BANK1中检查了程序的起始地址是否正确? 此外、如果您可以提供看门狗初始化代码的外观、 这将有助于您更好地了解问题。  

    此致、

    查尔斯

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

    您好、Charles、

    这是看门狗初始化的代码

        //
        // Set the watchdog to generate a reset signal instead of an
        // interrupt signal
        //
        SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET);
    
        //
        // Enable the watchdog
        //
        SysCtl_enableWatchdog();
    
        //Wait the Timeout
        while(1)
        {
    
        };

    这是我要加载到组1中的程序的链接器配置

    MEMORY
    {
       BEGIN           	: origin = 0x09EFF0,   length = 0x000002
       BOOT_RSVD        : origin = 0x00000002, length = 0x00000126
    
       RAMM0            : origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8
       // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RAMLS0_LS1_LS2   : origin = 0x00008000, length = 0x00001800
       RAMLS3           : origin = 0x00009800, length = 0x00000800
       RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800
    
       RAMGS0           : origin = 0x0000C000, length = 0x00001000
       RAMGS1           : origin = 0x0000D000, length = 0x00001000
       RAMGS2           : origin = 0x0000E000, length = 0x00001000
       RAMGS3           : origin = 0x0000F000, length = 0x00000FF8
       // RAMGS3_RSVD      : origin = 0x0000FFF8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       BOOTROM          : origin = 0x003F8000, length = 0x00007FC0
       SECURE_ROM       : origin = 0x003F2000, length = 0x00006000
    
       RESET            : origin = 0x003FFFC0, length = 0x00000002
    
       /* Flash sectors */
    
    
       /* BANK 0 */
       FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE
       FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000
       FLASH_BANK0_SEC2  : origin = 0x082008, length = 0x000FF8
       FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000
       FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000
       FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000
       FLASH_BANK0_SEC6  : 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_11    : origin = 0x08A000, length = 0x002000
       FLASH_BANK0_SEC12_13_14 : origin = 0x08C000, length = 0x002FF0
       FLASH_BANK0_SEC15 : origin = 0x08EFF2, length = 0x000FFE
    
    
       /* BANK 1 */
       FLASH_BANK1_SEC0  : origin = 0x090002, length = 0x000FFE
       FLASH_BANK1_SEC1  : origin = 0x091000, length = 0x001000
       FLASH_BANK1_SEC2  : origin = 0x092008, length = 0x000FF8
       FLASH_BANK1_SEC3  : origin = 0x093000, length = 0x001000
       FLASH_BANK1_SEC4  : origin = 0x094000, length = 0x001000
       FLASH_BANK1_SEC5  : origin = 0x095000, length = 0x001000
       FLASH_BANK1_SEC6  : origin = 0x096000, length = 0x001000
       FLASH_BANK1_SEC7  : origin = 0x097000, length = 0x001000
       FLASH_BANK1_SEC8  : origin = 0x098000, length = 0x001000
       FLASH_BANK1_SEC9  : origin = 0x099000, length = 0x001000
       FLASH_BANK1_SEC10_11    : origin = 0x09A000, length = 0x002000
       FLASH_BANK1_SEC12_13_14 : origin = 0x09C000, length = 0x002FF0
       FLASH_BANK1_SEC15 : origin = 0x09EFF2, length = 0x000FFE
    
      /* BANK 2 */
       FLASH_BANK2_SEC0  : origin = 0x0A0002, length = 0x000FFE
       FLASH_BANK2_SEC1  : origin = 0x0A1000, length = 0x001000
       FLASH_BANK2_SEC2  : origin = 0x0A2008, length = 0x000FF8
       FLASH_BANK2_SEC3  : origin = 0x0A3000, length = 0x001000
       FLASH_BANK2_SEC4  : origin = 0x0A4000, length = 0x001000
       FLASH_BANK2_SEC5  : origin = 0x0A5000, length = 0x001000
       FLASH_BANK2_SEC6  : origin = 0x0A6000, length = 0x001000
       FLASH_BANK2_SEC7  : origin = 0x0A7000, length = 0x001000
       FLASH_BANK2_SEC8  : origin = 0x0A8000, length = 0x001000
       FLASH_BANK2_SEC9  : origin = 0x0A9000, length = 0x001000
       FLASH_BANK2_SEC10_11    : origin = 0x0AA000, length = 0x002000
       FLASH_BANK2_SEC12_13_14 : origin = 0x0AC000, length = 0x002FF0
       FLASH_BANK2_SEC15 : origin = 0x0AEFF2, length = 0x000FFE
    
    // FLASH_BANK0_SEC15_RSVD     : origin = 0x0AFFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
       CLA1_MSGRAMLOW   : origin = 0x001480, length = 0x000080
       CLA1_MSGRAMHIGH  : origin = 0x001500, length = 0x000080
       CLA_DMA_RAM      : origin = 0x001680, length = 0x000080
       DMA_CLA_RAM      : origin = 0x001700, length = 0x000080
    }
    
    
    SECTIONS
    {
       .cinit           : > FLASH_BANK1_SEC9, ALIGN(4)
       .text            : >>FLASH_BANK1_SEC2 | FLASH_BANK1_SEC3 | FLASH_BANK1_SEC4 | FLASH_BANK1_SEC5 | FLASH_BANK1_SEC6, ALIGN(4)
       codestart        : > BEGIN, ALIGN(4)
    
       coeff_table      : > FLASH_BANK1_SEC12_13_14,  ALIGN(4)
    
       .stack           : > RAMM1
       .switch          : > FLASH_BANK1_SEC9, ALIGN(4)
    
    #if defined(__TI_EABI__)
       .init_array      : > FLASH_BANK1_SEC9,       ALIGN(4)
       .bss             : > RAMLS6
       .bss:output      : > RAMLS6
       .bss:cio         : > RAMLS6
       .data            : > RAMLS7
       .sysmem          : > RAMLS7
       .const           : > FLASH_BANK1_SEC9    ALIGN(4)
    #else
       .pinit           : > FLASH_BANK1_SEC9       ALIGN(4)
       .ebss            : >>RAMLS5 | RAMLS6
       .esysmem         : > RAMLS6
       .cio             : > RAMLS5
       .econst          : > FLASH_BANK1_SEC9
    #endif
    
       ramgs0           : > RAMGS0
       ramgs1           : > RAMGS1
    
       .reset           : > RESET,          TYPE = DSECT /* not used, */
    
       dclfuncs         : > FLASH_BANK1_SEC9,     ALIGN(4)
    
    #if  !(CLA_MATH_TABLES_IN_ROM)
       //
       //Load tables to Flash and copy over to RAM
       //
    #if defined(__TI_EABI__)
       CLA1mathTables    :  LOAD = FLASH_BANK1_SEC9,
                            RUN = RAMLS5,
                            RUN_START(CLA1mathTablesRunStart),
                            LOAD_START(CLA1mathTablesLoadStart),
                            LOAD_SIZE(CLA1mathTablesLoadSize),
                            PAGE = 1
    #else
       CLA1mathTables    :  LOAD = FLASH_BANK1_SEC9,
                            RUN = RAMLS5,
                            RUN_START(_CLA1mathTablesRunStart),
                            LOAD_START(_CLA1mathTablesLoadStart),
                            LOAD_SIZE(_CLA1mathTablesLoadSize),
                            PAGE = 1
    #endif
    
    #endif
    
    #if defined(__TI_EABI__)
        /* CLA specific sections */
        Cla1Prog        : LOAD = FLASH_BANK1_SEC10_11,
                          RUN = RAMLS0_LS1_LS2,
                          LOAD_START(Cla1ProgLoadStart),
                          RUN_START(Cla1ProgRunStart),
                          LOAD_SIZE(Cla1ProgLoadSize),
                          ALIGN(4)
    #else
        /* CLA specific sections */
        Cla1Prog        : LOAD = FLASH_BANK1_SEC10_11,
                          RUN = RAMLS0_LS1_LS2,
                          LOAD_START(_Cla1ProgLoadStart),
                          RUN_START(_Cla1ProgRunStart),
                          LOAD_SIZE(_Cla1ProgLoadSize),
                          ALIGN(4)
    #endif
    
    
        Cla1ToCpuMsgRAM  : > CLA1_MSGRAMLOW
        CpuToCla1MsgRAM  : > CLA1_MSGRAMHIGH
    
    #if defined(__TI_EABI__)
       .TI.ramfunc      : LOAD = FLASH_BANK1_SEC9,
                          RUN = RAMLS5
                          LOAD_START(RamfuncsLoadStart),
                          LOAD_SIZE(RamfuncsLoadSize),
                          LOAD_END(RamfuncsLoadEnd),
                          RUN_START(RamfuncsRunStart),
                          RUN_SIZE(RamfuncsRunSize),
                          RUN_END(RamfuncsRunEnd),
                          ALIGN(4)
    #else
       .TI.ramfunc      : LOAD = FLASH_BANK1_SEC9,
                          RUN = RAMLS5
                          LOAD_START(_RamfuncsLoadStart),
                          LOAD_SIZE(_RamfuncsLoadSize),
                          LOAD_END(_RamfuncsLoadEnd),
                          RUN_START(_RamfuncsRunStart),
                          RUN_SIZE(_RamfuncsRunSize),
                          RUN_END(_RamfuncsRunEnd),
                          ALIGN(4)
    #endif
    
       .scratchpad      : > RAMLS3
       .bss_cla         : > RAMLS3
    
       Cla1DataRam      : > RAMLS4
       cla_shared       : > RAMLS3
       CLADataLS1       : > RAMLS3
       Cla_To_Dma       : > CLA_DMA_RAM
       Dma_To_Cla       : > DMA_CLA_RAM
    
    
    #if defined(__TI_EABI__)
       .const_cla      : LOAD = FLASH_BANK1_SEC2,
                          RUN = RAMLS4,
                          RUN_START(Cla1ConstRunStart),
                          LOAD_START(Cla1ConstLoadStart),
                          LOAD_SIZE(Cla1ConstLoadSize),
                          ALIGN(4)
    #else
       .const_cla      : LOAD = FLASH_BANK1_SEC2,
                          RUN = RAMLS4,
                          RUN_START(_Cla1ConstRunStart),
                          LOAD_START(_Cla1ConstLoadStart),
                          LOAD_SIZE(_Cla1ConstLoadSize),
                          ALIGN(4)
    #endif
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */

    内核加组选择代码位于 BANK0中、具有此链接器配置

    //
    // Keep the _bankSelect symbol
    //
    -u bankSelect
    
    MEMORY
    {
       BEGIN           	: origin = 0x00080000, length = 0x0000004c
       BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
    
       RAMM0           	: origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x00000380     /* on-chip RAM block M1 */
       BOOT_RSVD_SYSBIOS: origin = 0x00000780, length = 0x00000080
    
       RAMLS0           : origin = 0x00008000, length = 0x00000800
       RAMLS1           : origin = 0x00008800, length = 0x00000800
       RAMLS2           : origin = 0x00009000, length = 0x00000800
       RAMLS3           : origin = 0x00009800, length = 0x00000800
       RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800
       
       RAMGS0           : origin = 0x0000C000, length = 0x00001000
       RAMGS1           : origin = 0x0000D000, length = 0x00001000
       RAMGS2           : origin = 0x0000E000, length = 0x00001000
       RAMGS3           : origin = 0x0000F000, length = 0x00001000
    
       BOOTROM          : origin = 0x003F8000, length = 0x00007FC0
       SECURE_ROM       : origin = 0x003F2000, length = 0x00006000
    
       RESET            : origin = 0x003FFFC0, length = 0x00000002
    
       /* Flash sectors */
    
       //
       // Allocate space for the liveDFU function in bank 0
       //
       BANK0_SEC1        : origin = 0x081000, length = 0x000017
       /* BANK 0 */
       FLASH_BANK0_SEC0  : origin = 0x08004C, length = 0x000FB4
       FLASH_BANK0_SEC1  : origin = 0x081017, length = 0x000FE9
       FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000
       FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000
       FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000
       FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000
       FLASH_BANK0_SEC6  : 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_SEC11 : origin = 0x08B000, length = 0x001000
       FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000
       FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000
       FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000
       FLASH_BANK0_SEC15 : 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
       FLASH_BANK1_SEC4  : origin = 0x094000, length = 0x001000
       FLASH_BANK1_SEC5  : origin = 0x095000, length = 0x001000
       FLASH_BANK1_SEC6  : origin = 0x096000, length = 0x001000
       FLASH_BANK1_SEC7  : origin = 0x097000, length = 0x001000
       FLASH_BANK1_SEC8  : 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_SEC13 : origin = 0x09D000, length = 0x001000
       FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000
       FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x001000
    
      /* BANK 2 */
       FLASH_BANK2_SEC0  : origin = 0x0A0000, length = 0x001000
       FLASH_BANK2_SEC1  : origin = 0x0A1000, length = 0x001000
       FLASH_BANK2_SEC2  : origin = 0x0A2000, length = 0x001000
       FLASH_BANK2_SEC3  : origin = 0x0A3000, length = 0x001000
       FLASH_BANK2_SEC4  : origin = 0x0A4000, length = 0x001000
       FLASH_BANK2_SEC5  : origin = 0x0A5000, length = 0x001000
       FLASH_BANK2_SEC6  : origin = 0x0A6000, length = 0x001000
       FLASH_BANK2_SEC7  : origin = 0x0A7000, length = 0x001000
       FLASH_BANK2_SEC8  : origin = 0x0A8000, length = 0x001000
       FLASH_BANK2_SEC9  : origin = 0x0A9000, length = 0x001000
       FLASH_BANK2_SEC10 : origin = 0x0AA000, length = 0x001000
       FLASH_BANK2_SEC11 : origin = 0x0AB000, length = 0x001000
       FLASH_BANK2_SEC12 : origin = 0x0AC000, length = 0x001000
       FLASH_BANK2_SEC13 : origin = 0x0AD000, length = 0x001000
       FLASH_BANK2_SEC14 : origin = 0x0AE000, length = 0x001000
       FLASH_BANK2_SEC15 : origin = 0x0AF000, length = 0x001000
    
    
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : >> FLASH_BANK0_SEC0 |FLASH_BANK0_SEC1 ,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC1,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC0,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
    #if defined(__TI_EABI__)
       .init_array      : > FLASH_BANK0_SEC0,  ALIGN(8)
       .bss             : > RAMLS5
       .bss:output      : > RAMLS3
       .bss:cio         : > RAMLS0
       .data            : > RAMLS5
       .sysmem          : > RAMLS5
       .const           : > FLASH_BANK0_SEC0,  ALIGN(8)
    #else
       .pinit           : > FLASH_BANK0_SEC0,  ALIGN(8)
       .ebss            : > RAMLS5
       .esysmem         : > RAMLS5
       .cio             : > RAMLS0
       .econst          : > FLASH_BANK0_SEC0,  ALIGN(8)
    #endif
    
        ramgs0 : > RAMGS0
        ramgs1 : > RAMGS0
    
       .TI.ramfunc      : LOAD = FLASH_BANK0_SEC0,
                          RUN = RAMLS0,
                          LOAD_START(RamfuncsLoadStart),
                          LOAD_SIZE(RamfuncsLoadSize),
                          LOAD_END(RamfuncsLoadEnd),
                          RUN_START(RamfuncsRunStart),
                          RUN_SIZE(RamfuncsRunSize),
                          RUN_END(RamfuncsRunEnd),
                          ALIGN(8)
    
       LDFU_BANK0        : > BANK0_SEC1,     ALIGN(8)
    
    }
    

    正如我解释过的、当新程序完成闪存时、LED 会关闭、因此我假设是这样  

    看门狗会引起复位、但不会启动新程序、处理器会停止

    如果我关闭并打开微控制器、则开始正常工作

    此致、

    费尔南多

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

    费尔南多

    让我来看看这个问题、然后返回给您。  

    谢谢、

    Sira

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

    费尔南多

    请提供一些详细信息:

    您从何处获得了用作开发起点的 F28003x 的 SCI 闪存内核? 要使用的正确内核位于 TIDM-02011解决方案示例文件夹中的 DigitalPowerSDK v4.01.00.00中。

    C2000Ware_DigitalPower_SDK_4_01_00_00\solutions\TIDM_02011\f28003x\examples\flash

    上述版本与 C2000Ware v4.01中的内容在 projectspec 以及 FLASH_kernel_ex3_ldfu.c 中存在一些差异。

    此外、您将需要在 flash_kernel_ex3_ldfu.c 中定义宏 lfu_with _reset、这将触发看门狗。 默认情况下、该示例设置为在不复位器件的情况下运行 LFU。

    因此、请使用 DigitalPowerSDK v4.01中的闪存内核、而不是 C2000Ware v4.01。

    谢谢、

    Sira

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

    Sira、

    感谢你的帮助。 我使用 了 C2000Ware v4.01中的示例、因此我将查看 DigitalPowerSDK v4.01中提到的示例

    此致、

    费尔南多

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

    费尔南多、听起来不错、请继续发帖。

    谢谢、

    Sira

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

    您好!

    我已将所有更改包含在您提到的更新示例中。 它仍然执行相同的操作。 当它完成刷写新程序时、它会被冻结。


    一个特别的事情是、我在使用 JTAG 刷写内核后立即开始更新过程、而不会关闭和打开器件。

    如果在使用 JTAG 刷写内核后、我打开和关闭器件、然后运行更新过程、则微控制器复位正常。 新程序

    开始正常运行。 这一事实可能会让您了解正在发生的情况。

    此致、

    费尔南多

             

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

    费尔南多

    我对您的案例中的问题场景有点困惑。 那么、让我来描述一下对我来说是可行的步骤(在您的情况下、串行/SCI 将被替换为 CAN):

    1.使用 LFU_ITH_RESET 构建闪存内核(LDFU_BANK0和 LDFU_BAN1构建配置)

    2.使用 CCS 将 SCI 闪存内核 LDFU_BANK0闪存至组0。 执行会转到 bankSelect()函数。 点击"Run"。 然后、使用命令提示符向所需的应用文件(目标为 BANK1)发出串行闪存编程器命令。 出现命令菜单。 发出 LFU 命令(8)。 该应用程序编程到组1。

    3.断开目标。 使用一个只擦除必需闪存扇区的不同目标配置文件(CCXML)。 连接到目标 、并使用 CCS 将 SCI 闪存内核 LDFU_BANK1刷新到 BANK1。 执行进入 main()。 点击"Run"。 然后、使用命令提示符向所需的应用文件(目标为 Bank0)发出串行闪存编程器命令。 出现命令菜单。 发出 LFU 命令(8)。 该应用程序编程到 Bank0。

    4.断开目标。 现在、两个闪存组都有闪存内核和应用程序。

    5.重置设备。 Bank0上的应用现已激活。

    6.现在,您可以使用 命令提示符使用所需的应用程序文件(目标为 BANK1)发出串行闪存编程器命令。 出现命令菜单。 发出 LFU 命令(8)。 该应用程序编程到组1。 WD 复位将自动发生、Bank1上的应用将自动开始运行。 现在、您可以根据需要多次重复此乒乓步骤、而无需使用 CCS 或手动复位器件。

    谢谢、

    Sira

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

    您好,Sira,

          感谢你的帮助。

    我期望应用 程序在执行步骤2后立即开始运行、而不应用复位。

    但是、只有在 完成第二步后关闭并打开器件、它才会启动。

    如果 我在刷写内核后以及在将应用程序加载到组1之前复位微控制器、  
    然后、程序通过 CAN 完成刷写过程后、立即开始直接运行。

    我希望这能解释我 所期望的内容。 如果无法避免这种复位、这是可以的、我们将考虑到这一点

    制造工艺的影响

    此致

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

    费尔南多

    好的、现在我了解了。

    我认为这是因为在步骤2中、您已经连接了调试器、因此当 WD 复位发生时、执行会转到引导 ROM、其中标识了调试器已连接、因此它不会引导到常规的闪存引导入口点。

    如果您阅读的是 F28003x TRM 的4.6.2、则会看到一些相关的详细信息。

    如果在对闪存内核进行编程后重置器件、调试器将断开连接、因此如果您运行 LFU 命令并对应用程序进行编程、则会发生 WD 重置、引导 ROM 引导至闪存引导入口点(bankSelect())、您的应用程序将运行。

    谢谢、

    Sira