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.

[参考译文] TMS320F280023C:F28002X 如何使用 DCSM 加密?

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1105660/tms320f280023c-how-does-the-f28002x-use-dcsm-encryption

器件型号:TMS320F280023C

大家好、

以下是客户提出的问题、可能需要您的帮助:

已尝试使用 F28002X 的 DCSM 加密程序、已查看与 DCSM 相关的文件和 F2800X 的 DCSM_SECURITY_TOOL 例程。 但是、仍不清楚如何在28002X_FLASH_lnk.cmd 处为相关 DSCM 添加 CMD 文件。 根据 F2800X DCSM_SECURITY_TOOL 例程向工程添加了 dcsm.asm 程序:

;----------------------------------------------------------------------
; Zone 1
;----------------------------------------------------------------------
     .sect "dcsm_otp_z1_linkpointer"
      .retain
      .long 0x1FFFFFFF       ;Z1-LINKPOINTER1
      .long 0xFFFFFFFF       ;Reserved
      .long 0x1FFFFFFF       ;B0_Z1OTP_LINKPOINTER2
      .long 0xFFFFFFFF       ;Reserved
      .long 0x1FFFFFFF       ;B0_Z1OTP_LINKPOINTER3
      .long 0xFFFFFFFF       ;Reserved

     .sect "dcsm_otp_z1_pswdlock"
      .retain
      .long 0xFB7FFFFF       ;Z1-PSWDLOCK
      .long 0x7FFFFFFF       ;Reserved

     .sect "dcsm_otp_z1_crclock"
      .retain
      .long 0x4BFFFFFF       ;Z1-CRCLOCK
      .long 0x3FFFFFFF       ;Reserved

;;     .sect "dcsm_otp_z1_gpreg"
;;      .retain
;;      .long 0x5AFF1921     ;Z1OTP_BOOTPIN_CONFIG
;;      .long 0x5AFFFFff     ;Z1OTP_GPREG2
;;     .sect "dcsm_otp_z1_bootctrl"
;;      .retain
;;      .long 0x00000000     ;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       ;Z1-CSMPSWD0 (LSW of 128-bit password)
      .long 0x47FFFFFF       ;Z1-CSMPSWD1 // this value is for ZSB0
      .long 0xFFFFFFFF       ;Z1-CSMPSWD2
      .long 0xFFFFFFFF       ;Z1-CSMPSWD3 (MSW of 128-bit password)


;----------------------------------------------------------------------

; 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     ;B0_Z2OTP_LINKPOINTER1
      .long 0xFFFFFFFF     ;Reserved
      .long 0x1FFFFFFF     ;B0_Z2OTP_LINKPOINTER2
      .long 0xFFFFFFFF     ;Reserved
      .long 0x1FFFFFFF     ;B0_Z2OTP_LINKPOINTER3
      .long 0xFFFFFFFF     ;Reserved

     .sect "dcsm_otp_z2_pswdlock"
      .retain
      .long 0xBF7FFFFF     ;Z2-PSWDLOCK
      .long 0x77FFFFFF     ;Reserved

     .sect "dcsm_otp_z2_crclock"
      .retain
      .long 0x0FFFFFFF     ;Z2-CRCLOCK
      .long 0x37FFFFFF     ;Reserved

;;     .sect "dcsm_otp_z2_gpreg"
;;      .retain
;;      .long 0x5AFF1921     ;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       ;B0_Z2OTP_CSMPSWD0 (LSW of 128-bit password)
      .long 0xE3FFFFFF       ;B0_Z2OTP_CSMPSWD1
      .long 0xFFFFFFFF       ;B0_Z2OTP_CSMPSWD2
      .long 0xFFFFFFFF       ;B0_Z2OTP_CSMPSWD3 (MSW of 128-bit password)


;----------------------------------------------------------------------

; 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
;----------------------------------------------------------------------

F2800X 的 DCSM_SECURITY_TOOL 例程中的关联 dcsm.cmd 文件如下图所示:

但是、该例程的28002X_general_flash_lnk.cmd 文件中没有 DCSM、这表示 DCSM 应该存储在 dcsm.cmd 文件中。 如何 将 dcsm.cmd 的内容移植到客户的项目工程文件中?

已尝试以下2种方法、但均失败:

A.  将 dcsm.cmd 的内容直接复制到28002X_FLASH_lnk.cmd 文件中、程序编译失败:

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 Z1 Zone Select Contents (!!Movable!!) */
   /* Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
   DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010



   BEGIN           	: origin = 0x080000, length = 0x000002
   BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
   RAMM0           	: origin = 0x00000128, length = 0x000002D8
   RAMM1            : origin = 0x00000400, length = 0x000003F8     /* on-chip RAM block M1 */
// RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

/* RAMLS4           : origin = 0x0000A000, length = 0x00000800
   RAMLS5           : origin = 0x0000A800, length = 0x00000800
   RAMLS6           : origin = 0x0000B000, length = 0x00000800
   RAMLS7           : origin = 0x0000B800, length = 0x00000800 */
   
   /* Combining all the LS RAMs */
   RAMLS4567        : origin = 0x0000A000, length = 0x00002400

   RAMGS0           : origin = 0x0000C400, length = 0x000003FC
// RAMGS0_RSVD      : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

   RESET            : origin = 0x003FFFC0, length = 0x00000002


   BOOTROM          : origin = 0x003F0000, length = 0x00008000
   BOOTROM_EXT      : origin = 0x003F8000, length = 0x00007FC0

   /* Flash sectors */
   /* BANK 0 */
