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

来源:互联网 发布:淘宝店铺装修在哪里 编辑:程序博客网 时间:2024/06/06 20:20

一、介绍

本博文介绍了符合ISO15693标准的标签类型的检测以及防碰撞过程。

二、协议简介

(2.1)ISO15693介绍了三种模式,它们之间的关系如下所示:
这里写图片描述
(2.2)请求命令格式:

SOF Flags Command Code Parameters Data CRC EOF 帧开始 标识 命令代码 参数 数据 CRC 帧结束

(A)标识(Flags)总共占一个字节大小,它的定义如下图所示:
这里写图片描述
这里写图片描述
这里写图片描述
(B)根据ISO15693的命令代码分成强制的、可选的、自定义以及私有的四种类型。它们的定义如下:
强制命令

强制命令的命令代码(command code)取值范围为0x01~0x1F,所有标签(VICC)必须支持在该命令代码范围内的命令。
可选命令
可选命令的命令代码取值范围为0x20~0x9F。在该命令代码范围的命令,标签可能支持;如果标签支持可选命令,它的命令格式在后续会介绍。;如果标签不支持可选命令,并且寻址标识(Address_flag)或者选择标识(Select_flag)都设置了,它可能会返回错误码或者不响应,保持沉默;如果标签不支持可选命令,并且寻址标识(Address_flag)或者选择标识(Select_flag)未设置,那么标签就不会响应,会保持沉默。
自定义命令
自定义的命令代码取值范围为0xA0~0xDF,标签可以选择去支持它,自定义命令可以实现制造商的特殊功能。所有的自定义命令必须包含IC制作商编码。如果标签不支持自定义命令,那么给它发送自定义命令时,它应该返回错误码或者保持沉默。
私有命令
私有命令的命令代码取值范围是0xE0~0xFF,在该命令代码的范围内的命令可以用于制造商测试,系统信息编码等。私有命令要求必须包含IC制造商代码以及IC版本号。

ISO15693的命令代码如下表:

命令代码 命令类型 命令作用 0x01 强制命令 清查命令(查找所有在RF场中的标签VICC) 0x02 强制命令 保持安静命令(指定某个标签不再响应清查命令) 0x03~0x1F 强制命令 预留给未来使用 0x20 可选命令 读取标签指定单块内容信息 0x21 可选命令 将指定信息写入标签指定单块位置 0x22 可选命令 将标签指定块进行锁定 0x23 可选命令 读取标签指定多块的信息 0x24 可选命令 将信息写入到标签多块位置 0x25 可选命令 选择某一个标签(选中被发送了保持安静命令的标签) 0x26 可选命令 重新准备(重置被发送了保持安静命令的标签) 0x27 可选命令 写入AFI(Application Family Identifier) 0x28 可选命令 锁定AFI 0x29 可选命令 写入DSFID(Data Storage Format Identifier) 0x2A 可选命令 锁定DSFID 0x2B 可选命令 获取标签系统信息 0x2C 可选命令 获取多块的安全状态 0x2D~0x9F 可选命令 预留给未来使用 0xA0~0xDF 自定义命令 由IC制造商决定 0xE0~0xFF 私有命令 由IC制造商决定

(2.3)命令响应格式:

SOF Flags Parameters Data CRC EOF 帧开始 标识 参数 数据 CRC 帧结束

(A)标识(Flags)占一个字节,它的定义如下表所示:
这里写图片描述
(B)如果错误码(Error_flag)的值为1,则错误码定义如下:
这里写图片描述

三、命令

3.1 清查命令(Inventory)【命令码:0x01】

当所有的标签(VICC)接收到了该命令,那么都应该做出相应的响应。

3.1.1 格式

这里写图片描述
注:标识(Flags)参考前面的请求命令中标识,第二个字节为Inventory,在此处对应它的命令代码0x01。AFI的定义如下表:
这里写图片描述
掩码长度(Mask Length)指示了需要的比较的字节数,范围为[0x00,0x40];掩码值(Mask Value)代表需要比较的比特数。如:发送无AFI命令为 26 01 01 00,表示第一个字节Flags的值为0x26;第二个命令代码为0x01,代表inventory命令;掩码长度(Mask Length)值为0x01,表示需要比较在RF场中的标签ID(UID)的第一个字节;掩码值为0x00。

3.1.2 响应

这里写图片描述
如果RF场中有多张标签响应,则就会发生碰撞情况,此时响应中的CRC就会计算错误,由此我们可以判断是否要进行防碰撞过程。

3.2 保持安静命令(Stay quiet)【命令码:0x02】

当标签接收到该命令时,它就会进入安静状态(quiet state),并且不会有响应返回。
当标签在安静状态时

它将不会响应任何带有清查标识(inventory_flag)的请求
它将响应带有寻址标识的请求

如下情况标签将退出安静状态

1)重启
2)接收到选择(select)请求,并且进入选择状态。如果支持的话,将响应;如果不支持,则返回错误码
3)接收到重置到准备(reset to ready)请求,并且进入准备状态(ready state)

3.2.1 命令格式

这里写图片描述

注意:(A)保持安静(Stay Quiet)命令必须执行在寻址模式下,及选择标识(Select_flag)设置成0并且寻址标志(Address_flag)设置成1。
(B)该命令没有响应返回

3.3 读单块命令(Read single block)【命令码:0x20】

当标签(VICC)接收到读单块命令时,它应该响应该命令,并且将指定单块的值返回在响应里。
如果在该请求里设置了可选标识(Option_flag),标签应该返回该块的安全状态,然后是该块的值;如果没有设置可选标识,则仅仅返回块信息。

