13.56M高频RFID射频通信实验
1.1 实验目的
1.学习了解ISO/IEC1443(13.56M)协议。
2.掌握连接/断开上位机软件与13.56MRFID硬件系统的操作。
3.通过PC端上位机软件实现对13.56M标签的寻卡操作。
1.2 实验环境
1.硬件:电脑(推荐:主频2GHz+,内存:1GB+),物联网RFID套件;
2.软件:Windows 7/Windows XP。
1.3 实验原理
1.3.1 13.56M高频RFID射频工作原理
非接触式IC卡的标准ISO/IEC14443标准分为4个部分:
第一部分物理特性;第二部分射频功能和信号接口;第三部分初始化和防冲突;第四部分传输协议。
标准的全称为ISO/IEC14443-识别卡-无接触点集成电路卡-接近式卡,标准分为两类TYPE A和TYPE B。主要在非接触的通信信号接口类型、防冲突机制和传输协议方面,分别有不同的规范定义。
TYPE A是目前广泛运用的一种标准,即MIFARE标准。TYPE A主要的非接触卡片有各种不同的容量,天津地铁采用MIFARE 8Kbit(1K字节)作为储值卡。
TYPE A与TYPE B最根本的区别在于两者的编码与调制方式不同。
TYPE A和TYPE B主要不同为调制方式,对于TYPE A,读写器(PCD)到卡(PICC)采用100%ASK调制,为改进米勒编码,卡(PICC)到读写器(PCD)使用负载调制方式,使用曼彻斯特编码。
对于TYPE B,读写器(PCD)到卡(PICC)采用ASK10%调制,使用NRZ编码,即反向不归零制,卡(PICC)到读写器(PCD)使用负载调制方式,使用BPSK编码。
对于TYPE B类型的卡片来说,采用ASK10%调制,虽然读写器始终都在向卡片供应能量,但是不同信号序列的高低电平之差却相对TYPEA小的多,大大降低了数字信号的噪声容量,抗干扰能力较差,但是可以实现高速的通讯速率。防冲突由软件方式实现,解决方案更加灵活,采用时间槽的方式来解决多张卡的防冲突机制。
1.3.2 13.56M高频RFID操作接口
1.数据帧格式
UART数据帧格式:1个起始位、8个数据位、无奇偶校验位、1个停止位。波特率:19200bps
主机每发送一个命令,模块都有应答。正常通信时,一帧数据中,发送两个字节数据的时间间隔不能大于6ms,若大于6ms,则作为超时处理。
1)MCU→RPD522
命令 |
帧长度 |
数据 |
校验字节 |
Cmd |
Len |
Data |
BCC |
命 令:一个字节;
帧长度:一个字节,一个帧的总长度;
数据:数据可以为空;
校验字节:从命令字节到数据的逐字节异或
BCC=Cmd ^ Len ^ Data0 ^…^ DataN。
2)RPD522→MCU
命令 |
帧长度 |
状态 |
数据 |
校验字节 |
Cmd |
Len |
Status |
Data |
BCC |
命 令:一个字节;
帧长度:一个字节,一个帧的总长度;
状 态:一个字节,0 操作成功,非 0 操作失败;
数 据:数据可以为空;
校验字节:从命令字节到数据的逐字节异或
BCC=Cmd ^ Len ^ Status ^ Data0 ^…^ DataN。
2.操作命令
13.56M高频RFID操作命令如下表所示:
命令 |
说明 |
Cmd = 0x11 |
GetInfo 读取模块信息 |
Cmd = 0x21 |
Antenna 开关 RF 天线 |
Cmd = 0x31 |
Request 请求 |
Cmd = 0x32 |
AnticollSelect 防冲撞与选择 |
Cmd = 0x34 |
Halt 休眠 |
Cmd = 0x35 |
Authentication 验证密钥 |
Cmd = 0x36 ReadBlock |
读块 |
Cmd = 0x37 WriteBlock |
写块 |
Cmd = 0x38 InitValue |
初始化值 |
Cmd = 0x39 |
ReadValue 读值 |
Cmd = 0x3A |
Decrement 扣款 |
Cmd = 0x3A |
Increment 充值 |
1.3.3 13.56M高频软件编程接口
13.56M高频软件PC端编程接口如下表所示:
实验名 |
接口 |
说明 |
寻卡实验接口 |
Private void btn_openAntenna_Click(object sender, EventArgs e) |
单击打开天线按钮产生的事件,实现发送命令执行打开天线操作功能。 |
privatevoid btn_ReqeustAll_14443_Click(object sender, EventArgs e) |
单击请求所有按钮产生的事件, 实现发送命令执行请求所有标 签操作功能 |
public Byte MfRequest(Byte[] requestdata) |
请求所有标签命令发送功能实 现 |
块读写实验、密钥验证实验接口 |
public Byte MfAuthentication(Byte[] requestdata, Byte[] authcommand, ref Byte[] result) |
实现密钥认证功能 |
private void btn_Read_14443_Click(object sender, EventArgs e) |
单击读取按钮产生的事件,实现 发送命令执行读取标签数据功能 |
private void btn_Write_14443_Click(object sender, EventArgs e) |
单击写入按钮产生的事件,实现发送命令执行向标签写入数据 功能 |
卡钱包实验接口 |
private void btn_Init_Money_14443_Click(object sender, EventArgs e) |
单击初始化金额按钮事件,实现 发送初始化金额命令实现初始化金额功能 |
private Int32 readRemainMoney() |
实现发送读取金额命令实现读 取余额功能 |
private void btn_Read_Money_14443_Click(object sender, EventArgs e) |
单击读取余额按钮事件,实现发 送读取余额命令实现读取余额功能 |
private void btn_Add_Money_14443_Click(object sender, EventArgs e) |
单击充值按钮事件,实现发送添加金额命令实现添加金额功能 |
private void btn_Del_Money_14443_Click(object sender, EventArgs e) |
单击扣款按钮事件,实现发送扣 除金额命令实现扣除金额功能 |
1.4 实验步骤
1.4.1 RFID系统的寻卡实验
1.注意事项
切记:插、拔各模块前最好先关闭电源,模块插好后再通电。
RFID 读写器串口波特率为19200bps
2.环境部署
准备13.56M高频RFID模块,参考1.4.2章节设置跳线为模式2,将模块的电源拨码开关设置为OFF,参考1.4.3章节通过交叉串口线将模块与电脑的串口相连,给模块接5V电源;
将模块的电源拨码开关设置为 ON,此时模块的电源指示灯亮,表明模块电源上电正常;
运行RFID实训系统.exe 软件,选项卡选择13.56M模块,如下图所示;

