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

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

Info

Publication number
CN101382990A
CN101382990A CNA2008102254810A CN200810225481A CN101382990A CN 101382990 A CN101382990 A CN 101382990A CN A2008102254810 A CNA2008102254810 A CN A2008102254810A CN 200810225481 A CN200810225481 A CN 200810225481A CN 101382990 A CN101382990 A CN 101382990A
Authority
CN
China
Prior art keywords
time source
source counter
card
baud rate
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008102254810A
Other languages
English (en)
Other versions
CN101382990B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN2008102254810A priority Critical patent/CN101382990B/zh
Publication of CN101382990A publication Critical patent/CN101382990A/zh
Application granted granted Critical
Publication of CN101382990B publication Critical patent/CN101382990B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Electric Clocks (AREA)

Abstract

本发明公开了IC卡读写器的CPU波特率设置技术领域中的一种使读写器支持任意卡时钟频率下波特率的系统与方法。技术方案是,该系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间源计数器模块、判断模块、存取模块、计算模块和设置模块;该方法是,记录卡时间源计数器步进步长为B1时的基准时间源计数器的值T1,B1为372的倍数;然后计算初始波特率并设置CPU波特率发生器的初值;之后记录卡时间源计数器步进步长B2或步长B3时,基准时间源计数器的值T2或T3,B2为186的倍数,B3为256的倍数;最后,根据TAR的TA1,计算当前波特率并设置CPU波特率发生器的初值。本发明可以随意的更换卡时钟频率来提高读写器的性能,而不需要修改固件。

Description

