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.

[参考译文] TMS320F280037C:使用 SysConfig 将 DCSM OTP 编程为从闪存独立引导

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1477953/tms320f280037c-programming-dcsm-otp-to-standalone-boot-from-flash-using-sysconfig

器件型号:TMS320F280037C
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

我 有关于设置 DCSM OTP 以使器件独立从闪存引导的问题。

我知道 F28003x MCU 的引导模式选择引脚默认为 GPIO24和 GPIO32、这些引脚应拉高以将引导模式配置设置为闪存。 但是、我想将这些 GPIO 引脚用于其他功能、因此、 除了 DCSM 安全工具 指南 SPRACP8A 之外、我还尝试根据 TMS320F28003x TRM 中的第4.5.3.1节"零引导模型选择引脚"配置引导模式、但在尝试刷写时收到以下错误。

我将 SysConfig 中的 ZONE1标头设置为使用0引导引脚、并将 BOOTDEF0设置为闪存条目地址0x00080000。 我没有配置 LinkPointer、而是按原样保留区域2。 这是我第一次尝试刷写包含 SysConfig 生成的 dcsm.asm 和 dcsm.cmd 文件的构建、因此我不知道为什么它会通知我我正在尝试对已编程的位置进行编程。

此错误的可能原因/修复?

是否有办法从器件实时检索 DCSM OTP 设置?

当前 SysConfig 设置:

请记住、我使用的是 C2000ware 的 v4.03.00和 CCS 的 v12.3.0。

