68 iso14443读卡入门记录

本文详细解析了基于ISO14443协议的读卡流程,包括读卡器的WUPA和REQA寻卡指令,卡片的ATQA响应,防碰撞选卡过程,以及选卡后的SAK响应和ATS设置。通过RATS指令实现透传,并介绍了APDU传输格式,为理解射频读卡技术提供了清晰的步骤解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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也要按格式回复回去。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值