《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 解决方案 > 单片机应用策略(1):设计常用方法及应对策略

单片机应用策略(1):设计常用方法及应对策略

2012-06-04

一、单片机开发过程中硬件调试技巧

  在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调试的工作量比较大。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。本文结合作者在单片机开发过程中体会,讨论硬件调试的技巧。

  当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段,调试大体分为以下几步。

  1 硬件静态的调试

  1.1排除逻辑故障

  这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。必要时利用数字万用表的短路测试功能,可以缩短排错时间。

  1.2排除元器件失效

  造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。

  1.3排除电源故障

  在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。

  2 联机仿真调试

  联机仿真必须借助仿真开发装置、示波器、万用表等工具。这些工具是单片机开发的最基本工具。

  信号线是联络8031和外部器件的纽带,如果信号线连结错误或时序不对,那么都会造成对外围电路读写错误。51系列单片机的信号线大体分为读、写信号线、片选信号线、时钟信号线、外部程序存贮器读选通信号(PSEN)、地址锁存信号(ALE)、复位信号等几大类。这些信号大多属于脉冲信号,对于脉冲信号借助示波器(这里指通用示波器)用常规方法很难观测到,必须采取一定措施才能观测到。应该利用软件编程的方法来实现。例如对片选信号,运行下面的小程序就可以检测出译码片选信号是否正常。

  MAIN:MOVDPTR,#DPTR

  ;将地址送入DPTR

  MOVXA,@DPTR

  ;将译码地址外RAM中的内容送入ACC

  NOP;适当延时

  SJMPMAIN;循环

  执行程序后,就可以利用示波器观察芯片的片选信号引出脚(用示波器扫描时间为1μs/每格档),这时应看到周期为数微秒的负脉冲波形,若看不到则说明译码信号有错误。

  对于电平类信号,观测起来就比较容易。例如对复位信号观测就可以直接利用示波器,当按下复位键时,可以看到8031的复位引脚将变为高电平;一旦松开,电平将变低。

  总而言之,对于脉冲触发类的信号我们要用软件来配合,并要把程序编为死循环,再利用示波器观察;对于电平类触发信号,可以直接用示波器观察。

  下面结合在自动配料控制系统中键盘、显示部分的调试过程来加以说明。本系统中的键盘、显示部分都是由并行口芯片8155扩展而成的。8155属于可编程器件,因而很难划分硬件和软件,往往在调试中即使电路安装正确没有一定的指令去指挥它工作,也是无法发现硬件的故障。因此要使用一些简单的调试程序来确定硬件的组装是否正确、功能是否完整。在本系统中采取了先对显示器调试,再对键盘调试。

  (1)显示器部分调试为了使调试顺利进行,首先将8155与LED显示分离,这样就可以用静态方法先测试LED显示,分别用规定的电平加至控制数码管段和位显示的引脚,看数码管显示是否与理论上一致。不一致,一般为LED显示器接触不良所致,必须找出故障,排除后再检测8155电路工作是否正常。对8155应进行编程调试时,分为两个步骤:第一,对其进行初始化(即写入命令控制字,最好定义为输出方式)后,分别向PA、PB、PC三个口送入#0FFH,这时可以利用万用表测试各口的位电压为3.8 V左右,若送入#00H,这时各口的位电压应为0.03 V;第二,将8155与LED结合起来,借助开发机,通过编制程序(最好采用“8”字循环程序)进行调试。若调试通过后,就可以编制应用程序了。

  (2)键盘调试一般显示器调试通过后,键盘调试就比较简单,完全可以借助于显示器,利用程序进行调试。利用开发装置对程序进行设置断点,通过断点可以检查程序在断点前后的键值变化,这样可知键盘工作是否正常。

  以上讨论了借助简单工具对单片机硬件调试的方法,这些方法如果利用得好,就

  可以大大缩短单片机的开发周期。

