MSP430是使用熔丝或者电子熔丝去做内部代码的保护,如果熔丝烧断,那么将不能使用JTAG或者BSL去非法访问内部代码。MSP430F1/F2/F4系列是采用物理熔丝的方式,使用编程器在TEST引脚或者TDI引脚上加6.5V±0.5V的电压,采取这种方式,JTAG接口被禁止而且是不可恢复的,只能通过BSL去访问。MSP430F5/F6/FR2/FR4/FR5/FR系列都是采用e-Fuse电子熔丝的方式去做加密,一般是在Flash/FRAM中的2个字的位置(签名)内写入一定的内容去实现加锁或者加密码。器件只能通过密码保护的BSL去访问。通过BSL去访问器件,去清除JTAG签名区,那么是可以重新恢复并且访问MCU的。
F5x/F6x eFuse: JTAG签名在17FCh~17FFh地址内,写入全0或者全F以外的值会将JTAG/BSL接口锁住。要对这些地址编程,那么首先要清除SYSBSLC寄存器中的SYSBSLPE位,用于解锁BSL Flash被保护的区域。
如果要清除JTAG/SBW保护,可以使用BSL去对JTAG签名写入全0,BSL也是通过中断向量表中的FFE0h~FFFFh中的至少32bytes的密码去做保护。因为JTAG签名是位于被保护的BSL区域,BSL首先回清除SYSBSLC寄存器中的 SYSBSLPE位,随后对JTAG签名写入全0.
FR5xx/FR6xxeFuse: JTAG签名在FRAM的FF80~FF83h范围内,写入 55555555h到JTAG签名中,JTAG/BSL接口被无密码的锁住。如果想要解除JTAG/SBW保护,bootloader可以使用5555或AAAA以外的值去清除JTAG签名。或者执行BSL整体擦除指令。
如果是5555_5555h到JTAG签名区中,那么JTAG会被直接锁死,只能通过BSL命令去解锁。 如果写入AAAA_xxxxh到JTAG签名区中,那么JTAG被密码锁死,可以通过密码去让仿真器访问MCU。 如果JTAG签名中写入其它值,那么JTAG/SBW没有被锁住。
FR4xx/FR2xxeFuse: JTAG签名在FF80~FF83h范围内,对JTAG签名中写入 00000000hor FFFFFFFFh以外的值可以将JTAG进行无密码解锁的锁住。可以使用Bootloader对签名去写入全0或者全1去解锁JTAG/BSL保护。BSL也是密码保护的,在中断向量表中的至少32个字节做BSL的密码,也可以通过BSL的整体擦除命令去解锁。
所以,如果JTAG/SBW被锁住,那么仿真器不能通过密码去访问器件,只能采用BSL按照一定的密码匹配去解锁器件。
FR5/FR6xx加密例程分析
在linker文件中将.jtagsignature分配到JTAG签名区去,0xFF80中写入0xAAAA,那么是采用密码的方式加锁eFuse,0xFF82中写入0x0002,那么密码的长度为2个字节。.jtagpassword被分配到0xFF88起始的区域中,写入相应的密码。 器件加密后,再进行一次BOR复位,那么JTAG被锁住了。可以再CCS中对.ccxml文件进行配置然后再次让仿真器访问器件。如下图所示。
这时候MCU是已经被加密了,如果执行芯片擦除操作,或者在代码中将JTAG签名区写入FFFF_FFFFh(5555或者AAAAh之外的值),那么芯片也能解密。
另外,BSL也是可以被禁止使用的。
|