【M0+使用分享】芯片加密

2020-02-11 09:03发布

Kinetis内部拥有加密选项FSEC_SEC,设置该选项为00,01,11时,就可以加密MCU。进而保证内部程序不会通过调试端口被读出。下面介绍设置方法。

由于FSEC寄存器是无法在程序运行过程中被修改的,而是在上电复位后,直接从某个地址直接加载。所以,只要修改该内存的内容即可。下面是我修改的方法,供大家参考。

如何启用kinetis内部的加密功能

下面以Codewarrior(eclipse)+kl05Z32为例说明。
1,建立kl05Z32的工程

2,新建一个文件Security.c

3,在工程的Security.c中定义如下变量
volatile const char __attribute__((section (".cfmconfig"))) BackDoor[8]={0};
volatile const char __attribute__((section (".cfmconfig"))) Fprot[4]={0xFF,0xFF,0xFF,0xFF};
volatile const char __attribute__((section (".cfmconfig"))) Fsec=0x00;
volatile const char __attribute__((section (".cfmconfig"))) Fopt=0xFF;
volatile const char __attribute__((section (".cfmconfig"))) Reserved1={0};
volatile const char __attribute__((section (".cfmconfig"))) Reserved2={0};

4,编译工程并下载
5,然后断电重启,再下载调试程序的时候就会有芯片被加密的提示了。

注意:有些仿真器在调试时,会自动将FOPT置为0xFF。所以,无论怎么设置,都不会加密。我用j-link是可以很好的看到效果的。

最后,附上我的工程。如有问题请大家指出。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。