我正在调试TMS320F28075这款芯片。在调试DCSM这一块时,对于密码这一块的变化,我不太清楚。在调试的过程中也出现一些问题。
下面是我的CSM设置:
..sect "dcsm_otp_z1_linkpointer"
.long 0x1FFFFFFF ;Z1-LINKPOINTER1
;; .long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;Z1-LINKPOINTER2
;; .long 0xFFFFFFFF ;Reserved
.long 0x1FFFFFFF ;Z1-LINKPOINTER3
;; .long 0xFFFFFFFF ;Reserved
.sect "dcsm_otp_z1_pswdlock"
;; .long 0xFFFFFFFF ;Z1-PSWDLOCK
;; .long 0xFFFFFFFF ;Reserved
.sect "dcsm_otp_z1_crclock"
;; .long 0xFFFFFFFF ;Z1-CRCLOCK
;; .long 0xFFFFFFFF ;Reserved
.sect "dcsm_otp_z1_bootctrl"
;; .long 0xFFFFFFFF ;Z1-GPREG3
;; .long 0xFFFFFFFF ;Z1-BOOTCTRL
.sect "dcsm_zsel_z1"
.long 0x00000000 ;Z1-EXEONLYRAM
.long 0x00000000 ;Z1-EXEONLYSECT
.long 0x55555555 ;Z1-GRABRAM
.long 0x55555555 ;Z1-GRABSECT
.long 0x12345678 ;Z1-CSMPSWD0 (LSW of 128-bit password)
.long 0x12345678 ;Z1-CSMPSWD1
.long 0x12345678 ;Z1-CSMPSWD2
.long 0x12345678 ;Z1-CSMPSWD3 (MSW of 128-bit password)
如果照上面的设置,如果是DEBGU仿真时,程序可以跑起来,当我拨除仿真器,开电让板子自跑时,程序会跑不起来,
经过我的调试,我发现在下面二句代码前调用CsmUnlock()做一次CSM密码读取操作时,就可以让板子自跑起来。
/**********************************************************************************************
这样是可以的
CsmUnlock();
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
InitFlash();
************************************************************************************************/
/**********************************************************************************************
这样是不行的
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
InitFlash();
CsmUnlock();
或者
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
InitFlash();
************************************************************************************************/
在没有加载CSM段的时候,我的板子是可以跑起来的。加载了CSM后就不行了。要调用CsmUnlock();
我很诧义,在用TMS320F28335的时候,我写了密码后是不需要调用CsmUnlock();的。我不知道我
上面的CSM设置是否正确,对于dcsm_otp_z1_pswdlock,dcsm_otp_z1_crclock,dcsm_otp_z1_bootctrl这三个寄存器
的设置我不是很明白。我希望得到你们的帮助,你们能不能帮我详细的介绍一下CSM这一块的具体操作. |