Part Number: TMS320F2800137
Other Parts Discussed in Thread: SYSCONFIG
当我在c2000.syscfg中加入DCSM,未做其他操作。

再次烧写程序,会报如下错误。


当我从c2000.syscfg去掉DCSM,就能正常烧写,
请问一下,该如何解决。
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.
Part Number: TMS320F2800137
Other Parts Discussed in Thread: SYSCONFIG
当我在c2000.syscfg中加入DCSM,未做其他操作。

再次烧写程序,会报如下错误。


当我从c2000.syscfg去掉DCSM,就能正常烧写,
请问一下,该如何解决。
您好,加入DCSM后,密码为默认配置,也并未选择安全区,所有区域配置的都是Unsecure。为什么烧写会失败?
DCSM部分都是OTP(One Time Programable)Flash,因为和初始值没有任何的变化,所以会烧录失败(这个只是我的推测,因为DCSM部分的实验我只做过一部分,因为太废片子了)。
DCSM设计了LinkerPointer机制,其中的一个原因就是可以重新配置不同的加密配置。
你可以先试一下不改变LinkerPointer的情况下,更改密码再烧录试一下;之后将Linker Pointer指向下一个ZSB,并更改相应的密码,进行实验。
更改了密码之后,便使能了相应的加密功能,相应的RAM和FLASH也要进行分配。
;----------------------------------------------------------------------
; Zone 1
;----------------------------------------------------------------------
.sect "dcsm_otp_z1_linkpointer"
.retain
.long 0x00003FFE
.long 0x00003FFE
.long 0x00003FFE
.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_rsvd"
.retain
.long 0x7FFFFFFF ;Reserved
;; .sect "dcsm_otp_z1_gpreg"
;; .retain
;; .long 0x5AFF1820 ;Z1OTP_GPREG1 = Z1_BOOTPIN
;; .long 0x5AFFFFff ;Z1OTP_GPREG2
;; .long 0x00000000 ;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 0xAAAA5555 ;Z1OTP_GRABSECT2
.long 0xAAAAAA00 ;Z1OTP_GRABSECT3
.long 0x0000AAAA ;Z1OTP_GRABRAM1
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;Z1OTP_EXEONLYSECT1
.long 0x0000FFF0 ;Z1OTP_EXEONLYSECT2
.long 0x000000FF ;Z1OTP_EXEONLYRAM1
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;Z1OTP_JTAGPSWDL0
.long 0x27FFFFFF ;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_rsvd"
.retain
.long 0x3FFFFFFF ;Reserved
;; .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 0xAAAAAA00 ;Z2OTP_GRABSECT3
.long 0x0000AAAA ;Z2OTP_GRABRAM1
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;Z2OTP_EXEONLYSECT1
.long 0x0000FFF0 ;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
;---------------------------------------------------------------------- .sect "dcsm_otp_z1_linkpointer"
.retain
.long 0x00003FFE
.long 0x00003FFE
.long 0x00003FFE
上面明显错误,0x78000开始处的默认值应该是下面的值才对
0x00078000 1FFFFFFF FFFFFFFF 1FFFFFFF FFFFFFFF 1FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
建议你在DCSM配置中,勾选一个配置Zone1,但是采用默认值
读出来的是3FFF,说明使用的是ZSB0,0x78022和23处的PSWD1=0x4D7FFFFF也佐证这一点。
但是在上传的asm文件中,linkpointer指向了3FFE(ZSB1),但是PSWD1密码使用的还是3FFF(ZSB0)的。我想这就是烧录失败的原因,因为产生了冲突。
不同于PSWD0、PSWD2以及PSWD3,PSWD1的初始值并不是全1(0xFFFFFFFF),而是由TI设定的一个值。不同ZSB的值各不相同。DCSM使用的OTP FLASH只能由1写0(擦除操作)。可以从这个方面来看一下。
非常感谢 BarbiQ -提供的思路及方向~