图3-1 RFID 13.56M模块页面
3.打开串口操作
设置串口号为COMx,设置波特率为19200,点击“打开”按钮执行串口连接操作,如下图所示:

图3-2 打卡串口操作
4.初始化操作
读取模块信息。串口设置成功后,点击“读取模块信息”按钮,命令发送成功后,信息栏显示模块信息“版本号:2010-18-17”,如下图所示。

图3-3 读取模块信息
打开天线。串口设置成功以后,点击“打开天线”按钮,命令发送成功后,信息栏显示“打开天线成功”,打开天线成功之后,“请求所有”按钮变为可执行状态,“请求所有”表示发出 Request请求,检测读写器天线场区内有无标签,如下图所示。

图3-4 打开天线
打开天线成功后,将13.56M标签放入天线场区正上方,点击“请求所有”按钮时,提示“ 请求所有的卡成功”,并且“寻卡”按钮变为可执行状态。如下图所示:

图3-5 请求所有标签
点击“寻卡”按钮,执行防冲撞检测,寻卡成功时ID文本框内显示13.56M标签ID:43 05 E9 01,与此同时信息栏提示:防冲撞选择卡片成功,卡号为:43 05 E9 01。
特别提醒:因为后续要执行读卡、写卡操作,故在寻卡时需通过防冲撞检测唯一确定检测到的一个标签,后续的验证密钥、读卡、写卡试验均是对检测到的该标签进行操作,故需保证寻卡成功后,保持该标签在读写器天线场区内。

图3-6 寻卡成功
1.4.2 RFID系统的块读写实验
1.连接硬件设备、打开串口、请求所有、寻卡
依次执行3.4.1章节的1-5步完成RFID系统的寻卡操作,并保证13.56M标签在天线场区正上方;
2.验证密钥操作
1)寻卡成功后,验证密钥按钮变为可执行状态,表示可执行验证密钥操作,如下图所示;读写卡密钥是12个F,即 FF FF FF FF FF FF。设置扇分区为0、块编号为1,点击“验证密钥A”执行密钥验证,用密钥A验证标签第1块成功,如图所示:

图3-7 密钥A验证标签第1块成功
3.读卡操作
读卡:验证密钥成功后,方可执行对标签的读写操作;在执行验证密钥操作时,针对标签扇分区0块编号1执行了密钥A验证,接下来的读卡、写卡均是针对该标签扇分区0块编号1,点击“读取按钮”,在数据文本框中显示16进制数据:00000000000000000000BBBBBBBBBBBB,如下图所示。

图3-8 读取数据成功
写入:点击“写入”按钮,将数据文本框内的16进制数据写入标签,读写器提示灯闪烁的同时(表示Android 应用在向读写器发送命令),信息栏提示写卡成功。

