基于 NI TestStand 的超高频电子标签清点功能自动化测试序列软件的设计与实现
1 引言
根据国际上对射频工作频率的划分标准[1-5],超高频(UHF,Ultra-high Frequency)的频段为300 MHz~3 GHz。其中,超高频电子标签的典型工作频率为 433 MHz、860 MHz~960 MHz 以及 2.45 GHz。本文论述的超高频电子标签是工作在 860 MHz~960 MHz之间的产品。这一频段产品采用的国际协议主要为 ISO/IEC 18000-6(Type C)、EPC Gen2 等。本文论述的电子标签符合 ISO/IEC 18000-6(Type C)的 Part 63,即 ISO/IEC 18000-63 协议。该频段标签已经在制造、物流、医疗、运输、零售等领域得到应用,目前已经具有很好的市场前景。因此,开展对标签产品的全面的功能验证、保证电子标签的质量变得越来越重要。
目前,ISO/IEC 18047-6 等协议可以用来对超高频电子标签进行一致性验证/互操作验证。但是,如何高效地对标签产品开展全面的功能验证,尚未发现有效的解决方法。手动测试方式或者开发常用命令的自动化测试(本文称为半自动化测试)具有效率较低、耗时较长、容易出现漏项和错项的缺点。因此,华大半导体公司购买了美国国家仪器公司(National Instrument,简写为 NI)的 NI RFID 测试仪。该设备不仅能够解决命令/时间参数的限制,还能够使用 NI TestStand 管理测试脚本,达到高效地对标签产品开展全面的功能验证的目的。本文从功能测试中测试项最为复杂、测试项数目最多的清点功能验证角度着手,基于 NI RFID 测试仪和 TestStand 管理软件,设计和开发了一套超高频电子标签清点功能自动化测试序列软件,目标是高效完成清点功能验证。
2 NI TestStand
本文使用的是 NI 开发的管理软件 TestStand,它是一个现成可用的自动化测试管理软件,用于从自动化原型创建、设计认证到执行生产测试的整个过程。它与 NI LabVIEW、NI LabWindows/CVI、VB 和 VC 等所有给主流测试编程环境兼容,且能调用动态链接库(DLLs)、ActiveX 自动化服务器、EXE 可执行程序等。它建立在高速、多线程执行引擎基础上,可满足最严格的测试吞吐量要求[6-8]。
具体到本文论述的功能测试,关系到多条强制命令与自定义命令及其对应的众多参数域,全面遍历对设备处理数据的能力有很高的要求。而 TestStand 的高速、多线程、高吞吐能力,将会满足功能测试的要求。
3 自动化测试序列的工作原理
3.1 硬件工作原理
华大半导体现有的设备资源是上海聚星仪器有限公司提供的 NI RFID 测试系统,由 2.7 GHz 上变频转换器 PXI-5610、2.7 GHz 下变频转换器 PXI-5600 以及以 FPGA 为基础的中频转换器 PXIe-5641R组成,用于实时处理与被测标签之间的数据通信。以本文被测对象为例,当超高频标签进入射频场之后,PXIe-5641R 将上位机指定的命令转换为 20 MHz 带宽的数字信号,再通过 D/A 转换为模拟信号发送至上变频转换器,上变频转换器将信号转换至上位机指定的工作信号(例如:载波 922.5 MHz /发射功率 15 dBm /调制深度 90%),并通过天线发送至标签。天线接收到标签的反射后,通过下变频转换器转换至 20 MHz 的数字信号,经 PXIe-5641R 中的 A/D 变换,转换至 FPGA 可以处理的信号,处理完毕后,上传至上位机,在上位机显示相应的波形和数据。
3.2 上位机软件的工作原理
在芯片设计过程中,根据相关协议/技术规格书等文档,编制了芯片样品验证方案。芯片样品验证方案中,列出所有命令的功能验证项,尤以清点功能的循环遍历验证最为复杂。清点功能对应的验证为一条命令流的验证,包含 4 条命令,分别为 Select、Query、ACK、GetRN 命令,其中 Select 命令包括 6 个可变命令参数域(见表1),Query 命令包括 7 个可变命令参数域(见表2),ACK 命令与 GetRN 命令用于判断清点功能验证的结果。由表 1、表 2 可以看出,实现清点功能的全覆盖验证,测试项数目总计为 274,877,906,944(Select 命令指针数据域以 8 bit 计),测试工作量非常大。再加上设备开关空间场的时间、命令交互时间以及上位机处理时间,耗费时间难以估计,也就违背了使用 TestStand 的初衷。因此必须要对测试项数量做科学的处理。
处理的原则是:(1)明确清点功能的验证是对标签匹配与否的验证。(2)对于存储区掩码匹配的验证,根据边界测试的原理,将存储区的掩码匹配范围指向界内、边界点、越界三种情况。(3)将对时隙计数器值的验证归到防冲突验证项中。
经过精简,测试项数目减少至 92,160。
接下来论述测试项实现的方法。
编写测试序列时,首先读出标签的 TID(Tag Identifier,即标签的唯一识别符)信息,并在 UII 区(Unique Item Identifier)写入固定信息,在验证过程中用于掩码信息的对比。读取 TID 信息及写入 UII信息无误后,下一步执行清点功能的测试序列。根据 Select 命令中目标命令域对匹配标志/盘点标志的设置,为了便于分析标签匹配与否,将清点功能的自动化测试序列分为 8 个序列,在每个序列中,对其他的命令域进行遍历,每个序列包含 11,520 个测试项。程序流程如图 1 所示。
经过精简的清点功能测试序列,测试项总数为 92,160,在各个测试项之间加入 100 ms 的延时后,实际运行时间约为 4 小时,在一个工作日能够至少完成 2 支标签的清点功能的全面验证。
在测试的过程中,对标签的响应,与预期的响应之间做出比对,将不一致的结果写入以当前测试序列命名的 txt 文档中,记录格式为:“以‘|’为分隔符记录当前命令数据域的值, Expected:(期望的返回值) Real:(实际的返回值)”。在最终完成该测试序列后,将 txt 文档保存至以该序列命名的文件夹中。
4 关键技术
编写自动化测试序列的思路是:(1)各个测试序列的程序流程一致,只需要简单修改输入参数就能实现对不同命令的功能进行自动化测试。(2)应当尽可能地减少循环嵌套个数,由于功能测试是针对命令的数据域进行遍历,不可避免的涉及循环嵌套的问题,而循环嵌套层数太多会导致调试困难。
4.1 各个测试序列结构的一致性
在划分测试序列时,本文选取了以 Select 命令的目标数据域作为分割的标准。因此各个测试序列在结构上必然保持一致,只需要在对每个序列输入盘点标志 / 匹配标志/保留值(目标数据域 000b~011b 表示盘点标志,100b 表示匹配标志,101b~111b 表示保留值)就可以完成测试序列的编写。同时也保持了各个测试序列之间的相对独立性。如图 2 所示。
4.2 命令数据域遍历结构的一致性
在如前所述,清点功能遍历数据域为 12 个,如果按照常用的实现方式,数据域的个数就是实现遍历的程序中循环嵌套的个数。这种实现方式,优点是简单,但循环嵌套次数过多,导致程序结构复杂,调试不方便。
基于以上原因,在实际开发过程中,采用了两层循环嵌套的方式,将循环的数据域分为 3 组。一是主循环数据域 a,即 Select 命令的动作数据域;二是次循环数据域 b,范围是 Select 命令的动作/存储区/指针/长度/截断数据域以及 Query 命令的 DR/M/Trext/Sel/Session/ 目标数据域;三是最底层数据域 c,即时隙计数器数据域 Q。实现流程图如图 3 所示,Index() 表示命令参数数据域对应的索引值,Data()表示命令参数数据域的数值,Max() 表示命令参数数据域对应的最大值。
上述程序流程的实现,使得清点功能的各个测试序列之间的结构基本一致,单个测试序列内部遍历结构复用性强。由于已经具备超高频标签符合性测试的程序,因此,将整个测试序列的实现过程集中于解析遍历清点功能的响应,也就是解析 ACK 命令与 GetRN 命令的响应,产生预期结果的实现中,使得样品验证人员的精力更多的关注于如何去实现标签的测试,如何能更高效的实现自动化测试序列,而不是测试序列实现的本身。
5 结语
本测试序列的开发的初衷是,既要高效地完成测试项最为复杂的清点功能遍历测试,又要对后续其他命令的功能测试提供参考。因此,选取TestStand,一方面解决了高速、多线程、大吞吐量的问题,另一方面实现了测试序列以及遍历命令数据域的结构一致性。该功能的引进/使用对当前测试及后续测试质量与效率的提高均有积极作用,大大降低了以往手动测试及半自动化测试的耗时,有效地提高了测试效率。
表 3 列举了手动测试、半自动化测试和本文设计的自动化测试这三种测试方式在测试时间、测试项目完成程度、测试效率方面的对比。
本软件充分运用了 TestStand 的优势,解决了清点功能验证耗时长、效率低的问题,提高了清点功能的自动化验证的效率。本文可以为超高频电子标签产品功能的全面验证工作提供思路和参考,为搭建超高频电子标签样品验证的自动化测试平台奠定了基础。