相关知识铺垫:

注意:

①阅读本文之前需要一定的射频知识基础

②类型A表示A型卡(即A型PICC),其实类型A、类型B之类的可以忽略,本文主要就是以A型卡为例讲述PCD防止PICC冲突的过程。

PCD——接近式耦合设备(读卡器)(Proximity Coupling Device)
PICC——接近式卡(Proximity Card)(卡)
UID——PICC的唯一标识符(Unique Identifier, Type A)
CLn——UID串联级n,3 ≥ n ≥ 1(Cascade Level n, Type A)
CT——UID的串联标记,‘0x88H’(Cascade Tag, Type A)
BCC——UID CLn校验字节, 前面4个字节的“异或”值(UID CLn check byte, calculated as exclusive-or over the 4 previous bytes, Type A)
REQA——请求命令,类型A(Request Command, Type A)
ATQA——请求应答,类型A(Answer To Request, Type A)
SEL——选择命令(SELect code, Type A)(1个字节大小,0x93串联1级防冲突,0x95串联2级防冲突,0x97串联3级防冲突)
NVB——有效位的数目(Number of Valid Bits, Type A)(1个字节大小,例:0x20,仅发送NVB和SEL这2字节,无UID相关字节;0x34,除发送NVB和SEL字节外,还有1个UID字节 + 4个UID比特位 +  1个被假设的UID冲突比特位也会被发送)

每个PICC都有自己唯一的UID序列号,但UID序列号根据UID长度可分为三类,第一类为4个字节(4个字节UID,1个字节BCC校验),第二类为7个字节(1个字节CT,3个字节UID,1个字节BCC校验,4个字节UID,1个字节BCC校验),第三类为10个字节(1CT,3UID,1BCC,1CT,3UID,1BCC,4UID,1BCC)。从上面可以看出,除第一类外,第二类和第三类大于四个字节的部分都是通过CT标志串联起来的,第二类较第一类多串联了一级,共两级,第三类多串联了两级,共三级,而它们串联的部分,UID夹在CT标志和BCC校验中间。因此,用第三类UID做例子,以CT和BCC作为一级的首末位(注意,最后一级都没有CT标志),可以将第一级称为UID CL1,第二级称为UID CL2,第三级称为UID CL3。

正式流程:

PCD先发送REQA命令(REQA命令主要用于探测PICC是否在PCD的工作射频场内),或WAKE-UP命令(接收WAKE-UP命令的PICC早已经过一遍流程了,所以一定在工作射频场内),让那些PICC进入到类准备状态(或称准备状态)。PICC在接收到了REQA后,需回复ATQA,告知PCD自己的卡类型以及防冲突比特帧。接着PCD根据收到的ATQA里的防冲突比特帧来判断是否有冲突。
        如果有冲突,则PCD发送Anticollision和Select命令,该命令分为三部分,第一部分是SEL字节(该字节确定进行防冲突的串联级别,即防冲突的级别),第二部分是NVB字节(该字节高四位是PCD准备发送的字节数,低四位是PCD在准备发送的字节外,再加上准备发送的多少个比特位),第三部分是需要PICC发送的和UID有关的数据(该部分共5个字节,包含CT和BCC字节,也就意味着一次最多发送4个字节的UID,最少发送3个字节的UID)。
以串联1级防冲突为例子(一般是从串联级别一,也就是最上面的CL1开始防冲突)——SEL=0x93,PCD将这些设定好后,然后发送两个字节(SEL字节和NVB字节,0个UID相关的字节),后面加上0个比特位给PICC——NVB=0x20。因为PCD没有确定该命令第二部分中UID相关的字节数据为多少,所以PICC在收到命令后,需发送完整UID CL1的序列号给PCD。如果PCD只接收到一个PICC的UID CL1,则会忽略串联1级的防冲突流程,直接进入后续环节。反之,如果PCD接收到多个PICC发送的UID CL1,就会按预定的防冲突流程走,先检查接收的UID CL1在第几个比特位产生了冲突(意思就是在接收UID的过程中被干扰了,有的发的为0,有的发的为1,无法确认具体的数字是多少,这个时候要先选出一张卡进行后续工作,工作完成后,再选其他卡),然后将之前接收到的无冲突的字节和比特位,加上被假设的冲突比特位(不确定就干脆假设冲突位为1(也可假设为0)),回发给那些PICC(数据通过Anticollision和Select命令回发),让符合这部分UID的PICC继续发剩下来的所有数据,其他的则不用回应,此时就筛选了一部分PICC,若接下来还有冲突,则重复以上流程。如果在接下来的UID传输过程中,没有冲突发生,则PCD会重新设定NVB字节,设定为准备发送7个字节(1SEL,1NVB,5UID相关数据),加上0比特位——NVB=0x70。以及将接收到的所有5个字节的UID相关数据(即UID中完整的CL1),回发给已筛选出的唯一PICC进行校对,PICC接收到后,通过回复SAK命令表明UID是否完整。
        如果PICC的UID仅为4个字节,则其在回复的SAK命令里表示UID完整,代表防冲突执行完毕,开始执行后续的环节。反之,如果PICC的UID为7个字节或10个字节,则其在回复的SAK命令里表示UID不完整,需要进行串联级别为2的防冲突筛选——SEL=0x95,然后继续重复以上流程,直至筛选出唯一一张PICC。

