一、介绍

本博文介绍了PCD(Proximity Coupling Device)使用ISO14443-3 Type B协议检测匹配的PICC(Polling For Proximity Cards)命令以及防碰撞过程(Anticollision Proccess)。

二、命令

2.1 REQBWUPB

2.1.1 概要

REQB命令和WUPB命令是PCD用来检测PICC是否在无限射频场(RF)的命令。其中REQB命令用在PCD刚开始检测RF中的PICC时,而WUPB使用在PCD唤醒处于停止态(HALT State)的PICC时。

2.1.2 命令格式

说明:
(1)防碰撞前缀APf的值为0x05,即(0000 0101)b。
(2)Application Family Identifier(AFI)表示PCD检测的PICC类型,如果AFI的值为0,则表示PCD检测所有支持的PICC类型。AFI所支持的类型如下图所示。
注:X和Y的取值范围都为0x1~0xF。
(3)PARAM的编码格式如下图所示。

注:
A、所有的Reserved for Future ISO/IEC Use(RFU)比特位都为0。
B、如果b4比特位为0,表示该命令是REQB命令,PCD可以在空闲态(Idle State)或者准备态(Ready State)使用该命令去检测PICC;如果b4比特位是1,表示是WUPB命令,PCD可以在空闲态(Idle State)、准备态(Ready State)或者停止态(HALT State)使用该命令检测PICC。
C、b1、b2和b3共同组成槽序号(Number of slots)。它的编码以及含义如下图所示。

注:对于每一个PICC而言,用ATQB响应REQB第一个槽序号的概率都为1/N。因此,如果PCD使用的是概率响应的办法,N不作为调节槽序号的值,但是PICC会在特定ATQB槽序号里返回它的UID。即N只是槽序号总数,但是每个PICC在0~N的响应概率都为1/N,N不为ATQB中的b1、b2和b2的编码。

2.2 Slot-MARKER

2.2.1 概要

在PCD发送完REQB/WUPB命令后,它可以在槽序号N发送(N-1)个Slot-MARKER命令。Slot-MARKER命令在如下两种情况会被发送。
A、PCD接收到PICC的ATQB命令后开始下一个槽(时隙)时,即发送下一条命令时。
B、如果知道该槽是空的,并且没有ATQB到来,那么不需要等待ATQB,直到该槽结束的时候。即b1、b2和b3都为0时。
注:该命令不是PICC强制要支持的。如果PICC不支持该命令,那么它将会忽视该命令。此时PICC只能通过概率的方法用ATQB去响应PCD的REQB命令。

2.2.2 命令格式

说明:
A、APn为Slot-MARKER命令的第一个字节,它的二进制表示为(nnnn 0101)b,即它的低四比特为固定位0x5,即(0101)b;高四比特位编码如下所示。

注:slot-MARKER命令不强制要求随着槽序号递增而增加,只要在0~N之间即可。

2.3 ATQB

2.3.1 概要

ATQB命令是PICC对PCD发出的REQB/WUPB和Slot-MARKER命令的响应命令。

2.3.2 命令格式

说明:
(1)第一个字节值为0x50,是ATQB命令的前缀。
(2)第二到第五个字节表示PICC的Pseudo Unique PICC Identifier(PUPI),即Type B类型的卡号。表明Type B类型的卡号只有四个字节。
(3)第六到第九个字节是应用数据(Application Data),它的编码以及含义如下。

注:
A、应用数据的第一个字节是AFI,表明卡片的用途。
B、CRC_B的计算方法参照ISO14443-3文档。
C、应用序号(Number of Applications)占一个字节。高四个比特位与AFI一致,‘0’意味着无应用,‘0xF’意味着15种应用或者更多;低四比特位代表着应用总数,‘0’意味着没有应用,‘0xF’意味着15种应用或者更多。
(4)第十到第十二个字节是协议信息(Protocol Info)。它的编码以及含义如下。

注:
1)第一个字节表示的是数据传输的速率。编码以及含义如下

2)第二个字节的高四比特位表示最大帧值(Max_Frame_Size),低四比特位是PICC所支持协议类型(Protocol_Type)。

A、最大帧值编码以及含义如下图所示。

B、协议类型编码以及含义如下图所示。

3)第三个字节分成FWI、ADC和FO三部分。
A、第一部分是高四比特位的帧等待整数时间Frame Waiting time Integer(FWI),它是用来定义帧等待时间Frame Waiting Time(FWT)的。它表示PICC响应PCD的最大时间,FWI与FWT之间的转换为:FWT = (256 * 16 / fc) * 2^FWI,其中FWI的取值范围是0~14,fc是射频场的频率13.56MHz。
B、第二部分是b4和b3比特位的PICC支持的应用数据编码(Application Data Coding)。它们的编码以及含义如下所示。