// FLASHBANK0        : origin = 0x00080000, length = 0x00007FF0
   FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE	/* on-chip Flash */
   FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */
   FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x000FF0	/* on-chip Flash */
// FLASH_BANK0_SEC7_RSVD     : origin = 0x087FF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */

}


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
   dcsm_otp_z2_gpreg        : > DCSM_OTP_Z2_GPREG		    PAGE = 0
   dcsm_otp_z2_pswdlock		: > DCSM_OTP_Z2_PSWDLOCK		PAGE = 0
   dcsm_otp_z2_crclock		: > DCSM_OTP_Z2_CRCLOCK			PAGE = 0
   dcsm_otp_z2_bootctrl		: > DCSM_OTP_Z2_BOOTCTRL		PAGE = 0
   dcsm_zsel_z2				: > DCSM_ZSEL_Z2_P0				PAGE = 0



   codestart        : > BEGIN, ALIGN(8)
   .text            : >> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4| FLASH_BANK0_SEC5| FLASH_BANK0_SEC6| FLASH_BANK0_SEC7,   ALIGN(8)
   .cinit           : > FLASH_BANK0_SEC1,  ALIGN(8)
   .switch          : > FLASH_BANK0_SEC1,  ALIGN(8)
   .reset           : > RESET,                  TYPE = DSECT /* not used, */

   .stack           : > RAMM1

   .init_array      : > FLASH_BANK0_SEC1,  ALIGN(8)
   .bss             : > RAMLS4567
   .bss:output      : > RAMLS4567
   .bss:cio         : > RAMGS0
   .const           : > FLASH_BANK0_SEC1,  ALIGN(8)
   .data            : > RAMLS4567
   .sysmem          : > RAMLS4567

    ramgs0 : > RAMGS0

    /*  Allocate IQ math areas: */
   IQmath           : > RAMLS4567
   IQmathTables     : > RAMLS4567

  .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,
                  RUN = RAMGS0,
                  LOAD_START(RamfuncsLoadStart),
                  LOAD_SIZE(RamfuncsLoadSize),
                  LOAD_END(RamfuncsLoadEnd),
                  RUN_START(RamfuncsRunStart),
                  RUN_SIZE(RamfuncsRunSize),
                  RUN_END(RamfuncsRunEnd),
                  ALIGN(8)

}
/*
//===========================================================================
// End of file.
//===========================================================================
*/

B.  将 dcsm.cmd 文件直接添加到工程文件也失败:

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    您好!

    您只需使用"添加文件"功能将由安全工具生成的 dcsm,cmd 文件添加到其他项目中(右键单击项目并选择添加文件、然后提供要添加的 dcsm.cmd 文件的路径)。

    此外、如果  尚未完成、请参阅有关安全工具的应用手册。  

    此致、

    Vivek Singh

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

    尊敬的  Vivek Singh:

    感谢你的帮助。

    [引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1105660/tms320f280023c-how -do-do-the-f28002x-use-dcsm加密/4096553#4096553"]您只需要添加 Dcsm,dcsm-使用引用文件并通过单击 dcsm.cmd 文件生成的命令将其添加到项目中的另一个安全路径,然后单击右键文件并使用 dcsm.cmd 文件。

    客户在添加 DCSM cmd 文件之前就这样做了、但编译失败了。  

    我是否知道您是否可以帮助修改客户的例行程序?  

    /cfs-file/__key/communityserver-discussions-components-files/149/F28002X_5F00_test.rar

    谢谢、此致、

    樱桃

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

    看起来客户使用相同的 cmd 文件两次、因此出现此错误。 要求他们删除 dcsm.cmd 文件中的一个、它应该可以解决这个问题。 我稍后将对此进行研究并返回。

    此致、

    Vivek Singh

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

    尊敬的  Vivek Singh:

    谢谢、我是否知道实验室有任何后续活动?  

    谢谢、此致、

    樱桃

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

    樱桃

    Vivek 已不在办公室。  您能否详细说明您希望跟进哪个"实验室"。  我无法从该主题中得知剩余的问题是什么。

    谢谢、

    Jason

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

    您好 Jason、

    感谢您的支持、请让我澄清一下这里的问题、即如何将 dcsm.cmd 文件嵌入28002X_FLASH_lnk.cmd 文件、以使程序能够使用 DCSM 加密。

    [引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1105660/tms320f280023c-how-do-the-f28002x-use-dcsm-encryption/4098680#4098680"]请他们删除其中一个 Dcsm.cmd 文件并修复问题。 [/报价]

    删除 dcsm.cmd 文件后、加密功能被禁用、加密内容不会存储在适当的区域中。

    谢谢、此致、

    樱桃

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

    您好、Cherry、

    我认为 Vivek 所指的是删除多个 cmd 文件中相同段的冗余定义。 现在正在使用 dcsm.cmd、客户需要通过删除 dcsm.cmd 中已经定义的相应段来修改现有的 f28002x_headers_nonbios.cmd。 我已修改 f28002x_headers_nonbios.cmd 并随附此帖子(我已测试此帖子、现在它已编译)。 请要求他们替换项目中随附的文件、这样就可以清除出现的编译失败。

    e2e.ti.com/.../f28002x_5F00_headers_5F00_nonbios.zip

    希望这对您有所帮助。

    谢谢、此致
    Pramod