一种使读写器支持任意卡时钟频率下波特率的系统与方法
技术领域
本发明属于IC卡读写器的CPU波特率设置技术领域,尤其涉及一种使读写器支持任意卡时钟频率下波特率的系统与方法。
背景技术
IC卡(Integrated Circuit Card,集成电路卡)是继磁卡之后出现的又一种新型信息工具,IC卡是通过卡里的集成电路进行信息存储的。IC卡在有些国家和地区也称智能卡(smart card)、智慧卡(intelligent card)、微电路卡(microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合ISO7816标准的卡基中,做成卡片的形式。目前,IC卡已经十分广泛地应用于包括金融、交通、社保等很多领域。
IC卡读写器是IC卡与应用系统间的桥梁,在ISO国际标准中称之为接口设备IFD(Interface Device)。IFD内的CPU通过一个接口电路与IC卡相连并进行通信。IC卡接口电路是IC卡读写器中至关重要的部分,根据实际应用系统的不同,可选择并行通信、半双工串行通信和I2C(Inter—Integrated Circuit)通信等不同的IC卡读写芯片。
在现有技术中,一般地,IC卡读写器在开放过程中使用固定的频率,如3.5712M、4M等,并且按照上述所说的,波特率和基本时间互为倒数,所以计算波特率的方法为:波特率B=(D×f)/F,其中f是智能卡的时钟频率,参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答ATR(Answer To Reset)中的TA1的值决定,按这个公式人为的计算好误差范围内的波特率,运用查表等方法设置读写器CPU的波特率。但是当读写器需要提高读写速度时,则需要更换卡时钟频率,这就带来了需要重新修改固件的麻烦。
发明内容
本发明的目的在于,提供一种使读写器支持任意卡时钟频率下波特率的系统与方法,有效的解决在现有技术中,当提高读写器的读写速度时,需要更换卡时钟频率即需要重新修改固件的问题。
本发明的技术方案是,一种使读写器支持任意卡时钟频率下波特率的系统,其特征是所述系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间源计数器模块、判断模块、存取模块、计算模块和设置模块;其中,初始化模块与控制模块相连,控制模块分别与卡时间源计数器模块、基准时间源计数器模块和判断模块相连,判断模块与存取模块相连,存取模块与计算模块相连,计算模块与设置模块相连。
一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述方法包括第一种实现步骤、第二种实现步骤或第三种实现步骤,
第一种实现步骤为,
步骤11:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤12:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定的步长B1时所述基准时间源计数器的值T1;
步骤13:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤14:所述读写器固件复位并重新启动所述基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长B2和第三预先设定步长B3时所述基准时间源计数器的值T2和T3;
步骤15:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四位为1、2、3、4、5、6还是为9、a、b、c、d,当所述复位应答ATR中TA1的高四位为1、2、3、4、5、6时,则执行步骤16,当所述复位应答ATR中TA1的高四位为9、a、b、c、d时,则执行步骤17;
步骤16:根据T2和B2计算当前波特率,跳到步骤18;
步骤17:根据T3和B3计算当前波特率;
步骤18:根据所述当前波特率设置CPU波特率发生器的初值;
第二种实现步骤为,
步骤21:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤22:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长B1时所述基准时间源计数器的值T1;
步骤23:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤24:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四位为1、2、3、4、5、6还是为9、a、b、c、d,当所述复位应答ATR中TA1的高四位为1、2、3、4、5、6时,则执行步骤25,当所述复位应答ATR中TA1的高四位为9、a、b、c、d时,则执行步骤27;
步骤25:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长B2时所述基准时间源计数器的值T2;
步骤26:根据T2和B2计算当前波特率,跳到步骤29;
步骤27:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第三预先设定步长B3时所述基准时间源计数器的值T3;
步骤28:根据T3和B3计算当前波特率;
步骤29:根据所述当前波特率设置CPU波特率发生器的初值;
第三种实现步骤为,
步骤31:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤32:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长B1时所述基准时间源计数器的值T1;
步骤33:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤34:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,根据复位应答ATR数据、T1和B1计算当前波特率;
步骤35:根据所述当前波特率设置CPU波特率发生器的初值。
所述步骤11中,所述卡时间源计数器大于等于1个。
所述步骤12中,所述基准时间源计数器大于等于1个。
所述步骤12、步骤22和步骤32中,基准时间源是系统时钟、波特率发生器时钟源、晶振、RC振荡电路或者LC振荡电路。
所述步骤12、步骤22和步骤32中,保存当所述卡时间源计数器步进第一预先设定的步长B1时所述基准时间源计数器的值T1,通过如下方法实现:当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器;当所述卡时间源计数器的计数值为第二预先设定值V2,即V2=B1+V1时,停止所述卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值T1;
或者,当所述卡时间源计数器启动时,启动所述基准时间源计数器;当所述卡时间源计数器的计数值为预先设定的步长B1时,停止所述卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值T1;
所述步骤12和步骤22中,所述第一预先设定的步长B1是372的整数倍。
所述步骤32中,所述第一预先设定的步长B1是186与256的公倍数。
所述当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,是为了稳定卡时钟。
所述步骤13、步骤23和步骤33中,根据T1和B1计算初始波特率的方法是,初始波特率 B ini = B 1 ( 372 × T 1 ) .
所述步骤13、步骤23和步骤33中,再根据初始波特率设置CPU波特率发生器的初值,通过将初始波特率的公式代入计算CPU波特率的公式即可得出;计算CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特率的公式。
所述步骤14中,保存所述卡时间源计数器步进第二预先设定步长B2和第三预先设定步长B3时所述基准时间源计数器的值T2和T3,方法是:当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,当所述卡时间源计数器的计数值为第三预先设定值V3,即V3=B2+V1时,停止所述卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值T2;复位所述卡时间源计数器和基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,当所述卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和基准时间源计数器,并保存此时所述基准时间源计数器的值T3;
或者,使用两个卡时间源计数器,当两个卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,当卡时间源计数器的值为第三预先设定值V3,即V3=B2+V1时,停止其中一个卡时间源计数器,并保存此时基准时间源计数器的值T2;另一个卡时间源计数器和基准时间源计数器仍然进行计数,当另一个卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止卡时间源计数器和基准时间源计数器,记录此时基准时间源计数器的值T3;
或者,使用一个卡时间源计数器和两个基准时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述两个基准时间源计数器,当所述卡时间源计数器的值为第三预先设定值V3,即V3=B2+V1时,停止其中一个基准时间源计数器,并保存此时所述基准时间源计数器的值T2;另一个基准时间源计数器和所述卡时间源计数器仍然进行计数,当所述卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和所述基准时间源计数器,记录此时所述基准时间源计数器的值T3。
所述当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,是为了稳定卡时钟。
所述步骤25中,所述读写器固件复位并重新启动卡时间源计数器和基准时间源计数器,保存所述卡时间源计数器步进第二预先设定步长B2时基准时间源计数器的值T2,方法是:复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数器,当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,当卡时间源计数器的计数值为第三预先设定值V3,即V3=B2+V1时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值T2;
或者,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数器,当卡时间源计数器启动时,启动基准时间源计数器,当卡时间源计数器的计数值为第二预先设定步长B2时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值T2。
所述当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,是为了稳定卡时钟。
所述步骤14和步骤25中,所述第二预先设定步长B2的值是186的整数倍。
所述步骤27中,读写器固件复位并重新启动卡时间源计数器和基准时间源计数器,保存卡时间源计数器步进第三预先设定步长B3时基准时间源计数器的值T3,方法是,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数器,当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器;当卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值T3;
或者,复位卡时间源计数器和基准时间源计数器,并再次启动卡时间源计数器,当卡时间源计数器启动时,启动基准时间源计数器,当卡时间源计数器的计数值为第三预先设定步长B3时,停止卡时间源计数器和基准时间源计数器,并保存此时基准时间源计数器的值T3。
所述当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,是为了稳定卡时钟。
所述步骤14和步骤27中,第三预先设定步长B3的值是256的整数倍。
所述步骤16和步骤26中,根据T2和B2计算当前波特率的计算方法是当前波特率 B pre = ( D × B 2 ) ( F × T 2 ) .
所述步骤17和步骤28中,根据T3和B3计算当前波特率的计算方法是当前波特率 B pre = ( D × B 3 ) ( F × T 3 ) .
所述步骤16和步骤26中,根据T2和B2计算当前波特率的另一种计算方法是 B pre = ( D T 2 ) × ( S 2 ( F / 186 ) ) , 其中,S2=B2/186。
所述步骤17和步骤28中,根据T3和B3计算当前波特率的另一种计算方法是 B pre = ( D T 3 ) × ( S 3 ( F / 256 ) ) , 其中,S3=B3/256。
所述步骤34中,根据复位应答ATR数据、T1和B1计算当前波特率的计算方法是当前波特率 B pre = ( D × B 1 ) ( F × T 1 ) .
所述步骤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是一种使读卡器支持任意卡时钟频率下波特率的系统示意图。
具体实施方式
下面结合附图,对优选实施例作详细说明。应该强调的是,下述说明仅仅是示例性的,而不是为了限制本发明的范围及其应用。
根据ISO7816标准的规定,I/O线上所用的位持续时间被确定为基本时间单位(etu-elementary time uint),它和时钟频率间存在着线性关系,复位应答时的位持续时间称为初始etu,这里标记为etuini,其计算公式为:
etuini=372/f
单位是秒;其中,公式中f的单位为Hz,表示复位响应时卡的初始频率;
复位应答(以及全局参数F与D的设立,见后述)之后的持续时间,称为当前etu,这里标记为etupre,其计算公式为:
etu pre = F ( D × f )
其中,公式中的参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f是智能卡的时钟频率,单位为Hz;
波特率表示的是每秒传送的位数,单位为bps,在这里波特率和基本时间单元互为倒数。
实施例1:图1是本发明实施例1提供的一种使读卡器支持任意卡时钟频率下波特率的方法流程图。在图1所示的实施例中,以c8051f344单片机为例进行说明,系统时钟为24M,ATR中的TA1=0x95,c8051f344的波特率由定时器工作在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给定的定时器时钟源,UART0的波特率为:
Figure A200810225481D00191
其中TCLK是定时器的时钟频率,并且在计算波特率的时候要灵活的调整TCLK的时钟源的选择,TH1是定时器的高字节(重载值),也是我们设定的值。具体实现步骤如下:
步骤101:读卡器上电,硬件初始化;
步骤102:读卡器使能卡时钟,并启动卡时钟计数器;
步骤103:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即基准时间源计数器);
在本实施例步骤103中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤104:当卡时钟计数器的计数值等于472时,停止卡时钟计数器和系统钟计数器,读取此时系统时钟计数器的计数值T1,并保存该值;
步骤105:复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数器,当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤105中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤106:当卡时钟计数器的计数值等于356时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T2,并保存该值;
步骤107:复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数器,当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤107中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤108:当卡时钟计数器的计数值等于286时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T3,并保存该值;
步骤109:根据ISO7816标准的定义以及本实施例步骤104中保存的计数值T1计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤109中,N=472-100=372为计数的个数;
在本实施例步骤109中,根据ISO 7816标准的定义计算初始波特率的方法为:
初始波特率Bini=f/372,其中,f=(N×24M)/T1为卡时钟频率,即
初始波特率 B ini = ( N × 24 M ) ( 372 × T 1 )
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设置的波特率发生器的值TH1为-(T1/24),即设置步骤109中的CPU波特率发生器的初值为-(T1/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中保存的计数值T3,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
步骤113:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤106中保存的计数值T2,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
在本实施例步骤112和步骤113中,计算当前波特率的方法如下:
当前波特率 B pre = ( D × f ) F , 其中, f = ( N × 24 M ) T 1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f为卡时钟频率;
在本实施例步骤112和步骤113中,当出现变频的情况时,则卡时钟频率f与本实施例步骤109中的卡时钟频率f不相同,此时则需要重复步骤101至步骤109得到现在的卡时钟频率f;
在本实施例步骤111中,在得到PPS应答后,因为ATR中的TA1=0x95,高四位是9,所以执行步骤113,即用卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤106中保存的计数值T2,并且N=256为计数的个数。
根据ISO7816标准的规定,当前波特率计算公式中的F=512,D=16,所以将F=512,D=16代入上面的计算当前波特率的公式中,即
当前波特率 B pre = ( D × f ) F = ( 16 × ( N × 24 M ) / T 2 ) 512 = 8 / T 2 ;
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即
Figure A200810225481D00214
得到要设置的波特率发生器的值TH1为-(T2/16),即设置步骤113中的CPU的波特率发生器的初值为-(T2/16)。
在本实施例中,步骤105~步骤113还可以用如下步骤来进行替换:
步骤105′:根据ISO7816标准的定义以及本实施例步骤104中保存的计数值T1计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤105′中,N=472-100=372为计数的个数;
在本实施例步骤105′中,根据ISO7816标准的定义计算初始波特率的方法为:
初始波特率Bini=f/372,其中,f=(N×24M)/T1为卡时钟频率,即
初始波特率 B ini = ( N × 24 M ) ( 372 × T 1 )
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设置的波特率发生器的值TH1为-(T1/24),即设置步骤105′中的CPU波特率发生器的初值为-(T1/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′中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤108′:当卡时钟计数器的计数值等于286时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T2,并保存该值;
步骤109′:根据卡时钟计数器的计数值等于286时的系统时钟计数器的值,即本实施例步骤108′中保存的计数值T2,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
步骤110′:复位卡时钟计数器和系统时钟计数器,并再次启动卡时钟计数器,当卡时钟计数器的计数值等于100时,启动系统时钟计数器;
在本实施例步骤110′中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤111′:当卡时钟计数器的计数值等于356时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T3,并保存该值;
步骤112′:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤111′中保存的计数值T3,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
在本实施例步骤109′和步骤112′中,计算当前波特率的方法如下:
当前波特率 B pre = ( D × f ) F , 其中, f = ( N × 24 M ) T 1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f为卡时钟频率;
在本实施例步骤109′和步骤112′中,当出现变频的情况时,则此时的卡时钟频率f与本实施例步骤105′中的卡时钟频率f不相同,此时则需要重复步骤101′至109′得到现在的卡时钟频率f。
实施例2:图2是本发明实施例2提供的一种使读卡器支持任意卡时钟频率下波特率的方法流程图。在图2所示的实施例中,以c8051f344单片机为例进行说明,系统时钟为24M,ATR中的TA1=0x95,c8051f344的波特率由定时器工作在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给定的定时器时钟源,UART0的波特率为:
Figure A200810225481D00233
其中TCLK是定时器的时钟频率,并且在计算波特率的时候要灵活的调整TCLK的时钟源的选择,TH1是定时器的高字节(重载值),也是我们设定的值。具体实现步骤如下:
步骤201:读卡器上电,硬件初始化;
步骤202:读卡器使能卡时钟,并启动卡时钟计数器;
步骤203:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即基准时间源计数器);
在本实施例步骤203中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤204:当卡时钟计数器的计数值等于286时,读取此时系统时钟计数器的计数值T1,并保存该值,此时卡时钟计数器和系统时钟计数器依然在计数;
步骤205:当卡时钟计数器的计数值等于356时,读取此时系统时钟计数器的计数值T2,并保存该值,此时卡时钟计数器和系统时钟计数器依然在计数;
步骤206:当卡时钟计数器的计数值等于472时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T3,并保存该值;
步骤207:根据ISO7816标准的定义以及本实施例步骤206中保存的计数值T3计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤207中,N=472-100=372为计数的个数;
在本实施例步骤207中,根据ISO7816标准的定义计算初始波特率的方法为:
初始波特率Bini=f/372,其中, f = ( N × 24 M ) T 3 为卡时钟频率,即
初始波特率 B ini = ( N × 24 M ) ( 372 × T 3 )
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设置的波特率发生器的值TH1为-(T3/24),即设置步骤207中的CPU波特率发生器的初值为-(T3/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中保存的计数值T1,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
步骤211:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤205中保存的计数值T2,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
在本实施例步骤210和步骤211中,计算当前波特率的方法如下:
当前波特率 B pre = ( D × f ) F , 其中, f = ( N × 24 M ) T 1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f为卡时钟频率;
在本实施例步骤210和步骤211中,当出现变频的情况时,则此时的卡时钟频率f与本实施例步骤207中的卡时钟频率f不相同,此时则需要重复步骤201至步骤207得到现在的卡时钟频率f;
在本实施例步骤209中,在得到PPS应答后,因为ATR中的TA1=0x95,高四位是9,所以执行步骤211,即用卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤205中保存的计数值T2,并且N=256为计数的个数。
根据ISO7816标准的规定,当前波特率计算公式中的F=512,D=16,所以将F=512,D=16代入上面的计算波特率的公式中,即
当前波特率 B pre = ( D × f ) F = ( 16 × ( N × 24 M ) / T 2 ) 512 = 8 / T 2 ;
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即
Figure A200810225481D00261
得到要设置的波特率发生器的值TH1为-(T2/16),即设置步骤211中的CPU的波特率发生器的初值为-(T2/16)。
在本实施例中,步骤208~步骤211还可以用如下步骤来进行替换:
步骤208′:将步骤204中的T1代入ISO7816标准定义中的计算当前波特率的公式,并且此时N=186,即
当前波特率 B pre = ( D × f ) F , 其中, f = ( 186 × 24 M ) T 1 ;
步骤209′:将步骤205中的T2代入ISO7816标准定义中的计算当前波特率的公式中,并且此时N=256,即
当前波特率 B pre = ( D × f ) F , 其中, f = ( 256 × 24 M ) T 2 ;
步骤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′中,当出现变频的情况时,则此时的卡时钟频率f与本实施例步骤207中的卡时钟频率f不相同,此时则需要重复步骤201至步骤207得到现在的卡时钟频率f。
实施例3:图3是本发明实施例3提供的一种使读卡器支持任意卡时钟频率下波特率的方法流程图。在图3所示的实施例中,以c8051f344单片机为例进行说明,系统时钟为24M,ATR中的TA1=0x95,c8051f344的波特率由定时器工作在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给定的定时器时钟源,UART0的波特率为:
Figure A200810225481D00271
其中TCLK是定时器的时钟频率,并且在计算波特率的时候要灵活的调整TCLK的时钟源的选择,TH1是定时器的高字节(重载值),也是我们的设定的值。具体实现步骤如下:
步骤301:读卡器上电,硬件初始化;
步骤302:读卡器使能卡时钟,并启动卡时钟计数器;
步骤303:当卡时钟计数器的计数值等于100时,启动系统时钟计数器(即基准时间源计数器);
在本实施例步骤303中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即启动系统时钟计数器;
步骤304:当卡时钟计数器的计数值为186和256的公倍数加100时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T1,并保存该值;
在本实施例步骤304中,186和256的公倍数可以有很多个,其中最小公倍数为23808,在本实施例中,当卡时钟计数器的计数值为23908时,停止卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的计数值T1,并保存该值;
步骤305:根据ISO7816标准的定义以及本实施例步骤304中保存的计数值T1计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤305中,N=23808为计数的个数;
在本实施例步骤305中,根据ISO 7816标准的定义计算初始波特率的方法为:
初始波特率Bini=f/372,其中, f = ( N × 24 M ) T 1 为卡时钟频率,即
初始波特率 B ini = ( N × 24 M ) 372 × T 1
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设置的波特率发生器的值TH1为-(T1/1536),即设置步骤305中的CPU波特率发生器的初值为-(T1/1536);
步骤306:执行正常的IC卡操作,在ATR期间用初始波特率和IC卡进行通讯;
步骤307:得到PPS应答后,根据步骤304中保存的系统时钟计数器的值T1以及ISO7816标准的定义计算波特率,并设置CPU的波特率发生器的初值;
其中,由于在本实施例步骤304中,是当卡时钟计数器的计数值为186和256的公倍数加100时,保存的系统时钟计数器的计数值T1,所以在本实施例中不需要判断ATR中TA1的高四位,直接根据步骤304中保存的系统时钟计数器的值T1以及ISO7816标准的定义计算波特率。在本实施例步骤307中,计算当前波特率的方法如下:
当前波特率 B pre = ( D × f ) F , 其中, f = ( N × 24 M ) T 1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f为卡时钟频率;
在本实施例步骤307中,当出现变频的情况时,则此时的卡时钟频率f与本实施例步骤305中的卡时钟频率f不相同,此时则需要重复步骤301至步骤305得到现在的卡时钟频率f;
在本实施例步骤307中,N=23808为计数的个数;
根据ISO 7816标准的规定,当前波特率计算公式中的F=512,D=16,所以将F=512,D=16代入上面的计算当前波特率的公式中,即
当前波特率 B pre = ( D × f ) F = ( 16 × ( N × 24 M ) / T 1 ) 512 = 744 / T 1 ;
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即
Figure A200810225481D00292
得到要设置的波特率发生器的值TH1为-(T1/1488),即设置步骤307中的CPU的波特率发生器的初值为-(T1/1488)。
实施例4:图4是本发明实施例4提供的一种使读卡器支持任意卡时钟频率下波特率的方法流程图。在图4所示的实施例中,以c8051f344单片机为例进行说明,系统时钟为24M,ATR中的TA1=0x95,c8051f344的波特率由定时器工作在8位自动重装载方式产生,定时器的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入。对于任何给定的定时器时钟源,UART0的波特率为:
Figure A200810225481D00293
其中TCLK是定时器的时钟频率,并且在计算波特率的时候要灵活的调整TCLK的时钟源的选择,TH1是定时器的高字节(重载值),也是我们设定的值。具体实现步骤如下:
步骤401:读卡器上电,硬件初始化;
步骤402:读卡器使能卡时钟,并同时启动第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器;
步骤403:当第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器的计数值等于100时,启动系统时钟计数器(即基准时间源计数器);
在本实施例步骤403中,让第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器之后立即启动系统时钟计数器;
步骤404:当第一卡时钟计数器、第二卡时钟计数器和第三卡时钟计数器的计数值等于286时,停止第一卡时钟计数器,读取此时系统时钟计数器的值T1,并保存该值;
步骤405:当第二卡时钟计数器和第三卡时钟计数器的计数值等于356时,停止第二卡时钟计数器,读取此时系统时钟计数器的值T2,并保存该值;
步骤406:当第三卡时钟计数器的计数值等于472时,停止第三卡时钟计数器和系统时钟计数器,读取此时系统时钟计数器的值T3,并保存该值;
步骤407:根据ISO7816标准的定义以及本实施例步骤406中保存的计数值T3计算初始波特率,设置CPU波特率发生器的初值;
在本实施例步骤407中,N=372为计数的个数;
在本实施例步骤407中,根据ISO7816标准的定义计算初始波特率的方法为:
初始波特率Bini=f/372,其中, f = ( N × 24 M ) T 3 为卡时钟频率,即
初始波特率 B ini = ( N × 24 M ) ( 372 × T 3 )
把初始波特率的公式代入上面的计算UART0波特率的公式中,计算出要设置的波特率发生器的值TH1为-(T3/24),即设置步骤407中的CPU波特率发生器的初值为-(T3/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中保存的计数值T1,以及ISO7816标准的定义计算波特率,并设置CPU的波特率发生器的初值;
步骤411:根据卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤405中保存的计数值T2,以及ISO7816标准的定义计算当前波特率,并设置CPU的波特率发生器的初值;
在本实施例步骤410和步骤411中,计算当前波特率的方法如下:
当前波特率 B pre = ( D × f ) F , 其中, f = ( N × 24 M ) T 1
其中参数F和D分别是时钟率转换因子和波特率调整因子,由复位应答(ATR)中的TA1的值决定,f为卡时钟频率;
在本实施例步骤410和步骤411中,当出现变频的情况时,则此时的卡时钟频率f与本实施例步骤407中的卡时钟频率f不相同,此时则需要重复步骤401至步骤407得到现在的卡时钟频率f;
在本实施例步骤409中,在得到PPS应答后,因为ATR中的TA1=0x95,高四位是9,所以执行步骤411,即用卡时钟计数器的计数值等于356时的系统时钟计数器的值,即本实施例步骤405中保存的计数值T2,并且N=256为计数的个数。
根据ISO 7816标准的规定,当前波特率计算公式中的F=512,D=16,所以将F=512,D=16代入上面的计算当前波特率的公式中,即
当前波特率 B pre = ( D × f ) F = ( 16 × ( 256 × 24 M ) / T 2 ) 512 = 8 / T 2 ;
然后将此当前波特率代入c8051f344的UART0波特率的计算公式中,即
Figure A200810225481D00322
得到要设置的波特率发生器的值TH1为-(T2/16),即设置步骤411中的CPU的波特率发生器的初值为-(T2/16)。
在本实施例中,得到T1、T2和T3值的步骤402至步骤406还可以用如下步骤来进行替换:
步骤402′:读卡器使能卡时钟,并启动卡时钟计数器;
步骤403′:当卡时钟计数器的计数值等于100时,同时启动第一系统时钟计数器、第二系统时钟计数器和第三系统时钟计数器(即基准时间源计数器);
在本实施例步骤403′中,让卡时钟计数器的值为100是为了稳定卡时钟,同时也可以是在启动卡时钟计数器之后立即同时启动第一系统时钟计数器、第二系统时钟计数器和第三系统时钟计数器;
步骤404′:当卡时钟计数器的计数值等于286时,停止第一系统时钟计数器,读取此时第一系统时钟计数器的值T1,并保存该值,并且卡时钟计数器、第二系统时钟计数器和第三系统时钟计数器依然在进行计数;
步骤405′:当卡时钟计数器的计数值等于356时,停止第二系统时钟计数器,读取此时第二系统时钟计数器的值T2,并保存该值,并且卡时钟计数器和第三系统时钟计数器依然在进行计数;
步骤406′:当卡时钟计数器的计数值等于472时,停止第三系统时钟计数器和卡时钟计数器,读取此时第三系统时钟计数器的值T3,并保存该值;
图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的波特率发生器的初值。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (28)

1、一种使读写器支持任意卡时钟频率下波特率的系统,其特征是所述系统包括初始化模块、控制模块、卡时间源计数器模块、基准时间源计数器模块、判断模块、存取模块、计算模块和设置模块;其中,初始化模块与控制模块相连,控制模块分别与卡时间源计数器模块、基准时间源计数器模块和判断模块相连,判断模块与存取模块相连,存取模块与计算模块相连,计算模块与设置模块相连。
2、一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述方法包括第一种实现步骤、第二种实现步骤或第三种实现步骤,
第一种实现步骤为,
步骤11:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤12:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长B1时所述基准时间源计数器的值T1;
步骤13:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤14:所述读写器固件复位并重新启动所述基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长B2和第三预先设定步长B3时所述基准时间源计数器的值T2和T3;
步骤15:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四位为1、2、3、4、5、6还是为9、a、b、c、d,当所述复位应答ATR中TA1的高四位为1、2、3、4、5、6时,则执行步骤16,当所述复位应答ATR中TA1的高四位为9、a、b、c、d时,则执行步骤17;
步骤16:根据T2和B2计算当前波特率,跳到步骤18;
步骤17:根据T3和B3计算当前波特率;
步骤18:根据所述当前波特率设置CPU波特率发生器的初值;
第二种实现步骤为,
步骤21:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤22:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长B1时所述基准时间源计数器的值T1;
步骤23:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤24:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,判断复位应答ATR中TA1的高四位为1、2、3、4、5、6还是为9、a、b、c、d,当所述复位应答ATR中TA1的高四位为1、2、3、4、5、6时,则执行步骤25,当所述复位应答ATR中TA1的高四位为9、a、b、c、d时,则执行步骤27;
步骤25:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长B2时所述基准时间源计数器的值T2;
步骤26:根据T2和B2计算当前波特率,跳到步骤29;
步骤27:所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第三预先设定步长B3时所述基准时间源计数器的值T3;
步骤28:根据T3和B3计算当前波特率;
步骤29:根据所述当前波特率设置CPU波特率发生器的初值;
第三种实现步骤为,
步骤31:读写器上电,硬件初始化,读写器固件启动卡时间源计数器;
步骤32:所述读写器固件启动基准时间源计数器,保存当所述卡时间源计数器步进第一预先设定步长B1时所述基准时间源计数器的值T1;
步骤33:根据T1和B1计算初始波特率,再根据所述初始波特率设置CPU波特率发生器的初值;
步骤34:执行正常的IC卡操作,在复位应答ATR期间用初始波特率和IC卡进行通讯;得到协议和参数选择PPS应答后,根据复位应答ATR数据、T1和B1计算当前波特率;
步骤35:根据所述当前波特率设置CPU波特率发生器的初值。
3、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤11中,所述卡时间源计数器大于等于1个。
4、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤12中,所述基准时间源计数器大于等于1个。
5、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤12、步骤22和步骤32中,所述基准时间源是系统时钟、波特率发生器时钟源、晶振、RC振荡电路或者LC振荡电路。
6、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤12、步骤22和步骤32中,保存当所述卡时间源计数器步进第一预先设定的步长B1时所述基准时间源计数器的值T1,通过如下方法实现:当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器;当所述卡时间源计数器的计数值为第二预先设定值V2,即V2=B1+V1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T1;
或者,当所述卡时间源计数器启动时,启动所述基准时间源计数器;当所述卡时间源计数器的计数值为预先设定的步长B1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T1;
7、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤12和步骤22中,所述第一预先设定的步长B1是372的整数倍。
8、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤32中,所述第一预先设定的步长B1是186与256的公倍数。
9、根据权利要求6所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,是为了稳定卡时钟。
10、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤13、步骤23和步骤33中,根据T1和B1计算初始波特率的方法是,初始波特率 B ini = B 1 ( 372 × T 1 ) .
11、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤13、步骤23和步骤33中,再根据所述初始波特率设置CPU波特率发生器的初值,通过将初始波特率的公式代入计算CPU波特率的公式即可得出;计算CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特率的公式。
12、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤14中,保存当所述卡时间源计数器步进第二预先设定步长B2和第三预先设定步长B3时所述基准时间源计数器的值T2和T3,方法是:当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,当所述卡时间源计数器的计数值为第三预先设定值V3,即V3=B2+V1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T2;复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,当所述卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T3;
或者,使用两个卡时间源计数器,当两个卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,当所述卡时间源计数器的值为第三预先设定值V3,即V3=B2+V1时,停止其中一个卡时间源计数器,并保存此时所述基准时间源计数器的值T2;另一个卡时间源计数器和基准时间源计数器仍然进行计数,当另一个卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和所述基准时间源计数器,记录此时所述基准时间源计数器的值T3;
或者,使用一个卡时间源计数器和两个基准时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述两个基准时间源计数器,当所述卡时间源计数器的值为第三预先设定值V3,即V3=B2+V1时,停止其中一个基准时间源计数器,并保存此时所述基准时间源计数器的值T2;另一个基准时间源计数器和所述卡时间源计数器仍然进行计数,当所述卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和所述基准时间源计数器,记录此时所述基准时间源计数器的值T3。
13、根据权利要求12所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,是为了稳定卡时钟。
14、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤25中,所述读写器固件复位并重新启动卡时间源计数器和基准时间源计数器,保存当所述卡时间源计数器步进第二预先设定步长B2时所述基准时间源计数器的值T2,方法是:复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,当所述卡时间源计数器的计数值为第三预先设定值V3,即V3=B2+V1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T2;
或者,复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器启动时,启动所述基准时间源计数器,当所述卡时间源计数器的计数值为第二预先设定步长B2时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T2。
15、根据权利要求14所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器,是为了稳定卡时钟。
16、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤14和步骤25中,所述第二预先设定步长B2的值是186的整数倍。
17、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤27中,所述读写器固件复位并重新启动所述卡时间源计数器和所述基准时间源计数器,保存当所述卡时间源计数器步进第三预先设定步长B3时所述基准时间源计数器的值T3,方法是,复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器的计数值为第一预先设定值V1时,启动所述基准时间源计数器;当所述卡时间源计数器的值为第四预先设定值V4,即V4=B3+V1时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T3;
或者,复位所述卡时间源计数器和所述基准时间源计数器,并再次启动所述卡时间源计数器,当所述卡时间源计数器启动时,启动所述基准时间源计数器,当所述卡时间源计数器的计数值为第三预先设定步长B3时,停止所述卡时间源计数器和所述基准时间源计数器,并保存此时所述基准时间源计数器的值T3。
18、根据权利要求17所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述当卡时间源计数器的计数值为第一预先设定值V1时,启动基准时间源计数器,是为了稳定卡时钟。
19、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤14和步骤27中,所述第三预先设定步长B3的值是256的整数倍。
20、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤16和步骤26中,根据T2和B2计算当前波特率的计算方法是当前波特率 B pre = ( D × B 2 ) ( F × T 2 ) .
21、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤17和步骤28中,根据T3和B3计算当前波特率的计算方法是当前波特率 B pre = ( D × B 3 ) ( F × T 3 ) .
22、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤16和步骤26中,根据T2和B2计算当前波特率的另一种计算方法是 B pre = ( D T 2 ) × ( S 2 F / 186 ) , 其中,S2=B2/186。
23、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤17和步骤28中,根据T3和B3计算当前波特率的另一种计算方法是 B pre = ( D T 3 ) × ( S 3 F / 256 ) , 其中,S3=B3/256。
24、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤34中,根据复位应答ATR数据、T1和B1计算当前波特率的计算方法是当前波特率 B pre = ( D × B 1 ) ( F × T 1 ) .
25、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤16或者步骤17中,计算当前波特率时,卡时间频率发生变化,即所述卡时钟频率与步骤13中计算初始波特率时的卡时钟频率不同时,需要重复步骤11-步骤17。
26、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤26或者步骤28中,计算当前波特率时,卡时间频率发生变化,即所述卡时钟频率与步骤23中计算初始波特率时的卡时钟频率不同时,需要重复步骤21-步骤28。
27、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤34中,计算当前波特率时,卡时间频率发生变化,即所述卡时钟频率与步骤33中计算初始波特率时的卡时钟频率不同时,需要重复步骤31-步骤34。
28、根据权利要求2所述的一种使读写器支持任意卡时钟频率下波特率的方法,其特征是所述步骤18、步骤29和步骤35中,根据当前波特率设置CPU波特率发生器的初值,通过将当前波特率的公式代入计算CPU波特率的公式即可得出;计算CPU波特率的公式是由CPU的型号来决定的,不同的芯片有不同的计算波特率的公式。
CN2008102254810A 2008-10-31 2008-10-31 一种使读写器支持任意卡时钟频率下波特率的系统与方法 Active CN101382990B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102254810A CN101382990B (zh) 2008-10-31 2008-10-31 一种使读写器支持任意卡时钟频率下波特率的系统与方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102254810A CN101382990B (zh) 2008-10-31 2008-10-31 一种使读写器支持任意卡时钟频率下波特率的系统与方法

Publications (2)

Publication Number Publication Date
CN101382990A true CN101382990A (zh) 2009-03-11
CN101382990B CN101382990B (zh) 2011-07-20

Family

ID=40462824

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102254810A Active CN101382990B (zh) 2008-10-31 2008-10-31 一种使读写器支持任意卡时钟频率下波特率的系统与方法

Country Status (1)

Country Link
CN (1) CN101382990B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101639897B (zh) * 2009-08-31 2011-08-17 北京飞天诚信科技有限公司 操作超范围变频因子智能卡的方法、设备及系统
CN105046178A (zh) * 2015-06-25 2015-11-11 广东华大集成技术有限责任公司 一种stm32降频实现高速率读卡器的方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101639897B (zh) * 2009-08-31 2011-08-17 北京飞天诚信科技有限公司 操作超范围变频因子智能卡的方法、设备及系统
CN105046178A (zh) * 2015-06-25 2015-11-11 广东华大集成技术有限责任公司 一种stm32降频实现高速率读卡器的方法
CN105046178B (zh) * 2015-06-25 2017-10-10 广东华大互联网股份有限公司 一种stm32降频实现高速率读卡器的方法

Also Published As

Publication number Publication date
CN101382990B (zh) 2011-07-20

Similar Documents

Publication Publication Date Title
US7609147B2 (en) Method and apparatus for improving wireless data transmission
EP0525963B1 (en) Generation of a clock frequency in a smart card interface
US9064196B1 (en) RFID tag dynamically adjusting clock frequency
KR100786160B1 (ko) 비접촉 태그 및 비접촉 태그의 제어 방법
CN101901022B (zh) 时钟精度调节模块与方法及应用其的通用串行总线设备
CN101382990B (zh) 一种使读写器支持任意卡时钟频率下波特率的系统与方法
US7437526B2 (en) Information processing method and apparatus having data locations accessible by different devices in accordance with different permissions
CN110430059A (zh) 一种射频识别安全通信方法及标签实现方法
KR101646506B1 (ko) 난수 발생기
CN101662289A (zh) 无源超高频射频识别芯片解码器及解码方法
CN116757240B (zh) 一种高能效低功耗无源射频识别标签芯片
CN113255382B (zh) 一种射频场包络峰值检测信号驱动的放电控制电路和方法
US6962293B2 (en) Circuit for generating clock signal and decoding data signal for use in contactless integrated circuit card
CN101561894B (zh) 智能卡及确定第二控制器通信速率的方法
CN108471308A (zh) 半导体装置以及数据同步方法
Ricci et al. Design of a low-power digital core for passive UHF RFID transponder
CN114936112B (zh) 无源超高频电子标签芯片数字基带处理器控制方法
CN103646224A (zh) 一种非接触式ic卡解码电路
CN104463257A (zh) 多功能读写卡器
Shi et al. A 90nm RFID tag's baseband processor with novel PIE decoder and uplink clock generator
CN102135577A (zh) 一种跟踪电子电器产品使用寿命的方法及装置
CN102722132B (zh) 一种plc扩展总线的动态调频方法及其控制系统
Najafi et al. A dual mode UHF EPC Gen 2 RFID tag in 0.18 μm CMOS
CN104853356A (zh) 一种nfc系统智能识别方法
KR101617013B1 (ko) 반도체 장치

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: FEITIAN TECHNOLOGIES CO., LTD.

Free format text: FORMER NAME: BEIJING FEITIAN CHENGXIN TECHNOLOGY CO., LTD.

CP03 Change of name, title or address

Address after: 100085 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: Feitian Technologies Co., Ltd.

Address before: 100083, Haidian District, Xueyuan Road, No. 40 research, 7 floor, 5 floor, Beijing

Patentee before: Beijing Feitian Chengxin Science & Technology Co., Ltd.