1.目的
解决产品在市场流通过程中被电路板抄板,程序克隆。以各种手段窃取别人的知识产权。
2.解决方案
**1.在程序中处理:**
在程序每次上电运行时,先获取1次芯片唯一ID缓存在int GetID[10]数组中,然后在Flash特定存储区位置读出
数据记作int ReadID[10],如果ReadID为0xFFFF,那么这代表了芯片第1次上电,然后将GetID中的芯片唯一ID
保存在芯片flash特定位置,也就是读出数据缓存在ReadID的位置。举例说明:芯片的Flash大小为512KB,地址
为0x800 0000 ~ 0x808 0000,如果程序编译完成后,有剩余地址,假设ROM区占用地址为0x800 0000 ~
0x807 0000,那么0x807 0000~0x808 0000之间的扇区即可以用作用户信息存储,我们将读出的GetID芯片ID
在第1次上电时存在当前位置,在之后的每一次上电时,都读取Flash的这个特定位置,读取到的内容即为之前
存储的芯片ID,然后将读出的ReadID芯片ID与获取到的GetID本次获取的唯一ID做对比,如果相同,即代表
程序未被拷贝,如果不同,程序停止执行。
因为如果不同,证明程序被拷贝到了其他芯片,用特定软件读出程序的本质是对flash内存的拷贝,当运行过
1次或者N次的程序被拷贝走会随存储在特定位置的上个芯片ID一起被拷贝,当进入新的芯片运行时,会检测到
当前ID与存储ID不一致,即停止执行。这样可以防止芯片程序被盗版,如果想防止程序被恶意擦除和修改,
用FMC上锁或者禁用下载口方式实现,但如果想仿真程序请酌情使用,且当我们程序在线更新时,可以设置
在特定界面用FMC解锁以实现程序的修改。但当程序正常运行期间推荐使用FMC上锁达到不被修改和擦除程序区
内容。
**2.在电路中处理**:
可以在电路设计中采用加密芯片,将主要程序放在加密芯片中,加密芯片本身破解的代价会比较大,所以对程序
防克隆有一定的作用。
3.感言
以上仅为本人拙见,如有小伙伴需要源码或者问题请评论留言,博主会第一时间回复,有什么不妥的地方请
指出,及时改正。