非接触式IC卡硬件驱动层的功能测试方法
方案
5.1 测试结果验证
所有的测试用例均需要对结果进行验证,验证的思路有两种:
(1) 对所测函数的输出数据进行验证,例如:算法类的函数,可设计输入以及输出的测试数据来对函数进行测试;
(2) 对无法通过输出数据来验证结果的函数,可通过读取函数执行后所修改的寄存器位值来验证,例如:
该函数操作的对象为随机数控制寄存器的[2]:参数close取1,则往随机数控制寄存器的[2]写入1 ;参数close取0,则往随机数控制寄存器的[2]写入0。由于Hwd需要掩膜到芯片中,所以在进行前期设计时会尽可能减少代码量,以避免过多占用芯片资源,故只要参数close取值为0或1,则程序将值进行写入操作后便直接返回SUCCESS,不会进行校验,所以在测试中不仅要验证该函数的返回值是否正确,还需要验证对于相应寄存器位的写入值是否正确。
在FPGA平台上进行在线测试时,要达到上述目的并不困难,因为,在ADS1.2包含的仿真调试器AXD中便可对寄存器值进行查看或修改,但这样的操作为非代码实现,需要人工干预,这大大降低了测试的自动化程度;而在样卡的回归测试中,则无法对寄存器进行这样的操作。为解决这个问题,需要在Hwd中增加测试用函数,该函数的功能为可对所有寄存器进行读写操作,特别需要注意的是,测试用函数必须在Hwd通过研发阶段FPGA平台上的在线测试以及样卡回归测试后、提交大规模流片前删除。
5.2 测试方案
每一个Hwd的功能函数均有一个独立的软中断号,用户COS是通过软中断指令(SWI)发起Hwd函数调用,从而间接对硬件进行操作,完成需要的功能。故在进行Hwd的功能测试时,测试程序就是在模拟用户COS对Hwd功能函数的调用,验证相应的硬件操作是否成功。
在设计测试架构时,样卡的回归测试是重点考虑的方面。在FPGA平台上进行在线测试时,可在仿真调试器AXD中调试测试程序,查看被测Hwd函数的返回值以及寄存器、RAM等芯片资源的情况,而在样卡的回归测试中则无法跟踪查看到此些情况,故设计思路如下:
(1) 首先,定义一个数组,然后,将测试结果保存在数组中,最后,通过Hwd中RF模块的收发数据函数将该数组的所有元素值发送到上位机程序,从而获得测试结果。以上文中的RFreshSeed函数为例:
int ret, i;
unsigned char key = 0;
unsigned int close = 1;
unsigned chartest_result[10];
unsigned charresult _fail = 0xFF;
//赋初值
for(i=1; i<10; i++)
{ test_result t[i] = i; }
//运行被测函数RFreshSeed,并对返回值进行验证
ret = RFreshSeed (close);
if( ret != 0)
{ test_result [1] = result _fail;}
//计算数组元素值为0xFF的个数,并赋值给test_result[0]
for(i=1; i<10; i++)
{
if(test_result [i] == 0xFF)
{key = key + 0x01;}
}
test_result[0] = key;
最后,调用Hwd中RF模块的收发数据函数将该数组的所有元素值发送到上位机程序:
● 若测试通过,则上位机程序收到的数据应为:00010203040506070809
● 若测试未通过,则上位机程序收到的数据为:01FF0203040506070809
(2) 考虑到样卡回归测试时,需要将测试程序下载到芯片中执行,所以测试程序的大小以及变量对于RAM空间的使用都要尽可能的小。将每个测试用例写成一个main.c文件,然后与测试工程编译成可执行文件,即一个测试用例就是一个可执行文件,就解决了这个问题。
5.3 测试环境
对于Hwd的功能测试将在两种测试环境中进行,本文中使用的操作系统平台为Windows XP Professional:
(1) Hwd的研发阶段:需要在FPAG平台上采用在线方式进行测试,在FPGA平台上连上ARM调试仿真器,通过仿真器将测试程序下载到ROM中,然后可对SC100上运行的测试程序进行实时检测、观察以及设置断点进行调试,并可实时更改寄存器、RAM以及EEPROM等数据。测试环境如下:
● 硬件:
测试用PC机一台
FPGA仿真平台 一套
非接触式读卡机一台
ARM调试仿真器:Smart-ICE 一台
● 软件:均运行在PC机上
ADS1.2集成开发环境
ARM Multi-ICE V2.2
上位机程序
(2) 样卡的回归测试阶段:此时,Hwd已掩膜到样卡的ROM中,需要将测试程序写入到EEPROM或RAM中执行,方可完成相应的测试工作。测试环境如下:
● 硬件:
测试用PC机一台
非接触式读卡机一台
● 软件:运行在PC机上
上位机程序
其中,非接触式读卡器以及上位机程序一般为公司自行研发的产品,这样便于根据项目的实际情况,在研发与测试中调整与修改这两项产品,以使其更适合具体项目的使用。
6结论
本文探讨了非接触式IC卡硬件驱动层的功能测试方法,包括在FPGA平台上进行在线测试以及样卡的回归测试方法。本文作者以嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使用到的功能测试方法,并依此设计测试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实际项目情况,选择一种合适的测试架构。通过在实际工作中的使用情况表明,所设计的功能测试方法行之有效。
下一步的工作将在已有基础上,对非接触式IC卡硬件驱动层进行自动化或半自动化功能测试,以及开发自动化测试工具方面进行研究。
参考文献
[1] 王宇行, “ARM程序分析与设计”, 北京航空航天大学出版社, 2008年3月.
[2] 康一梅, 张永革, 李志军, 胡江, 吴伟.“嵌入式软件测试”. 机械工业出版社, 2008年7月.
[3] 文斯测试技术研究中心.“测试用例设计白皮书”. http:///
[4] 飞思科技产品研发中心, “实用软件测试方法与应用”, 电子工业出版社, 2003年8月.
作者简介
左捷拥有上海交通大学工程硕士学位,目前为上海华虹集成电路有限责任公司系统应用部的软件测试工程师,主要从事硬件驱动层以及COS等嵌入式软件的系统测试工作。