学海荡舟手机网

主页 > 实用文摘 > 教育文摘_07 > > 详细内容

MSP430串行写入BOOTSTRAP与加密熔断功能_单片机论文

摘要:bootstrap用于在msp430设计开发及系统更新时对flash存储器的编程。它可以用经串口协议的命令来激活,使得用户可以通过pc控制msp430,并实现数据交换。烧断flash的熔丝是用来保护用户在flash中的程序代码。本文主要介绍我们制作的bootstrap这一开发工具的功能、软硬件结构以及熔断工具的制作方法。

    关键词:msp430 bootstrap 熔断

引 言

 对于msp430单片机的开发调试有多种技术方案,例如eprom方式、otp方式、仿真开发系统方式、jtag和bootstrap方式。bootstrap(又名bootstrap loader,简称bsl)可与另一种flash仿真工具jtag控制器配合使用。对于flash型的msp430单片机初期开发进行的仿真,只需要1台pc机和1个fet(flash emulator tool)的jtag控制器即可实现。进入产品级开发阶段,为了保护用户代码,烧断flash的保护熔丝以后就无法再通过jtag口访问单片机,这时用户对flash中的程序再进行检查或更新就只能通过bootstrap进行。不用担心用户代码会泄露,bootstrap提供了32字节256位的密码保护,能完全确保代码的安全性。

 bootstrap的硬件制作并不费力,只要与调试环境软件配合(ti网站提供免费下载限制功能的软件,不过用户可以轻松地制作完全功能软件),就能很方便地构建自己的开发环境。对于熔断的方法,从以前ti公布的资料看,只要在功能引脚上施加一个6.5v左右的电压数ms就可以了。当然,各类芯片熔断的方法也有一些差异。但是,除了11x系列的单片机有人用这种方法试验成功外,对其余系列的单片机无法实现,甚至有毁坏芯片的可能。现在,随着为ti公司的各类fet仿真器及bootstrap开发工具的相继推出,在一篇ti资料中,给出了msp430熔断的方案和指令结构,这样,我们用diy的完全功能开发调试系统就可以构建成功了。

图1和图2

1 bootstrap的功能与启动

 通过bootstrap可以访问单片机的全部存储器,包括程序flash、rom、ram,并可对其进行擦除、读写。它能用于批量下载程序,监测程序使用情况和各个变量与寄存器的使用情况,并可对其进行修改。因此,使用bootstrap能够方便地进行软件升级。

 用户烧断flash熔丝的目的在于保护程序代码,通过bootstrap读取msp430,需要32字节即256位的密码口令;但是,bootstrap又表现了其极大的灵活性,其功能分为需要密码保护的功能与不需要密码保护的功能。其中,受密码保护的操作有从msp430的存储器中读数据、写数据、flash段擦除和读取程序计数器;不受密码保护的操作就是接收密码口令与flash全擦除,擦除之后32个字节的密码口令全为0xffh。这样使得用户的程序代码受到完全的保护,而且芯片也能保持应用的灵活性。

 对于msp430系列flash型单片机,依靠rst/nmi引脚与tck引脚(有的型号如msp430f11x1使用test引脚)和一定的时序就进入标准的复位过程,即使用地址0fffeh处的reset向量,然后进入正常的程序入口。改变rst/nmi引脚与tck引脚的时序配合,就可以启动bootstrap,即地址0c00h处的bsl reset向量用做程序入口,单片机执行boot rom里的程序。msp430f13x/14x的正常复位时序如图1所示,bsl复位时序如图2所示。

 如果发生以下情况,则不能启动bsl:

 ◇ 在rst/nmi引脚保持为低时,tck引脚上出现的上升沿少于2个;

 ◇ 当rst/nmi引脚电平从低跳变到高时,tck引脚还是保持为高;

 ◇ jtag接口已控制了msp430的资源;

 ◇ 因vcc下降引起por(复位)。

 退出bootstrap时,要释放单片机的程序计数器pc,有两种情况:一种是在bsl中使用加载pc命令,从指定的程序地址继续执行;另一种是用标准的reset序列强制使msp430用0fffeh的向量地址开始执行程序。

图3

2 bootstrap的软硬件结构

2.1 bootstrap的硬件结构

 bootstrap硬件完成pc机和msp430单片机通信的接口功能,主要由电源供电、信号接口和电平转换几个部分构成。

 msp430采用的是3.3 v电源,bootstrap可以采用外部给单片机供电再将电引到bootstrap板上,或直接利用pc机串口的电压再转换成3.3 v的方案。利用pc机串口电压的方案由于不需要外部供电,适用于批量下载、修改程序,使用方便。pc机通过串口和msp430通信,串口用的是232电平,msp430单片机用的是3.3 v的供电系统,因此存在一个电压转换的问题。对于电压转换,ti公司提供两个系列的电压调整芯片tps770xx和tps760xx系列。这两款芯片都能满足输入从 -0.3~13.5 v,稳定输出50 ma 电流1.2~5 v的要求。

 bootstrap使用的信号线与串口信号线的对应情况如表1所列。信号线与msp430系列引脚的对应情况如表2所列。

表1 

引脚名全名(pc)bsl对应接口功能
rxdreceive data发数据到pc
txdtransmit data从pc收数据(负电压)
dtrdata terminal ready复位控制(正压)
rtsrequest to sendtest或tck控制(正电压)
gndground

表2 

信号线msp430
11x(1)系列f14x/f13x系列f4xx系列
txdp1.1p1.1p1.0
tck不连tcktck
rxdp2.2p2.2p1.1
rstrst/nmirst/nmitst/nmi
tsttest 不连

2.2 bootstrap的软件结构

 对于pc机来讲,主要就是解决通过串口与msp430通信和可视化界面的问题,可以使用vc、vb、delphi等各种软件开发工具,界面如图3所示。

 对于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 

波特率/baud9600
数据位/b8
奇偶校验偶校验
停止位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做一些改动,以满足用户实际应用中的需要。

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和熔断器。