TMS320F2800155-Q1: 2800155安全启动问题

Part Number: TMS320F2800155-Q1


问题描述:配置安全启动,烧录.out再接着烧录hex,程序无法运行。安全启动配置详情见附件dcsm.asm文件,hex utility界面配置如下:   

boot_ex1_user_cmac_key.txt文件如下

 

oot_ex1_flash_hex_lnk_cpu1.cmd如下:

 

如下是OTP配置图,

我首先操作为配置双引脚启动,GPIO24 ,以及GPIO32,引脚状态11,对应安全闪存启动

如下是我的的密钥值

 

我后续配置了Zone2,尝试0引脚启动,配置如图

 

同时附上CAMC值配置:

 

对应hex的camc值为

我目前已经尝试用仿真启动,及在OD00和OD04写入安全闪存启动,先烧录.out文件运行,在烧录hex文件,此时,安全闪存启动在我看来是成功的,在0x0000002的地址上我看到的值为0x03,但是在我写入OTP后,无法启动,首先在zone1引脚依赖为GPIO24,GPIO32,11时选择安全启动,无法启动成功,后续我有尝试过0引脚启动,结果是一致的,烧录hex无法运行,麻烦帮忙看一下问题出现在哪里。cmackey我有修改。现在示例是0xFFFFFFF,是我后续修改的。我有同步修改代码。一样还是不行。
;----------------------------------------------------------------------
; Zone 1
;----------------------------------------------------------------------
     .sect "dcsm_otp_z1_linkpointer"
      .retain
      .long 0x00003FE0
      .long 0x00003FE0
      .long 0x00003FE0
    
     .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 0xFFFFFFFF     ;Z1OTP_CMACKEY0
      .long 0xFFFFFFFF     ;Z1OTP_CMACKEY1
      .long 0xFFFFFFFF     ;Z1OTP_CMACKEY2
      .long 0xFFFFFFFF     ;Z1OTP_CMACKEY3
  
     .sect "dcsm_otp_z1_pswdlock"
      .retain
      .long 0xFB7FFFFF
      
     .sect "dcsm_otp_z1_crclock"
      .retain
      .long 0x7FFFFFFF
 .sect "dcsm_otp_z1_gpreg"
      .retain
      .long 0x5AFF1820     ;Z1OTP_GPREG1 = Z1_BOOTPIN
      .long 0x5Affffff     ;Z1OTP_GPREG2
      .long 0x0A24040A     ;Z1OTP_GPREG3 = Z1OTP_BOOTDEF_LOW
      .long 0xFFFFFFFF     ;Z1OTP_GPREG4 = Z1OTP_BOOTDEF_HIGH
     .sect "dcsm_zsel_z1"
      .retain
      .long 0x12345678     ;Z1OTP_CSMPSWD0 (LSW of 128-bit password)
      .long 0x17fFFFFF     ;Z1OTP_CSMPSWD1
      .long 0x12345678     ;Z1OTP_CSMPSWD2
      .long 0x12345678     ;Z1OTP_CSMPSWD3 (MSW of 128-bit password)
 
      .long 0x55555555     ;Z1OTP_GRABSECT1
      .long 0x55555555     ;Z1OTP_GRABSECT2
      .long 0x55555500     ;Z1OTP_GRABSECT3
      .long 0x0000AAAA     ;Z1OTP_GRABRAM1
      .long 0xFFFFFFFF     ;Reserved
      .long 0xFFFFFFFF     ;Reserved

      .long 0xFFFE0000     ;Z1OTP_EXEONLYSECT1
      .long 0x0000FFF0     ;Z1OTP_EXEONLYSECT2
      .long 0x000000FF     ;Z1OTP_EXEONLYRAM1
      .long 0xFFFFFFFF     ;Reserved
      .long 0x12345678     ;Z1OTP_JTAGPSWDL0
      .long 0x6f7fffff     ;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 0x00003FE0
      .long 0x00003FE0
      .long 0x00003FE0

     .sect "dcsm_rsvd_z2"
      .retain
      .long 0xFFFFFFFF     ;Reserved
     .sect "dcsm_otp_z2_pswdlock"
      .retain
      .long 0x1F7FFFFF
      
     .sect "dcsm_otp_z2_crclock"
      .retain
      .long 0x3FFFFFFF
 .sect "dcsm_otp_z2_gpreg"
      .retain
      .long 0x5AFFFFFF     ;Z2OTP_GPREG1 = Z2_BOOTPIN
      .long 0x5AFFFFFF     ;Z2OTP_GPREG2
      .long 0xFFFFFF0A     ;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 0x12345678     ;Z2OTP_CSMPSWD0 (LSW of 128-bit password)
      .long 0x5bfFFFFF     ;Z2OTP_CSMPSWD1
      .long 0x12345678     ;Z2OTP_CSMPSWD2
      .long 0x12345678     ;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
;----------------------------------------------------------------------