图3-9 写入数据成功
写卡验证:为了验证写卡是否成功,点击“读取”按钮,读卡成功后,读取的信息与写入的信息一致,读卡、写卡操作均正常完成。

图3-10 写卡验证成功
1.4.3 RFID系统的验证密钥修改实验
1.连接硬件设备、打开串口、请求所有、寻卡
依次执行3.4.1章节的1-5步完成RFID系统的寻卡操作,并保证13.56M标签在天线场区正上方;

图3-11 寻卡成功
2、密钥认证第3块存储区(密钥区)
选择任意一个扇区的第3块存储区,弹出“所有扇区的第3块用于存放本扇区验证密钥,请谨慎写卡”对话框,如下图所示。

图3-12 选择任意扇区的第3块存储区
认证密钥A:点击“认证密钥A”按钮,对扇区0块编号3存储区进行密钥认证,执行成功后,信息栏显示“用密钥A 验证卡号的第3块成功”,如下图所示:

图3-13 密钥A验证扇区0块编号3存储区成功
读取密钥:点击“读取”按钮,执行读取操作,读取成功后,数据文本框内显示读取数据,其中0-5个字节存储的是认证密钥A,不可见,默认为 FFFFFFFFFFFF,10-15个字节存储的是认证密钥 B,可见可修改,默认为 FFFFFFFFFFFF,如图所示。

图3-14 读取认证密钥B
输入新认证密钥B:保证写入数据文本内的数据头FFFFFFFFFFFF078069不变,在其后输入6个字节的新认证密钥B:AAAAAAAAAAAA,与此同时,认证密钥B输入框更新为:AAAAAAAAAAAA,如下图所示。

图3-15 输入新的认证密钥B
修改认证密钥B:输入符合规范的新认证密钥B之后,点击“写入”按钮执行验证密钥B修改操作,如下图所示,验证密钥B修改成功,请重新验证密钥A。

图 3-16 认证密钥 B 修改成功
重新执行密钥A验证:认证密钥B修改成功后,读取按钮变为不可执行状态,需重新点击“认证密钥A”进行密钥认证。如下图所示,重新认证密钥A成功。

图3-17 重新验证密钥A
重新读取密钥区:重新点击“读取”按钮,验证密钥B是否被修改,如下图所示,数据文本框显示的数据中第10-15个字节为 AAAAAAAAAAAA,该密钥为新的认证密钥B,表明认证密钥B 修改成功。

图3-18 重新读取密钥区,验证密钥B是否被修改
1.3.4 RFID系统的卡钱包实验
1.执行连接硬件设备、打开串口操作、初始化操作、寻卡操作
依次执行3.4.1章节的1-5步完成RFID系统的寻卡操作,并保证13.56M标签在天线场区正上方;

图3-19 寻卡成功
2.验证密钥操作
寻卡成功后,验证密钥按钮变为可执行状态,表示可执行验证密钥操作,13.56M标签预留了第02扇区01块(即第9块)为卡钱包存储,选择扇分区为2、块分区为1,点击“验证密钥A”执行密钥验证,验证成功后卡钱包操作变成可执行状态,如图所示:

图3-20 密钥A验证标签02扇区01块成功界面
3.钱包操作
初始化金额:初始化金额是对第02扇区01块(即第9块)存储区域进行金额初始化操作,输入初始化金额:100,点击“初始化”按钮,读写器提示灯闪烁的同时(发送初始化命令),信息栏提示:初始化金额:100元。

图3-21 初始化金额成功
读取余额:初始化金额完成之后,点击“读取余额”按钮执行读取余额操作,读写器提示灯闪烁的同时(发送读取余额命令),信息栏显示:成功读取余额,余额是100元。表示初始化金额操作、读取余额操作均成功执行。

图3-22 读取余额成功
充值:充值功能实现在余额的基础上增加金额,但是增加的金额有限制,最大只增加9位数金额。输入充值金额100,点击“充值”按钮,读写器提示灯闪烁(发送充值命令)的同时,信息栏提示:成功充值金额为:100元。

图3-23 充值成功
充值验证:充值完成之后,点击“读取余额”按钮读取余额成功,余额文本框显示为200,表示充值、读取余额操作均正常完成。

图3-24 充值验证成功
扣款:扣除功能实现在余额的基础上扣除金额,扣除金额需小于余额,当扣除金额大于余额时,会提示余额不足。输入扣除金额90,点击“扣除”按钮,读写器提示灯闪烁的同时,信息栏提示:成功扣除金额为90元。

图3-25 扣款成功
扣款验证:扣除完成之后,点击“读取余额”按钮读取余额,余额文本框显示为110,表示扣款、读取操作均正常完成。

图3-26 扣款验证成功