一种使读写器支持任意卡时钟频率下波特率的系统与方法

文档序号:6471050阅读:229来源:国知局
专利名称:一种使读写器支持任意卡时钟频率下波特率的系统与方法
技术领域
本发明属于IC卡读写器的CPU波特率设置技术领域,尤其涉及一种使读
写器支持任意卡时钟频率下波特率的系统与方法。
背景技术
IC卡(Integrated Circuit Card,集成电路卡)是继磁卡之后出现的又一种 新型信息工具,IC卡是通过卡里的集成电路进行信息存储的。IC卡在有些国家 和地区也称智能卡(smart card)、智慧卡(intelligent card)、微电路卡 (microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合ISO 7816 标准的卡基中,做成卡片的形式。目前,IC卡已经十分广泛地应用于包括金融、 交通、社保等很多领域。
IC卡读写器是IC卡与应用系统间的桥梁,在ISO国际标准中称之为接口设 备IFD (Interface Device) 。 IFD内的CPU通过一个接口电路与IC卡相连并进行 通信。IC卡接口电路是IC卡读写器中至关重要的部分,根据实际应用系统的不 同,可选择并行通信、半双工串行通信和I2C (Inter—Integrated Circuit)通 信等不同的IC卡读写芯片。
在现有技术中, 一般地,IC卡读写器在开放过程中使用固定的频率,如 3.5712M、 4M等,并且按照上述所说的,波特率和基本时间互为倒数,所以计算
波特率的方法为波特率S-(Dx/)/F,其中/是智能卡的时钟频率,参数F和D
分别是时钟率转换因子和波特率调整因子,由复位应答ATR (Answer To Reset) 中的TA1的值决定,按这个公式人为的计算好误差范围内的波特率,运用查表等 方法设置读写器CPU的波特率。但是当读写器需要提高读写速度时,则需要更换
卡时钟频率,这就带来了需要重新修改固件的麻烦。

发明内容
本发明的目的在于,提供一种使读写器支持任意卡时钟频率下波特率的系统 与方法,有效的解决在现有技术中,当提高读写器的读写速度时,需要更换卡时 钟频率即需要重新修改固件的问题。
本发明的技术方案是, 一种使读写器支持任意卡时钟频率下波特率的系统, 其特征是所述系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间 源计数器模块、判断模块、存取模块、计算模块和设置模块;其中,初始化模块 与控制模块相连,控制模块分别与卡时间源计数器模块、基准时间源计数器模块 和判断模块相连,判断模块与存取模块相连,存取模块与计算模块相连,计算模 块与设置模块相连。
一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述方法包括 第一种实现步骤、第二种实现步骤或第三种实现步骤,
第一种实现步骤为,
步骤lh读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤12:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数 器步进第一预先设定的步长M时所述基准时间源计数器的值T1;
步骤13:根据n和si计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;
步骤14:所述读写器固件复位并重新启动所述基准时间源计数器,保存当所 述卡时间源计数器步进第二预先设定步长B2和第三预先设定步长B3时所述基准 时间源计数器的值r2和T3;
步骤15:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四
位为1、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d,当所述复位应答ATR中TA1的高 四位为l、 2、 3、 4、 5、 6时,则执行步骤16,当所述复位应答ATR中TA1的高 四位为9、 a、 b、 c、 d时,则执行步骤17;
步骤16:根据r2和S2计算当前波特率,跳到步骤18; 步骤17:根据73和B3计算当前波特率;
步骤18:根据所述当前波特率设置CPU波特率发生器的初值; 第二种实现步骤为,
步骤21:读写器上电,硬件初始化,读写器固件启动卡时间源计数器; 步骤22:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数
器步进第一预先设定步长别时所述基准时间源计数器的值ri;
步骤23:根据71和别计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;
步骤24:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四 位为1、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d,当所述复位应答ATR中TA1的高 四位为l、 2、 3、 4、 5、 6时,则执行步骤25,当所述复位应答ATR中TA1的高 四位为9、 a、 b、 c、 d时,则执行步骤27;
.步骤25:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时 间源计数器,保存当所述卡时间源计数器步进第二预先设定步长S2时所述基准时 间源计数器的值r2;
步骤26:根据r2和B2计算当前波特率,跳到步骤29;
步骤27:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时 间源计数器,保存当所述卡时间源计数器步进第三预先设定步长S3时所述基准时 间源计数器的值73;
步骤28:根据73和S3计算当前波特率;
步骤29:根据所述当前波特率设置CPU波特率发生器的初值; 第三种实现步骤为,
步骤31:读写器上电,硬件初始化,读写器固件启动卡时间源计数器; 步骤32:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数
器步进第一预先设定步长别时所述基准时间源计数器的值ri;
步骤33:根据n和51计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;
步骤34:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,根据复位应答ATR数据、ri和M 计算当前波特率;
步骤35:根据所述当前波特率设置CPU波特率发生器的初值。
所述步骤11中,所述卡时间源计数器大于等于1个。
所述步骤12中,所述基准时间源计数器大于等于1个。
所述步骤12、步骤22和步骤32中,基准时间源是系统时钟、波特率发生器 时钟源、晶振、RC振荡电路或者LC振荡电路。
所述步骤12、步骤22和步骤32中,保存当所述卡时间源计数器步进第一预 先设定的步长M时所述基准时间源计数器的值n,通过如下方法实现当所述卡 时间源计数器的计数值为第一预先设定值n时,启动所述基准时间源计数器;当 所述卡时间源计数器的计数值为第二预先设定值F2,即F2^M + n时,停止所述 卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值 n;
或者,当所述卡时间源计数器启动时,启动所述基准时间源计数器;当所述
卡时间源计数器的计数值为预先设定的步长別时,停止所述卡时间源计数器和基
准时间源计数器,并保存此时所述基准时间源计数器的值n;
所述步骤12和步骤22中,所述第一预先设定的步长别是372的整数倍。
所述步骤32中,所述第一预先设定的步长M是186与256的公倍数。 所述当卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计 数器,是为了稳定卡时钟。
所述步骤13、步骤23和步骤33中,根据n和別计算初始波特率的方法是,
初始波特率1= 51
(372x71)
所述步骤13、步骤23和步骤33中,再根据初始波特率设置CPU波特率发生 器的初值,通过将初始波特率的公式代入计算CPU波特率的公式即可得出;计算 CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特率的 公式。
所述步骤14中,保存所述卡时间源计数器步进第二预先设定步长S2和第三 预先设定步长53时所述基准时间源计数器的值r2和r3,方法是当所述卡时间
源计数器的计数值为第一预先设定值n时,启动所述基准时间源计数器,当所述
卡时间源计数器的计数值为第三预先设定值",即"=52 + 「1时,停止所述卡时 间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值:T2;复 位所述卡时间源计数器和基准时间源计数器,并再次启动所述卡时间源计数器,
当所述卡时间源计数器的计数值为第一预先设定值n时,启动所述基准时间源计
数器,当所述卡时间源计数器的值为第四预先设定值74,即^ = ^ + ^时,停止
所述卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的
值T3 ;
或者,使用两个卡时间源计数器,当两个卡时间源计数器的计数值为第一预
先设定值n时,启动基准时间源计数器,当卡时间源计数器的值为第三预先设定
值F3,即73 = ^2 + ^时,停止其中一个卡时间源计数器,并保存此时基准时间源 计数器的值r2;另一个卡时间源计数器和基准时间源计数器仍然进行计数,当另 一个卡时间源计数器的值为第四预先设定值F4,即^ = 53 + ^时,停止卡时间源
计数器和基准时间源计数器,记录此时基准时间源计数器的值r3;
或者,使用一个卡时间源计数器和两个基准时间源计数器,当所述卡时间源
计数器的计数值为第一预先设定值n时,启动所述两个基准时间源计数器,当所 述卡时间源计数器的值为第三预先设定值n,即"-^2 + n时,停止其中一个基
准时间源计数器,并保存此时所述基准时间源计数器的值r2;另一个基准时间源
计数器和所述卡时间源计数器仍然进行计数,当所述卡时间源计数器的值为第四
预先设定值r4,即74 = 53 + 「1时,停止所述卡时间源计数器和所述基准时间源计 数器,记录此时所述基准时间源计数器的值T3。
所述当卡时间源计数器的计数值为第一预先设定值w时,启动基准时间源计 数器,是为了稳定卡时钟。
所述步骤25中,所述读写器固件复位并重新启动卡时间源计数器和基准时 间源计数器,保存所述卡时间源计数器步进第二预先设定步长S2时基准时间源计 数器的值r2,方法是复位卡时间源计数器和基准时间源计数器,并再次启动卡
时间源计数器,当卡时间源计数器的计数值为第一预先设定值n时,启动基准时 间源计数器,当卡时间源计数器的计数值为第三预先设定值r3,即F^^2 + n时,
停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值
或者,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数 器,当卡时间源计数器启动时,启动基准时间源计数器,当卡时间源计数器的计
数值为第二预先设定步长B2时,停止卡时间源计数器和基准时间源计数器,并保
存此时基准时间源计数器的值r2 。
所述当卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计
数器,是为了稳定卡时钟。
所述步骤14和步骤25中,所述第二预先设定步长S2的值是186的整数倍。 所述步骤27中,读写器固件复位并重新启动卡时间源计数器和基准时间源
计数器,保存卡时间源计数器步进第三预先设定步长^时基准时间源计数器的值 n,方法是,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数器,当卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计数器;当卡时间源计数器的值为第四预先设定值F4,即^^S3 + n时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值r3;
或者,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数 器,当卡时间源计数器启动时,启动基准时间源计数器,当卡时间源计数器的计数值为第三预先设定步长S3时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值r3 。
所述当卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计 数器,是为了稳定卡时钟。
所述步骤14和步骤27中,第三预先设定步长M的值是256的整数倍。 所述步骤16和步骤26中,根据r2和S2计算当前波特率的计算方法是当前 波特率S ,竭。
収订午戸'(Fx:r2)
所述步骤17和步骤28中,根据r3和53计算当前波特率的计算方法是当前 干戸 (FxT3)
所述步骤16和步骤26中,根据r2和S2计算当前波特率的另一种计算方法
是^g =(_g_)x( ),其中,52 = 52/^6。
,、r2 、(F/186)
所述步骤17和步骤28中,根据73和s3计算当前波特率的另一种计算方法
是5 =(^)x(~^~),其中,53 = 53/256 。 戸、jV 、(f/256)乂
所述步骤34中,根据复位应答ATR数据、ri和Sl计算当前波特率的计算方 法是当前波特率^^=§^。
所述步骤16或者步骤17中,计算当前波特率时,卡时间频率发生变化,即
卡时钟频率与步骤13中计算初始波特率时的卡时钟频率不同时,需要重复步骤
11-步骤17。
所述步骤26或者步骤28中,计算当前波特率时,卡时间频率发生变化,即 卡时钟频率与步骤23中计算初始波特率时的卡时钟频率不同时,需要重复步骤 21_步骤28。
所述步骤34中,计算当前波特率时,卡时间频率发生变化,即卡时钟频率 与步骤33中计算初始波特率时的卡时钟频率不同时,需要重复步骤31-步骤34。
所述步骤18、步骤29和步骤35中,根据当前波特率设置CPU波特率发生器 的初值,通过将当前波特率的公式代入计算CPU波特率的公式即可得出;计算CPU 波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特率的公式。
本发明提供一种使读写器支持任意卡时钟频率下波特率的系统与方法,在满 足波特率误差要求的情况下,可以随意的更换卡时钟频率来提高读写器的性能, 而不需要修改固件,从而有效的解决了现有技术中当需要提高读写器的读写速度 时,需要更换卡时钟频率即需要重新修改固件的问题。


图1是本发明实施例1提供的一种使读卡器支持任意卡时钟频率下波特率 的方法流程图。
图2是本发明实施例2提供的一种使读卡器支持任意卡时钟频率下波特率 的方法流程图。
图3是本发明实施例3提供的一种使读卡器支持任意卡时钟频率下波特率 的方法流程图。
图4是本发明实施例4提供的一种使读卡器支持任意卡时钟频率下波特率 的方法流程图。
图5是一种使读卡器支持任意卡时钟频率下波特率的系统示意图。
具体实施例方式
下面结合附图,对优选实施例作详细说明。应该强调的是,下述说明仅仅 是示例性的,而不是为了限制本发明的范围及其应用。
根据ISO 7816标准的规定,I/O线上所用的位持续时间被确定为基本时间单 位(etu-elementary time uint),它和时钟频率间存在着线性关系,复位应答
时的位持续时间称为初始etu,这里标记为w^,,其计算公式为
=372//
单位是秒;其中,公式中/的单位为Hz,表示复位响应时卡的初始频率;
复位应答(以及全局参数F与D的设立,见后述)之后的持续时间,称为当 前etu,这里标记为ww,,其计算公式为
其中,公式中的参数F和D分别是时钟率转换因子和波特率调整因子,由复位应 答(ATR)中的TA1的值决定,/是智能卡的时钟频率,单位为Hz;
波特率表示的是每秒传送的位数,单位为bps,在这里波特率和基本时间单 元互为倒数。
实施例1:图1是本发明实施例1提供的一种使读卡器支持任意卡时钟频率
下波特率的方法流程图。在图l所示的实施例中,以c8051f344单片机为例进行 说明,系统时钟为24M, ATR中的TAl二0x95, c8051f344的波特率由定时器工作 在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择SYSCLK、 SYSCLK/4、 SYSCLK/12、 SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给 定的定时器时钟源,UARTO的波特率为
<formula>formula see original document page 19</formula>
其中r^是定时器的时钟频率,并且在计算波特率的时候要灵活的调整r^的时 钟源的选择,T7/l是定时器的高字节(重载值),也是我们设定的值。具体实现步
骤如下
步骤101:读卡器上电,硬件初始化;
步骤102:读卡器使能卡时钟,并启动卡时钟计数器;
步骤103:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即 基准时间源计数器);
在本实施例步骤103中,让卡时钟计数器的值为IOO是为了稳定卡时钟,同 时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤104:当卡时钟计数器的计数值等于472时,停止卡时钟计数器和系统 钟计数器,读取此时系统时钟计数器的计数值n,并保存该值;
步骤105:复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数器, 当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤105中,让卡时钟计数器的值为IOO是为了稳定卡时钟,同 时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤106:当卡时钟计数器的计数值等于356时,停止卡时钟计数器和系统 时钟计数器,读取此时系统时钟计数器的计数值r2,并保存该值;
步骤107:复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数器, 当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤107中,让卡时钟计数器的值为IOO是为了稳定卡时钟,同 时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤108:当卡时钟计数器的计数值等于286时,停止卡时钟计数器和系统 时钟计数器,读取此时系统时钟计数器的计数值r3,并保存该值;
步骤109:根据ISO 7816标准的定义以及本实施例步骤104中保存的计数值
Tl计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤109中,iV = 472-100 = 372为计数的个数;
在本实施例步骤109中,根据ISO 7816标准的定义计算初始波特率的方法

