您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > MSP430单片机加密实施方案
摘要BOOTSTRAP用于在MSP430设计开发及系统更新时对Flash存储器的编程。它可以用经串口协议的命令来激活,使得用户可以通过PC控制MSP430,并实现数据交换。烧断Flash的熔丝是用来保护用户在Flash中的程序代码。本文主要介绍我们制作的BOOTSTRAP这一开发工具的功能、软硬件结构以及熔断工具的制作方法。关键词MSP430BOOTSTRAP熔断引言对于MSP430单片机的开发调试有多种技术方案,例如EPROM方式、OTP方式、仿真开发系统方式、JTAG和BOOTSTRAP方式。BOOTSTRAP(又名BootStrapLoader,简称BSL)可与另一种Flash仿真工具JTAG控制器配合使用。对于Flash型的MSP430单片机初期开发进行的仿真,只需要1台PC机和1个FET(FlashEmulatorTool)的JTAG控制器即可实现。进入产品级开发阶段,为了保护用户代码,烧断Flash的保护熔丝以后就无法再通过JTAG口访问单片机,这时用户对Flash中的程序再进行检查或更新就只能通过BOOTSTRAP进行。不用担心用户代码会泄露,BOOTSTRAP提供了32字节256位的密码保护,能完全确保代码的安全性。BOOTSTRAP的硬件制作并不费力,只要与调试环境软件配合(TI网站提供免费下载限制功能的软件,不过用户可以轻松地制作完全功能软件),就能很方便地构建自己的开发环境。对于熔断的方法,从以前TI公布的资料看,只要在功能引脚上施加一个6.5V左右的电压数ms就可以了。当然,各类芯片熔断的方法也有一些差异。但是,除了11x系列的单片机有人用这种方法试验成功外,对其余系列的单片机无法实现,甚至有毁坏芯片的可能。现在,随着为TI公司的各类FET仿真器及BOOTSTRAP开发工具的相继推出,在一篇TI资料中,给出了MSP430熔断的方案和指令结构,这样,我们用DIY的完全功能开发调试系统就可以构建成功了。1BOOTSTRAP的功能与启动通过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处的BSLRESET向量用做程序入口,单片机执行BOOTROM里的程序。MSP430F13x/14x的正常复位时序如图1所示,BSL复位时序如图2所示。图1图2如果发生以下情况,则不能启动BSL:◇在RST/NMI引脚保持为低时,TCK引脚上出现的上升沿少于2个;◇当RST/NMI引脚电平从低跳变到高时,TCK引脚还是保持为高;◇JTAG接口已控制了MSP430的资源;◇因Vcc下降引起POR(复位)。退出BOOTSTRAP时,要释放单片机的程序计数器PC,有两种情况:一种是在BSL中使用加载PC命令,从指定的程序地址继续执行;另一种是用标准的RESET序列强制使MSP430用0FFFEH的向量地址开始执行程序。2BOOTSTRAP的软硬件结构2.1BOOTSTRAP的硬件结构BOOTSTRAP硬件完成PC机和MSP430单片机通信的接口功能,主要由电源供电、信号接口和电平转换几个部分构成。MSP430采用的是3.3V电源,BOOTSTRAP可以采用外部给单片机供电再将电引到BOOTSTRAP板上,或直接利用PC机串口的电压再转换成3.3V的方案。利用PC机串口电压的方案由于不需要外部供电,适用于批量下载、修改程序,使用方便。PC机通过串口和MSP430通信,串口用的是232电平,MSP430单片机用的是3.3V的供电系统,因此存在一个电压转换的问题。对于电压转换,TI公司提供两个系列的电压调整芯片TPS770xx和TPS760xx系列。这两款芯片都能满足输入从-0.3~13.5V,稳定输出50mA电流1.2~5V的要求。BOOTSTRAP使用的信号线与串口信号线的对应情况如表1所列。信号线与MSP430系列引脚的对应情况如表2所列。表1表22.2BOOTSTRAP的软件结构对于PC机来讲,主要就是解决通过串口与MSP430通信和可视化界面的问题,可以使用VC、VB、Delphi等各种软件开发工具,界面如图3所示。图3对于MSP430来讲,与PC机进行串口通信,接收、发送数据与擦写Flash的程序是已经固化在BOOTROM里的,所以必须根据MSP430的设置来编写上位机程序。启动BSL后,MSP430会首先关闭看门狗、关中断、定义基础时钟模块,由DCO(Digitally-ControlledOscillator)产生系统主时钟脉冲MCLK和辅助时钟脉冲SMCLK,使最小时钟频率为1.5MHz。用TIMER_A做软串口实现与PC机通信,建立软件异步通信协议,连续模式,时钟源为MCLK,DIV=1,CCR0用于比较,CCTL0用于查询CCIFG0标志。P1.1为TX发送端(设置为输出高),P2.2为RX接收端(设置为输入)。BSL初始化系统后,处于就绪状态,等待PC机的同步序列和第一个命令。BOOTSTRAP的串口设置如表3所列。表3PC机设置好串口之后就可以发一个字节的同步信号给MSP430,MSP430正确接收后会返回一个ACK应答信号,PC机判断这个应答信号正确后就可以按照设定的帧格式发送、接收数据,MSP430每收到一帧,也会发一个应答信号以供PC机确认。其帧格式如图4所示。图4BSL的程序代码在BOOTROM中(0C00H…0FEFH),0FF0H…0FFFH保存有芯片的标识,其中BOOTSTRAP的版本信息就存储在地址为0FFAH的地方。BSL的初期版本(1.10及其以下)需要一些补丁来写Flash(参见TI有关资料BugIds:BSL2、BSL3和BSL4),其补丁也是MSP430的程序代码。先将其写到RAM中,使用LOADPC的命令,将目标程序的起始地址装入程序计数器中,就可以执行补丁程序了。然后,在程序最后加一句跳转到0x0c00的语句就可以返回BOOTSTRAP了。通过这种方法,用户也可以自己对BOOTSRTAP做一些改动,以满足用户实际应用中的需要。3熔断操作MSP430Fxx的芯片中设置有保护熔丝。熔断需要在TDI引脚上加上一个6.5V±0.5V的电压再加上一定的时序才能进行,一般采用PC机发出时序。TI的开发工具中,串口JTAG编程器能熔断,但它不能在线仿真。用户可以自己制作一个全套的开发工具,使之具有TI所有开发工具的功能。烧Flash的熔丝不能简单地以硬件给引脚加高电压实现,还需要用软件对MSP430发出指令来配合。以MSPF14x/13x为例,首先,通过IR_SHIFT指令使JTAG口控制MSP430单片机,通过DR_SHIFT_IN将TDO/TDI脚设置成TDI,发出指令IR_SHIFT(“IR_PREPARE_BLOW”)后等待1ms,再将熔断电压Vpp加在TDI脚上,送IR_SHIFT(“IR_EX_BLOW”)后再等1ms就可以将Vpp移开了。具体指令情况可以参见TI文档。4小结据了解,目前BSL的工具国外有SOFTBAUGH公司和GESLER公司制作的;国内也有杭州一家公司制作的BSL与熔断的综合工具,目前正在测试中。不过对于入门级的用户或个人,只要稍有一些软硬件制作能力,就完全可以花很短的时间来制作自己的开发工具,包括JTAG控制器、BSL和熔断器。参考文献1TI参考文档slaa096bslaa149MSP430单片机常见加密总结2007-04-1909:44:39天气:晴朗心情:高兴1为什么要加密,如何加密?当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话,那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET虽然可以将程序下载到芯片内部,但只有使用专业编程器能够防止程序被窃取。2JTAG、BSL、BOOTLOADER、熔丝的区别和关系是什么?JTAG接口能够访问MSP430单片机内部所有资源,通过JTAG可以对芯片进行程序下载、代码调试、内存修改等等,通过JTAG还能烧断加密熔丝,熔丝一旦被烧断,JTAG接口绝大部分功能失效,就再也不能通过它进行编程了。BSL接口是利用芯片内部驻留的bootloader程序实现的自编程,通过特定的时序使得CPU进入bootloader代码断,然后利用每个MSP430芯片内部都有的TimerA构成一个软件串口来与上位机通讯,这样可以将代码下载到芯片内部。实现BSL除了JTAG接口的一些引脚外,还需要用到两个TA0功能引脚,因此在设计产品时如果需要加密,则应该考虑将这两个引脚也连出来。要烧断熔丝(加密)必须使用JTAG接口;烧断熔丝后只能通过BSL或者用户代码来实现编程更新。3BSL的验证密码是怎么回事?BSL也能读出芯片内部的代码,这样可以实现编程后的校验等功能。通过BSL擦除所有Flash信息时不需要验证密码,但是要进一步操作,就得输入32字节密码进行验证。BSL的协议规定这32字节密码为芯片FLASH区域的最高32字节,也就是程序的16个中断向量,如果您拥有这段程序的最后32字节,就能通过BSL将芯片内部所有代码读取出来。4为什么要使用高级加密?32字节的密码看似几乎完全没可能使用穷举法来实现破解,但是各位别忘了,msp430的16个中断向量未必每一个都用到了,没用到的中断向量为0xffff,如果您的程序只用到了复位向量,那么破解者只需尝试最多32768次(中断向量为偶数,所以除以2)就能将其破解,另外,如果芯片本身Flash容量较小,比如4K字节,那么破解者只需尝试最多2K次就能将其破解。这对自动操作的计算机来说几乎是一瞬间的事情。那么如果用到的中断向量越多,就越难破解,最好的办法就是将所有未用到的中断向量全部填充为随机数据,这就是“高级加密”。5关于TI-TXT文件TI-TXT文件是TI公司为MSP430单片机定义的一种编程代码格式,其内容为纯文本格式,使用任何文本编辑器都能对其进行阅读,下面是一个这类文件的例子:@FEFEB240805A2001F2409D009000F2402E004000F2D080000100F2433300C2439500C2439A00F2D020005300F2401F005200F2439100F2439200F2439300F2439400F2439500F2439600F2439700F2439800F2439900F2439A0032D0D000FD3F31400003B012A2FF0C9318243C4000020E4330120000B012C4FF3C4000023E40FEFE30120000B012A6FF21523C4000023E40FEFE30120000B012A6FFB012FEFE3040A0FFFF3F1C4330410A121D4104000F4C0A4D1D83
本文标题:MSP430单片机加密实施方案
链接地址:https://www.777doc.com/doc-3435355 .html