MSP430串行写入BOOTSTRAP与加密熔断功能
对于MSP430来讲,与PC机进行串口通信,接收、发送数据与擦写Flash的程序是已经固化在BOOT ROM里的,所以必须根据MSP430的设置来编写上位机程序。启动BSL后,MSP430会首先关闭看门狗、关中断、定义基础时钟模块,由DCO(Digitally-Controlled Oscillator)产生系统主时钟脉冲MCLK和辅助时钟脉冲SMCLK,使最小时钟频率为1.5 MHz。用TIMER_A做软串口实现与PC机通信,建立软件异步通信协议,连续模式,时钟源为MCLK,DIV=1,CCR0用于比较,CCTL0用于查询CCIFG0标志。P1.1为TX发送端(设置为输出高),P2.2为RX接收端(设置为输入)。BSL初始化系统后,处于就绪状态,等待PC机的同步序列和第一个命令。BOOTSTRAP的串口设置如表3所列。
表3
波特率/baud | 9600 |
数据位/b | 8 |
奇偶校验 | 偶校验 |
停止位 | 1 |
PC机设置好串口之后就可以发一个字节的同步信号给MSP430,MSP430正确接收后会返回一个ACK应答信号,PC机判断这个应答信号正确后就可以按照设定的帧格式发送、接收数据,MSP430每收到一帧,也会发一个应答信号以供PC机确认。其帧格式如图4所示。
BSL的程序代码在BOOT ROM中(0C00H…0FEFH),0FF0H…0FFFH保存有芯片的标识,其中BOOTSTRAP的版本信息就存储在地址为0FFAH的地方。BSL的初期版本(1.10及其以下)需要一些补丁来写Flash(参见TI有关资料Bug Ids:BSL2、BSL3和BSL4),其补丁也是MSP430的程序代码。先将其写到RAM中,使用LOAD PC的命令,将目标程序的起始地址装入程序计数器中,就可以执行补丁程序了。然后,在程序最后加一句跳转到0x0c00的语句就可以返回BOOTSTRAP了。通过这种方法,用户也可以自己对BOOTSRTAP做一些改动,以满足用户实际应用中的需要。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 熔断操作
MSP430Fxx的芯片中设置有保护熔丝。熔断需要在TDI引脚上加上一个6.5 V±0.5 V的电压再加上一定的时序才能进行,一般采用PC机发出时序。TI的开发工具中,串口JTAG编程器能熔断,但它不能在线仿真。用户可以自己制作一个全套的开发工具,使之具有TI所有开发工具的功能。
烧Flash的熔丝不能简单地以硬件给引脚加高电压实现,还需要用软件对MSP430发出指令来配合。以MSPF14x/13x为例,首先,通过IR_SHIFT指令使JTAG口控制MSP430单片机,通过DR_SHIFT_IN将TDO/TDI脚设置成TDI,发出指令IR_SHIFT(“IR_PREPARE_BLOW”)后等待1 ms,再将熔断电压Vpp加在TDI脚上,送IR_SHIFT(“IR_EX_BLOW”)后再等1 ms就可以将Vpp移开了。具体指令情况可以参见TI文档。
4 小 结
据了解,目前BSL的工具国外有SOFTBAUGH公司和GESLER公司制作的;国内也有杭州一家公司制作的BSL与熔断的综合工具,目前正在测试中。不过对于入门级的用户或个人,只要稍有一些软硬件制作能力,就完全可以花很短的时间来制作自己的开发工具,包括JTAG控制器、BSL和熔断器。