初始波特率l =//372 ,其中,/ = (7\^2471/)/71为卡时钟频率,即
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设 置的波特率发生器的值77/l为-(71/24),即设置步骤109中的CPU波特率发生器
的初值为-(ri/24);
步骤110:执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通
讯;
步骤111:得到协议和参数选择PPS (Protocol and Parameters Selection) 应答后,判断ATR中TA1的高四位为1、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d, 当该ATR中TA1的高四位为1、 2、 3、 4、 5、 6时,则执行步骤112,当该ATR 中TA1的高四位为9、 a、 b、 c、 d时,则执行步骤113;
步骤112:根据卡时钟计数器的计数值等于286时的系统时钟计数器的值, 即本实施例步骤108中保存的计数值r3 ,以及ISO 7816标准的定义计算当前波 特率,并设置CPU的波特率发生器的初值;
步骤113:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值, 即本实施例步骤106中保存的计数值T2,以及ISO 7816标准的定义计算当前波 特率,并设置CPU的波特率发生器的初值;
在本实施例步骤112和歩骤113中,计算当前波特率的方法如下
当前波特率<formula>formula see original document page 21</formula>,其中<formula>formula see original document page 21</formula>其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答 (ATR)中的TA1的值决定,/为卡时钟频率;
在本实施例步骤112和步骤113中,当出现变频的情况时,则卡时钟频率/
与本实施例步骤109中的卡时钟频率/不相同,此时则需要重复步骤101至步骤
109得到现在的卡时钟频率/;
在本实施例步骤lll中,在得到PPS应答后,因为ATR中的TAl二0x95,高 四位是9,所以执行步骤113,即用卡时钟计数器的计数值等于356时的系统时 钟计数器的值,即本实施例步骤106中保存的计数值r2,并且A^256为计数的 个数。
根据ISO 7816标准的规定,当前波特率计算公式中的F = 512, D = 16,所以 将F = 512, D = 16代入上面的计算当前波特率的公式中,即
当前波特率<formula>formula see original document page 21</formula>
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即<formula>formula see original document page 21</formula>
得到要设置的波特率发生器的值77A为-(r2/16),即设置步骤113中的CPU
的波特率发生器的初值为-(712/16)。
在本实施例中,步骤105 步骤113还可以用如下步骤来进行替换 步骤105':根据ISO 7816标准的定义以及本实施例步骤104中保存的计数 值ri计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤105'中,N = 472-100 = 372为计数的个数;
为:
在本实施例步骤105'中,根据ISO 7816标准的定义计算初始波特率的方法
初始波特率Bm=f/372 ,其中,f = (N*24M)/T1为卡时钟频率,即
初始波特率Bm=(n*24M)/(372*T1)
把初始波特率的公式代入上面的计算UARTO波特率的公式中,计算出要设置 的波特率发生器的值77/1为-(71/24),即设置步骤105'中的CPU波特率发生器的
初值为-(H/24);
步骤106'、获取ATR,并判断ATR中TA1的高四位为1、 2、 3、 4、 5、 6还 是为9、 a、 b、 c、 d,当该ATR中TA1的高四位为1、 2、 3、 4、 5、 6时,则执行 步骤107',当该ATR中TA1的高四位为9、 a、 b、 c、 d时,则执行步骤110';
步骤107':复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数 器,当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤107'中,让卡时钟计数器的值为IOO是为了稳定卡时钟, 同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤108':当卡时钟计数器的计数值等于286时,停止卡时钟计数器和系 统时钟计数器,读取此时系统时钟计数器的计数值r2,并保存该值;
步骤109':根据卡时钟计数器的计数值等于286时的系统时钟计数器的值, 即本实施例步骤108'中保存的计数值r2,以及ISO 7816标准的定义计算当前 波特率,并设置CPU的波特率发生器的初值;
步骤110':复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数 器,当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤110'中,让卡时钟计数器的值为IOO是为了稳定卡时钟, 同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤lll':当卡时钟计数器的计数值等于356时,停止卡时钟计数器和系 统时钟计数器,读取此时系统时钟计数器的计数值r3,并保存该值;
步骤112':根据卡时钟计数器的计数值等于356时的系统时钟计数器的值, 即本实施例步骤IIT中保存的计数值r3,以及ISO 7816标准的定义计算当前 波特率,并设置CPU的波特率发生器的初值;
在本实施例步骤109'和步骤112'中,计算当前波特率的方法如下
当前波特率& =,,其中,/ = ^^
其中参数F和"分别是时钟率转换因子和波特率调整因子,由复位应答 (ATR)中的TA1的值决定,/为卡时钟频率;
在本实施例步骤109'和步骤112'中,当出现变频的情况时,则此时的卡 时钟频率/与本实施例步骤105'中的卡时钟频率/不相同,此时则需要重复步
骤101'至109'得到现在的卡时钟频率/。
实施例2:图2是本发明实施例2提供的一种使读卡器支持任意卡时钟频率下 波特率的方法流程图。在图2所示的实施例中,以c8051f344单片机为例进行说 明,系统时钟为24M, ATR中的TAl = 0x95, c8051f344的波特率由定时器工作 在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择SYSCLK、 SYSCLK/4、 SYSCLK/12、 SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给 定的定时器时钟源,UARTO的波特率为
<formula>formula see original document page 23</formula> ( )
其中r^是定时器的时钟频率,并且在计算波特率的时候要灵活的调整r^的时
钟源的选择,T7/l是定时器的高字节(重载值),也是我们设定的值。具体实现步 骤如下
步骤201:读卡器上电,硬件初始化;
步骤202:读卡器使能卡时钟,并启动卡时钟计数器;
步骤203:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即 基准时间源计数器);
在本实施例步骤203中,让卡时钟计数器的值为IOO是为了稳定卡时钟,同 时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤204:当卡时钟计数器的计数值等于286时,读取此时系统时钟计数器 的计数值ri,并保存该值,此时卡时钟计数器和系统时钟计数器依然在计数;
步骤205:当卡时钟计数器的计数值等于356时,读取此时系统时钟计数器 的计数值r2,并保存该值,此时卡时钟计数器和系统时钟计数器依然在计数;
步骤206:当卡时钟计数器的计数值等于472时,停止卡时钟计数器和系统
时钟计数器,读取此时系统时钟计数器的计数值T3,并保存该值;
步骤207:根据ISO 7816标准的定义以及本实施例步骤206中保存的计数值
73计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤207中,N = 472-100 = 372为计数的个数;
在本实施例步骤207中,根据ISO 7816标准的定义计算初始波特率的方法
为:
初始波特率 Bm=f/372 ,其中,f = (N X 24M)/T3 为卡时钟频率,即
初始波特率Bm=(N X 24M)/(372x73)
把初始波特率的公式代入上面的计算UARTO波特率的公式中,计算出要设 置的波特率发生器的值77/l为-(73/24),即设置步骤207中的CPU波特率发生器
的初值为-(73/24);
步骤208:执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通讯; 步骤209:得到PPS应答后,判断ATR中TA1的高四位为1、 2、 3、 4、 5、 6
还是为9、 a、 b、 c、 d,当该ATR中TA1的高四位为1、 2、 3、 4、 5、 6时,则执 行步骤210,当该ATR中TA1的高四位为9、 a、 b、 c、 d时,则执行步骤211;
步骤210:根据卡时钟计数器的计数值等于286时的系统时钟计数器的值,即 本实施例步骤204中保存的计数值ri,以及ISO 7816标准的定义计算当前波特 率,并设置CPU的波特率发生器的初值;
步骤211 :根据卡时钟计数器的计数值等于356时的系统时钟计数器的值,即 本实施例步骤205中保存的计数值r2,以及ISO 7816标准的定义计算当前波特 率,并设置CPU的波特率发生器的初值;
在本实施例步骤210和步骤211中,计算当前波特率的方法如下
当前波特率Bpre=(D*f)/F; f = (N*24M)/T1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答 (ATR)中的TA1的值决定,/为卡时钟频率;
在本实施例步骤210和步骤211中,当出现变频的情况时,则此时的卡时钟 频率/与本实施例步骤207中的卡时钟频率/不相同,此时则需要重复步骤201
至步骤207得到现在的卡时钟频率f;
在本实施例步骤209中,在得到PPS应答后,因为ATR中的TAl二0x95,高 四位是9,所以执行步骤211,即用卡时钟计数器的计数值等于356时的系统时 钟计数器的值,即本实施例步骤205中保存的计数值r2,并且A^256为计数的 个数。
根据ISO 7816标准的规定,当前波特率计算公式中的尸=512, D = 16,所以 将^ = 512, " = 16代入上面的计算波特率的公式中,即
当前波特率Bpre=(D*f)/F=(16*(N*24M)/T2)/512=8/T2.
然后将此当前波特率代入c8051f344的UARTO波特率的计算公式中,即(<formula>formula see original document page 26</formula>
得到要设置的波特率发生器的值77/1为-(72/16),即设置步骤211中的CPU
的波特率发生器的初值为-(r2/16)。
在本实施例中,步骤208 步骤211还可以用如下步骤来进行替换 步骤208':将步骤204中的ri代入IS0 7816标准定义中的计算当前波特率 的公式,并且此时iV-186,即
<formula>formula see original document page 26</formula>
步骤209':将步骤205中的T2代入ISO 7816标准定义中的计算当前波特率 的公式中,并且此时A^256,即
<formula>formula see original document page 26</formula>
步骤210':执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通
讯;
步骤211':获得ATR数据和PPS应答后,判断ATR中TA1的高四位为1、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d,当该ATR中TA1的高四位为1、 2、 3、 4、 5、 6时,则执行步骤212',当该ATR中TA1的高四位为9、 a、 b、 c、 d时,则执 行步骤213';
步骤212':将获得的ATR数据中的TA1的值决定的F和D代入步骤208'中 的计算当前波特率的公式中,并设置CPU的波特率发生器的初值;
步骤213':将获得的ATR数据中的TA1的值决定的F和D代入步骤209'中 的计算当前波特率的公式中,并设置CPU的波特率发生器的初值;
在本实施例步骤208'和步骤209'中,当出现变频的情况时,则此时的卡
时钟频率/与本实施例步骤207中的卡时钟频率/不相同,此时则需要重复步骤
201至步骤207得到现在的卡时钟频率f 。
实施例3:图3是本发明实施例3提供的一种使读卡器支持任意卡时钟频率下 波特率的方法流程图。在图3所示的实施例中,以c8051f344单片机为例进行说 明,系统时钟为2掘,ATR中的TAl二0x95, c8051f344的波特率由定时器工作在 8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择SYSCLK、 SYSCLK/4、 SYSCLKA2、 SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给 定的定时器时钟源,UARTO的波特率为<formula>formula see original document page 27</formula>其中TCLK是定时器的时钟频率,并且在计算波特率的时候要灵活的调整TCLK的时
钟源的选择,T7/l是定时器的高字节(重载值),也是我们的设定的值。具体实现 步骤如下
步骤301:读卡器上电,硬件初始化;
步骤302:读卡器使能卡时钟,并启动卡时钟计数器;
步骤303:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即基 准时间源计数器);
在本实施例步骤303中,让卡时钟计数器的值为IOO是为了稳定卡时钟,同
时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤304:当卡时钟计数器的计数值为186和256的公倍数加100时,停止卡 时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值ri,并保存该 值;
在本实施例步骤304中,186和256的公倍数可以有很多个,其中最小公倍 数为23808,在本实施例中,当卡时钟计数器的计数值为23908时,停止卡时钟 计数器和系统时钟计数器,读取此时系统时钟计数器的计数值n,并保存该值;
步骤305:根据ISO 7816标准的定义以及本实施例步骤304中保存的计数值 n计算初始波特率,设置CPU波特率发生器的初值; 在本实施例步骤305中,TV = 23808为计数的个数;
在本实施例步骤305中,根据ISO 7816标准的定义计算初始波特率的方法

