在刚接触MSP430系列MCU的时,首先了解了它的JTAG和BSL口下载,找了些资料。这个很容易弄懂。之后考虑到程序的保密性,想研究下MSP430加密功能,现把之前找的一些资料汇总归纳如下:
1、保护信息Flash
很多仪表类产品都会独立运行一个自动校正功能的程序,将校正数据存放在信息Flash段内,然后再烧入运行程序来使用这些数据,这时就需要设置信息Flash不被擦除。BSL模式下只要验证密码正确也能做到保护信息Flash的功能。
2、高级加密和BSL密码验证
小容量Flash的器件由于有效中断向量少,而且范围受限制,所以极容易人采用BSL密码穷举的方式暴力**,这时只要将未用到的中断向量设置为随机数,即可防止这类暴力**,这就是高级加密。
BSL编程可以不需要密码验证,但是必须先擦除所有Flash内容才能进行编程,这样有效防止了盗版行为,但是如果编程时不希望擦除信息Flash内容,就必须使用BSL验证密码,这与前面的高级加密是挂钩的,所以我们设计了BSL密码保存为文件和从文件载入功能。个人认为BSL读代码的意义不大,因为既然你拥有了内部程序的验证密码,理所当然的你就应该拥有它的全部代码,所以不需要再读了。
3、离线编程模式默认
有客户跟我说了个他遇到的特殊情况:他的产品样机已经交给客户了,但是发现程序需要更新,于是打算派人带我的编程器去客户那边更新程序,编程器里载入了最新的代码,由于产品代码加密了,所以离线编程模式设置为BSL,现在的问题是他担心客户将他产品上的芯片焊下来换成未加密的空白芯片,这样当他使用BSL载入最新的代码后,客户就能将他的代码读出来了。如果再买一台编程器采用离线模式设置成JTAG并选择烧融丝选项,两台都拿过去,成本又太大了。
这里采用两个途径来解决:A、离线编程模式默认为JTAG,当然你得选择加密项,jtag编程发现被加密以后,再选择BSL来载入代码;B、BSL载入时使用保护信息Flash项并输入验证密码,如果是空白芯片,那么密码验证失败,就不会给目标代码编程了。
目前这两种方法都已经在我的编程器上实现了。
4、产品序列号
如果希望在产品中保留一些与程序无关的内容,比如说一个产品同时为多个客户设计,但是需要从串口输出这些厂家的名称,难道需要给每一个厂家都生成一个目标代码来交给工人编程吗?不需要,只要在编程时从软件上输入厂家的名称即可,当然,程序中最好做个判断,如果读出的厂家信息全为FF,那就就得输出一个默认的厂家名才行。
另外就是生产日期,每天都不一样,如果同样需要打印出来的话,这对程序设计者来说将是一件痛苦的事情,这里也为您解决了。
|