二、单片机破解的常用方法及应对策略

  1 引言

  单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。事实上,这样的保护措施很脆弱,很容易被破解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。

  2 单片机攻击技术

  目前,攻击单片机主要有四种技术,分别是:

  (1)软件攻击

  该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。软件攻击取得成功的一个典型事例是对早期ATMEL AT89C 系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。

  (2) 电子探测攻击

  该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。

  (3)过错产生技术

  该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。

  (4)探针技术

  该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。

  为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。所有的微探针技术都属于侵入型攻击。另外三种方法属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,这是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。

  大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。因此,对单片机的攻击往往从侵入型的反向工程开始,积累的经验有助于开发更加廉价和快速的非侵入型攻击技术。

  3 侵入型攻击的一般过程

  侵入型攻击的第一步是揭去芯片封装。有两种方法可以达到这一目的:第一种是完全溶解掉芯片封装,暴露金属连线。第二种是只移掉硅核上面的塑料封装。第一种方法需要将芯片绑定到测试夹具上,借助绑定台来操作。第二种方法除了需要具备攻击者一定的知识和必要的技能外,还需要个人的智慧和耐心,但操作起来相对比较方便。

  芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。该过程一般在非常干燥的条件下进行,因为水的存

  在可能会侵蚀已暴露的铝线连接。

  接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,然后用清水清洗以除去盐分并干燥。没有超声池,一般就跳过这一步。这种情况下,芯片表面会有点脏,但是不太影响紫外光对芯片的操作效果。

  最后一步是寻找保护熔丝的位置并将保护熔丝暴露在紫外光下。一般用一台放大倍数至少100倍的显微镜,从编程电压输入脚的连线跟踪进去,来寻找保护熔丝。若没有显微镜,则采用将芯片的不同部分暴露到紫外光下并观察结果的方式进行简单的搜索。操作时应用不透明的纸片覆盖芯片以保护程序存储器不被紫外光擦除。将保护熔丝暴露在紫外光下5~10分钟就能破坏掉保护位的保护作用,之后,使用简单的编程器就可直接读出程序存储器的内容。

  对于使用了防护层来保护EEPROM单元的单片机来说,使用紫外光复位保护电路是不可行的。对于这种类型的单片机,一般使用微探针技术来读取存储器内容。在芯片封装打开后,将芯片置于显微镜下就能够很容易的找到从存储器连到电路其它部分的数据总线。由于某种原因,芯片锁定位在编程模式下并不锁定对存储器的访问。利用这一缺陷将探针放在数据线的上面就能读到所有想要的数据。在编程模式下,重启读过程并连接探针到另外的数据线上就可以读出程序和数据存储器中的所有信息。

  还有一种可能的攻击手段是借助显微镜和激光切割机等设备来寻找保护熔丝,从而寻查和这部分电路相联系的所有信号线。由于设计有缺陷,因此,只要切断从保护熔丝到其它电路的某一根信号线,就能禁止整个保护功能。由于某种原因,这根线离其它的线非常远,所以使用激光切割机完全可以切断这根线而不影响临近线。这样,使用简单的编程器就能直接读出程序存储器的内容。

  虽然大多数普通单片机都具有熔丝烧断保护单片机内代码的功能,但由于通用低档的单片机并非定位于制作安全类产品,因此,它们往往没有提供有针对性的防范措施且安全级别较低。加上单片机应用场合广泛,销售量大,厂商间委托加工与技术转让频繁,大量技术资料外泻,使得利用该类芯片的设计漏洞和厂商的测试接口,并通过修改熔丝保护位等侵入型攻击或非侵入型攻击手段来读取单片机的内部程序变得比较容易。

  4 应对单片机破解的几点建议

  任何一款单片机?从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来攻破。所以,在用单片机做加密认证或设计系统时,应尽量加大攻击者的攻击成本和所耗费的时间。这是系统设计者应该始终牢记的基本原则。除此之外,还应注意以下几点:

  (1)在选定加密芯片前,要充分调研,了解单片机破解技术的新进展,包括哪些单片机是已经确认可以破解的。尽量不选用已可破解或同系列、同型号的芯片。

  (2)尽量不要选用MCS51系列单片机,因为该单片机在国内的普及程度最高,被研究得也最透。

  (3)产品的原创者,一般具有产量大的特点,所以可选用比较生僻、偏冷门的单片机来加大仿冒者采购的难度。

  (4)选择采用新工艺、新结构、上市时间较短的单片机,如ATMEL AVR系列单片机等。

  (5)在设计成本许可的条件下,应选用具有硬件自毁功能的智能卡芯片,以有效对付物理攻击。

  (6)如果条件许可,可采用两片不同型号单片机互为备份,相互验证,从而增加破解成本。

  (7)打磨掉芯片型号等信息或者重新印上其它的型号,以假乱真。

  当然,要想从根本上防止单片机被解密,程序被盗版等侵权行为发生,只能依靠法律手段来保障。

