主题:TMS320F28069:无法解锁 CMS。
大家好、团队、
我尝试进入安全模式、然后从它返回到不安全模式。 进入 S.M.工作正常、但是
返回 U.M 失败、尽管使用了建议的过程。
因此,调试器和引导加载程序都无法刷写器件--它似乎丢失了。
我采取的步骤是:
我映射了一个将密码传送到 ADR 的常数数组 UINT16 CsmPwl[8]。 3f7ff8:
声明:
#pragma DATA_SECTION (CsmPwl、"CsmPwlFile");
const 结构 csm_PWL CsmPwl ={0x434C、0x4F53、0x4544、0x2034、0x2052、 0x4F4D、0x414E、0x5321};
使用映射文件和调试器、我验证了密码数组的位置是否正确、以及元素的顺序是否正确。
我验证了所有的 KEY 寄存器在程序启动时都是0xFFFF。
已验证关键变量 CsmRegs 是否已映射至正确的地址。
在调试器启动时(在调用执行取消保护的函数之前)、器件不安全
尽管上述密码已编程到闪存中。
函数 DeviceUnsecure()的调用会在 main()开始的声明后立即执行。 (下一页列表)。
--我刚刚单步执行声明,在调用 DeviceUnsecure 之前停止。
此时、我手动将 CSMSCR 设置为0x8000。
从调试器的显示屏可以看到、该器件立即切换至安全模式。
然后我停止调试并在没有调试器的情况下重新启动器件(断电/打开)。
我希望器件现在不安全、因为 DeviceUnsecure 被称为程序流中的第一个操作。 请参阅下面的代码列表。
我发现尽管进行了该调用、器件仍然安全、因此现在无法进行上述访问。
那么、可能发生或发生了什么情况? 手册中是否有错误?
void main( void )
{
uint16 u16_main_scratch = 0;
易失性 eEEP_RET eepState;
int iwait;
DeviceUnsecure ();
f32_gl_id_sollwert = 0.0;
ledStation.all =关;
(笑声)
(笑声)
}
--------------------------
DeviceUnsecure 列表():
(笑声)
#define PASSWORD_LENGTH 8.
(笑声)
void DeviceUnsecure (void)
{
uint16 i;
uint16 *pCell;
volatile uint16 tmp;
pCell =(UINT16*)&CsmPwl; // CsmPWL 是全局变量!
对于(i = 0;i < password_length;i++) tmp =*pCell++;
EALLOW;
CsmRegs.KEY0 = 0x434C;
CsmRegs.key1 = 0x4F53;
CsmRegs.key2 = 0x4544;
CsmRegs.key3 = 0x2034;
CsmRegs.KEY4=0x2052;
CsmRegs.KEY5=0x4F4D;
CsmRegs.KEY6 = 0x414E;
CsmRegs.KEY7=0x5321;
EDIS;
}
全局 CsmPwl 的声明/初始化:
const 结构 csm_PWL CsmPwl ={0x434C、0x4F53、0x4544、0x2034、0x2052、 0x4F4D、0x414E、0x5321};
此致、
Goetz