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.

TMS320F280023: 如何在程序中使用DCSM加密和使用C2prog加密

Part Number: TMS320F280023
Other Parts Discussed in Thread: C2000WARE

Dear all:

      目前28002X系列的加密和原先的2806X系列芯片的CSM程序加密差距还是挺大的,到目前还不知道如何设置,

程序中添加了两个 f28002x_dcsm_z1otp.asm      f28002x_dcsm_z2otp.asm,文件

但是程序中不知道在什么地方设置密码,

还有CMD文件的设置

MEMORY
{
PAGE 0 :  /* Program Memory */

   /* BANK0 */
   /* B0 Z1 OTP.  LinkPointers */
   B0_DCSM_OTP_Z1_LINKPOINTER   : origin = 0x78000, length = 0x00000C
   /* B0 Z1 OTP.  GPREG1/GPREG2 */
   B0_DCSM_OTP_Z1_GPREG         : origin = 0x7800C, length = 0x000004
   /* B0 Z1 OTP.  PSWDLOCK/RESERVED */
   B0_DCSM_OTP_Z1_PSWDLOCK	    : origin = 0x78010, length = 0x000004
   /* B0 Z1 OTP.  CRCLOCK/RESERVED */
   B0_DCSM_OTP_Z1_CRCLOCK	    : origin = 0x78014, length = 0x000004
   /* B0 Z1 OTP.  GPREG3/BOOTCTRL */
   B0_DCSM_OTP_Z1_BOOTCTRL	    : origin = 0x7801C, length = 0x000004

   /* DCSM Z1 Zone Select Contents (!!Movable!!) */
   /* B0 Z1 OTP.  Z1 password locations / Flash and RAM partitioning */
   B0_DCSM_ZSEL_Z1_P0	        : origin = 0x78020, length = 0x000010

   /* B0 Z2 OTP.  LinkPointers */
   B0_DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78200, length = 0x00000C
   /* B0 Z2 OTP.  GPREG1/GPREG2 */
   B0_DCSM_OTP_Z2_GPREG	        : origin = 0x7820C, length = 0x000004
   /* B0 Z2 OTP.  PSWDLOCK/RESERVED */
   B0_DCSM_OTP_Z2_PSWDLOCK	    : origin = 0x78210, length = 0x000004
   /* B0 Z2 OTP.  CRCLOCK/RESERVED */
   B0_DCSM_OTP_Z2_CRCLOCK	    : origin = 0x78214, length = 0x000004
   /* B0 Z2 OTP.  GPREG3/BOOTCTRL */
   B0_DCSM_OTP_Z2_BOOTCTRL	    : origin = 0x7821C, length = 0x000004

   /* DCSM Z1 Zone Select Contents (!!Movable!!) */
   /* B0 Z2 OTP.  Z2 password locations / Flash and RAM partitioning  */
   B0_DCSM_ZSEL_Z2_P0	        : origin = 0x78220, length = 0x000010


   /* BANK1 */
   /* B1 Z1 OTP.  LinkPointers */
   B1_DCSM_OTP_Z1_LINKPOINTER	: origin = 0x78400, length = 0x00000C

   /* DCSM B1 Z1 Zone Select Contents (!!Movable!!) */
   /* B1 Z1 OTP.  Flash partitioning */
   B1_DCSM_ZSEL_Z1_P0	        : origin = 0x78420, length = 0x000010

   /* B1 Z2 OTP.  LinkPointers */
   B1_DCSM_OTP_Z2_LINKPOINTER	: origin = 0x78600, length = 0x00000C

   /* DCSM B1 Z1 Zone Select Contents (!!Movable!!) */
   /* B1 Z2 OTP.  Flash partitioning  */
   B1_DCSM_ZSEL_Z2_P0	        : origin = 0x78620, length = 0x000010
}

SECTIONS
{
   b0_dcsm_otp_z1_linkpointer 	: > B0_DCSM_OTP_Z1_LINKPOINTER		PAGE = 0, type = DSECT
   b0_dcsm_otp_z1_gpreg			: > B0_DCSM_OTP_Z1_GPREG			PAGE = 0, type = DSECT
   b0_dcsm_otp_z1_pswdlock		: > B0_DCSM_OTP_Z1_PSWDLOCK			PAGE = 0, type = DSECT
   b0_dcsm_otp_z1_crclock		: > B0_DCSM_OTP_Z1_CRCLOCK			PAGE = 0, type = DSECT
   b0_dcsm_otp_z1_bootctrl		: > B0_DCSM_OTP_Z1_BOOTCTRL			PAGE = 0, type = DSECT
   b0_dcsm_zsel_z1				: > B0_DCSM_ZSEL_Z1_P0				PAGE = 0, type = DSECT

   b0_dcsm_otp_z2_linkpointer	: > B0_DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
   b0_dcsm_otp_z2_gpreg			: > B0_DCSM_OTP_Z2_GPREG			PAGE = 0, type = DSECT
   b0_dcsm_otp_z2_pswdlock		: > B0_DCSM_OTP_Z2_PSWDLOCK			PAGE = 0, type = DSECT
   b0_dcsm_otp_z2_crclock		: > B0_DCSM_OTP_Z2_CRCLOCK			PAGE = 0, type = DSECT
   b0_dcsm_otp_z2_bootctrl		: > B0_DCSM_OTP_Z2_BOOTCTRL			PAGE = 0, type = DSECT
   b0_dcsm_zsel_z2				: > B0_DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT

   b1_dcsm_otp_z1_linkpointer 	: > B1_DCSM_OTP_Z1_LINKPOINTER		PAGE = 0, type = DSECT
   b1_dcsm_zsel_z1				: > B1_DCSM_ZSEL_Z1_P0				PAGE = 0, type = DSECT

   b1_dcsm_otp_z2_linkpointer	: > B1_DCSM_OTP_Z2_LINKPOINTER		PAGE = 0, type = DSECT
   b1_dcsm_zsel_z2				: > B1_DCSM_ZSEL_Z2_P0				PAGE = 0, type = DSECT
}

