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.

[参考译文] TMS320F280025C:配置 DCSM 引导引脚和引导 DEF 后、闪存编程期间出错

Guru**** 2422790 points
Other Parts Discussed in Thread: UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1161560/tms320f280025c-error-during-flash-programming-after-configuring-dcsm-boot-pin-and-boot-def

器件型号:TMS320F280025C
主题中讨论的其他器件:UNIFLASHSysConfig

您好!

我正在尝试使用 syscfg 修改引导引脚的数量来配置引导设置。 除了更改引导引脚数和引导 DEF0和引导 Def1之外、我不会修改任何其他内容。 其余选项按原样设置、但当我尝试刷写程序时、我在控制台上收到以下错误消息

这是 DCSM syscfg 中的设置:

我尝试使用 uniflash 提取存储器数据、我看到以下内容:

请告诉我、我在这里遗漏了什么。

谢谢你

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

    也就是说、在地址0x78010上、它正在尝试对0xA004进行编程。 是正确的数据吗? 如果只想配置引导设置、则不应启用其他段进行配置。 您能否附加从 syscfg 生成的 dcsm.asm 和 dcsm.cmd 文件。

    此致、

    Vivek Singh

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

    您好、Vivek、

    我没有尝试将0xA004编程为0x78010。 附加 dcsm.asm 和 dcsm.cmd 文件。

    ;----------------------------------------------------------------------
    ; Zone 1
    ;----------------------------------------------------------------------
         .sect "dcsm_otp_z1_linkpointer"
          .retain
          .long 0x1FFFFFFF
          .long 0xFFFFFFFF     ;Reserved
          .long 0x1FFFFFFF
          .long 0xFFFFFFFF     ;Reserved
          .long 0x1FFFFFFF
          .long 0xFFFFFFFF     ;Reserved
        
         .sect "dcsm_otp_z1_pswdlock"
          .retain
          .long 0xFB7FFFFF
          .long 0x7FFFFFFF     ;Reserved
          
         .sect "dcsm_otp_z1_crclock"
          .retain
          .long 0x4BFFFFFF
          .long 0x3FFFFFFF     ;Reserved
       
         .sect "dcsm_otp_z1_gpreg"
          .retain
          .long 0x5AFFFF20     ;Z1OTP_BOOTPIN_CONFIG
          .long 0x5AFFFFff     ;Z1OTP_GPREG2
         .sect "dcsm_otp_z1_bootctrl"
          .retain
          .long 0xFFFF0303     ;Z1OTP_BOOTDEF_LOW
          .long 0xFFFFFFFF     ;Z1OTP_BOOTDEF_HIGH
          
         .sect "dcsm_zsel_z1"
          .retain
          .long 0x000000F0       ;Z1-EXEONLYRAM
          .long 0x0000FFFF      ;Z1-EXEONLYSECT
          .long 0x0000AA00          ;Z1-GRABRAM
          .long 0xAAAAAAAA         ;Z1-GRABSECT
          
          .long 0xFFFFFFFF
          .long 0x47FFFFFF
          .long 0xFFFFFFFF
          .long 0xFFFFFFFF
    
    
    ;----------------------------------------------------------------------
    
    ; 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 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;
    ;;     .sect "dcsm_otp_z2_pswdlock"
    ;;      .retain
    ;;      .long 0xBF7FFFFF
    ;;      .long 0x77FFFFFF     ;Reserved
    ;;      
    ;;     .sect "dcsm_otp_z2_crclock"
    ;;      .retain
    ;;      .long 0x0FFFFFFF
    ;;      .long 0x37FFFFFF     ;Reserved
    ;;            
    ;;     .sect "dcsm_otp_z2_gpreg"
    ;;      .retain
    ;;      .long 0x5AFF1820     ;Z2OTP_BOOTPIN_CONFIG
    ;;      .long 0x5AFFFFff     ;Z2OTP_GPREG2
    ;;     .sect "dcsm_otp_z2_bootctrl"
    ;;      .retain
    ;;      .long 0x00000000     ;Z2OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z2OTP_BOOTDEF_HIGH
    ;;      
    ;;     .sect "dcsm_zsel_z2"
    ;;      .retain
    ;;      .long 0x000000F0       ;z2-EXEONLYRAM
    ;;      .long 0x0000FFFF      ;z2-EXEONLYSECT
    ;;      .long 0x0000AA00          ;z2-GRABRAM
    ;;      .long 0xAAAAAAAA         ;z2-GRABSECT
    ;;      
    ;;      .long 0xFFFFFFFF
    ;;      .long 0xE3FFFFFF
    ;;      .long 0xFFFFFFFF
    ;;      .long 0xFFFFFFFF
    
    
    ;----------------------------------------------------------------------
    
    ; 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
    ;----------------------------------------------------------------------
    
    

    /* 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.  LinkPointers */
       DCSM_OTP_Z1_LINKPOINTER   : origin = 0x78000, length = 0x00000C
       /* Z1 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z1_GPREG         : origin = 0x7800C, length = 0x000004
       /* Z1 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z1_PSWDLOCK	    : origin = 0x78010, length = 0x000004
       /* Z1 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z1_CRCLOCK	    : origin = 0x78014, length = 0x000004
       /* Z1 OTP.  RESERVED/BOOTCTRL */
       DCSM_OTP_Z1_BOOTCTRL	    : origin = 0x7801C, length = 0x000004
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_ZSEL_Z1_P0	        : origin = 0x78020, length = 0x000010
    
       /* Z2 OTP.  LinkPointers */
       DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78200, length = 0x00000C
       /* Z2 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z2_GPREG	        : origin = 0x7820C, length = 0x000004
       /* Z2 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z2_PSWDLOCK	    : origin = 0x78210, length = 0x000004
       /* Z2 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z2_CRCLOCK	    : origin = 0x78214, length = 0x000004
       /* Z2 OTP.  GPREG3/BOOTCTRL */
       DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004
    
       /* DCSM Z2 Zone Select Contents (!!Movable!!) */
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
       DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010
    
    }
    
    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_bootctrl		: > DCSM_OTP_Z1_BOOTCTRL		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_otp_z2_bootctrl		: > DCSM_OTP_Z2_BOOTCTRL		PAGE = 0, type = DSECT
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

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

    好的、为什么您不仅要在 SysConfig 中启用配置的引导设置部分、还要尝试新生成的代码、看看它是否起作用?

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

    您好、Vivek、

    如果您查看我的第一个帖子、屏幕截图显示我已经设置了 syscfg DCSM 以启用配置的引导设置部分、但我收到了错误。

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

    是的、您已将 syscfg 设置为启用引导设置、但也启用了其他不需要的段。 您可以禁用其他段配置、仅启用引导设置、然后查看是否正常工作。

    此致、

    Vivek Singh

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

    您好、Vivek、

    这是我尝试的设置和得到的错误。

    这是存储器位置的快照

    同时附加 dcsm.cmd 和 dcsm.asm

    ;----------------------------------------------------------------------
    ; Zone 1
    ;----------------------------------------------------------------------
    ;;     .sect "dcsm_otp_z1_linkpointer"
    ;;      .retain
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;    
         .sect "dcsm_otp_z1_pswdlock"
          .retain
          .long 0xFB7FFFFF
          .long 0x7FFFFFFF     ;Reserved
          
         .sect "dcsm_otp_z1_crclock"
          .retain
          .long 0x4BFFFFFF
          .long 0x3FFFFFFF     ;Reserved
       
         .sect "dcsm_otp_z1_gpreg"
          .retain
          .long 0x5AFFFF20     ;Z1OTP_BOOTPIN_CONFIG
          .long 0x5AFFFFff     ;Z1OTP_GPREG2
         .sect "dcsm_otp_z1_bootctrl"
          .retain
          .long 0xFFFF0303     ;Z1OTP_BOOTDEF_LOW
          .long 0xFFFFFFFF     ;Z1OTP_BOOTDEF_HIGH
    ;;      
    ;;     .sect "dcsm_zsel_z1"
    ;;      .retain
    ;;      .long 0x000000F0       ;Z1-EXEONLYRAM
    ;;      .long 0x0000FFFF      ;Z1-EXEONLYSECT
    ;;      .long 0x0000AA00          ;Z1-GRABRAM
    ;;      .long 0xAAAAAAAA         ;Z1-GRABSECT
    ;;      
    ;;      .long 0xFFFFFFFF
    ;;      .long 0x47FFFFFF
    ;;      .long 0xFFFFFFFF
    ;;      .long 0xFFFFFFFF
    
    
    ;----------------------------------------------------------------------
    
    ; 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 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;      .long 0x1FFFFFFF
    ;;      .long 0xFFFFFFFF     ;Reserved
    ;;
    ;;     .sect "dcsm_otp_z2_pswdlock"
    ;;      .retain
    ;;      .long 0xBF7FFFFF
    ;;      .long 0x77FFFFFF     ;Reserved
    ;;      
    ;;     .sect "dcsm_otp_z2_crclock"
    ;;      .retain
    ;;      .long 0x0FFFFFFF
    ;;      .long 0x37FFFFFF     ;Reserved
    ;;            
    ;;     .sect "dcsm_otp_z2_gpreg"
    ;;      .retain
    ;;      .long 0x5AFF1820     ;Z2OTP_BOOTPIN_CONFIG
    ;;      .long 0x5AFFFFff     ;Z2OTP_GPREG2
    ;;     .sect "dcsm_otp_z2_bootctrl"
    ;;      .retain
    ;;      .long 0x00000000     ;Z2OTP_BOOTDEF_LOW
    ;;      .long 0xFFFFFFFF     ;Z2OTP_BOOTDEF_HIGH
    ;;      
    ;;     .sect "dcsm_zsel_z2"
    ;;      .retain
    ;;      .long 0x000000F0       ;z2-EXEONLYRAM
    ;;      .long 0x0000FFFF      ;z2-EXEONLYSECT
    ;;      .long 0x0000AA00          ;z2-GRABRAM
    ;;      .long 0xAAAAAAAA         ;z2-GRABSECT
    ;;      
    ;;      .long 0xFFFFFFFF
    ;;      .long 0xE3FFFFFF
    ;;      .long 0xFFFFFFFF
    ;;      .long 0xFFFFFFFF
    
    
    ;----------------------------------------------------------------------
    
    ; 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
    ;----------------------------------------------------------------------
    
    

    /* 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.  LinkPointers */
       DCSM_OTP_Z1_LINKPOINTER   : origin = 0x78000, length = 0x00000C
       /* Z1 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z1_GPREG         : origin = 0x7800C, length = 0x000004
       /* Z1 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z1_PSWDLOCK	    : origin = 0x78010, length = 0x000004
       /* Z1 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z1_CRCLOCK	    : origin = 0x78014, length = 0x000004
       /* Z1 OTP.  RESERVED/BOOTCTRL */
       DCSM_OTP_Z1_BOOTCTRL	    : origin = 0x7801C, length = 0x000004
    
       /* DCSM Z1 Zone Select Contents (!!Movable!!) */
       /* Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
       DCSM_ZSEL_Z1_P0	        : origin = 0x78020, length = 0x000010
    
       /* Z2 OTP.  LinkPointers */
       DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78200, length = 0x00000C
       /* Z2 OTP.  GPREG1/GPREG2 */
       DCSM_OTP_Z2_GPREG	        : origin = 0x7820C, length = 0x000004
       /* Z2 OTP.  PSWDLOCK/RESERVED */
       DCSM_OTP_Z2_PSWDLOCK	    : origin = 0x78210, length = 0x000004
       /* Z2 OTP.  CRCLOCK/RESERVED */
       DCSM_OTP_Z2_CRCLOCK	    : origin = 0x78214, length = 0x000004
       /* Z2 OTP.  GPREG3/BOOTCTRL */
       DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004
    
       /* DCSM Z2 Zone Select Contents (!!Movable!!) */
       /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
       DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010
    
    }
    
    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_bootctrl		: > DCSM_OTP_Z1_BOOTCTRL		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_otp_z2_bootctrl		: > DCSM_OTP_Z2_BOOTCTRL		PAGE = 0, type = DSECT
       dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

     该错误表示闪存编程期间出错。 地址0x00078010、数据0x0000A004、FMSTAT 0x00000030;  

    如何找出此0xA004的来源。

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

    看起来地址0x78010已经被不同的值编程。 请参阅下面您提供的内容的快照。

    由于这是使用值 0xFB7FFFF0进行编程的、而不是您尝试使用值 0xFB7FFFFF 对其进行编程、因此您会遇到错误、因为这是不允许的。 这就是为什么我要求您不要在 SysConfig 中启用 PSWDLOCK 和 CRCLOCK 配置的原因。  

    希望这一点很清楚。

    此致、

    Vivek Singh

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

    您好、Vivek、

    谢谢、澄清了这一点。 我必须设置密码锁定(PSWDLOCK)  地址0x78010生成0xFB7FFFF0的 syscfg 中永久启用 PWSDLOCK、并且能够成功对 OTP 进行编程。

    此致、

    Harsha