三、MCS-51单片机定时中断不同应用情况

  根据定时中断的不同应用情况,应选择不同的精确定时编程方法。MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为3~8个机器周期.文中以定时器T1工作在定时方式1为例,晶振频率为12MHz 。

  1 方法1

  在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一次中断时,需多长时间,由此来重装载和启动定时器。例如定时周期为1ms,则通常定时器重装载值为-1000(0FC18H)。下面的程序在计算每个定时周期的精确重装载值时,考虑了由停止计数(CLR TR1)到重新启动计数(SETB TR1)之间的7个机器周期时间。程序中#LOW(-1000+7)和#HIGH(-1000+7)是汇编符号,分别表示-1000+7=0FC1FH这个立即数的低位字节(1FH)和高位字节(0FCH)。

  ……

  CLR EA ;禁止所有中断

  CLR TR1 ;停止定时器T1

  MOV A,#LOW(-1000+7) ;期望数的低位字节

  ADD A,TL1 ;进行修正

  MOV TL1,A ;重装载低位字节

  MOV A,#HIGH(-1000+7) ;对高位字节处理

  ADDC A,TH1

  MOV TH1,A

  SETB TR1 ;重启动定时器

  SETB EA ;重开中断

  ……

  此方法适用于各种原因造成的定时误差的情况,为通用方法。

  2 方法2

  假如定时周期为10ms,通常定时器重装载值为0D8F0H,中断子程序如下[2]:

  ORL TL1,#0F0H

  MOV TH1,#0D8H

  ……

  这里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定时精度。此方法只适用于重装载值低位字节的低4位为零,且中断响应的延迟时间小于16个机器周期的情况。类似的定时器重装载值有0FFF0H,0FFE0H等。

  3 方法3

  假如定时周期为1ms,通常定时器重装载值为0FC18H,中断子程序如下:

  MOV A,#LOW(-1000+4) ;期望数的低位字节

  ADD A,TL1

  MOV TL1,A

  MOV A,#HIGH(-1000+4) ;对高位字节处理

  ADDC A,TH1

  MOV TH1,A

  DEC TL1 ;恢复提前了的2个机器周期

  ……


 

方法4

假如定时周期不确定,只知道定时器重装载值存放在寄存器R3、R2中,中断子程序如下:

MOV A,#05H ;3个机器周期装载TL1,2个周期提前

ADD A,TL1

ADD A,R2

MOV TL1,A

MOV A,R3 ;处理高位字节

ADDC A,TH1

MOV TH1,A

DEC TL1 ;恢复提前了的2个机器周期

……

此法适用于定时周期不确定的情况,其它同方法3。

5 方法5

当定时中断发生的位置可预知时,通常出现在主程序的AJMP $ (或SJMP $)等待指令处,中断延迟时间为3个或4个机器周期。取固定值4可简化补偿程序。以定时周期1ms为例,中断子程序如下:

ORG 001BH

MOV TL1,#LOW(-1000+4)