注意事项:
①防冲突级别n就是在第n串联级别上执行防冲突操作。
②简单来说,PCD在执行防冲突时,并没有预置的UID进行核对,而是说从多个PICC所发的UID里,选出一张PICC进行验证等工作,工作完成后再用同样的方法选出其他的。因为PCD只靠UID分辨PICC,所以在接收UID识别PICC的过程中,会受到干扰,无法确定UID中接下来的数据为0还是为1(有些PICC前几位UID一样,后面不一样就会产生冲突),所以就得先依据之前收到的未受干扰的部分UID数据,再加上被假设的冲突位数据(冲突位无法确定,干脆就假设其为1(也可假设为0)),回发给那些PICC,让匹配这些部分UID数据的PICC继续发送,其他不符合的就停止发送了,这时就筛选了一部分PICC,后面如果还有冲突,则重复以上操作。

以下是ISO14443协议描述的PCD防冲突过程:
步骤1:PCD为选择的防冲突类型和串联级别分配了带有编码的SEL。
步骤2:PCD分配了带有值为‘20’的NVB。
注:该值定义了该PCD将不发送UID CLn的任何部分。因此该命令迫使工作场内的所有PICC以其完整的UID CLn表示响应。
步骤3:PCD发送SEL和NVB。
步骤4:工作场内的所有PICC应使用它们的完整的UID CLn响应。
步骤5:假设场内的PICC拥有唯一序列号,那么,如果一个以上的PICC响应,则冲突发生。如果没有冲突发生,则步骤6到步骤10可被跳过。
步骤6:PCD应识别出第一个冲突的位置。
步骤7:PCD分配了带有值的NVB,该值规定了UID CLn有效比特数。这些有效位应是PCD所决定的冲突发生之前被接收到的UID CLn的一部分再加上(0)b或(1)b。典型的实现是增加(1)b。
步骤8:PCD发送SEL和NVB,后随有效位本身。
步骤9:只有PICC的UID CLn中的一部分等于PCD所发送的有效位时,PICC才应发送其UID CLn的其余部分。
步骤10:如果出现进一步的冲突,则重复步骤6~9。最大的环数目是32。
步骤11:如果不出现进一步的冲突,则PCD分配带有值为‘70’的NVB。
 注:该值定义了PCD将发送完整的UID CLn。
步骤12:PCD发送SEL和NVB,后随UID CLn的所有40个位,后面又紧跟CRC_A校验和。
步骤13:它的UID CLn与40个比特匹配,则该PICC以其SAK表示响应。
步骤14:如果UID完整,则PICC应发送带有清空的串联级别位的SAK,并从READY状态转换到ACTIVE状态。
步骤15:PCD应检验SAK的串联比特是否被设置,以决定带有递增串联级别的进一步防冲突环是否应继续进行。
如果PICC的UID是已知的,则PCD可以跳过步骤2~10来选择该PICC,而无需执行防冲突环。

找到一篇很有用的资料,分享给大家阅读,可以让大家对防冲突流程更深入了解。

符合ISO14443协议的Card_风雨兼程8023的博客-CSDN博客_iso14443的卡能复制吗

