我在学习RFID时,发现网上的资料大多是针对某种应用方向来介绍,很少有说RFID开发到底该怎么做。我在花了大量时间弄明白后,以博客的形式记录下来,以免资料丢失。另外读者如果想学细学透还需要自己去看数据手册
首先一个RFID工程,我们需要将其看成两个硬件,一个是读卡器 ( 以RC522为例 ) ,另外一个就是卡片 ( 以S50为例 )。 基本的过程就是读卡器,去读取卡片中的数据,因为读卡器本身并没有处理数据的能力,所以读卡器需要将数据传输到计算机或者是网络上,那这传输的过程可以通过SPI的方式来进行传输。 读卡器有引脚连接IO口并且可以使用SPI通信,但是卡片没有引脚更别说使用SPI通信了,那么卡片想要将数据发给读卡器,就必须满足某种协议,本文只以ISO14443-A协议为例。
对于14443协议的学习目标:
对ISO14443有基本的了解;14443-A帧格式,数据传输过程以某种形式来传输,几个字节,或者有没有起始位等;唤醒,防冲突,选卡命令的掌握。ISO14443协议只规定框架,没有规定具体的读写细节。
首先我们有个MCU(单片机),然后有一个读卡器,以RC522为例,最后我们还会有一张卡片。RFID工程的主要操作就是RC522去读取卡片,但是RC522是没有自主性,不能编程,所以需要通过MCU来控制,那这个控制就是发命令,这些命令就是通过帧格式来发送,什么命令就用什么帧格式。可见帧格式在整个工程中起到了承接读卡器与卡片的作用。
14443协议中有三种帧格式,分别为短格式,标准格式和防冲突,接下来就是分别对这三种格式进行分析
Short frame ( 短格式 ) 从图中可以看出,短格式是只有7位,然后加了两个辅助位,起始位和校验位,在这里我们可以把它近似的看成是一个字节。 Standard frame ( 标准格式 ) 从图中可以看出,标准格式是n个字节的,起始位和校验位我们没有必要去管,它自己就会加上去。 Standard frame ( 防冲突 ) 从图中看出防冲突也是n个字节,但是这n个字节和标准格式的不太一样,防冲突前两个字节是SEL和NVB(后面会介绍)。我们先来回顾一下之前讲的命令传输过程,命令是需要以帧格式来发送到读卡器,读卡器在执行命令。 简单回顾了传输过程后,接下来就介绍一下命令。
REQA(请求) --------0X26WUPA(唤醒) --------0X52ANTICOLLISION(防冲突)SELECT(选卡)HLTA(关闭)其中REQA和WUPA的区别:REQA是唤醒没有睡眠的,而WUPA是唤醒所有的卡片。
REQA和WUPA的命令传输依靠短格式,因为短格式是一个字节,所以我们想要唤醒一张卡片很简单,直接给一条命令0X26或者0X52,然后发送就完成了。
防冲突命令以防冲突格式传输,选卡命令则是以标准格式传输,但他们的共同点是都包含了SEL和NVB。 当NVB=0X70时,必须在后面追加一个CRC校验,此时这个命令为选卡命令。
接下来就是介绍一下SEL,话不多说直接上图。 看表格右边一列,这是SEL的三个不同的级别,当SEL为93/95/97时,就会被划分为不同的级别。 那这样划分级别的意义何在,我们再来看一个表格。
先举个例子来说,当SEL=0X93时,就会被划分到级别1,那级别1的ID就只有4个字节。因为每个卡片都会有不同的卡号(ID) ,最常见的是4个字节的卡片,但是不同类型的卡片卡号可能会长一些,可能是7个字节,也可能是10个字节,所以才会有这个级别的划分。
NVB其实是一个数目,NVB分为高4位和低4位,高4位记录的是数据总的字节数,低4位代表没有传输完字节的位数。这样说可能太抽象,还是举例说明,现在有一个序列,这个序列传输了4个字节,其中第4个字节只传输了5位,此时NVB=0X35。
综上可得,选卡命令为 0X93 0X70 ID1 ID2 ID3 ID4 CRC,其中ID从防冲突命令中得到。 防冲突命令为 0X93 0X20,首先防冲突命令的SEL=0X93就是划分级别,不用做过多解释,那NVB=0X20又是为什么?因为防冲突命令一开始是没有ID的,且防冲突的过程是由硬件来完成,所以我们在发送防冲突命令时,实际上就只有SEL NVB 两个字节,所以NVB就刚好等于0X20。
文章到这里也就结束了,下次更新也不知道是什么时候,等什么时候整理好文档了,自然就会更新(佛系~~) 另外,如果有大佬发现我哪里写错了,请及时指正。
RFID开发与应用(中) RFID开发与应用(下)