感谢您的帮助。

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

    尊敬的 Jacob:

    我们的 syscfg DCSM 工具专家离开工作、应该会在几天后回来。 我可以引导您查看一些有类似问题的 E2E 主题-  

    (5) TMS320F280039C:[错误] C28xx_CPU1:闪存编程期间出错。 地址0x00078004、FMSTAT (在某些器件上为 STATCMD) 0x00000030 - C2000微控制器论坛- C2000Tm︎ 微控制器- TI E2E 支持论坛

    (5) TMS320F2800137:DCSM - C2000微控制器论坛- C2000Tm︎ 微控制器- TI E2E 支持论坛

    谢谢

    Aswin

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

    尊敬的 Jacob:

    对延迟的答复表示歉意。 我很困惑、为什么您也会看到此错误。 您是否可以连接到该器件并查看地址为0x78000的内存浏览器、然后发送一个屏幕截图?

    谢谢您、

    Luke

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

    Luke、

    请参阅屏幕截图、了解您在下面提出的要求:

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

    尊敬的 Jacob:

    也许您的 dcsm.asm 文件正在尝试对地址0x78004处的所有 FS 进行编程。 您是否还能共享生成的 dcsm.asm 和 dcsm.cmd 文件?

    谢谢您、

    Luke

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

    Luke、

    请参阅 下面的。

    dcsm.cmd:

    /* this linker command file is to be included if user wants to use the DCSM feature on the device
     * DCSM  means Dual Zone Code Security Module.
     * This linker command file works as an addendum ot the already existing Flash/RAM linker command file
     * that the project has.
     * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file
     * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and
     * doesn't provide the needed proper *_ZoneSelectBlock.asm sources .
     * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this.
     *
     * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed.
     *
    */
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
    
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_OTP_Z1_LINKPOINTER     : origin = 0x78000, length = 0x00006
       DCSM_OTP_Z1_JLM_ENABLE      : origin = 0x78006, length = 0x00002
       DCSM_OTP_Z1_GPREG           : origin = 0x78008, length = 0x00008
       DCSM_OTP_Z1_PSWDLOCK        : origin = 0x78010, length = 0x00002
       DCSM_OTP_Z1_CRCLOCK         : origin = 0x78012, length = 0x00002
       DCSM_OTP_Z1_JTAG_PSWDH      : origin = 0x78014, length = 0x00004
       DCSM_OTP_Z1_CMAC_KEY        : origin = 0x78018, length = 0x00008
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       DCSM_ZSEL_Z1_P0             : origin = 0x78020, length = 0x000020
    
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning */
       DCSM_OTP_Z2_LINKPOINTER     : origin = 0x78200, length = 0x00006
       DCSM_OTP_Z2_RSVD            : origin = 0x78206, length = 0x00002
       DCSM_OTP_Z2_GPREG           : origin = 0x78208, length = 0x00008
       DCSM_OTP_Z2_PSWDLOCK        : origin = 0x78210, length = 0x00002
       DCSM_OTP_Z2_CRCLOCK         : origin = 0x78212, length = 0x00002
       DCSM_OTP_Z2_RSVD1           : origin = 0x78214, length = 0x0000C
       
       /* DCSM Z2 Zone Select Contents (!!Movable!!) */
       DCSM_ZSEL_Z2_P0             : origin = 0x78220, length = 0x000020
    
    }
    
    SECTIONS
    {
       dcsm_otp_z1_linkpointer 	: > DCSM_OTP_Z1_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z1_gpreg        : > DCSM_OTP_Z1_GPREG		    PAGE = 0
       dcsm_otp_z1_pswdlock		: > DCSM_OTP_Z1_PSWDLOCK		PAGE = 0
       dcsm_otp_z1_crclock		: > DCSM_OTP_Z1_CRCLOCK			PAGE = 0
       dcsm_otp_z1_jlm_enable   : > DCSM_OTP_Z1_JLM_ENABLE,     PAGE = 0
       dcsm_otp_z1_jtag_pswdh   : > DCSM_OTP_Z1_JTAG_PSWDH,     PAGE = 0, type = DSECT
       dcsm_otp_z1_cmac_key     : > DCSM_OTP_Z1_CMAC_KEY,       PAGE = 0
       dcsm_zsel_z1				: > DCSM_ZSEL_Z1_P0				PAGE = 0, type = DSECT
    
       dcsm_otp_z2_linkpointer	: > DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z2_gpreg        : > DCSM_OTP_Z2_GPREG		    PAGE = 0, type = DSECT
       dcsm_otp_z2_pswdlock		: > DCSM_OTP_Z2_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z2_crclock		: > DCSM_OTP_Z2_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_rsvd_z2             : > DCSM_OTP_Z2_RSVD,           PAGE = 0, type = DSECT
       dcsm_rsvd1_z2            : > DCSM_OTP_Z2_RSVD1,          PAGE = 0, type = DSECT
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    dcsm.asm:

    ;----------------------------------------------------------------------
    ; Zone 1
    ;----------------------------------------------------------------------
    ;;     .sect "dcsm_otp_z1_linkpointer"
    ;;      .retain
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;    
         .sect "dcsm_otp_z1_jlm_enable"
          .retain
          .long 0xFFFF000F     ;Z1OTP_JLM_ENABLE
    ;;     .sect "dcsm_otp_z1_jtag_pswdh"
    ;;      .retain
    ;;      .long 0x4BFFFFFF     ;Z1OTP_JTAGPSWDH0
    ;;      .long 0x3FFFFFFF     ;Z1OTP_JTAGPSWDH1
    
         .sect "dcsm_otp_z1_cmac_key"
          .retain
          .long 0x00000000     ;Z1OTP_CMACKEY0
          .long 0x00000000     ;Z1OTP_CMACKEY1
          .long 0x00000000     ;Z1OTP_CMACKEY2
          .long 0x00000000     ;Z1OTP_CMACKEY3
      
         .sect "dcsm_otp_z1_pswdlock"
          .retain
          .long 0xFB7FFFFF
          
         .sect "dcsm_otp_z1_crclock"
          .retain
          .long 0x7FFFFFFF
       
         .sect "dcsm_otp_z1_gpreg"
          .retain
          .long 0x5AFFFFFF     ;Z1OTP_GPREG1 = Z1_BOOTPIN
          .long 0x5AFFFFff     ;Z1OTP_GPREG2
          .long 0xFFFFFF03     ;Z1OTP_GPREG3 = Z1OTP_BOOTDEF_LOW
          .long 0xFFFFFFFF     ;Z1OTP_GPREG4 = Z1OTP_BOOTDEF_HIGH
    ;;     .sect "dcsm_zsel_z1"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD0 (LSW of 128-bit password)
    ;;      .long 0x4D7FFFFF     ;Z1OTP_CSMPSWD1
    ;;      .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD2
    ;;      .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD3 (MSW of 128-bit password)
    ;; 
    ;;      .long 0xAAAAAAAA     ;Z1OTP_GRABSECT1
    ;;      .long 0xAAAAAAAA     ;Z1OTP_GRABSECT2
    ;;      .long 0xAAAAAAAA     ;Z1OTP_GRABSECT3
    ;;      .long 0x0000AAAA     ;Z1OTP_GRABRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;; 
    ;;      .long 0xFFFFFFFF     ;Z1OTP_EXEONLYSECT1
    ;;      .long 0x0000FFFF     ;Z1OTP_EXEONLYSECT2
    ;;      .long 0x000000FF     ;Z1OTP_EXEONLYRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Z1OTP_JTAGPSWDL0
    ;;      .long 0x2BFFFFFF     ;Z1OTP_JTAGPSWDL1    
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z1" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z1"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; Zone 2
    ;----------------------------------------------------------------------
    ;;     .sect "dcsm_otp_z2_linkpointer"
    ;;      .retain
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;
    ;;     .sect "dcsm_rsvd_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;     .sect "dcsm_otp_z2_pswdlock"
    ;;      .retain
    ;;      .long 0x1F7FFFFF
    ;;      
    ;;     .sect "dcsm_otp_z2_crclock"
    ;;      .retain
    ;;      .long 0x3FFFFFFF
    ;;            
    ;;     .sect "dcsm_otp_z2_gpreg"
    ;;      .retain
    ;;      .long 0x5AFF1820     ;Z2OTP_GPREG1 = Z2_BOOTPIN
    ;;      .long 0x5AFFFFff     ;Z2OTP_GPREG2
    ;;      .long 0x00000000     ;Z2OTP_GPREG3 = Z2OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z2OTP_GPREG4 = Z2OTP_BOOTDEF_HIGH
    ;;     .sect "dcsm_rsvd1_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;
    ;;     .sect "dcsm_zsel_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD0 (LSW of 128-bit password)
    ;;      .long 0x1F7FFFFF     ;Z2OTP_CSMPSWD1
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD2
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD3 (MSW of 128-bit password)
    ;; 
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT1
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT2
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT3
    ;;      .long 0x0000AAAA     ;Z2OTP_GRABRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;; 
    ;;      .long 0xFFFFFFFF     ;Z2OTP_EXEONLYSECT1
    ;;      .long 0x0000FFFF     ;Z2OTP_EXEONLYSECT2
    ;;      .long 0x000000FF     ;Z2OTP_EXEONLYRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z2" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z2"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; End of file
    ;----------------------------------------------------------------------
    
    

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

    尊敬的 Jacob:

    我看到问题了。 您的链接指针值在 dcsm.asm 中被注释掉。 发生这种情况时、CCS 将尝试对地址0x78000处的所有 FS 进行编程、如果这些 FS 位已编程为0、则无法将其编程为1。

    若要解决该问题、您必须在 SysConfig 中启用区域标头块、以便在生成的代码中不会注释掉链接指针值。 确保不要使用意外的值对区域标头中的任何值进行编程、因为它们将被永久编程到器件上(JTAGLOCK / JLM_ENABLE 除外)

    谢谢您、

    Luke

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

    Luke、

    在实施了修改 SysConfig 文件以包含链接指针值的建议后、我仍然遗憾地看到了闪存错误。 但是、我没有看到 错误、即我 尝试对已编程的存储器位置进行编程、因此我认为这是朝着正确方向迈出的一步。 有关闪存错误、请参阅以下内容:

    我的 SysConfig 文件如下所示:

    生成的新 dcsm.asm 和 dcsm.cmd 文件如下:

    dcsm.asm:

    ;----------------------------------------------------------------------
    ; Zone 1
    ;----------------------------------------------------------------------
         .sect "dcsm_otp_z1_linkpointer"
          .retain
          .long 0x00003FFF
          .long 0x00003FFF
          .long 0x00003FFF
        
         .sect "dcsm_otp_z1_jlm_enable"
          .retain
          .long 0xFFFF000F     ;Z1OTP_JLM_ENABLE
    ;;     .sect "dcsm_otp_z1_jtag_pswdh"
    ;;      .retain
    ;;      .long 0x4BFFFFFF     ;Z1OTP_JTAGPSWDH0
    ;;      .long 0x3FFFFFFF     ;Z1OTP_JTAGPSWDH1
    
         .sect "dcsm_otp_z1_cmac_key"
          .retain
          .long 0x00000000     ;Z1OTP_CMACKEY0
          .long 0x00000000     ;Z1OTP_CMACKEY1
          .long 0x00000000     ;Z1OTP_CMACKEY2
          .long 0x00000000     ;Z1OTP_CMACKEY3
      
         .sect "dcsm_otp_z1_pswdlock"
          .retain
          .long 0xFB7FFFFF
          
         .sect "dcsm_otp_z1_crclock"
          .retain
          .long 0x7FFFFFFF
       
         .sect "dcsm_otp_z1_gpreg"
          .retain
          .long 0x5AFFFFFF     ;Z1OTP_GPREG1 = Z1_BOOTPIN
          .long 0x5AFFFFff     ;Z1OTP_GPREG2
          .long 0xFFFFFF03     ;Z1OTP_GPREG3 = Z1OTP_BOOTDEF_LOW
          .long 0xFFFFFFFF     ;Z1OTP_GPREG4 = Z1OTP_BOOTDEF_HIGH
         .sect "dcsm_zsel_z1"
          .retain
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD0 (LSW of 128-bit password)
          .long 0x4D7FFFFF     ;Z1OTP_CSMPSWD1
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD2
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD3 (MSW of 128-bit password)
     
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT1
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT2
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT3
          .long 0x0000AAAA     ;Z1OTP_GRABRAM1
          .long 0xFFFFFFFF     ;Reserved
          .long 0xFFFFFFFF     ;Reserved
     
          .long 0xFFFFFFFF     ;Z1OTP_EXEONLYSECT1
          .long 0x0000FFFF     ;Z1OTP_EXEONLYSECT2
          .long 0x000000FF     ;Z1OTP_EXEONLYRAM1
          .long 0xFFFFFFFF     ;Reserved
          .long 0xFFFFFFFF     ;Z1OTP_JTAGPSWDL0
          .long 0x2BFFFFFF     ;Z1OTP_JTAGPSWDL1    
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z1" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z1"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; Zone 2
    ;----------------------------------------------------------------------
    ;;     .sect "dcsm_otp_z2_linkpointer"
    ;;      .retain
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;
    ;;     .sect "dcsm_rsvd_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;     .sect "dcsm_otp_z2_pswdlock"
    ;;      .retain
    ;;      .long 0x1F7FFFFF
    ;;      
    ;;     .sect "dcsm_otp_z2_crclock"
    ;;      .retain
    ;;      .long 0x3FFFFFFF
    ;;            
    ;;     .sect "dcsm_otp_z2_gpreg"
    ;;      .retain
    ;;      .long 0x5AFF1820     ;Z2OTP_GPREG1 = Z2_BOOTPIN
    ;;      .long 0x5AFFFFff     ;Z2OTP_GPREG2
    ;;      .long 0x00000000     ;Z2OTP_GPREG3 = Z2OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z2OTP_GPREG4 = Z2OTP_BOOTDEF_HIGH
    ;;     .sect "dcsm_rsvd1_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;
    ;;     .sect "dcsm_zsel_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD0 (LSW of 128-bit password)
    ;;      .long 0x1F7FFFFF     ;Z2OTP_CSMPSWD1
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD2
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD3 (MSW of 128-bit password)
    ;; 
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT1
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT2
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT3
    ;;      .long 0x0000AAAA     ;Z2OTP_GRABRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;; 
    ;;      .long 0xFFFFFFFF     ;Z2OTP_EXEONLYSECT1
    ;;      .long 0x0000FFFF     ;Z2OTP_EXEONLYSECT2
    ;;      .long 0x000000FF     ;Z2OTP_EXEONLYRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z2" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z2"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; End of file
    ;----------------------------------------------------------------------
    
    

    dcsm.cmd:

    /* this linker command file is to be included if user wants to use the DCSM feature on the device
     * DCSM  means Dual Zone Code Security Module.
     * This linker command file works as an addendum ot the already existing Flash/RAM linker command file
     * that the project has.
     * The sections in the *_ZoneSelectBlock.asm source file is linked as per the commands given in the file
     * NOTE - please note fill=0xFFFF, this helps if users include this file in the project by mistake and
     * doesn't provide the needed proper *_ZoneSelectBlock.asm sources .
     * Please refer to the Blinky DCSM example in the controlsuite examples for proper usage of this.
     *
     * Once users are confident that they want to program the passwords in OTP, the DSECT section type can be removed.
     *
    */
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
    
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_OTP_Z1_LINKPOINTER     : origin = 0x78000, length = 0x00006
       DCSM_OTP_Z1_JLM_ENABLE      : origin = 0x78006, length = 0x00002
       DCSM_OTP_Z1_GPREG           : origin = 0x78008, length = 0x00008
       DCSM_OTP_Z1_PSWDLOCK        : origin = 0x78010, length = 0x00002
       DCSM_OTP_Z1_CRCLOCK         : origin = 0x78012, length = 0x00002
       DCSM_OTP_Z1_JTAG_PSWDH      : origin = 0x78014, length = 0x00004
       DCSM_OTP_Z1_CMAC_KEY        : origin = 0x78018, length = 0x00008
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       DCSM_ZSEL_Z1_P0             : origin = 0x78020, length = 0x000020
    
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning */
       DCSM_OTP_Z2_LINKPOINTER     : origin = 0x78200, length = 0x00006
       DCSM_OTP_Z2_RSVD            : origin = 0x78206, length = 0x00002
       DCSM_OTP_Z2_GPREG           : origin = 0x78208, length = 0x00008
       DCSM_OTP_Z2_PSWDLOCK        : origin = 0x78210, length = 0x00002
       DCSM_OTP_Z2_CRCLOCK         : origin = 0x78212, length = 0x00002
       DCSM_OTP_Z2_RSVD1           : origin = 0x78214, length = 0x0000C
       
       /* DCSM Z2 Zone Select Contents (!!Movable!!) */
       DCSM_ZSEL_Z2_P0             : origin = 0x78220, length = 0x000020
    
    }
    
    SECTIONS
    {
       dcsm_otp_z1_linkpointer 	: > DCSM_OTP_Z1_LINKPOINTER		PAGE = 0
       dcsm_otp_z1_gpreg        : > DCSM_OTP_Z1_GPREG		    PAGE = 0
       dcsm_otp_z1_pswdlock		: > DCSM_OTP_Z1_PSWDLOCK		PAGE = 0
       dcsm_otp_z1_crclock		: > DCSM_OTP_Z1_CRCLOCK			PAGE = 0
       dcsm_otp_z1_jlm_enable   : > DCSM_OTP_Z1_JLM_ENABLE,     PAGE = 0
       dcsm_otp_z1_jtag_pswdh   : > DCSM_OTP_Z1_JTAG_PSWDH,     PAGE = 0, type = DSECT
       dcsm_otp_z1_cmac_key     : > DCSM_OTP_Z1_CMAC_KEY,       PAGE = 0
       dcsm_zsel_z1				: > DCSM_ZSEL_Z1_P0				PAGE = 0
    
       dcsm_otp_z2_linkpointer	: > DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
       dcsm_otp_z2_gpreg        : > DCSM_OTP_Z2_GPREG		    PAGE = 0, type = DSECT
       dcsm_otp_z2_pswdlock		: > DCSM_OTP_Z2_PSWDLOCK		PAGE = 0, type = DSECT
       dcsm_otp_z2_crclock		: > DCSM_OTP_Z2_CRCLOCK			PAGE = 0, type = DSECT
       dcsm_rsvd_z2             : > DCSM_OTP_Z2_RSVD,           PAGE = 0, type = DSECT
       dcsm_rsvd1_z2            : > DCSM_OTP_Z2_RSVD1,          PAGE = 0, type = DSECT
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    感谢您的帮助。

    谢谢、

    Jacob

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

    您是否在 SysConfig (区域标头块内)中的"Configure Boot Setting"下更改了任何设置? 您似乎已经对受这些 GUI 字段影响的 GPREG 块进行了编程。

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

    这是我尝试使用填充的"Configure Boot Setting" SysConfig 字段刷写 MCU 的第一个实例、因此如果是这种情况、我不知道已经如何对该 OTP 进行编程。 是否有办法检查 GPREG 块的内容、看看该块是否配置为零 BMSP 以及是否从闪存引导?

    如果以某种方式对 ZONE1进行了编程、那么如果 ZONE1进行了编程、此项应覆盖 ZONE1中的设置是否正确? 因此、我可能仍能够  通过对 Zone2标头进行编程将此配置为零 BMSP 以从闪存引导?

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

    尊敬的 Jacob:

    您可以通过观察从地址0x78000开始的内存浏览器内容、确认是否已在 GPREG 处对值进行编程。 您能否截取屏幕截图并在该主题上分享?

    正确、在区域2中编程自定义设置将覆盖区域1中的设置、但我建议您先确认区域1的情况并将区域2方法保存为最后的选择、然后再执行此操作。

    谢谢您、

    Luke

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

    Luke、

    如果我尝试使用构建中包含的 DCSM .asm 和.cmd 文件进行编程、那么我收到了我在下面发布的闪存程序错误、并且内存浏览器空白。

    如果从构建和 闪存中排除 DCSM .asm 和.cmd 文件、则在闪存操作完成后、内存浏览器将填充下面显示的值。

    谢谢、

    Jacob

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

    嘿、Jacob、您似乎已在地址0x7800C 和0x7800E 处编程了定制 GPREG 值。 您将无法使用当前的.cmd 和.asm 文件对 GPREG 值重新编程。  

    如果在 SysConfig 中取消选中"Configure Boot Settings"、是否会在生成的 dcsm.asm 中注释掉所有 GPREG 值? 这是预期行为。 如果是这种情况、我不确定如何使用您在"Memory Browser"中看到的0x5AFFFFFFF 值对 GPREG 值进行编程。

    谢谢您、

    Luke

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

    Luke、

    不幸的是、它们已经被编入方案。 我不记得是这样做的。 取消选中 Configure Boot Setting 框后、ASM 文件会注释掉 GPREG 值。

     

    ;----------------------------------------------------------------------
    ; Zone 1
    ;----------------------------------------------------------------------
         .sect "dcsm_otp_z1_linkpointer"
          .retain
          .long 0x00003FFF
          .long 0x00003FFF
          .long 0x00003FFF
        
         .sect "dcsm_otp_z1_jlm_enable"
          .retain
          .long 0xFFFF000F     ;Z1OTP_JLM_ENABLE
    ;;     .sect "dcsm_otp_z1_jtag_pswdh"
    ;;      .retain
    ;;      .long 0x4BFFFFFF     ;Z1OTP_JTAGPSWDH0
    ;;      .long 0x3FFFFFFF     ;Z1OTP_JTAGPSWDH1
    ;;
    ;;     .sect "dcsm_otp_z1_cmac_key"
    ;;      .retain
    ;;      .long 0x00000000     ;Z1OTP_CMACKEY0
    ;;      .long 0x00000000     ;Z1OTP_CMACKEY1
    ;;      .long 0x00000000     ;Z1OTP_CMACKEY2
    ;;      .long 0x00000000     ;Z1OTP_CMACKEY3
    ;;  
         .sect "dcsm_otp_z1_pswdlock"
          .retain
          .long 0xFB7FFFFF
          
         .sect "dcsm_otp_z1_crclock"
          .retain
          .long 0x7FFFFFFF
       
    ;;     .sect "dcsm_otp_z1_gpreg"
    ;;      .retain
    ;;      .long 0x5AFFFFFF     ;Z1OTP_GPREG1 = Z1_BOOTPIN
    ;;      .long 0x5AFFFFff     ;Z1OTP_GPREG2
    ;;      .long 0xFFFFFF03     ;Z1OTP_GPREG3 = Z1OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z1OTP_GPREG4 = Z1OTP_BOOTDEF_HIGH
         .sect "dcsm_zsel_z1"
          .retain
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD0 (LSW of 128-bit password)
          .long 0x4D7FFFFF     ;Z1OTP_CSMPSWD1
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD2
          .long 0xFFFFFFFF     ;Z1OTP_CSMPSWD3 (MSW of 128-bit password)
     
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT1
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT2
          .long 0xAAAAAAAA     ;Z1OTP_GRABSECT3
          .long 0x0000AAAA     ;Z1OTP_GRABRAM1
          .long 0xFFFFFFFF     ;Reserved
          .long 0xFFFFFFFF     ;Reserved
     
          .long 0xFFFFFFFF     ;Z1OTP_EXEONLYSECT1
          .long 0x0000FFFF     ;Z1OTP_EXEONLYSECT2
          .long 0x000000FF     ;Z1OTP_EXEONLYRAM1
          .long 0xFFFFFFFF     ;Reserved
          .long 0xFFFFFFFF     ;Z1OTP_JTAGPSWDL0
          .long 0x2BFFFFFF     ;Z1OTP_JTAGPSWDL1    
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z1" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z1"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; Zone 2
    ;----------------------------------------------------------------------
    ;;     .sect "dcsm_otp_z2_linkpointer"
    ;;      .retain
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;      .long 0x00003FFF
    ;;
    ;;     .sect "dcsm_rsvd_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;     .sect "dcsm_otp_z2_pswdlock"
    ;;      .retain
    ;;      .long 0x1F7FFFFF
    ;;      
    ;;     .sect "dcsm_otp_z2_crclock"
    ;;      .retain
    ;;      .long 0x3FFFFFFF
    ;;            
    ;;     .sect "dcsm_otp_z2_gpreg"
    ;;      .retain
    ;;      .long 0x5AFF1820     ;Z2OTP_GPREG1 = Z2_BOOTPIN
    ;;      .long 0x5AFFFFff     ;Z2OTP_GPREG2
    ;;      .long 0x00000000     ;Z2OTP_GPREG3 = Z2OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z2OTP_GPREG4 = Z2OTP_BOOTDEF_HIGH
    ;;     .sect "dcsm_rsvd1_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;
    ;;     .sect "dcsm_zsel_z2"
    ;;      .retain
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD0 (LSW of 128-bit password)
    ;;      .long 0x1F7FFFFF     ;Z2OTP_CSMPSWD1
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD2
    ;;      .long 0xFFFFFFFF     ;Z2OTP_CSMPSWD3 (MSW of 128-bit password)
    ;; 
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT1
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT2
    ;;      .long 0xAAAAAAAA     ;Z2OTP_GRABSECT3
    ;;      .long 0x0000AAAA     ;Z2OTP_GRABRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;; 
    ;;      .long 0xFFFFFFFF     ;Z2OTP_EXEONLYSECT1
    ;;      .long 0x0000FFFF     ;Z2OTP_EXEONLYSECT2
    ;;      .long 0x000000FF     ;Z2OTP_EXEONLYRAM1
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0xFFFFFFFF     ;Reserved
    
    
    ;----------------------------------------------------------------------
    
    ; For code security operation,after development has completed, prior to
    ; production, all other zone select block locations should be programmed
    ; to 0x0000 for maximum security.        
    ; If the first zone select block at offset 0x10 is used, the section 
    ; "dcsm_rsvd_z2" can be used to program these locations to 0x0000.
    ; This code is commented out for development.
    
    ;       .sect "dcsm_rsvd_z2"
    ;        .loop (1e0h)
    ;              .int 0x0000
    ;        .endloop
    
    
    ;----------------------------------------------------------------------
    ; End of file
    ;----------------------------------------------------------------------
    
    

    现在我唯一的操作是在所需的标头和链接指针值正确的情况下刷写到 Zone2位置?

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

    是的、在区域2中对自定义引导设置进行编程将覆盖区域1中的自定义设置。 之后、引导设置将是永久的。

    若要测试引导配置、您可以在将值永久编程到 OTP 中之前使用仿真引导。

    谢谢您、

    Luke

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

    Luke、

    我尝试使用 F280037.gel 文件中定义的 EMU_BOOT_FLASH 脚本设置 EMU 引导存储器以匹配零 BMSP 配置。 连接仿真器后、器件无法按照我的理解从闪存引导。 如需查看存储器浏览器、请参阅下面的 EMU 引导寄存器内容:

    我是否需要运行另一个 GEL 脚本、以使电路板在连接仿真器的情况下从闪存引导?

    我想在设置区域2 OTP 值之前实现这一点。

    谢谢、

    Jacob

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

    配置仿真引导寄存器后、是否在 CCS GUI 中触发 CPU 复位?

    是的、在对 Zone 2进行编程之前、我们要确保此操作有效

    谢谢您、

    Luke

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

    Luke、

    当我尝试在 CCS GUI 中触发 CPU 复位时、收到 No Source Available 错误、似乎未完成复位:

    启动调试会话后会调用 OnReset () GEL 函数、对吗? 我这样说是因为我在 SetupDCSM ()中看到 GEL_TextOut 打印语句、一旦我执行调试会话、该语句就会在控制台中的 OnReset ()中调用。 因此、如果是这样、那么在引导期间连接了仿真器、则应读取仿真引导寄存器、否则器件将从闪存引导、情况似乎不是这样。

    当我查看内存浏览器中的0x0D00 (应为 EMU-BOOTPIN-CONFIG 寄存器)时、我确实看到它包含0x5AFFFFFF、EMU-BOOTDEF-LOW 寄存器包含0x00000003、这应该会使引导加载程序 使用从闪存入口点 CPU 组0、扇区0 (0x0008 0000)的零 BMSP 配置进行引导、依我的理解。

    是否有办法逐步执行引导模式过程、以确保其遵循 TRM 图4-2中定义的仿真引导流程?

     在 CCS GUI 中执行 CPU 复位时、我会收到 No Source Available 错误、原因是否显而易见? 如有必要、我可以获取 Disassembly 代码。

    谢谢、

    Jacob

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

    Jacob、

    您可以在 libraries/boot_rom/f28003x/rev0下从 C2000Ware 加载引导 ROM 源和符号。  这样您就可以逐步执行 Bootrom 执行。

    此致、

    Joseph

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

    Jacob、

    您是否尝试过加载引导 ROM 的符号?

    此致、

    Joseph