CMD文件是否就复制这段代码就可以?

这是第一种直接在程序中加密方式,请帮忙指导?

还有使用C2Prog烧入工具加密,也搞不清楚如何设置?

使用C2Prog 设置密码是否key0 key1 key2 key3 key4 都要设置,设置的是格式是什么(0xFFFFFFF)

这是第二种使用C2prog 加密方式,请帮忙指导?

  • 错误提示要求密码改成16位长度: 0xFFFF

  • 1、关于DCSM模块可以看一下这个技术文档的说明:https://e2echina.ti.com/blogs_/b/the_process/posts/dcsm?tisearch=e2e-sitesearch&keymatch=%2522DCSM%2522#

    2、关于C2Prog,你可以试一下每个Key中输入0xFFFF。

  • 刚使用C2Prog测试了把8个单元密码都设置为0xfff1,用C2Prog烧写程序后,再通过仿真器进行仿真还是能正常仿真,说明加密无效,

    这种方式是否是采用原来的那种CSM加密方式一样,CMD文件应该也要修改。目前280023_Flash_lnk.cmd文件里没有相关的CSM存储单元。

    最简单的加密方式还是原先采用CSM方式,现在28002X系列是否还有这种方式?

  • 我这边没测试过C2Prog加密DCSM的,说实话论坛最近几年也没碰到多少人用这种方式加密的。但其实用 把加密文件和工程一起烧写进芯片的方式去加密应该也是可以的。

    最新的几款芯片都是用的DCSM加密,两者的加密机制有差别,我觉得是不能再使用CSM了

  • C2Prog写Flash时,尝试使用提供的密码解密Flash,而不是加密Flash

  • 目前正在尝试怎么使用DCSM加密方式,和原来CSM方式比较复杂了很多,你们这边有没实际操作过F280023使用DCSM加密,的经验,

    目前我还是有点懵,还没搞明白去配置这些参数,你们能否写一个简单些的操作指南。

  • 一个是上面链接中的FAE分享,一个是你可以对照例程来进行测试学习:

    C:\ti\c2000\C2000Ware_4_01_00_00\driverlib\f28002x\examples\dcsm

    但都没在C2Prog上测试过。

  • 这个工程我导入看过,在flash模式下,只有syscfg文件里面才有DCSM相关的信息,

    正常的28002x_generic_flash_lnk.cmd文件也没DCSM相关的定义,

    如果我移植是否只要把dcsm.asm  和dcsm.cmd 文件导入我工程中就可以是否?

  • .asm可能可以直接导入,但是cmd文件直接导入的话不知道跟你的工程能否兼容。

    我之前分享的链接里面有介绍如何修改cmd文件的,你仔细参考一下

  • 我把.asm导入进去是的可以的

    但是CMD文件导入进去,编译不通过了

    这种错误是什么问题?

  • 你的程序里面现在有两个cmd文件(不包括nonbios那个),所以肯定会报错。把原来的flash的cmd文件exclude from build之后再试试。另外include的路径也要添加好。

  • 使用exclude from build 正常的flash 的CMD文件都屏蔽了,程序都无法正常编译了,能具体告诉我怎么把这个DCSM的CMD文件添加吗?是直接复制到flash的CMD文件里,还是具体怎么操作,毕竟我们只是学会应用就可以,有必要的话我可以把我的工程上传,你们帮我查看操作一下。

  • 直接复制到cmd文件中

    上面那个链接里面介绍的很详细了,这是TI官方的FAE自己写的应用经验分享,链接里面除了图片没办法正常显示,其他的都讲的很明确了,认真参考一下:

    e2echina.ti.com/.../dcsm

  • 这个文档我看了几遍了,没有说到,把DCSM的CMD文件怎么和Flash的CMD文件结合,我也试过了把DCSM的CMD文件直接复制到flash中,无法编译通过

    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, type = DSECT
       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, type = DSECT
       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, type = DSECT
       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, type = DSECT
       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.
    //===========================================================================
    */
    

  • 你好,看到你发布了新帖,我安排其他同事去英文论坛咨询了,还请留意新帖的回复:

    e2echina.ti.com/.../tms320f280023c-f28002x-dcsm-flash-280023_flash_lnk-cmd-cmd