2.2 测试软件设计

单片机软件采用C语言编写,以便于程序维护和扩展。软件流程图如图4所示。单片机上电后处于空闲等待状态,被测芯片插座与电源断开。当收到上位机发来的测试命令、芯片型号和封装等信息后,首先根据封装类型给对应电源管脚上电,再根据命令类型选择测试矢量来源(即决定使用固化的数据还是用户数据)。测试完毕后,如果先前命令是“功能测试”,仅将判别好坏的结果返回上位机,如果是“逻辑分析”,则需将响应矢量发回上位机,由上位机根据响应矢量数据生成波形图。

2.3 测试矢量与响应矢量设计

测试矢量和响应矢量是测试操作的基本数据结构。测试矢量是欲向芯片管脚施加的激励数据,响应矢量是单片机从芯片管脚读回的数据。两者均为16位,与芯片管脚一一对应。测试矢量的16位数据中对应于芯片输入管脚的那些数据位是激励位,对应于输出管脚的数据位是功能正确时的响应。对于功能测试,测试矢量预先根据真值表生成并存于单片机FLASH中。如果是逻辑分析,测试矢量由用户提供。响应矢量中仅对应于芯片输出管脚的那些数据位有意义,单片机通过读取芯片管脚状态获得响应矢量。

一个完整的测试过程包含施加测试矢量、读取响应矢量、响应矢量比较3个步骤。为了简化操作,单片机采用端口读写方式,这样一个16位的矢量只需2次8位读或写操作即可完成。需要注意的是,响应矢量与测试矢量的比较仅对其中的芯片输出位有意义,由于程序中采用字节比较方式,应采取措施屏蔽掉输入位对比较结果的影响。针对这个问题,设置了16位的屏蔽矢量,该矢量将对应于芯片输入管脚的数据位置“0”,对应于芯片输出管脚的数据位置“1”。在执行比较操作前,先将测试矢量和响应矢量分别与屏蔽矢量进行位与后再比较,从而消除了输入位对比较结果的影响。屏蔽输入位的流程如图5所示。