登录 / 注册 / 中文版 / ENGLISH 
华虹首页 关于我们 产品中心 解决方案 服务支持 人力资源 新闻中心 联系我们
SOLUTION 解决方案
公交一卡通
身份识别
移动支付
社会保障
电信智能卡
解决方案 首页 >> 解决方案 >> 

非接触式IC卡硬件驱动层的功能测试方法

发布时间: 2010-10-9

非接触式 IC卡硬件驱动层的功能测试方法

-- ---上海华虹集成电路有限责任公司  左捷

  非接触式IC 卡的应用日趋广泛,对嵌入式软件功能测试方法有效性与实用性提出了新的挑战。论文探讨了非接触式 IC卡硬件驱动层的功能测试方法, 包括在FPGA平台上进行在线测 试以及样卡的回归测试方法。该文以嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使 用的功能测试方法,并依此设计测试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实 际项目情况,选择一种合适的测试架构。本文所提供的功能测试方法,可以有效地被利用在非接触式 IC卡硬件驱动层的功能测试中。

关键词FPGA;硬件驱动层;嵌入式软件测试;样卡;回归测试

 

Function Testing of Hardware Driver Layer in Contactless IC Card

-----Shanghai Huahong Integrated Circuit Co.,Ltd. ZuoJie

AbstractWith wide use of contactless IC card application, new challenges to the effectiveness and practicability of embedded software function testing arise. A function testing of hardware driver layer in contactless IC card was proposed in this paper. Online testing on the FPGA platform and regression testing method of sample cards were included. Based on the theory of embedded software testing methods, we chose feasible functional testing methods for testing of hardware driver layer. Test cases were designed and then sample card regression testing methods were determined. Finally according to test environments and actual project situations an appropriate test platform was selected.

Key wordsFPGA; Hardware Driver; Embedded Software Test; Sample Card; Regression Test

 


 

1.

随着非接触式IC卡使用越来越广泛,特别是金融类卡,身份认证类卡的使用 ,高层次的安全保护已成为非接触式IC卡广泛使用 所必须考虑的重要因素。一种常用的安全保护手段是在用户COS(Chip Operating System,片上操作系统软件)与硬件层之间添加硬件驱动层(Hardware Driver,简称Hwd),从而完全屏蔽上层应 用COS对于硬件资源的直接操 作,也就从软件上隔离了对于硬件资源的攻击风险。

本文探讨了非接触式IC卡硬件驱动层的功能测试方法,包括在FPGA平台上进行在线测试以及样卡的回归测试方法。本文作者以 嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使用到的功能测试方法,并依此设计测 试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实际项目情况,选择一种合适的测试 架构。

本文研究中所基于的非接触式 IC卡使用的CPUARM 公司的SC100。该CPU基于32 位的ARM7架构设计,并采用 RISC指令,内置 ROMRAM作为程序和数据的存储,并且采用EEPROM作为数据或程序的断电存储。另外,该芯片集成了定时器和 看门狗、时钟生成、随机数生成、中断控制器、DES 算法、RSA算法、ECC算法、安全控制、RF接口等模块。用户COS将通过Hwd层来实现对这些功能的使用。

2. 硬件驱动层(Hwd)简介

Hwd层(如图1所示)位于硬件和用户COS之间,它与用户COS一样拥有单独的 ROMRAM空间,不同的是,Hwd层运行在ARM处理器的特权模式,而 用户COS运行在ARM处理器的用户模式[1]。用户COS通过 CPU的软中断机制来调用 Hwd提供的功能函数,从而 实现对硬件资源的访问。

应 用程序(用户COS)

硬 件驱动层(Hwd)

硬 件(Hardware)

1 系统层次结构

Hwd为固化在非接触式 IC卡芯片只读存储器 (ROM) 中的二进制Bin文件,由两个子系统组成:

(1)     硬件驱动接口子系统: 包含有异常向量表、内存布局初始化代码、初始化用户程序的执行环境程序和特权模式变更用户模式代码 。

(2)     硬件驱动功能子系统: 包含有功能入口句柄列表、功能模块主体(包含功能调 用参数检查) 和特权模式变更用户模式代码。如图 2所示。

2 Hwd层的总体架构

3. 功能测试用例的设计

不论是嵌入式软件测试还是普通的 软件测试,它们的中心任务都是验证和确认其设计实现是否符合需求要求,在验证过程中发现系统的缺陷 [2] 。与一般的软件测试一样,嵌入式 软件测试方法也可分为两类,即静态测试和动态测试。动态测试又可分为黑盒测试和白盒测试。黑盒测试 又叫做功能测试或数据驱动测试。

采用黑盒技术设计测试用例的方法 有:等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法等。

3.1 测试用例设计方法

在对Hwd的测试中我们选择使用等价类划分方法、边界值分析方法以及错误推测方 法来设计测试用例:

