微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种基于RFID的控制阀系统设计

一种基于RFID的控制阀系统设计

时间:05-20 来源:互联网 点击:

8个block,编号分别为block0-block7。第二页包含2个block,为只读block,包含可回溯数据,由AIMEL公司规划。

ATA5567的数据率和调制方式是由block0决定。

对于本系统而言,做了很多的尝试,找到了一种和MCU搭配比较合理的ATA5567配置方式。

1)主控键值,需执行读写操作,所以主控键值选为8。

2)比特率,综合MCU的性能和读ATA5567所用时间,取一个折中,选择的是RF/32,这样一个码元的周期

3)调制方式,一般选择曼切斯特的调制方式。

4)AOR是按请求应答,主要的作用是防碰撞机制。当有多张ATA5567卡靠近应答器时,可以实现每张卡的逐次读取。

5)最大块,为了保证信息的完整性和保护密码不被窃取,最大块取6。

6)PWD,为了防止ATA5567被恶意改写,密码是一定需要的,即该位为1。

7)ST是为了方便以同步头的方式实现数据的读取。

2.2 ATA5567数据的存储和编码格式

对于ATA5567能操作的其实只有block0-block7,这几块的格式是一样的,只不过block0作为控制块,block7作为密码块,所以实际上真正能存储用户数据的只有block1-block6,共有6个块。

ATA5567的编码方式设定为曼切斯特编码。曼切斯特编码是基带传输中广泛应用的一种数据传输编码方式,这种编码通常用于局域网传输,是一种自同步法编码方式。在数据信号的波形中既有同步时钟信号又有数据信号。在调制电路输出的波形中,数据“1”对应着曼切斯特编码(下面简称“曼码”)电平的上跳沿,数据“0”对应着曼码电平的下跳沿。在所接收的一系列曼码数据,注意空跳变,假定两个相邻bit的间隔时间是1P。若两个相邻bit代表的数据极性相同(同为0或者同为1),那么在这两个bit传送之间,会出现一个预备性的非数据跳变。

根据上跳,下跳和空跳来分辨数据是“0”或者“1”,通过下图的图解可以发现,如果通过定时器捕获,最少会得到两种时间间隔,一种为一个整传送周期(256/μs),另一种为半个传送周期(128μs)

2.3 ATA5567写卡规则

在ATA5567卡片内部有一个写解码器,该解码器采用脉冲间隔编译码技术。在写卡期间,写解码器会检查写数据流是否有效,并检测场中断间隔。

写卡的首要工作是确定写卡的时间间隔,结合上表中官方给出的数据和现场实践,选择时间如表1所示。

确定写卡时间间隔之后,还要确定写卡的命令。在使用一张从市场上买的新卡前,首先要做的就是在Block7当中写入32位秘钥数据,然后初始化Block0为0x800880d8,写卡的命令及格式如下。

1)标准写命令格式如表2所示。

此时的写卡为“Standard Write”模式,由于能操作的只有第0页,所以p取0;

2)保护写命令格式如表3所示。

初始化block0之后,写卡操作变为“Protected Write”模式,具体操作与“Standard Write”模式类似,唯一的不同点便是在写入数据之前必须先写入block7中存储的秘钥,如果秘钥不对,则卡进入其他状态,这里不再赘述。

2.4 ATA5567读卡规则和算法实现

对于ATA5567,读卡命令如表4所示。

由于PWD位已经置为1,所以选择第一种格式,写命令与之前讲述的写数据类似,此处不再讲述。

发完写命令后,Nano110单片机会捕获到数据,这些时间间隔数据是获取二进制数据来源。根据ATA5567数据的存储和编码格式,读卡算法如下:

算法的核心是ReadNumber()函数的实现,由于在发送完命令之后,ATA5567会根据发送命令中的地址信息,循环发送所选地址存储是数据。由于每个block中存储了32 bit的数据,实际上转换为曼码对应的波形最多有64个跳变,所以采集到的128个数据中一定至少有一个所需数据的完整遍历。这时同步码也包括在128个数据之中,通过同步码来确定block中数据的起始位。同步码的波形如图8所示。

同步码在所捕获的数据中体现为:256或128,128,384,128(单位均为μs)。用图4中的表示方式,上面的数据对应的时长分别为1P或0.5P,0.5P,1.5P,0.5P。因为在实际中的波形经过调制后不可能为完美的方波,波形的好坏与标签和天线的距离有很大关系,此外还跟所选器件的精度、MCU的定时器捕获精度有关,所以允许捕获的数据有误差。定时器捕获数据完成后,要进行解码,这里定义了两个数组array[128],bit_array[32],前者用来存放捕获的数据,后者存放解码后的数据,找到同步码形后1.5P的时长对应array[bitnum],bitnu m1的初始值为0。

程序执行完毕后,bit_array[]数组中就存储了某个block对应的32bit的数据,这些数据是二进制数据,可以根据需要将

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top