68 iso14443读卡入门记录

Posted Chasing_Chasing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了68 iso14443读卡入门记录相关的知识,希望对你有一定的参考价值。

1.前言

        最近项目涉及射频读卡,我负责读卡程序移植以及基于APDU自定义数据收发接口实现。由于第一次参与读卡项目涉及读卡相关协议内容,因此特此学习记录。

2.读卡分析

基于ISO14443协议读卡流程分析。

(1)通常读卡器(专业名称PCD)会在场域内一直发WUPA或REQA指令进行寻卡。

(2)寻卡的指令基于13.56MHz频率的电磁波将数据发出,其中WUPA指令是0x52;REQA指令是0x26;

(3)0x52和0x26是直接发出到场里面,卡片靠近场之后,便被唤醒然后处于ready状态。

(4)当读卡器发出WUPA或REQA指令后,被卡片捕获到后会返回一个ATQA数据给读卡器。

(5)其中ATQA数据只有两个字节长度,其内容规定如下。

有上述图片可知,回复的AQTA中,可获取到卡片的UID长度信息。其解析实例如下图示。

 (6)当读卡器唤醒了卡片,并且获取到卡片返回的AQTA数据后,一般要进行选卡流程。在选卡流程初始前,需要对卡片进行防碰撞检测,避免多张卡放一起时,读到的数据有问题。

(7)防碰撞指令是:SEL+NVB(0x93 0x20),发出指令后,卡片便返回了其UID信息(也就是我们所说的物理卡号)。

 

读卡器发送放碰撞指令,如果存在干扰,可能要多级防碰撞才能把卡片选出来,那么就可能会发0x95 0x20甚至0x97 0x20指令,不过一般而言0x93 0x20已经够了。

下图为A卡交互部分示例。

 下图为放碰撞选卡流程图。

 对于防碰撞返回的数据,是卡片的UID和其UID的异或,当我们拿到返回的数据之后,我们一般也需要单独计算一下卡片的UID异或结果,然后做对比,以此判断数据是否正确。

 

(8)选卡操作。所谓的选卡不是,获取卡片的UID(即物理卡号),而是告诉卡片你已经被选中了,接下来可能有一系列的操作。其中选卡的指令如下图示。

 代码示例如下:

 读卡器进行选卡操作后,卡片会返回一个SAk对读卡器进行响应。如果是CPU卡,这个SAK就是0x20。

 

 

(9)如果卡片支持ATS,读卡器发送了RATS给卡片,卡片回复ATS给读卡器后,读卡器便可以进行透传。其中RATS的指令格式如下图示。

 

 而读卡器发了RATS后,卡片会返回数据ATS。

 

 ATS返回结果如下图示例,长度是不定的。

 

(10)APDU传输。APDU传输格式如下图示。

 

 下面这张图是卡片接收到APDU指令后,要回复读卡器的示例。其中可以看到,回复中PCB应该要和读卡器发过来的一样,如果有CID,那么CID也要按格式回复回去。

 通过上述分析,已理清了相关交互协议。

以上是关于68 iso14443读卡入门记录的主要内容,如果未能解决你的问题,请参考以下文章

68 iso14443读卡入门记录

web调用IC卡读卡器开发第三章 读取IC卡卡号

ISO14443 & ISO15693 & ISO18092

web调用IC卡读卡器开发第九章--ISO15693标签操作

智能卡通信标准

ISO 14443 A 型卡使用 Android 读/写