(1)     等价类划分方法:等价 类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地 假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干 等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测 试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类[3]

(2)     边界值分析方法:是对 输入或输出的边界值进行测试的方法[3]

(3)     错误推测方法:基于经 验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法[4]

例如:函数参数的正确取值范围为 0100,如图3所示,可划 分为两个无效等价类以及一个有效等价类,边界值除了需要考虑到0100以外,还需要考虑到 0100分别减1和加 1后的数值:-1199以及101。错误推测方法则取决于经验与直觉,假设在其他类似项目 中出现过取值为99.0001这样的小数时程序出现 错误的情况,则本次测试设计中也可以添加类似的测试用例。

3 等价类以及边界值分析方法

 

 

 

3.2 测试数据来源

Hwd提供了DES算法、RSA 算法、ECC算法以及大数运算 (例如:2048位数据的乘法运算、1024 位数据的模乘运算)的功能函数,对于这些函数的测 试首先要保证所设计的输入输出测试数据的正确性。本文采用的是OpenSSL软件包作为测试数据的来源。

OpenSSL由加拿大的 Eric Yang等发起编写,是一个开源的软件包 ,采用C语言作为开发语言,实现了 SSL(Secure Socket Layer,安全套接层协议 ) 及相关加密技术。OpenSSL的最新版本为openssl-0.9.8k.tar.gz。以大数运算为例,该软件包的crypto/bn 目录下的文件实现了各种大数运算,我们可以编写一个图形用户界面的测试数据生成工具,该工具通过调 用OpenSSL文件中相应的功能函数 来完成测试数据的生成。

4. 样卡的回归测试方法

将每个测试用例都写成一个 main.c文件,并分别与测试工 程编译成可执行文件,即一个测试用例就是一个可执行文件。在FPGA平台上在线测试时,编译成的可执行文件为ELF格式的映像文件,该文件通过ARM调试仿真 器下载到ROM中来执行,而在样卡回 归测试时,则需要编译成可下载到EEPROMRAM中的二进制 Bin文件。

在研究中,为了向用户演示芯片的 基本功能,我们开发了一个DemoCos用于演示,样卡的回归 测试就要用到这个DemoCos的指令。一共会使用到 3条指令,分别为:写 EEPROM指令、写RAM指令以及跳转指令。由于写指令支持的是16进制的数据,故首先要将二进制Bin文件数据从二进制转换成16进制,以下为样卡回归测试的两种方法:

(1)     首先,使用写 EEPROM指令将测试程序下载到 一块空闲的可供用户使用的EEPROM空间。例如:如图 4所示,从地址0x91000开始写,写完后,使用跳转指令跳转到该地址,开始执行测 试程序,执行完成后便可在上位机程序中看到测试结果。复位卡片或非接触式读卡机,重复以上操作,完 成下一个测试用例的测试。

(2)     与下载到EEPROM空间的方法类似,可使用写RAM指令将测试程序下载到一块空闲的可供用户使用的RAM空间来完成测试。例如:如图4所示,将测试程序写到地址0xB0000。特别需要注意的是,由于RAM空间有限 ,DemoCos以及固化在芯片中的发 卡程序都需要使用到RAM空间,故余下的空闲空 间很小,所以,要求测试程序的大小加上变量使用的空间大小要小于RAM空闲空间的大小。

4 系统空间划分

从以上对于样卡两种回归测试方法 的描述,对比可知,使用将测试程序下载到EEPROM的方式 更加恰当,即下载到RAM空间的方式可作为备份 方式,当芯片的EEPROM损坏时使用。

5. 测试方案

5.1 测试结果验证

所有的测试用例均需要对结果进行 验证,验证的思路有两种:

(1)     对所测函数的输出数据 进行验证,例如:算法类的函数,可设计输入以及输出的测试数据来对函数进行测试;

(2)     对无法通过输出数据来 验证结果的函数,可通过读取函数执行后所修改的寄存器位值来验证,例如:

函数名称

RFreshSeed

函数原型

int RFreshSeed(unsigned int close)

输入参数

unsigned int close   

选择更新伪随机数的种子

参数为0,更新种子

参数为1,关闭随机序列的输出

返回值

成功:SUCCESS

错误:PARAMETER_ERROR,参数错误

该函数操作的对象为随机数控制寄 存器的[2] :参数close1,则往随机数控制寄存器的 [2] 写入1 ;参数close0,则往随机数控制寄存器的[2]写入0。由于 Hwd需要掩膜到芯片中,所 以在进行前期设计时会尽可能的减少代码量,以避免过多占用芯片资源,故只要参数close取值为01,则程序将值进行写入操作后便 直接返回SUCCESS,不会进行校验,所以 在测试中不仅要验证该函数的返回值是否正确,还需要验证对于相应寄存器位的写入值是否正确。

