ST MCU芯片加密了还能再次使用吗?
【温馨提示 图片可以点击放大观看】
整理:MilerShao
先说明下,这里说的加密仅指对MCU芯片做读保护处理,毕竟MCU芯片加密是个非常宽泛的概念和艺术。
有时会有人就ST MCU读保护加密后能否二次使用的问题进行咨询,偶尔也有极少数人问及ST MCU是否具有加密功能。
ST MCU的芯片都是FLASH型的,不论是STM8系列还是STM32系列都可以做读保护加密,以防程序代码被轻易读出,从而达到保护开发者知识产权等相关权益。关于ST MCU的读保护加密及芯片能否二次使用话题,得按STM8和STM32两大系列分开来说,二者在读保护处理上有差异。
一、STM8系列芯片读保护实施及解除
对于STM8系列芯片,都可以进行读保护。ST官方有提供一个STVP的软件工具【它是经过STTOOLSET这个安装包安装的】,可以对STM8芯片的OPTION项进行编程,将OPTION中的读保护项打开,设置为ON,然后进行芯片编程就能使能芯片的读保护。之后,用户程序代码就不能被读出来了。还有部分STM8芯片【FLASH容量大于等于16K的芯片】往往支持通过UART、CAN、SPI等接口进行的系统编程,即ISP。ST官方有提供了一个Flash loader demonstrator工具软件,也可以利用它对STM8芯片进行芯片读保护加密。
在读保护状态下,既不能读取芯片内的程序代码,也不能对芯片进行再次做程序编写或调试了。
那如果想对做过读保护加密的STM8芯片再次使用呢?还是可以利用上面提到的2个工具进行解除读保护。解除读保护后芯片内原来的程序代码全部烟消云散,不复存在。
第一种还是通过STVP软件工具,将OPTION项中读保护项ROP关闭,即设置为OFF,然后进行OPITON单独编程,之后芯片内部程序代码全部被擦除,读保护解开,芯片就犹如一颗新的芯片,可以再次使用。
还有一种办法就是,对于支持ISP功能的STM8芯片。利用上面提到的Flash loader demonstrator工具软件,将设置过读保护的STM8芯片进行芯片读保护解除。之后,芯片可以再次使用。
当然,也可以借助其它第三方工具进行上述操作,原理是一样的。另外,除了利用上面提到的软件工具对MCU芯片做读保护加密外,用户也可以自行对OPTION项编程而达到对芯片读保护之目的。
二、STM32系列芯片读保护实施及解除
对于STM32芯片的读保护的实施及解除怎么操作呢?目前为止,通用性STM32 MCU有9个系列。其中除了32F1系列只具有1级读保护外,其它8个子系列都具有2级读保护。 也就是说从读保护处理上看,32F1系列跟其它几个芯片要稍逊一筹。 顺便说下,其实后出的基于CORTEX M4的内核STM32F3系列的性价比要远高于32F1系列,支持DSP和FPU,外设更为丰富。
ST MCU技术手册上提到3级,即LEVEL 0,LEVEL 1,LEVEL 2。其中LEVEL 0 就是不做读保护级别。如果芯片被设置LEVEL 1读保护,在LEVEL 1级状态下,既不能读取芯片内的程序代码内容,也不能对芯片再次做存储空间的擦写或芯片调试了。FLASH存储器和备份域寄存器都不能被访问,即使强行访问也会出错。实施这步的操作可以利用ST官方的STLINK UTILITY工具、STVP 工具、Flash loader demonstrator来进行,将OPTION里的RDP选项选择LEVEL 1,之后进行编程。
下面是两个工具STLINK UTILITY和STVP的操作界面示意图。
此时,LEVEL 1级读保护是可以解除的,同样可以利用上面的工具来完成。操作步骤跟加密动作类似,只是把读保护级别选择为LEVEL 0,然后进行OPTION编程,芯片读保护解除,此时芯片内的程序代码全部清空。显然,经过LEVEL 1读保护后,选项字节的访问是被开放了出来。
至于如何启用LEVEL 2级读保护加密,有2钟方式。第一种就是直接从LEVEL 0通过对读保护选项字RDP进行编程让芯片进入LEVEL 2级保护;还有一种就是从LEVEL 1的基础上,做一次RDP编程进入到LEVEL 2级保护。具体的操作还是可以利用ST官方的STLINK UTILITY工具、STVP 工具、Flash loader demonstrator来进行,将OPTION栏里的RDP选项选择LEVEL 2之后进行编程。操作跟LEVEL 1级读保护一样,只是选项不一样而已。
不过LEVEL 2级读保护是不可逆的,即不能像LEVEL 1一样可以被解除。经过LEVEL 2级读保护的芯片,除了内部程序代码不可访问外,连从RAM或系统闪存引导启动的特性及调试模式都被永久禁用了,JTAG调试接口被锁死。此时既不可能通过JTAG调试口访问芯片,也不能通过ISP的方式跟芯片相连来访问芯片或者对RDP选型字节进行修改。即使片内用户程序也只能修改RDP选项以外的部分选项。
总之,经过LEVEL 2读保护加密后,除了用户程序能正常运行外,若还想从外部对芯片做什么调试或修改或擦除后再次使用,那是没机会了,基本上它就是一块砖。如果说经过LEVEL 2级读保护加密的芯片有啥故障想做测试分析的话,即使交到ST 原厂也没有办法。
下面是两级读保护加密的不同级别走向示意图。很明显,LEVEL 0/1间是可以往返的,LEVEL 2级就不可返回了。同样,除了利用上面提到的工具对STM32芯片做读保护加密外,用户也可以自行对OPTION项编程而达到对芯片读保护之目的。
小结下:目前STM32的9个系列里面,除了F1系列只有1级读保护外,其它都具有两级读保护。其中2级保护对调试口、系统引导启动功能都予以不可逆的禁用,保护深度、难度都比1级读保护更强。一般调试时不用随意启用LEVEL 2级读保护,不然想修改代码只得换芯片了。只有在产品调试、测试、试产稳定后可以考虑启用LEVEL 2保护。
最后以分享一个问题来结束。如果有人希望产品代码测试验证稳定后将MCU芯片做2级读保护,但又希望未来还可以做程序升级,可行否?如果可行,如何操作?
【抛砖引玉 旨在交流,如有错疏 欢迎赐教】
********************************************************************其它相关ST MCU应用话题贴,可以点击文字上方“ST MCU 信息交流”或扫描下方微信公众号加以关注,查看历史消息来选择阅读。