MOV TH1,#HIGH(-1000+4)

……

此方法适用于定时中断总发生在同一条指令位置,且无其它中断源的情况。

                                          

四、单片机低功耗控制与设计的几个要点

  降低功耗不光能够大大的节约电能还能简化电源部分的设计,甚至可以用于手持设备上面使用,这些都已经越来越成为未来产品的设计方向了。

  1 降低功耗从MCU选型开始。一开始选型的时候就应该考虑选择低功耗的MCU比如MSP430一类的为低功耗设计的CPU。

  强烈不建议使用51一方面是因为51速度慢,另外一方面是因为51的IO是有上拉电阻的,虽然当IO为高电平是上拉电阻不费电,但是下拉电流的时候却也有不小的功耗产生。还有一点就是51的运算速度实在是太慢了~~~~~很多运算用51都需要很高的主频而主频高了就意味着高的功耗。

  2 选择器件用电电压。很明显降低器件的用电电压能够明显的降低器件的耗电比如说ATmega8和ATmega88虽然芯片大致内部结构一致但是后者可以工作在1.8V的超低电压下而前者就不行,综合考虑下当然还是选择后者。

  3 尽量降低器件的工作频率。大家都知道CMOS电路的工作电流主要来此于开关转换时对后一级输入端的电容充放电,如果能够降低MCU的工作频率自然耗电也就下来了,要知道当AVR工作在32.768Hz时和工作在20Mhz时的工作电流差异可不是一般的小啊。

  4 尽量使用中断让处理器进入更深的睡眠。众所周知睡眠模式和掉电模式能够大大的降低MCU的工作电流,聪明的单片机设计师能够充分的利用MCU的中断功能让MCU周期性的工作和睡眠从而大大的降低MCU的工作电流。

  5 尽量关闭MCU内部不用的资源。这个吗地球人都知道的好处,我说这个有点像废话一样,不用的东西你干吗开着呢?比如ATmega8内部的模拟比较器,默认是开着的还有ATmega88内部的大多数资源都可以在不用的时候用软件关闭。

  6 尽量使用VMOS做为外部功率扩展器件。道理很简单VMOS驱动的时候是电压行器件驱动是几乎不产生功耗,要比普通的晶体管省电多了,而且由于VMOS的导通内阻低通常只有几十个毫欧,在小电流的时候器件自身发热也小,尤其是小电流是效率远比传统晶体管要高的多的多。这里还是建议使用高速VMOS,因为高速VMOS在开关速度相当高的PWM时效率会更高。

  7 片外IC的电源最好都能由MCU的IO控制比如说我们常用的24C02。由于它是掉电记忆的,所以我们完全可以在它不工作的时候对它关电源,以节约电流。还有比如说我们常用的6116的SRAM,我们完全可以用单片机来控制它的片选端口来控制它的工作与休眠从而节约电流。

  8 这招也是最毒辣的一招。通常我们驱动一些LED器件,完全可以通过PWM来控制从而省略限流电阻,要知道当器件选定后它的内阻也就已经确定,而当电源电压也确定的时候,就可以通过占空比来确定器件上的电压,从而节约了限流电阻同时也就节约了限流电阻上面的功耗,如果用户使用的是电池,我们完全还可以不定期的对电池电压进行检测然后改变占空比,从而恒定负载上面的电压,达到电源的最大利用率。