FPGA平台上进行在线测试时,要达到上述目的并不困难,因为,在 ADS1.2包含的仿真调试器 AXD中便可对寄存器值进行 查看或修改,但这样的操作为非代码实现,需要人工干预,这大大降低了测试的自动化程度;而在样卡的 回归测试中,则无法对寄存器进行这样的操作。为解决这个问题,需要在Hwd中增加测试用函数,该函数的功能为可对所有寄存器进行读写操作,特别 需要注意的是测试用函数必须在Hwd通过研发阶段 FPGA平台上的在线测试以及 样卡回归测试后,提交大规模流片前删除。

5.2 测试方案

每一个Hwd的功能函数均有一个独立的软中断号,用户COS是通过软中断指令(SWI)发起Hwd函数调用,从而间接对 硬件进行操作,完成需要的功能。故在进行Hwd的功能测 试时,测试程序就是在模拟用户COSHwd功能函数的调用,验证相应的硬件操作是否成功。

在设计测试架构时,样卡的回归测 试是重点考虑的方面。在FPGA平台上进行在线测试时 ,可在仿真调试器AXD中调试测试程序,查看 被测Hwd函数的返回值以及寄存 器、RAM等芯片资源的情况,而 在样卡的回归测试中则无法跟踪查看到此些情况,故设计思路如下:

(1)     首先,定义一个数组, 然后,将测试结果保存在数组中,最后,通过HwdRF模块的收发数据函数将 该数组的所有元素值发送到上位机程序,从而获得测试结果。以上文中的RFreshSeed函数为例:

int ret, i;

unsigned char key = 0;

unsigned int close = 1;

unsigned char  test_result[10];

unsigned char  result _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;

最后,调用HwdRF 模块的收发数据函数将该数组的所有元素值发送到上位机程序:

l  若测试通过 ,则上位机程序收到的数据应为:00010203040506070809

l  若测试未通 过,则上位机程序收到的数据为:01FF0203040506070809

(2)     考虑到样卡回归测试时 ,需要将测试程序下载到芯片中执行,所以测试程序的大小以及变量对于RAM空间的使用都要尽可能的小。将每个测试用例写成一个main.c文件,然后与测试工程编译成可执行文件,即一个测试用例 就是一个可执行文件,就解决了这个问题。

5.3 测试环境

对于Hwd的功能测试将在两种测试环境中进行,本文中使用的操作系统平台为 Windows XP Professional

(1)     Hwd的研发阶段:需要在FPAG平台上采用在线方式进行测试,在FPGA 平台上连上ARM调试仿真器,通过仿真 器将测试程序下载到ROM中,然后可对 SC100上运行的测试程序进行 实时检测、观察以及设置断点进行调试,并可实时更改寄存器、RAM以及EEPROM等数据。测试环境如下 :

l 硬件:

测试用 PC机 一台

FPGA仿真平 台 一套

非接触 式读卡机 一台

ARM调试仿真 器:Smart-ICE 一台

l 软件:均运行在PC机上

ADS1.2集成开 发环境

ARM Multi-ICE V2.2

上位机 程序

(2)     样卡的回归测试阶段: 此时,Hwd已掩膜到样卡的 ROM中,需要将测试程序写 入到EEPROMRAM中执行,方可完成相应的测试工作。测试环境如下:

l 硬件:

测试用 PC机 一台

非接触 式读卡机 一台

l 软件:运行在PC机上

上位机 程序

其中,非接触式读卡器以及上位机 程序一般为公司自行研发的产品,这样便于根据项目的实际情况,在研发与测试中调整与修改这两项产品 ,以使其更适合具体项目的使用。

6. 结论

本文探讨了非接触式IC卡硬件驱动层的功能测试方法,包括在FPGA平台上进行在线测试以及样卡的回归测试方法。本文作者以 嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使用到的功能测试方法,并依此设计测 试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实际项目情况,选择一种合适的测试 架构。通过在实际工作中的使用情况表明,所设计的功能测试方法行之有效。

下一步的工作将在已有基础上,对 非接触式IC卡硬件驱动层进行自动 化或半自动化功能测试,以及开发自动化测试工具方面进行研究。

 

参考文献

[1] 王宇行, “ARM程序分析与设计”, 北京航空航天大学出版 社, 20083.

[2] 康一梅, 张永革, 李志军, 胡江, 吴伟.  嵌入式软件测试 ”. 机械工业出版社, 20087.

[3] 文斯测 试技术研究中心.  测试用例设计白皮书”. http://www.csdn.net/

[4] 飞思科 技产品研发中心, “实用软件测试方法与应用 ”, 电子工业出版社, 20038.

—————————————————————————

作者简介

左捷拥有上海交通大学工程硕士学位,目前为上海华虹集成电路有限责任公司系统应用部的软件测试工程 师,主要从事硬件驱动层以及COS等嵌入式软件的系统测 试工作。