智能卡COS芯片层模块设计与测试方案研究

2024-02-24 18:08

本文主要是介绍智能卡COS芯片层模块设计与测试方案研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 引 言

  随着科学技术的不断进步,智能卡的应用已经越来越广泛,涉及到人类生活的各个领域,如商业、医疗、保险、交通、社会公共事业等多种领域,所以如何设计一个高效稳定的智能卡操作系统口具有较高的社会意义。这里针对智能卡的硬件结构设计了操作系统的通信和硬件其他模块,并提出了一种测试方案以检测芯片底层模块的稳定性。

  1 智能卡操作系统概述

  片内操作系统(Chip Operating System,COS)一般是紧紧围绕着它所服务的智能卡的特点而开发的。与常见的微机上的操作系统相比,COS在本质上更加接近于监控程序。在此以具体开发实例说明卡片操作系统的基本问题,并提出一种可行可测试的芯片层设计方案及一种芯片底层的测试方案。

  2 COS芯片模块设计

  COS底层模块在设计时一般都是紧密结合智能卡内存储器分区的情况,按照国际标准中所规定的一些功能进行设计、开发。

  IS07816是接触式智能卡必须遵循的国际规范其中IS07816—3主要描述接触式智能卡的电信号和传输协议,其中包括各个触点的电压电流承受范围、卡复位应答各个信息位的实际表示和T=0,T=1的传输协议。ISO/IEC 7816—3规定了IC卡的电气特性和传输协议。包括该类卡和接口设备问的电源、电气信号协议和信息交换协议。通信过程中,由接口设备给IC卡提供电源(Vcc),复位信号(RST)和时钟(CLK),卡和接口设备间通过I/O端口进行串行通信。

  (1)通信模块设计。根据T=0异步半双工字符传输协议,Ic卡和接口设备之间以字符为单位(简称字符帧)进行传输,采用偶校验,每个字符由10 b组成。传输字符帧之前,I/O线处于状态z,第1 b为起始位(状态A);后面8 b为数据位D1~D8;第10 b为偶校验位,即8位数据和奇偶校验位中1的个数为偶数。

  串行通信是按位传送的,每位信息宽度(持续时间)定义为基本时间单位ETU(Elementary Time Unit)。在复位应答期间的信息宽度称为“初始ETU”,它等于372个时钟周期,即1ETU=372/f。复位应答后的信息宽度称为“当前ETU”,其计算公式为:当前ETU=(F/D)(1/f)。其中:F是时钟频率变换因数;D是比特率调整因数;f是时钟频率。

  IC卡必须与相应的读写设备(IFD)通信。从这个角度讲,智能IC卡操作系统的作用就是从读写设备(IFD)接收命令、执行命令并将结果返回读写设备(IFD)。所以,通信管理功能模块在操作系统中具有十分重要的作用。通信管理功能模块主要实现以下几种功能:实现某一通信协议的数据链路层的传输管理功能;实现ISO/IEC 7816标准规定的ATR(复位响应)等功能;为操作系统中的其他功能模块提供相应接口。

  按ISO/IEC 7816标准,IC卡和读写设备之间的通信协议有多种,一般一种卡片只支持某一种通信协议。下面以符合ISO/IEC 7816—3标准的T=0字符传输协议的智能IC卡为例介绍通信管理功能(支持其他通信协议的卡的通信管理功能与此相似)。

  ICC上电之后,IFD将向ICC发送命令数据,在这样一次典型的通信过程中,通信管理功能主要从事6个步骤的具体工作。如图1所示。



  以下是卡片接收指令相关的源代码:





  (2)硬件模块设计。智能卡COS上电后首先要进行芯片初始化,其主要设置以下几个方面:芯片初始工作时的频率,以及使用外频还是内频;芯片串口初始工作的速率(一般为“ll”的波特率)-芯片串口的工作模式(包括T=0还是T=1协议,正向传输还是反向传输,奇校验还是偶校验等);存储器的初始映射方式。

  智能卡芯片(以下以51系列智能卡芯片为例)一般包含几十到几百KB的FLASH,以1个页面为单位进行擦除,根据FLASH编程写的特点,也就是1能写成0,而0不能写成1,故在设计编程写函数时为了保证写数据的正确性,特采取如下的方式实现此功能:

  第一步:取出要写入地址的数据(为A),与要写入的数据(为B)进行与操作(结果为C);

  第二步:在要写入数据的地址写入数据(B);

  第三步:取出写人数据后的地址的数据与数据C进行比较。

  对于51系列智能卡芯片,由于标准的8051对程序存储器最大值支持64 KB,所以芯片采用BANK的编址方式。这时往往需要一个映射函数来实现不同BANK的跳转。如果一款智能卡芯片的程序存储器采用128 KB的FLASH用来存放COS和用户数据。128 KB的FLASH均分4个32 KB的BANK,在这4个区域里,Commom区是3个Bnak的公共区域,即Commom区和每个32 KB的BANK都可以组成64 KB的连续空间。3个Bnak之间不能直接互相访问,而必须调用Commom区里的程序才能实现相互的访问。所以在创建工程时要把经常使用的程序和常数,如中断入口函数、Bank Switch跳转表等都放到Commom区里,这样才能实现各个区域的相互访问。

  (3)异常保护模块设计。IS07816—3规定2个连续字符上升沿之间的延迟至少是12 ETU,且2个连续字符上升沿之间的延迟应不超过9 600 ETU。所以COS在设计时要加入发送“60”来实现正常的通信。

  发送“60”采用芯片定时器中断的方式,设置定时器的工作模式,使用时钟和的初始值。定时器的中断服务程序的实现流程:关闭发送“60”定时器;发送“60”;打开发送“60”定时器。

  操作系统的异常处理,此函数为COS进行异常状态时调用的函数。进入异常状态时,要关闭发送“60”的定时器,然后进入死循环状态。

  3 芯片测试方案设计

  以下提出一种针对芯片模块函数的测试方案。即嵌入式testing COS。

  (1)Testing COS测试平台组成。T-COS平台由MAIN.C文件、API.C文件、常量配置、A51文件以及芯片库、LIB文件组成。其中,针对不同的芯片,main.c,api.C是相同的,而常量配置文件和芯片库文件则不同,在使用时需要更改或更换。

  另外,MAIN.C文件中的CommandInterpreter()命令解释器函数是对发送命令的识别解释(在此函数中,为所有需要测试的函数定义了指令吗)。被测函数的函数体在API.C文件中。芯片库在API.C文件中被具体调用。

  此Testing COS可直接写入智能卡中,设计思路是:采用直接APDU指令调用的形式,直接调用硬件模块函数,如擦一页函数。执行完指令,函数返回一个状态字。

  主程序是一个死循环,如下:




  命令解释器函数支持多个函数,为用户对硬件的直接操作提供接口,可以通过发送APDU指令实现对芯片的多种操作。

  例如:APDU:80 00 10 00 00表示擦除地址0x1000所在页面。

  APDU:80 0C 10 00 10表示从地址Oxl000开始读取长度为Oxl0的数据。

  (2)Tesling COS测试平台的使用。T—COS测试 平台测试流程,如图2所示:


  (3)Testing COS测试平台局限性分析。T—COS平台使用方便简洁,易于观察执行结果,但是其不能观察过程。因此,在返回结果与预期结果不一致,或者出现错误的情况下,无法判断产生错误的原因。在这种情况下,需要借助仿真器,跟踪执行过程,最终找出产生问题的原因。

  4 结 语

  智能卡操作系统根本的部分就在于芯片底层各个模块的稳固性。芯片层开发是电信、税控等产品开发的重要组成部分之一,也是最基础的部分。为了保证电信、税控产品可以在不同芯片之间的平稳移植,需要对芯片层的开发提出一定的要求和标准,这样可以保证上层开发的一致性。

这篇关于智能卡COS芯片层模块设计与测试方案研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742914

相关文章

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)