嵌入式计算系统调测方法与技术综述
现场测试和试验室测试的最大区别就是测试设备难以安装和连接:线路板封闭在机箱中,测试信号线很难引入,即使设备外壳上留有测试插座,测试信号线也需要很长,传统的在线仿真器在现场测试中无法使用。另一方面,现场往往没有实验室里的各种测试仪器和设备,因此,必须有更好的方法和手段来完成测试。
javascript:window.open(this.src);" style="cursor:pointer;"/>
嵌入式处理器中目前有很多芯片具有类似Motorola公司683XX系列处理器的BDM调试接口(详见第5部分)。这种接口是串行的,处理器内部固化了调试微码,为现场测试 带来了方便。对于不具备这种接口的嵌入式计算系统,在系统设计时将关键信号点引出到一个测试接口插座上,通过该插座可输入测试激励信号和观察输出信号;对于软件测试,可使用前文中所述的ROM板测试方法,外接显示部件来观察程序运行情况。
软件现场调试的另外一个要求是程序应能够现场下载,以便在发现问题后能够修改软件。现场在线下载程序的方法有两种:一种是使用具有ISP功能的处理(如Philips公司的P89C51RD系列MCU等),另一种方案是将软件设计成两部分,一部分是应用功能软件,另一部分是完成前者下载到系统中的下载通信软件。无论哪种方法,下载的主机均是PC机。如果需要达到远程调试和下载的目的,则要使用后一种方案。例如,在Echelon公司的Lonwork现场总线产品中,每个节点中的程序均可以通过网络下载,这种功能为多节点网络系统的现场调试带来了极大方便。
4 可测试性设计
在产品开发初期,产品测试的目的是验证产品设计的正确性,而可测试性部件的存在则能加快测试速度,缩短产品开发周期;在生产阶段,通过测试来剔除有缺陷的产品和部件;在使用阶段,测试则用于故障定位,找出失效的部件并更换或者维修。可见,产品的测试在产品生命周期各阶段均有十分重要的作用。可测试性设计应该在产品设计初期就加以考虑,结合测试在不同阶段的作用来设计测试模块和接口。
产品的可测试性设计要考虑的问题有:测试的目的、测试部件的位置、测试部件的基本要素、内置测试部件与外部测试设备仪器之间的电气和机械连接,添加测试部件对被测模块功能和性能的影响、测试部件的成本以及何时使用测试功能等。
如前所述,测试在产品不同阶段是有差别的。在产品开发阶段,很多参数需要定量和详细地进行测试,以验证产品在各种不同情况下是否能正常工作;测试参数,测试点较多,可以方便地连接各种外部测试仪器,也不需要考虑添加测试部件所带来的附加成本。在产品生产和使用阶段,测试的节点和参数数量也相对减少,测试一般是定性的,无需借助于外部设备的自测试,成本因素也必须考虑。
测试部件一般位于被测部件的接口和边界位置上,如图上所示,用于产品控制被测部件的激励信号和采样被测部件的输出信号。测试部件一般由测试信号源、信号传输通道、测试观察装置等组成。测试部件可以完全包含在被测部件中,也可部分位于外部(如外接信号源和示波器等)。对于自动测试,测试部件还包括被测部件的预期输出存储部件比较部分。
在一个系统中,如何划分模块,确定测试位置(即模块的边界)是关系到可测试性设计是否合理的首要问题。模块间最小相关原则和模块内最小相似原则是两个重要依据:前者保证测试可以独立进行,不需要很多其它模块的配合;后者可以使测试能正确反映被测模块的大部分工况,不至于漏测很多工作状态。
很多情况下,从被测模块的边界直接引出信号有困难,测试信号需要经过其它模块引入到被测模块上。如果作为信号路径的模块对信号特征没有改变,则称这种测试路径是透明的,路径模块必须能在旁路模式和正常工作模式之间切换,实现起来有局限性。对于硬件来说,最简单的透明路径是使用跳线。
对于简单嵌入式系统来说,测试一般包括上电自测试和人为测试。后者在故障出现时进行。对于复杂系统来说,还包括定时自动测试,比如在大型程控交换机和飞机机载电子设备的运行过程中,均定时进行自检。
可测试性设计还应考虑测试功能所使用对象的不同。产品设计人员、产品使用人员和产品维护人员对测试内容的要求是同的,需要进行分层次的可测试性设计。
对于硬件和系统的可测试性设计已有IEEE1149.1/4/5等标准可以借鉴,对于单纯的软件测试,目前尚无具体和统一的标准,只有诸如代码格式分析、白盒测试、黑盒测试、覆盖测试等测试方法。软件测试的途径有两个。一是在源代码中增加大量测试代码,使用条件编译指令来控制形成调试、测试和最终发布等不同版本。调测版本的代码规模要比最终的发布版本大很多,在问题解决后,一般将临时性测试代码通过编译开关屏蔽。另外一个软件测试途径是使用专用的测试软件(如法国Telelogic公司的LOGISCOPE测试工具),这些测试软件能完成诸如覆盖测试、代码格式分析等功能,但均是针对特定的语言和操作系统环境,使用上一些限制。
还需要说明的就是“可观测”设计的概念。可观测性和可测试性不同,不需要加入激励信号,只观察系统运行中某些内部状态,比如软件中某个重要变量的数值变化,硬件电路中某个IC引脚的信号电平等。在设计中,应该保留这些观察接口,以便需要时用它来判断和分析系统的问题。一个可测试的系统,一定是可观测的,反之则不然。设计可测试性系统的目的是为了以后修改和改进设计,而使系统具有可观测性则是为了维护系统,判断哪个是出故障的部件,以便更换。可测试性设计一般用于新产品,而可观测性设计用于成熟产品。当然,在结构、安装条件和成本允许的情况下,成熟产品也应具有可测试性。实际上,由于处理器技术和芯片的日新月异,已经不存在真正意义上的成熟产品了。
在一类产品中的可测试性设计应该具有一致性,例如,用红色LED表示电源状态,所有电路板均应采用红色LED,点亮的频率也应该一致。作为企业,应制定相关的测试接口标准,并且这些标准应符合行业习惯或者行业标准。
5 测试和调试接口标准
测试和调试接口标准:JTAG和BDM。
5.1 背景调试模式
在使用传统的ICE来调试时,使用ICE中的CPU来取代目标板中的CPU,目标板和ICE之间使用多芯扁平电缆来连接,而ICE在使用时一般还需要缩主机(一般来PC)来连接。
在一些高端微处理器内部已经包含了用于调试的微码,调试时仿真器软件和目标板上的CPU的调试微码通信,目标板 上的CPU无需取出。由于软件调试指令无需经过一段扁平电缆来控制目标板,避免了高频操作限制、交流和直流的不匹配以及调试线缆的电阻影响等问题。这种调试模式在Motorola公司产品68300系列中被称为背景调试模式BDM(Background Debug Mode)。在仿真器和目标之间使用8芯(或者10芯)的BDM接口来连接,其他公司的嵌入式处理器也有类似功能,不过叫法不同,例如AMD公司在其X86微处理器上提供“AMDebug”的调试接口。
javascript:window.open(this.src);" style="cursor:pointer;"/>