五、提高单片机设计硬件可靠性的一般方法

  1、电路设计

  影响单片机测控系统可靠性的因素,有45%来自系统设计。为了保证测控系统的可靠性,在对电路设计时,应进行最坏情况的设计。

  各种电子元件的特性不可能是一个恒定值,总是在其标注值的上下有一个变化的范围。同时,电源电压也有一个波动范围,最坏的设计(指工作环境最坏情况下)方法是考虑所有元件的公差,并取其最不利的数值。核算电路的每一个规定的特性。如果这一组参数值都能保证正常工作,那么在公差范围内的其它所有元件值都能使电路可靠地工作。在设计应用系统电路时,还要根据元件的失效率特征及其使用场所采取相应措施:

  在元件级,对那些容易产生短路的部件,以串联方式复制;对那些容易产生断路的部件,以并联方式复制,并在这些部分设置报警和保护装置。

  2、元器件选择

  (1)型号与公差 在确定元件参数之后,还要确定元器件的型号,这主要取决于电路所允许的公差范围。对于电容器,如果用于常温环境中,一般的电解电容就可以满足要求,对于电容公差要求较高的电路系统,则电解电容就不宜选用。

  (2)降额使用 元件的失效率随工作电压成倍的增加。因此,系统供电电源的容量就大于负载的最大值,元器件的额定工作条件是多方面的,如电流电压频率、功率、机械强度以及环境温度等。所说的降额使用,就是要降低以上这些参数,在电路设计中,首先考虑的是降低它的功效。选用电容器时要降低它的工作电压,使用电压一般小于额定电压的60%。选用二级管以及可控硅时,应使其工作电流低于额定电流,对于晶体管、稳压管等应考虑工作时的耗散功率。

  集成电路的降额使用同样是从电气参数及环境因素上来考虑。在电气上要降低功耗,对CMOS芯片和线性集成电路在满足输出要求的前提下,应降低电源电压或减少下级负载。而TTL电路对电源电压要求比较严,这时应注意它们的带负载能力,民用元器件的温度使用范围较窄,如果用于工业控制中,在整体设计时应降额使用。

  3、结构设计

  结构可靠性设计是硬件可靠性设计的最后阶段,结构设计时首先应注意元器件及设备的安装方式;其次是控制系统工作的环境条件,如通风、除湿、防尘等。

  4、噪声抑制

  噪声对模拟电路会影响系统的精度,对数字电路会造成误动作,因此在工程设计中,必须采用抑制措施。干扰信号可分为串模干扰和共模干扰两大类。针对这两类干扰成熟的电路以及专题著作也不少,下面将常用的方法介绍如下:

  4.1 抗串模干扰的措施

  (1)光电隔离,在输入和输出通道上采用光耦合器件来进行信息传输,以免上一级干扰窜到下一级。

  (2)硬件滤波电路,常用RC低通道滤波器接在一些低频信号传送电路中(如热电偶输入线路等),它可大大削弱各类高频干扰信号(如各类“毛刺”干扰)。

  (3)过压保护电路,在输入输出通道上应采用一定的过压保护电路,以防止引入高电压伤害单片机系统。

  (4)采用抗干扰稳压电源,微机系统的供电线路是干扰的主要入侵途径。通常采用以下几种措施:

  ①单片机系统的供电线路和产生干扰的用电设备分开供电;

  ②通过低通滤波器和隔离变压器接入电网;

  ③整流元件上并接滤波电容,如图1所示,选用高质量的稳压电路。


  4.2 抗共模干扰措施

  共模干扰通常是针对平衡输入信号而言的,抗共模干扰的方法有以下几种:

  (1)平衡对称输入,在设计信号源时,通常是各类信号尽可能做到平衡对称。

  (2)选用高质量的差动放大器。

  (3)要有良好的接地系统。

  (4)系统接地点要正确连接;系统中的大功率的元件地线与小功率的信号地线也要分开布线或加粗地线,数字地与模拟地必须分开,最后只在一点相连。如果系统中的数字地与模拟地不分,则数字信号电流在模拟系统的地线中形成干扰(地电位改变),使模拟信号失真,这一点请初学者特别注意。

  (5)屏蔽,用金属外壳或金属匣将整机或部分元器件包围起来,再将金属外壳或金属匣接地,就能起到屏蔽作用。对于各种通过电磁感应引起的干扰,特别注意的是屏蔽外壳的接地点,一定与信号的参考点相接。

  以上介绍的几项是十分必要的硬件抗干扰措施。


 

 

 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。