版主好,我用的是s12p128芯片,这个与s12xs兼容。它的后门密码存储在全局地址0x3_FF00到0x3_FF07,每次复位时加载地址0x3_FF0F的值到安全寄存器FSEC中,我用#pragma定义了一个数据到地址FF0F,这个数据就是为了允许后门密钥访问和设置芯片为加密状态(最后一个位置1),在通过BDM刷写程序进去时,FF0F地址处的最低位总是被写成0(非加密状态)。这种加密的方法一直没能通过,也许通过BDM刷写时芯片会始终设置为非加密状态。
后来我想个方法,就是通过串口发送写PFLASH指令,MCU接收到指令后就擦除FF0F所在扇区,然后写数据到FF0F处,这样复位后就可以将此数据加载进行FSEC寄存器了。但是复位向量在FFFE地址处(其他中断可以通过基址寄存器修改,复位向量地址似乎就固定死了),与FF0F在同一个扇区,这样一擦也把复位向量擦了,程序当然就不能执行了。
之后我在擦除后再将复位向量写进去,这样程序就正常了。加密功能算是实现了,不过总觉得这个芯片是否还有其他方法将加密位写进去,而不用擦除复位入口。请问版主有没有高招,给小弟我指条路,不胜感激。在王宜怀老师著的一本书中介绍了一个方法,说是通过修改Linker.ld文件,将加密位映射到地址FF0F处,但是我一直没找到这个文件,不知道是否在codewarrior IDE中。 |