C、第三部分是b2和b1比特位的PICC支持的帧选项(Frame Option)。它们的编码以及含义如下图所示。

2.4 ATTRIB

2.4.1 概要

该命令是由PCD发给PICC的命令,一旦该命令发送,意味着PICC已经确定。

2.4.2 命令格式

说明:
(1)第一个字节值为0x1D,它是ATTRIB命令前缀。
(2)第二到第五个字节是Type B的卡号Identifier,值和PUPI一样。。
(3)第六个字节我们称之为参数1,它的编码以及含义如下。

说明:
1)b8和b7比特表示Minimum TR0,含义是PICC响应PCD命令的最小延迟时间。它的编码以及含义如下。

2)b6和b5比特表示Minimum TR1,含义是PICC副载波调制开始到数据传输的最小延迟时间。它的编码以及含义如下。

3)b4比特表示是否需要帧结束标识,0表示需要,1表示不需要。
4)b3比特表示是否需要帧开始标识,0表示需要,1表示不需要。
(4)第七个字节我们称之为参数2。它的编码以及含义如下。
1)b8和b7比特位的编码以及含义如下。

2)b6和b5比特位的编码以及含义如下。

3)b4到b1比特位表示PCD最大接收帧的大小,这四个比特位代表的含义如下。

(5)第八个字节我们称之为参数3。它的高四比特位为RFU,预留未来适用,值为0;低四比特位定义了PICC支持的协议类型。
(6)第九个字节我们称之为参数4。它的高四比特位为RFU,值为0;低四比特位为CID,它的取值范围为0~14。PCD定义了每个激活的PICC必须要有各自独特的CID,如果PICC不支持CID,那么CID的值为(0000)b。
(10)剩余字节是高层信息,它可有可无,视具体情况而定。PICC不强制要求含有该部分信息。但是像身份证类型的卡,必须要有高层信息。

2.5 ATTRIB命令的响应

命令格式

说明:
(1)第一字节分成两部分:高四比特位为Maximum Buffer Length Index(MBLI),它让PCD知道PICC内部缓冲到接收帧的限制。如果MBLI的值为0,意味着PICC没有提供信息给内部的输入缓冲;如果MBLI大于0,则MBL=(PICC最大帧大小)*2^(MBLI-1),PICC会在ATQB中返回PICC最大帧的大小。当PICC发送了MBL时,PCD应该确保帧的长度不会超过MBL。低四比特位为PICC返回给PCD的CID,如果PICC不支持CID,则返回(0000)b。
(2)高层信息响应字节根据卡片本身情况而定,可能有也可能没有。

2.6 HLTB

2.6.1 概要

该命令用于设置PICC处于停止态(HALT State),并且让它不要响应REQB命令。发送该命令成功之后,其它命令都会被忽视,只有WUPB命令能够响应。

2.6.2 命令格式

说明:
(1)第一个字节值为0x50,它是HLTB的命令前缀。
(2)第二到第五个字节是PICC的卡号Identifier,即PUPI。
(3)最后两个字节是CRC_B,计算方法参照ISO14443-3文档。

2.7 HLTB命令响应

命令格式

三、PCD检测PICC过程

流程图

注:
A、R是一个由PICC随机生成的在1~N之间的数。
B、Option 1是不支持Slot-MARKER命令的PICC分支。Option 2是支持Slot-MARKER命令的PICC分支。

四、防碰撞过程

4.1 描述

防碰撞过程是PCD通过一些命令控制执行的,PCD开始使用REQB命令,和一个或者多个发送ATQB的PICC的通信。如果在PCD发送REQB,具有不止一个PICC发送ATQB响应REQB,那么我们称该现象为“碰撞”。PCD在防碰撞过程执行的一系列命令就是为了选出一个特定的PICC。PCD完成防碰撞过程后,被选中的PICC的通信就会被PCD所掌控

4.2 原理

防碰撞的过程的原理是基于时隙的,在防碰撞过程中,PICC会在最短的时间内传输应用数据。在PCD发送的REQB/WUPB命令中槽序号可能会变化,PICC在每一时隙等可能的响应槽序号,所有的的PICC都可以在防碰撞的过程中进行应答(发送ATQB)。PCD在防碰撞过程设置的命令取决于PCD的使用策略,它既可以使用概率法(重复单槽序号,使PICC的随机数等于1时响应),也可以使用伪确定法(多槽序号,在碰撞过程中所有PICC可以响应,在某个特定槽序号确定PICC)。

4.3 规则

当PICC接收到REQB/WUPB命令后,处于READY-REQUESTED sub-state时,PICC的响应应该遵循下面规则(N是REQB/WUPB命令中的参数):
—-如果N=1,PICC应该发送ATQB并且进入READY-DECLARED sub-state。
—-如果N>1:

