问题一:
.sect "b0_dcsm_otp_z1_pswdlock"
; .long 0xFFFFFFFF ;Z1OTP_PSWDLOCK
;;.long 0xFFFFFFFF ;Reserved
在使用280049C芯片的DCSM模块进行芯片加密时,将上面代码取消注释,加入代码后会导致在烧录过程中突然中断,并报出一下故障(使用的是CCSV8.3.1版本以及18.1.4编译器和32位电脑),cmd文件就是用的例程中的。
C28xx_CPU1: GEL Output:
Memory Map Initialization Complete
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: Error during Flash programming (Flash algorithm returned error code). Operation cancelled.
C28xx_CPU1: File Loader: Memory write failed: Unknown error
C28xx_CPU1: GEL: File: E:\DVR-CODE\DVRSlaverLock\Debug\DVRSlaverLock.out: Load failed.
将以上代码注释后可以将代码(这里说的代码指加密单独的代码)烧录到芯片中,会导致正常代码不会运行(之前已经烧录,且烧录加密代码时没有进行擦除),只有带仿真器才可以正常运行,但之前没烧录加密代码时是可以正常运行的(重新上电后也可以正常运行),以下是我在f28004x_dcsm_z1otp.asm文件中的配置情况(可以正常烧录的代码配置),f28004x_dcsm_z2otp.asm文件没有配置:
.sect "b0_dcsm_otp_z1_linkpointer"
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER1
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER2
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER3
.long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_gpreg"
; .long 0xFFFFFFFF ;Z1OTP_BOOTPIN_CONFIG
; .long 0xFFFFFFFF ;Z1OTP_GPREG2
.sect "b0_dcsm_otp_z1_pswdlock"
; .long 0xFFFFFFFF ;Z1OTP_PSWDLOCK
; .long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_crclock"
; .long 0xFFFFFFFF ;Z1OTP_CRCLOCK
; .long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_bootctrl"
; .long 0xFFFFFFFF ;Z1OTP_BOOTDEF_LOW
; .long 0xFFFFFFFF ;Z1OTP_BOOTDEF_HIGH
.sect "b0_dcsm_zsel_z1"
.long 0xFFFFFFFF ;B0_Z1OTP_EXEONLYRAM
.long 0xFFFFFFFF ;B0_Z1OTP_EXEONLYSECT
.long 0xFFFFF666 ;B0_Z1OTP_GRABRAM 0xFFFFF666
.long 0xFFFFFE66 ;B0_Z1OTP_GRABSECT 0xFFFFFE66
.long 0x58534C4C ;B0_Z1OTP_CSMPSWD0 (LSW of 128-bit password)
.long 0x47556953 ;B0_Z1OTP_CSMPSWD1
.long 0x16071217 ;B0_Z1OTP_CSMPSWD2
.long 0x091543F1 ;B0_Z1OTP_CSMPSWD3 (MSW of 128-bit password)
.sect "b1_dcsm_otp_z1_linkpointer"
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER1
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER2
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER3
.long 0xFFFFFFFF ;Reserved
.sect "b1_dcsm_zsel_z1"
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;B1_Z1OTP_EXEONLYSECT
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFE66 ;B1_Z1OTP_GRABSECT
.long 0x58534C4C ;Reserved
.long 0x47556953 ;Reserved
.long 0x16071217 ;Reserved
.long 0x091543F1 ;Reserved
问题二:
在遇到问题一后,经过查阅TI论坛,我得出结论就是CCS或者编译器版本过低,但是对于32位系统的电脑CCSV8.3.1和18.1.4编译器已经为顶配。于是我换了一个64位电脑使用CCSV10版本以及20.2.0的最新编译器并在f28004x_dcsm_z1otp.asm文件中的代码如下:
.sect "b0_dcsm_otp_z1_linkpointer"
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER1
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER2
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B0_Z1OTP_LINKPOINTER3
.long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_gpreg"
.long 0xFFFFFFFF ;Z1OTP_BOOTPIN_CONFIG
.long 0xFFFFFFFF ;Z1OTP_GPREG2
.sect "b0_dcsm_otp_z1_pswdlock"
.long 0xFFFFFFFF ;Z1OTP_PSWDLOCK
.long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_crclock"
.long 0xFFFFFFFF ;Z1OTP_CRCLOCK
.long 0xFFFFFFFF ;Reserved
.sect "b0_dcsm_otp_z1_bootctrl"
.long 0xFFFFFFFF ;Z1OTP_BOOTDEF_LOW
.long 0xFFFFFFFF ;Z1OTP_BOOTDEF_HIGH
.sect "b0_dcsm_zsel_z1"
.long 0xFFFFFFFF ;B0_Z1OTP_EXEONLYRAM
.long 0xFFFFFFFF ;B0_Z1OTP_EXEONLYSECT
.long 0xFFFF6666 ;B0_Z1OTP_GRABRAM
.long 0x66666666 ;B0_Z1OTP_GRABSECT
.long 0x58534C4C ;B0_Z1OTP_CSMPSWD0 (LSW of 128-bit password)
.long 0x47556953 ;B0_Z1OTP_CSMPSWD1
.long 0x16071217 ;B0_Z1OTP_CSMPSWD2
.long 0x091543F1 ;B0_Z1OTP_CSMPSWD3 (MSW of 128-bit password)
.sect "b1_dcsm_otp_z1_linkpointer"
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER1
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER2
.long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;B1_Z1OTP_LINKPOINTER3
.long 0xFFFFFFFF ;Reserved
.sect "b1_dcsm_zsel_z1"
.long 0xFFFFFFFF ;Reserved
.long 0xFFFFFFFF ;B1_Z1OTP_EXEONLYSECT
.long 0xFFFFFFFF ;Reserved
.long 0x66666666 ;B1_Z1OTP_GRABSECT
.long 0x58534C4C ;Reserved
.long 0x47556953 ;Reserved
.long 0x16071217 ;Reserved
.long 0x091543F1 ;Reserved
在烧录加密软件过程中会报出以下故障:
C28xx_CPU1: GEL Output:
Memory Map Initialization Complete
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Start ...
C28xx_CPU1: GEL Output: ... DCSM Initialization Done ...
C28xx_CPU1: Error during Flash Programming. Address 0x00078010, Data 0x0000E000, FMSTAT 0x00000030
C28xx_CPU1: File Loader: Memory write failed: Unknown error
C28xx_CPU1: GEL: File: E:\My Project\DVR\DVRSlaverLock\Debug\DVRSlaverLock.out: Load failed.
求大神给个解决方案