初始波特率1=//372,其中,户(^x^M)为卡时钟频率,艮口
初始波特率1=^^
372x71
把初始波特率的公式代入上面的计算UARTO波特率的公式中,计算出要设置 的波特率发生器的值77H为-(71/1536),即设置步骤305中的CPU波特率发生器的
初值为-(n/1536);
步骤306:执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通讯; 步骤307:得到PPS应答后,根据步骤304中保存的系统时钟计数器的值ri以 及ISO 7816标准的定义计算波特率,并设置CPU的波特率发生器的初值;
其中,由于在本实施例步骤304中,是当卡时钟计数器的计数值为186和256 的公倍数加100时,保存的系统时钟计数器的计数值n,所以在本实施例中不需 要判断ATR中TA1的高四位,直接根据步骤304中保存的系统时钟计数器的值ri 以及ISO 7816标准的定义计算波特率。在本实施例步骤307中,计算当前波特 率的方法如下
当前波特率& =^,其中,/,阔 戸 尸 ri
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答 (ATR)中的TA1的值决定,/为卡时钟频率;
在本实施例步骤307中,当出现变频的情况时,则此时的卡时钟频率/与本
实施例步骤305中的卡时钟频率/不相同,此时则需要重复步骤301至步骤305
得到现在的卡时钟频率/;
在本实施例步骤307中,23808为计数的个数;
根据ISO 7816标准的规定,当前波特率计算公式中的F = 512, D = 16,所以 将F=512, D = 16代入上面的计算当前波特率的公式中,即
当前波特率<formula>formula see original document page 29</formula> ; 然后将此当前波特率代入c8051f344的UARTO波特率的计算公式中,即 <formula>formula see original document page 29</formula>
得到要设置的波特率发生器的值TH1为-(T1/1488),即设置步骤307中的CPU
的波特率发生器的初值为-(T1/1488)。
实施例4:图4是本发明实施例4提供的一种使读卡器支持任意卡时钟频率下 波特率的方法流程图。在图4所示的实施例中,以c8051f344单片机为例进行说 明,系统时钟为24M, ATR中的TAl二0x95, c8051f344的波特率由定时器工作在 8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择SYSCLK、 SYSCLK/4、 SYSCLK/12、 SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给 定的定时器时钟源,UARTO的波特率为
<formula>formula see original document page 29</formula>
其中<formula>formula see original document page 29</formula>是定时器的时钟频率,并且在计算波特率的时候要灵活的调整r^的时
钟源的选择,T7/l是定时器的高字节(重载值),也是我们设定的值。具体实现步 骤如下
步骤401:读卡器上电,硬件初始化;
步骤402:读卡器使能卡时钟,并同时启动第一卡时钟计数器、第二卡时钟 计数器和第三卡时钟计数器;
步骤403:当第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器的 计数值等于100时,启动系统时钟计数器(即基准时间源计数器);
在本实施例步骤403中,让第一卡时钟计数器、第二卡时钟计数器和第三卡
时钟计数器的值为ioo是为了稳定卡时钟,同时也可以是在启动第一卡时钟计数
器、第二卡时钟计数器和第三卡时钟计数器之后立即启动系统时钟计数器;
步骤404:当第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器的
计数值等于286时,停止第一卡时钟计数器,读取此时系统时钟计数器的值ri, 并保存该值;
步骤405:当第二卡时钟计数器和第三卡时钟计数器的计数值等于356时, 停止第二卡时钟计数器,读取此时系统时钟计数器的值r2,并保存该值;
步骤406:当第三卡时钟计数器的计数值等于472时,停止第三卡时钟计数 器和系统时钟计数器,读取此时系统时钟计数器的值r3,并保存该值;
步骤407:根据ISO 7816标准的定义以及本实施例步骤406中保存的计数值 n计算初始波特率,设置CPU波特率发生器的初值; 在本实施例步骤407中,iV = 372为计数的个数;
在本实施例步骤407中,根据ISO 7816标准的定义计算初始波特率的方法

