① MSP430 写用户FLASH时 复位/死机 的解决办法
在写flash之前需要对相应的扇区进行擦除,否则数据就会出错。因为430的flash是“与颤颤”结构,只能通过向某一位写0将该位拉低,比如复位值是0xFF,先写入0x0F将高4位变成0,如果不擦除(即将该位重新置为0xFF)再向该地址写入0xF0,该地址的值就会变成0x00,而不是想要的0xF0。
你所出现的死机可能是你擦除或者写入的时候将原来的程序块改变了悉贺,比如原来程序是在0x2000地址开始的地方,你写入的数据睁洞派和它在一个地址就会导致程序错误,程序跑飞,使单片机死机。
② MSP430单片机,用户代码如何跳转到内置的BSL代码执行
JTAG是边界扫描技术,其在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430的内部数据地址总线上,所以可以用JTAG访问430内部的所有资源,包括对FLASH的读写操作。所以可以用于对MSP430的仿真及编程。主要连接线有TMS、TCK、TDI、TDO、RST、TEST。
2、SBW是SPY-BI-WIRE,可以简称两线制JTAG,主要用SBWTCK(连接到JTAG仿真器的7脚TCK)与SBWTDIO(连接到JTAG仿真器的1脚TDO/TDI),该接口主要用于小于28脚的2系列的430单片机,因为28脚以内的2系列单片机的JTAG接口一般与IO口复用,为了给用户预留更多的IO口,才推出了SBW接口。同样SBW接口可以用于仿真器及编程器。
3、BSL是TI在对MSP430出厂时预先固化到MCU内部的一段代码,有点类似于DSP的bootloader,但又与bootloader有明显的区别,BSL只能用于对MCU内部的FLASH访问,不能对其他的资源访问,所以只能用作编程器接口。BSL通过UART协议与编程器连接通信。编程器可以发送不同的通信命令来对MCU的存储器做不同的操作。BSL的启动有些特殊,一般430复位启动时PC指针指向FFFE 复位向量,但可以通过特殊的启动方式可以使MCU在启动是让PC
指向BSL内部固化的程序。启动方式一般是由RST引脚与TEST(或TCK)引脚做一个稍复杂的启动逻辑后产生。BSL启动后,就可以对MCU进行访问了。
一般的MCU都有代码加密功能,430是如何实现的呢?外部对430内部的代码读写只能通过上述的三种方式,所以又引入了熔丝位,熔丝位只存在于JTAG、SBW接口逻辑内。BSL内部没有熔丝。当熔丝烧断时(物理破坏,且不可恢复)JTAG与SBW的访问将被禁止,此时只有BSL可以访问。而通过BSL对MCU的访问是需要32个字节的密码,该密码就是用户代码的中断向量表。所以430的加密系统到目前为止尚无被解密的报告。
仿真器的型号一般有UIF(USB接口,支持JTAG、SBW)、PIF (并口,只支持JTAG)、EZ430(USB接口的,只支持SBW模式)。专业编程器有GANG430(串口