PICC可以采用概率法(PCD检测PICC流程图中的Option 1),并且进入空闲态(Idle State);
PICC采用发送Slot-MARKER命令的方法(PCD检测PICC流程图中的Option 2),一直到槽序号等于R,然后PICC发送ATQB并且进入READY-DECLARED sub-state。

五、实例


ISO14443 Type B类型卡的防碰撞过程以及命令解析相关推荐

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

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

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

    相关知识铺垫: 注意: ①阅读本文之前需要一定的射频知识基础 ②类型A表示A型卡(即A型PICC),其实类型A.类型B之类的可以忽略,本文主要就是以A型卡为例讲述PCD防止PICC冲突的过程. PCD ...

  3. ISO15693类型的命令解析以及防碰撞过程

    一.介绍 本博文介绍了符合ISO15693标准的标签类型的检测以及防碰撞过程. 二.协议简介 (2.1)ISO15693介绍了三种模式,它们之间的关系如下所示: (2.2)请求命令格式: SOF Fl ...

  4. Python Type Hint类型注解

    原文地址:https://realpython.com/python-type-checking/ 在本指南中,你将了解Python类型检查.传统上,Python解释器以灵活但隐式的方式处理类型.Py ...

  5. python列表实现原理_Python动态类型实现原理及过程解析

    在python中,我们使用变量时,并没有声明变量的存在和类型.类型是在运行过程中自动决定的. a = 3 python将会执行三步去完成上面这个请求. 1.创建一个对象代表3 2.创建一个变量a,如果 ...

  6. DataScience:风控场景之金融评分卡模型的构建(逻辑回归)开发(转评分卡)、使用过程(线上实现)之详细攻略

    DataScience:风控场景之金融评分卡模型的构建(逻辑回归)&开发(转评分卡).使用过程(线上实现)之详细攻略 目录 风控场景之金融评分卡模型的构建(逻辑回归)&开发(转评分卡) ...

  7. DataScience:风控场景之金融评分卡模型的简介、构建(逻辑回归)开发(转评分卡)、使用过程(线上实现)之详细攻略

    DataScience:风控场景之金融评分卡模型的简介.构建(逻辑回归)&开发(转评分卡).使用过程(线上实现)之详细攻略 目录 逻辑回归之金融评分卡模型的简介.构建.开发.使用过程 1.金融 ...

  8. Thymeleaf模板引擎处理日期输入框回显问题type=“date“类型的坑 和 单选按钮、复选框的回显

    type="date"类型的日期输入框的默认格式为"yyyy/MM/dd",但是如果使用Thymeleaf的日期格式化工具类的时候使用"yyyy/MM ...

  9. 数据库存取BLOB类型音乐文件的过程及常见错误

    数据库存取BLOB类型音乐文件的过程及常见错误 数据库端的准备工作: 新建表,用来存放音乐文件:mymusic 第一列:id 类型:int 第二列:music 类型:blob 将音乐文件存入数据库 / ...

最新文章

  1. 【Java基础】容器
  2. django 的用户验证及登录状态保持
  3. 【BZOJ】【2154】Crash的数字表格
  4. Thymelaf中使用select进行消息的回显
  5. Subversion的权限控制
  6. Vue项目实战09 : vue3.0实现点击切换验证码(组件)及校验
  7. NPOI office操作
  8. JavaWeb基础—JS学习小结
  9. vue的双向绑定原理及实现
  10. Mariadb 二进制半自动安装脚本
  11. 扩散(洛谷-P1661)
  12. 收藏 | 超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200
  13. Bean复制的几种框架性能比较(BeanUtils、PropertyUtils、BeanCopier)
  14. cgi java编程_Java的CGI数据编码改如何编写
  15. 学习笔记10--自动驾驶汽车软件架构
  16. python爬取糗百第一页的笑话
  17. bin和cue怎么合并_bin和cue格式的文件怎么用?
  18. 搜狗推送接口-搜狗推送口子
  19. 刘易斯拐点对中国经济的影响
  20. KVM之父的新作ScyllaDB:用C++开发的Cassandra兼容列数据库,性能提升10倍

热门文章

  1. ArmHub社区_新手上路
  2. 广告位Banner设计(推广产品、游戏)
  3. 研究生浑浑噩噩的一天
  4. el-backtop关于 target is not existed: .page-component__scroll .el-scrollbar__wrap的问题
  5. XenApp6.5产品BUG
  6. 接口测试用例编写和接口测试模板
  7. JWT springboot集成jWT
  8. 虚拟机centos7克隆
  9. Druid配置好之后sql监控界面不显示sql语句的可能原因
  10. Ogre3D基础教程一