"); //-->
版 本 |
时 间 |
内 容 |
备 注 |
0.9.1 |
2008-04-21 |
1. 增加设置读卡器提供给卡片VCC 2. 增加查询当前断电时间单位(TIMEUNIT) |
|
0.9.0 |
2008-03-04 |
1. 使用手册 |
初次编写 |
l 主机接口
即插即用
l 连接线/供电
USB A型连接线
通过USB总线供电
[USB 模式 ]
USB全速 (12Mbps)
l 智能卡接口
专业硬件与固件架构
支持 ISO7816 Class A、B与C (5V、3V、1.8V)
支持所有 ISO7816 TA1参数(达344 kbds)
可读写所有 ISO7816-1/2/3/4微处理器卡,T=0与T=1(目前已被关掉)
l 短路检测
l 智能卡连接器
8触点连接 (frictions contacts) —— ISO位置
100,000插入循环
EMV Level 1机械兼容
l 人机接口
LED 双色(红色、绿色)
l 标准/认证
ISO/IEC 7816-1/2/3/4:接触式IC卡
EMV Level 1、EMV2000
Microsoft Windows硬件质量实验室 (WHQL)
USB 2.0全速(USB模式)
CCID智能卡标准
l API
带相关驱动程序的 Microsoft PC/SC环境
l 操作系统支持
Windows 2000/XP/Vista/Linux
l 电缆/电源
可选电压: 5V+/-10%
[USB 模式 ]
电缆长度: 1.0米
USB Type A连接器
USB端口电源
l 环境性能
操作温度: +5 ° C~+55 ° C
保存温度: -25 ° C~+60 ° C
l 尺寸
1. 通讯
通讯方式为USB CCID报文协议,Full Speed。
整个数据 = 数据头(0x0A) + 数据体(命令数据)(最大261字节)
命令数据:
7816命令APDU和应答APDU
基本功能PCSC,CCID,7816-1/2/3通讯协议,支持Windows 2000/XP/Vista,Linux。
私有功能 自动下电
SET TIME命令报文
编码 |
值 |
CLA |
‘FF’ |
INS |
‘01’ |
P1 |
‘00’;其它值保留 |
P2 |
‘00’;其它值保留 |
Lc |
‘02’ |
数据域 |
2字节TIMEUNIT值 |
Le |
不存在 |
命令报文的数据域中包含了卡片POWERDOWN时间单位数据,2字节最大支持到0xFFFF个时间单位(TIMEUNIT)。
响应报文中没有数据域。
不论应用是否有效,'9000'编码表示命令成功执行。
RESET TIME命令报文
编码 |
值 |
CLA |
‘FF’ |
INS |
‘10’ |
P1 |
‘00’;其它值保留 |
P2 |
‘00’;其它值保留 |
Lc |
‘00’ |
数据域 |
不存在 |
Le |
不存在 |
命令报文的数据域
命令报文中没有数据域。
响应报文的数据域
响应报文中没有数据域。
响应报文返回的处理状态
不论应用是否有效,'9000'编码表示命令成功执行。
GET TIME命令报文
编码 |
值 |
CLA |
‘FF’ |
INS |
‘00’ |
P1 |
‘00’;其它值保留 |
P2 |
‘00’;其它值保留 |
Le |
‘02’或 ‘00’ |
命令报文的数据域
命令报文的数据域中包含了卡片POWERDOWN时间单位数据长度,2字节时间单位(TIMEUNIT)。
响应报文的数据域
响应报文为当前读卡器已经设置成功的断电时间单位。
响应报文返回的处理状态
不论应用是否有效,'9000'编码表示命令成功执行。
调整电压SET VCC命令报文
编码 |
值 |
CLA |
‘FF’ |
INS |
‘A8’ |
P1 |
‘00’;其它值保留 |
P2 |
‘00’;其它值保留 |
Lc |
‘01’ |
数据域 |
1字节卡片VCC电压值,0x05-5V, 0x03-3V, 0x18-1.8V |
Le |
不存在 |
命令报文的数据域
命令报文的数据域中包含了卡片电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。
响应报文的数据域
响应报文中没有数据域。
响应报文返回的处理状态
不论应用是否有效,'9090'编码表示命令成功执行。
GET VCC命令报文
编码 |
值 |
CLA |
‘FF’ |
INS |
‘A8’ |
P1 |
‘01’;其它值保留 |
P2 |
‘00’;其它值保留 |
Le |
‘01’ |
命令报文的数据域
命令报文的数据域中包含了卡片电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。
响应报文的数据域
响应报文中数据域中包含了读卡器当前使用的电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。
响应报文返回的处理状态
不论应用是否有效,'9000'编码表示命令成功执行。
目的:该读卡器支持快速下电。
方式:可以通过专有内部指令来设置和清除断电时间。
原理:能过给读卡器发送断电时间单位(TIMEUNIT)来初始化并启动读卡器进入断电模式,当下面的一条(并只对下一条有效)指令的数据发送完成后,立即启动正电操作,而在此时卡片内部正常工作,读卡器也正常接收卡片返回数据,当下电时间到达,读卡器立刻断掉卡片VCC,如果在下电时间到达前,卡片已经处理完指令,则读卡器返回卡片数据,如果卡片尚未处理完指令,读卡器断电后,给上层返回6FF0做为APDU的应答,来表示读卡器成功断电,卡片在处理完指令之前被断电。
例子:
卡片处理完指令之前断电,
àFF 01 00 00 02 XX XX
?90 90 (设置断电时间成功)
à00 A4 00 00 02 3F 00
?6F F0 (卡片被断电,读卡器返回6FF0给上层,同时读卡清除断电时间)
------------------------------------------------------
卡片处理完指令之前,断电时间没有到达,卡片正常返回数据
àFF 01 00 00 02 XX XX
?90 90 (设置断电时间成功)
à00 A4 00 00 02 3F 00
?6A 82 (卡片处理完成指令,返回数据给上层,读卡器断电时间被自动清除)
读卡器工具 i-Kit
该工具有是一个脚本引擎,能够运行脚本文件,脚本完成对读卡器操作,对卡片上电,下电,设置断电时间等,发送指令给卡片。
打开自己编写的脚本文件,运行。
例子脚本:
function Main()
{
for(var i = 1;i < 0x1000;i++)
{
IKIT.PrintMsg("第"+i+"次");
IKIT.PowerOn(); //卡片上电
//-------------------------------------------------------
var tmp = "0000" + i.toString(16);
tmp = tmp.substr(tmp.length-4,4);
var apdu = "FF01000002"+tmp;
IKIT.runApdu("ANTI",apdu);
//-------------------------------------------------------
var mm = IKIT.runApdu("Select","00A40000022F00");//卡片断电后,要重新上电
if(mm != "6FF0")
{
break; //卡片正常返回数据,测试结束
}
}
}
function IKIT::OnEventSendApdu(name, data)
{
IKIT.PrintMsg(name + ":" + data);
var ret = IKIT.SendDataToCard(data);
IKIT.PrintMsg("SW12:"+ret+"\n");
return ret;
}
//------------------------- END OF SCRIPT ----------------------------
//LOG
第1次
ATR:3B6F00008066574B0240000673C02113829000
ANTI:FF010000020001
SW12:9090
Select:00A40000023F00
SW12:6FF0
第2次
ATR:3B6F00008066574B0240000673C02113829000
ANTI:FF010000020002
SW12:9090
Select:00A40000023F00
SW12:6FF0
……
第260次
ATR:3B6F00008066574B0240000673C02113829000
ANTI:FF010000020104
SW12:9090
Select:00A40000023F00
SW12:9000
测试结束
//end
该功能是在不修改硬件的前提下,通过APDU应用指令来改变读卡器提供卡片的物理电压VCC。目前仅支持ISO7816的ABC三类电压,不支持其他自定义电压。
l 注意事项:
由于设置VCC是通过应用指令来完成,并且,卡片必须上电成功后方能使用PCSC发送应用指令。因此,当把读卡器VCC改变成卡片不支持的某电压VCC值时,重新上电,卡片将无法正常工作。
l 解决办法:
当发生卡片不支持读卡器提供的电压时,请用其他支持该电压的卡片完成正常上电后,发送调整VCC的APDU,来重新设置读卡器的新VCC值。
l 例子说明:
A卡片仅仅支持AB类电压。不支持C电压。
B卡片扶持BC类电压,不支持A电压。
当读卡器提供B类电压(3V)时, A卡片可以正常工作,此时,发送APDU设置读卡片器设置电压成C类(1.8V),再次上电,读卡器将用1.8V对卡片A上电,而A卡片不支持C类(1.8V)电压,这样读卡器不能继续对卡片操作。发生这种情况后,可以用读卡器操作B卡片,因为B卡片支持C类(1.8V)电压,读卡器可以发送设置VCC的指令来设置新的VCC值(3V)。从而可以重新操作A卡片。
测试数据,仅供参考
备注:
断电时间单位:10us
断电时间长度:从APDU最后一个字节(校验位发完)发送完成开始计算。
VCC: 3V
时间单位 断电时间(us)
0x01 207
0x0b 310
0x08 281
0x10 358
0x20 520
0x30 678
0x40 840
0x100 2.8ms
VCC: 1.8V
时间单位 断电时间(us)
0x08 277
0x10 364
0x20 520
0x30 683
0x40 840
0x100 2.8ms
0x200 5.3ms
指令流程
ATR:3B6E00000031C07186650178012734839000
Set VCC-1.8v:FFA800000118
SW12:9090
Get VCC-1.8v:FFA8010001
SW12:189000
ATR:3B6E00000031C07186650178012734839000
Select:00A4040000
SW12:6700
Set VCC-3v:FFA800000103
SW12:9090
Get VCC-3v:FFA8010000
SW12:039000
Select:00A4040000
SW12:6700
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。