初始波特率1=//372 ,其中<formula>formula see original document page 30</formula>为卡时钟频率,即
<formula>formula see original document page 30</formula> (372x73)
把初始波特率的公式代入上面的计算UARTO波特率的公式中,计算出要设置 的波特率发生器的值r/n为-(73/24),即设置步骤407中的CPU波特率发生器的
初值为-(73/24);
步骤408:执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通
讯;
步骤409:得到PPS应答后,判断ATR中TA1的高四位为1、 2、 3、 4、 5、 6 还是为9、 a、 b、 c、 d,当该ATR中TA1的高四位为1、 2、 3、 4、 5、 6时,则执 行步骤410,当该ATR中TA1的高四位为9、 a、 b、 c、 d时,则执行步骤411;
步骤410:根据卡时钟计数器的计数值等于286时的系统时钟计数器的值, 即本实施例步骤404中保存的计数值ri ,以及ISO 7816标准的定义计算波特率, 并设置CPU的波特率发生器的初值;
步骤411:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值, 即本实施例步骤405中保存的计数值r2,以及ISO 7816标准的定义计算当前波 特率,并设置CPU的波特率发生器的初值;
在本实施例步骤410和步骤411中,计算当前波特率的方法如下
当前波特率&£=",其中,/ =
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答 (ATR)中的TA1的值决定,/为卡时钟频率;
在本实施例步骤410和步骤411中,当出现变频的情况时,则此时的卡时钟 频率/与本实施例步骤407中的卡时钟频率/不相同,此时则需要重复步骤401
至步骤407得到现在的卡时钟频率/ ;
在本实施例步骤409中,在得到PPS应答后,因为ATR中的TAl二0x95,高 四位是9,所以执行步骤411,即用卡时钟计数器的计数值等于356时的系统时 钟计数器的值,即本实施例步骤405中保存的计数值r2,并且A^256为计数的 个数。
根据ISO 7816标准的规定,当前波特率计算公式中的尸=512, D = 16,所以
将F-512, D:6代入上面的计算当前波特率的公式中,即
当前波特率<formula>formula see original document page 32</formula>pF 512
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即 <formula>formula see original document page 32</formula>波特率<formula>formula see original document page 32</formula>(256 —mi)x(士)
得到要设置的波特率发生器的值7^1为-(r2/16),即设置步骤411中的CPU 的波特率发生器的初值为-(T2/16)。
在本实施例中,得到n、 T2和r3值的步骤402至步骤406还可以用如下步
骤来进行替换
步骤402':读卡器使能卡时钟,并启动卡时钟计数器;
步骤403':当卡时钟计数器的计数值等于100时,同时启动第一系统时钟 计数器、第二系统时钟计数器和第三系统时钟计数器(即基准时间源计数器);
在本实施例步骤403'中,让卡时钟计数器的值为100是为了稳定卡时钟, 同时也可以是在启动卡时钟计数器之后立即同时启动第一系统时钟计数器、第二 系统时钟计数器和第三系统时钟计数器;
步骤404':当卡时钟计数器的计数值等于286时,停止第一系统时钟计数 器,读取此时第一系统时钟计数器的值ri,并保存该值,并且卡时钟计数器、第 二系统时钟计数器和第三系统时钟计数器依然在进行计数;
步骤405':当卡时钟计数器的计数值等于356时,停止第二系统时钟计数 器,读取此时第二系统时钟计数器的值r2,并保存该值,并且卡时钟计数器和第 三系统时钟计数器依然在进行计数;
步骤406':当卡时钟计数器的计数值等于472时,停止第三系统时钟计数 器和卡时钟计数器,读取此时第三系统时钟计数器的值r3,并保存该值;
图5是一种使读卡器支持任意卡时钟频率下波特率的系统示意图,该系统包
括初始化模块501、控制模块502、卡时钟计数器模块503、基准时间源计数器 模块504、判断模块505、存取模块506、计算模块507、设置模块508;其中, 初始化模块501与控制模块502相连,控制模块502分别与卡时间源计数器模块 503、基准时间源计数器模块504和判断模块505相连,判断模块505与存取模 块506相连,存取模块506与计算模块507相连,计算模块507与设置模块508 相连。
初始化模块501,用于实现硬件的初始化;控制模块502,用于控制卡时钟计 数器和基准时间源计数器;卡时钟计数器模块503,用于对卡计数;基准时间源 计数器模块504,用于对系统计数;判断模块505,用于判断计数器的值和判断 ATR中TA1的高四位;存取模块506,用于读取、存储系统时钟计数器的值;计 算模块507,用于计算波特率;设置模块508,用于根据计算得到的波特率设置 CPU的波特率发生器的初值。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易 想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护 范围应该以权利要求的保护范围为准。
权利要求
1、一种使读写器支持任意卡时钟频率下波特率的系统,其特征是所述系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间源计数器模块、判断模块、存取模块、计算模块和设置模块;其中,初始化模块与控制模块相连,控制模块分别与卡时间源计数器模块、基准时间源计数器模块和判断模块相连,判断模块与存取模块相连,存取模块与计算模块相连,计算模块与设置模块相连。
2、 一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述方法 包括第一种实现步骤、第二种实现步骤或第三种实现步骤,第一种实现步骤为,歩骤ll:读写器上电,硬件初始化,读写器固件启动卡时间源计数器; 步骤12:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长別时所述基准时间源计数器的值ri;步骤13:根据71和别计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;步骤14:所述读写器固件复位并重新启动所述基准时间源计数器,保存当所 述卡时间源计数器步进第二预先设定步长S2和第三预先设定步长S3时所述基准 时间源计数器的值r2和T3 ;步骤15:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四 位为l、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d,当所述复位应答ATR中TA1的高 四位为l、 2、 3、 4、 5、 6时,则执行步骤16,当所述复位应答ATR中TA1的高 四位为9、 a、 b、 c、 d时,则执行步骤17;步骤16:根据r2和52计算当前波特率,跳到步骤18; 步骤17:根据r3和S3计算当前波特率;步骤18:根据所述当前波特率设置CPU波特率发生器的初值; 第二种实现步骤为,步骤21:读写器上电,硬件初始化,读写器固件启动卡时间源计数器; 步骤22:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长M时所述基准时间源计数器的值ri;步骤23:根据n和别计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;步骤24:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四 位为l、 2、 3、 4、 5、 6还是为9、 a、 b、 c、 d,当所述复位应答ATR中TA1的高 四位为l、 2、 3、 4、 5、 6时,则执行步骤25,当所述复位应答ATR中TA1的高 四位为9、 a、 b、 c、 d时,则执行步骤27;步骤25:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时 间源计数器,保存当所述卡时间源计数器步进第二预先设定步长52时所述基准时间源计数器的值r2;步骤26:根据r2和B2计算当前波特率,跳到步骤29;步骤27:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时 间源计数器,保存当所述卡时间源计数器步进第三预先设定步长S3时所述基准时 间源计数器的值73;步骤28:根据r3和S3计算当前波特率;步骤29:根据所述当前波特率设置CPU波特率发生器的初值; 第三种实现步骤为,步骤31:读写器上电,硬件初始化,读写器固件启动卡时间源计数器; 步骤32:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数 器步进第一预先设定步长別时所述基准时间源计数器的值ri;步骤33:根据n和M计算初始波特率,再根据所述初始波特率设置CPU波 特率发生器的初值;步骤34:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC 卡进行通讯;得到协议和参数选择PPS应答后,根据复位应答ATR数据、ri和M 计算当前波特率;歩骤35:根据所述当前波特率设置CPU波特率发生器的初值。
3、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤11中,所述卡时间源计数器大于等于1个。
4、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤12中,所述基准时间源计数器大于等于1个。
5、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤12、步骤22和步骤32中,所述基准时间源是系统时钟、 波特率发生器时钟源、晶振、RC振荡电路或者LC振荡电路。
6、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤12、步骤22和步骤32中,保存当所述卡时间源计数器步 进第一预先设定的步长別时所述基准时间源计数器的值n ,通过如下方法实现 当所述卡时间源计数器的计数值为第一预先设定值n时,启动所述基准时间源计 数器;当所述卡时间源计数器的计数值为第二预先设定值K2,即M:別+ n时, 停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值71;或者,当所述卡时间源计数器启动时,启动所述基准时间源计数器;当所述 卡时间源计数器的计数值为预先设定的步长M时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值n;
7、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤12和步骤22中,所述第一预先设定的步长51是372的整数倍。
8、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤32中,所述第一预先设定的步长別是186与256的公倍数。
9、 根据权利要求6所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值K1时,启动 所述基准时间源计数器,是为了稳定卡时钟。
10、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤13、步骤23和步骤33中,根据n和M计算初始波特率的方法是,初始波特率4-^^^。(372x 71)
11、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤13、步骤23和步骤33中,再根据所述初始波特率设置 CPU波特率发生器的初值,通过将初始波特率的公式代入计算CPU波特率的公式 即可得出;计算CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同 的计算波特率的公式。
12、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤14中,保存当所述卡时间源计数器步进第二预先设定步 长S2和第三预先设定步长^时所述基准时间源计数器的值r2和r3,方法是当 所述卡时间源计数器的计数值为第一预先设定值n时,启动所述基准时间源计数 器,当所述卡时间源计数器的计数值为第三预先设定值F3,即73 = _82 + ^时,停 止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计 数器的值r2;复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值n时,启 动所述基准时间源计数器,当所述卡时间源计数器的值为第四预先设定值M,即 F4-S3 + n时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时 所述基准时间源计数器的值r3 ;或者,使用两个卡时间源计数器,当两个卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计数器,当所述卡时间源计数器的值为第三预先设定值F3,即r3-S2 + ri时,停止其中一个卡时间源计数器,并保存此时所述基 准时间源计数器的值r2 ;另一个卡时间源计数器和基准时间源计数器仍然进行计 数,当另一个卡时间源计数器的值为第四预先设定值M,即^ = 53 + 1/1时,停止 所述卡时间源计数器和所述基准时间源计数器,记录此时所述基准时间源计数器 的值r3;或者,使用一个卡时间源计数器和两个基准时间源计数器,当所述卡时间源 计数器的计数值为第一预先设定值n时,启动所述两个基准时间源计数器,当所述卡时间源计数器的值为第三预先设定值",即r3zS2 + n时,停止其中一个基准时间源计数器,并保存此时所述基准时间源计数器的值r2;另一个基准时间源计数器和所述卡时间源计数器仍然进行计数,当所述卡时间源计数器的值为第四预先设定值M,即74 = ^ + ^时,停止所述卡时间源计数器和所述基准时间源计数器,记录此时所述基准时间源计数器的值r3。
13、 根据权利要求12所述的一种使读写器支持任意卡时钟频率下波特率的 方法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值n时,启 动所述基准时间源计数器,是为了稳定卡时钟。
14、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤25中,所述读写器固件复位并重新启动卡时间源计数器 和基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长S2时所 述基准时间源计数器的值r2,方法是复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为 第一预先设定值n时,启动所述基准时间源计数器,当所述卡时间源计数器的计 数值为第三预先设定值F3,即K3-52 + n时,停止所述卡时间源计数器和所述基 准时间源计数器,并保存此时所述基准时间源计数器的值r2 ;或者,复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述 卡时间源计数器,当所述卡时间源计数器启动时,启动所述基准时间源计数器, 当所述卡时间源计数器的计数值为第二预先设定步长S2时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值r2 。
15、 根据权利要求14所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值n时,启 动所述基准时间源计数器,是为了稳定卡时钟。
16、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤14和步骤25中,所述第二预先设定步长S2的值是186 的整数倍。
17、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤27中,所述读写器固件复位并重新启动所述卡时间源计 数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第三预先设定步 长^时所述基准时间源计数器的值r3,方法是,复位所述卡时间源计数器和所 述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器 的计数值为第一预先设定值n时,启动所述基准时间源计数器;当所述卡时间源 计数器的值为第四预先设定值F4,即^ = 53 + ^时,停止所述卡时间源计数器和 所述基准时间源计数器,并保存此时所述基准时间源计数器的值T3 ;或者,复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述 卡时间源计数器,当所述卡时间源计数器启动时,启动所述基准时间源计数器, 当所述卡时间源计数器的计数值为第三预先设定步长S3时,停止所述卡时间源计 数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值r3 。
18、 根据权利要求17所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当卡时间源计数器的计数值为第一预先设定值n时,启动基准时间源计数器,是为了稳定卡时钟。
19、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤14和步骤27中,所述第三预先设定歩长S3的值是256 的整数倍。
20、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤16和步骤26中,根据T2和S2计算当前波特率的计算方法是当前波特率<formula>formula see original document page 8</formula>。
21、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤17和步骤28中,根据r3和S3计算当前波特率的计算方法是当前波特率<formula>formula see original document page 8</formula>。
22、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤16和步骤26中,根据r2和S2计算当前波特率的另一种计算方法是<formula>formula see original document page 8</formula>,其中,52 = 52/186。
23、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤17和步骤28中,根据73和W计算当前波特率的另一种计算方法是<formula>formula see original document page 8</formula>,其中,幻=53/256 。
24、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤34中,根据复位应答ATR数据、ri和M计算当前波特率的计算方法是当前波特率<formula>formula see original document page 8</formula>。
25、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤16或者步骤17中,计算当前波特率时,卡时间频率发生 变化,即所述卡时钟频率与步骤13中计算初始波特率时的卡时钟频率不同时, 需要重复步骤U-步骤17。
26、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤26或者步骤28中,计算当前波特率时,卡时间频率发生 变化,即所述卡时钟频率与步骤23中计算初始波特率时的卡时钟频率不同时, 需要重复步骤21-步骤28。
27、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤34中,计算当前波特率时,卡时间频率发生变化,即所 述卡时钟频率与步骤33中计算初始波特率时的卡时钟频率不同时,需要重复步 骤31-步骤34。
28、 根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方 法,其特征是所述步骤18、步骤29和步骤35中,根据当前波特率设置CPU波特 率发生器的初值,通过将当前波特率的公式代入计算CPU波特率的公式即可得出; 计算CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特 率的公式。
全文摘要
本发明公开了IC卡读写器的CPU波特率设置技术领域中的一种使读写器支持任意卡时钟频率下波特率的系统与方法。技术方案是,该系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间源计数器模块、判断模块、存取模块、计算模块和设置模块;该方法是,记录卡时间源计数器步进步长为B1时的基准时间源计数器的值T1,B1为372的倍数;然后计算初始波特率并设置CPU波特率发生器的初值;之后记录卡时间源计数器步进步长B2或步长B3时,基准时间源计数器的值T2或T3,B2为186的倍数,B3为256的倍数;最后,根据TAR的TA1,计算当前波特率并设置CPU波特率发生器的初值。本发明可以随意的更换卡时钟频率来提高读写器的性能,而不需要修改固件。
文档编号G06K7/00GK101382990SQ20081022548
公开日2009年3月11日 申请日期2008年10月31日 优先权日2008年10月31日
发明者于华章, 舟 陆 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1