3.3.1 命令格式

这里写图片描述

3.3.2 命令响应

这里写图片描述

3.4 写单块命令(Write single block)【命令码:0x21】

当标签接收到写单块的命令时,信息应当写入对应的块中,并且在返回值应该显示写入成功与否。
当可选标志没有设置时,从完成信息写入开始,在规定时间,应当会返回响应。
如果可选标志已经设置了,标签应当等待完全调制的帧结束标识(EOF),并且返回响应给VCD。

3.4.1 命令格式

这里写图片描述

3.4.2 命令响应

这里写图片描述

3.5 锁块命令(Lock block)【命令码:0x22】

当标签接收到锁块命令时,标签应当永久的锁定所请求的块。
如果可选标志没有被设置,当完成锁块操作时,标签应当在规定时间返回它的响应。
如果可选标志设置了,标签应当等到帧结束标识(EOF),并返回它的响应。

3.5.1 命令格式

这里写图片描述

3.5.2 命令响应

这里写图片描述

3.6 读多块命令(Read multiple blocks)【命令码:0x23】

当标签接收到读多块的命令时,标签应当将块的信息在返回的响应中表示出来。
如果设置了可选标志,标签应当返回块的安全状态,随后跟着一块接着一块的值
如果可选标志没有被设置,标签只返回块的值。
块的序号从0x00到0xFF。当块的值为0x06时,表示的是第7块。

3.6.1 命令格式

这里写图片描述

3.6.2 命令响应

这里写图片描述

3.7 写多块(Write multiple blocks)【命令码:0x24】

当标签接收到写多块的命令时,标签应当将数据写入到对应的块中,并且将写入是否成功的的状态报告给读卡设备(VCD)
如果可选标志没有被设置,当完成写操作时,在规定时间应当返回它的响应
如果设置了可选标志,标签应当等到VCD发送的帧结束标识再返回响应。
块的序列号范围是0x00到0xFF。

3.7.1 命令格式

这里写图片描述

3.7.2 命令响应

这里写图片描述

3.8 选择命令(Select)【命令码:0x25】

当标签接收到选择命令时,如果UID等于标签的UID,那么该标签就如选择状态(selected state)并发送一个响应;如果UID不等于标签UID时,标签返回准备状态(ready state)并不予响应。
选择命令总是执行在寻址模式(寻址标志为1,选择标识为0)

3.8.1 命令格式

这里写图片描述

3.8.2 命令响应

这里写图片描述

3.9 重置到准备(Reset to ready)【命令码:0x26】

当标签VICC接收到重置到准备命令时,标签应当返回到准备状态(Ready state)

3.9.1 命令格式

这里写图片描述

3.9.2 命令响应

这里写图片描述

3.10 写AFI命令(write AFI)【命令码:0x27】

当接收到写AFI命令时,标签应当将AFI的值写入到标签的内存中。
如果可选标志没有设置,当完成写AFI操作时,标签应当在规定的时间内返回响应。
如果设置了可选标志,标签应当等待帧结束标识才返回它的响应。

3.10.1 命令格式

这里写图片描述

3.10.1 命令响应

这里写图片描述

3.11 锁AFI命令(Lock AFI)【命令码:0x28】

当接收到锁AFI命令时,标签应当永久的锁定AFI值到它的内存。
如果没有设置可选标志,当完成锁AFI操作时,标签应当在规定的时间返回它的响应。
如果设置了可选标志,标签应当等到帧结束标识并且返回它的响应。

3.11.1 命令格式

这里写图片描述

3.11.2 命令响应

这里写图片描述

3.12 写DSFID命令(Write DSFID command)【命令码:0x29】

当标签接收到写DSFID命令时,标签应当将DSFID的值写入到它的内存。
如果没有设置可选标志,当完成写DSFID操作时,标签应当在规定的时间内返回它的响应。
如果设置了可选标志,标签应当等到帧结束标识并随后返回他的响应。

3.12.1 命令格式

这里写图片描述

3.12.2 命令响应

这里写图片描述

3.13 锁DSFID命令(Lock DSFID)【命令码:0x2A】

当标签接收到锁DSFID命令时,标签应当将DSFID的值永久锁定到内存。
如果可选标志没有被设置,当完成锁DSFID操作时,标签应当在规定时间返回它的响应。
如果设置了可选标志,那么标签应当等到帧结束标志后才返回它的响应。

3.13.1 命令格式

这里写图片描述

3.13.2 命令响应

这里写图片描述

这里写图片描述

3.14 获取标签系统信息命令(Get system information)【命令码:0x2B】

该命令用于获取标签系统的信息,包含各种属性。

3.14.1 命令格式

这里写图片描述
Get system info的定义如下表:
这里写图片描述

3.14.2 响应命令

这里写图片描述

3.15 获取多块的安全状态命令(Get multiple block security status)【命令码:0x2C】

当标签接收到获取多块安全状态命令时,标签应当返回块的安全状态。
块的序号从0x00到0xFF。

3.15.1 命令格式

这里写图片描述

3.15.2 命令响应

这里写图片描述

3.16 自定义命令

3.16.1 命令格式

这里写图片描述

3.16.2 命令响应

这里写图片描述

四、防碰撞

ISO15693的防碰撞有两种方式,一种是单时隙,一种是十六时隙。其中单时隙是一种面向比特位的的算法,它和ISO14443A的防碰撞算法类似,而十六时隙算法则是基于时隙,类似于ISO14443B的防碰撞算法。以后有时间介绍。待续……

1 0