【射频技术】ISO14443协议A类卡——PCD防止PICC冲突并选出一张PICC的过程相关推荐

  1. ISO14443 Type A类型卡的防碰撞过程以及命令解析

    一.介绍 本博文介绍了PCD(Proximity Coupling Device)使用ISO14443-3 Type A协议检测匹配的PICC(Polling For Proximity Cards) ...

  2. iso14443协议中文版

    中国金融集成电路(IC)卡 非接触式规范 二零零四年五月 前  言 技术的进步给银行卡支付业务带来了令人振奋的机会和更多的业务渠道,如:移动电话.电子商务.非接触IC卡技术等新的支付技术正在蓬勃发展, ...

  3. 符合ISO14443协议的Card

    目录 一.CPU卡 二.M系列卡(MF0.MF1.MF2) 2.1 M系列卡的共性 2.2 M系列卡的三次相互认证 2.3 Mifare UltraLight(MF0) 2.4 Mifare S50与 ...

  4. 智能卡 ISO14443 协议 解读

    MFRC522 芯片手册 参考资料: <MFRC522数据手册.pdf> <MFRC522中文.pdf> <IC卡与RFID标签(第三版)王爱英.pdf> < ...

  5. 网路游侠:网络协议分析类产品简析

    目前网络协议分析类产品火爆的很,游侠(www.youxia.org)其实在几年前就在关注这个市场,目前应该说已经做的如火如荼,但是貌似依然有很多人对这类产品认识有偏差,简单说几句: 网络协议分析类产品 ...

  6. 如何区分网线是几类的_银行卡分为三类,怎么知道自己的的银行卡是几类卡?...

    自从银行卡分为三类卡后,很多人都有个疑问:自己手里的卡,到底是几类卡? 2016年12月开始,根据中国人民银行规定,一个人在同一家银行只能开一个I类账户,如果已经有了I类账户,新开户时,就是II类或I ...

  7. ISO14443 Type B类型卡的防碰撞过程以及命令解析

    一.介绍 本博文介绍了PCD(Proximity Coupling Device)使用ISO14443-3 Type B协议检测匹配的PICC(Polling For Proximity Cards) ...

  8. SDIO协议读写SD卡之SD卡简介

    SD卡的用途 SD卡是一种主要以Nand Flash作为存储介质,具有体积小.数据传输速度快以及支持热插拔的优点.如今,已被广泛应用于数码相机.便携式移动设备以及手机等多种设备中. SD卡分类 (一) ...

  9. SPI协议读写SD卡介绍

    前言 在前面的文章中,我们主要介绍了如何利用SDIO协议对SD卡进行读写操作的流程及注意事项.虽然SDIO协议读写SD卡的效率很高,但是,操作却比较麻烦,另外,还需要使用的芯片具有SDIO外设.这对于 ...

最新文章

  1. Windows DDK介绍,选择和安装
  2. [日常] Go语言圣经-基于select的多路复用习题
  3. isdigit函数python检测数字个数_Python isdecimal isdigit isnumeric区别
  4. Android --- View.inflate()的详细介绍
  5. java .vm h2_java-H2服务器在调试时挂起
  6. drupal_Drupal,物联网和开放式硬件的交集
  7. 等待队列中为什么需要互斥锁?一个线程在等待时被唤醒后会做什么?安全队列的代码实现
  8. 基于Linux和MiniGUI的嵌入式系统软件开发指南(六)
  9. HTML布局是外边距咋表示,布局 页面设置百分比 子元素如何设置外边距?
  10. 做游戏,学编程(C语言) 10 僵尸危机
  11. Redis内存缓存系统入门
  12. 无法启动因为计算机丢失ac1st16,重装系统后cad2006打不开.提示因为计算机中丢失ac1st16.dll...
  13. LINUX虚拟机安装增强功能时报错:/sbin/mount.vboxsf: mounting failed with the error: No such device
  14. 【Keil 5】STM32F401CCU6 固件库配置(超详细教程)
  15. AI智能名片系统源码
  16. Linux elf可执行文件加密
  17. On SDK version 23 and up, your app data will be automatically backed up and restored on app install.
  18. Python nose测试大法
  19. 初识JavaWeb(web开发概述、web开发环境的搭建、创建并发布web项目)
  20. 仿ifeng可翻阅上下滚动新闻

热门文章

  1. R画图实战之——桑基图
  2. 计算机文化教育对学生思维品质的影响,信息技术教育我们教什么?
  3. ssis 导入 mysql 引号_SSIS 遍历目录,把文件内容导入数据库
  4. JavaFx: 从搭建Hello World 开始,构建PC端应用
  5. 【Python从入门到入门】一、基础学习笔记【转载】
  6. 11、bash编程之数组
  7. html+css+js:制作米游社·原神wiki专栏日历点击事件
  8. Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval
  9. android 动态波纹效果,Android 水波纹扩散效果
  10. Docker方式安装巡风