当前位置:首页 > 发言稿 > 非接触式IC卡硬件驱动层的功能测试方法:非接触功能
 

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

发布时间:2019-02-16 04:40:06 影响了:

  摘要:非接触式IC卡的应用日趋广泛,对嵌入式软件功能测试方法有效性与实用性提出了新的挑战。论文探讨了非接触式IC卡硬件驱动层的功能测试方法,包括在FPGA平台上进行在线测试以及样卡的回归测试方法。该文以嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使用的功能测试方法,并依此设计测试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实际项目情况,选择一种合适的测试架构。本文所提供的功能测试方法,可以有效地被利用在非接触式IC卡硬件驱动层的功能测试中。
  关键词:FPGA;硬件驱动层;嵌入式软件测试;样卡;回归测试
  
  Function Testing of Hardware Driver Layer in Contactless IC Card
  
  ZUO Jie
  (Shanghai Huahong Integrated Circuit Co.,Ltd. )
  
  Abstract:With 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 words:FPGA; Hardware Driver; Embedded Software Test; Sample Card; Regression Test
  
  1引言
  
  随着非接触式IC卡使用越来越广泛,特别是金融类卡、身份认证类卡的使用,高层次的安全保护已成为非接触式IC卡广泛使用所必须考虑的重要因素。一种常用的安全保护手段是在用户COS(Chip Operating System,片上操作系统软件)与硬件层之间添加硬件驱动层(Hardware Driver,Hwd),从而完全屏蔽上层应用COS对于硬件资源的直接操作,也就从软件上隔离了对于硬件资源的攻击风险。
  本文探讨了非接触式IC卡硬件驱动层的功能测试方法,包括在FPGA平台上进行在线测试以及样卡的回归测试方法。本文作者以嵌入式软件测试方法理论为基础,确定在进行硬件驱动层测试时可使用到的功能测试方法,并依此设计测试用例;然后,确定样卡的回归测试方法;最后,根据测试环境以及实际项目情况,选择一种合适的测试架构。
  本文研究中所基于的非接触式IC卡使用的CPU为ARM公司的SC100。该CPU基于32位的ARM7架构设计,并采用RISC指令,内置ROM、RAM作为程序和数据的存储,并且采用EEPROM作为数据或程序的断电存储。另外,该芯片集成了定时器和看门狗、时钟生成、随机数生成、中断控制器、DES算法、RSA算法、ECC算法、安全控制、RF接口等模块。用户COS将通过Hwd层来实现对这些功能的使用。
  
  2硬件驱动层(Hwd)简介
  
  Hwd层(如图1所示)位于硬件和用户COS之间,它与用户COS一样拥有单独的ROM和RAM空间,不同的是,Hwd层运行在ARM处理器的特权模式,而用户COS运行在ARM处理器的用户模式[1]。用户COS通过CPU的软中断机制来调用Hwd提供的功能函数,从而实现对硬件资源的访问。
   Hwd为固化在非接触式IC卡芯片只读存储器(ROM)中的二进制Bin文件,由两个子系统组成:
   (1) 硬件驱动接口子系统:包含有异常向量表、内存布局初始化代码、初始化用户程序的执行环境程序和特权模式变更用户模式代码。
   (2) 硬件驱动功能子系统:包含有功能入口句柄列表、功能模块主体(包含功能调用参数检查)和特权模式变更用户模式代码。如图2所示。
  
  3功能测试用例的设计
  
  不论是嵌入式软件测试还是普通的软件测试,它们的中心任务都是验证和确认其设计实现是否符合需求要求,在验证过程中发现系统的缺陷[2]。与一般的软件测试一样,嵌入式软件测试方法也可分为两类,即静态测试和动态测试。动态测试又可分为黑盒测试和白盒测试。黑盒测试又叫做功能测试或数据驱动测试。
  采用黑盒技术设计测试用例的方法有:等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法等。
  
   3.1 测试用例设计方法
  在对Hwd的测试中我们选择使用等价类划分方法、边界值分析方法以及错误推测方法来设计测试用例:
   (1) 等价类划分方法:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类[3]。
   (2) 边界值分析方法:是对输入或输出的边界值进行测试的方法[3]。
   (3) 错误推测方法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法[4]。
  例如:函数参数的正确取值范围为0~100,如图3所示,可划分为两个无效等价类以及一个有效等价类,边界值除了需要考虑到0和100以外,还需要考虑到0与100分别减1和加1后的数值:-1、1、99以及101。错误推测方法则取决于经验与直觉,假设在其他类似项目中出现过取值为99.0001这样的小数时程序出现错误的情况,则本次测试设计中也可以添加类似的测试用例。
  
   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中来执行,而在样卡回归测试时,则需要编译成可下载到EEPROM或RAM中的二进制Bin文件。
  在研究中,为了向用户演示芯片的基本功能,我们开发了一个DemoCos用于演示,样卡的回归测试就要用到这个DemoCos的指令。一共会使用到3条指令,分别为:写EEPROM指令、写RAM指令以及跳转指令。由于写指令支持的是16进制的数据,故首先要将二进制Bin文件数据从二进制转换成16进制,以下为样卡回归测试的两种方法:
   (1) 首先,使用写EEPROM指令将测试程序下载到一块空闲的可供用户使用的EEPROM空间。例如:如图4所示,从地址0x91000开始写,写完后,使用跳转指令跳转到该地址,开始执行测试程序,执行完成后便可在上位机程序中看到测试结果。复位卡片或非接触式读卡机,重复以上操作,完成下一个测试用例的测试。
   (2) 与下载到EEPROM空间的方法类似,可使用写RAM指令将测试程序下载到一块空闲的可供用户使用的RAM空间来完成测试。例如:如图4所示,将测试程序写到地址0xB0000。特别需要注意的是,由于RAM空间有限,DemoCos以及固化在芯片中的发卡程序都需要使用到RAM空间,故余下的空闲空间很小,所以,要求测试程序的大小加上变量使用的空间大小要小于RAM空闲空间的大小。
   从以上对于样卡两种回归测试方法的描述,对比可知,使用将测试程序下载到EEPROM的方式更加恰当,即下载到RAM空间的方式可作为备份方式,当芯片的EEPROM损坏时使用。
  
  5测试方案
  
   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

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3