RFID14443卡卡号的读取实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14443 命令(操作类型为 0x02)
命令字节定义:
Byte0
Byte1- Byte1+n
数据长度
数据
Byte0:帧头 Byte1:Byte1 到 Byte2+n+1 的总字节数 Byte2 - Byte2+n:数据字节 Byte2+n+1:Byte1 到 Byte2+n 的异或校验字节 Byte2+n+2:帧尾
信息正确。
2、CRC-16 校验码计算方法:
常用查表法和计算法。计算方法一般都是:
(1)、预置 1 个 16 位的寄存器为十六进制 FFFF(即全为 1),称此寄存器为 CRC 寄存器;
(2)、把第一个 8 位二进制数据(既通讯信息帧的第一个字节)与 16 位的 CRC 寄存器的低
8 位相异或,把结果放于 CRC 寄存器,高八位数据不变;
7. 下载密码(密码默认为 6 个 0xFF) -->:0x09 0x06 0x60 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF(下载密码 A) Byte1:0x06(命令字) Byte2:0x60 (密码 A 为 0x60,密码 B 为 0x61) Byte3:0x00(扇区 0) Byte4 – Byte9:0xFF 0xFF 0xFF 0xFF 0xFF 0xFF(密码)
<--:0x01 0x01(失败) Byte1:0x01(读身份证失败) 【实验步骤】 1、 打开 Visual Studio,参照下图设计界面:
2、 设置 Form 相关处理事件:
public const int DO_Switch = 0; public const int DO_HF14443 = 2; public const byte HigherHead = 0x43; public const byte LowerHead = 0xBC; //串口数据缓冲长度 public const int MAXLEN = 1024; //串口缓冲区 public byte[] byteRecBuff = new byte[MAXLEN]; //串口缓冲区现有数据长度 public int iRecDataLen = 0; //串口数据读写锁标志 public bool bLock = false; public bool PrintLock = false;
<--:0x01 0x00(成功) Byte1:0x00(下载密码成功)
8. 校验密码(进行寻卡、防冲突、选择、下载密码后操作) -->:0x04 0x05 0x60 0x01 0x04(校验密码 A) Byte1:0x05(命令字) Byte2:0x60 (密码 A 为 0x60,密码 B 为 0x61) Byte3:0x01(扇区 1) Byte4:0x04(RegFIFOLength = (Byte3)*4) <--:0x01 0x00(成功) Byte1:0x00(校验密码成功) <--:0x01 0x04(失败) Byte1:0x04(校验密码失败)
5. 选择 -->:0x01 0x04 Byte1:0x04(命令字) <--:0x03 0x00 0x08 0xB4 (成功) Byte1:0x00(选择成功) <--:0x01 0x01(失败) Byte1:0x01(选择失败)
6. 终止 -->:0x01 0x01 Byte1:0x01(命令字) <--:0x01 0x00(成功) Byte1:0x00(终止成功) <--:0x01 0x01(失败) Byte1:0x01(终止失败)
最后。
例如:信息字段代码为: 1011001,校验字段为:1010。
发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10
信息字段
校验字段
接收方:使用相同的计算方法计算出信息字段的校验码,对比接收到的实际校验码,如果相
等及信息正确,不相等则信息错误;或者将接受到的所有信息除多项式,如果能够除尽,则
【基础知识】
1. RFID 13.56M-ISO14443 应用协议
RFID 协议 v1.0
数据帧定义:
Byte0 Byte1 Byte2 Byte3
Byte4 - Byte4+n
Byte4+n+1 - Byte4+n+2
0x43 0xBC 帧长度 操作类型
命令字节
CRC-16 校验
Byte0:帧头 1,‘C’的 ASCII 码 Byte1:帧头 2,Byte0 的反码 Byte2:Byte0 到 Byte4+n+2 的总字节数 Byte3:表示命令操作针对的模块
(6)、重复步骤 2 到步骤 5,进行通讯信息帧下一个字节的处理;
(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的 16 位 CRC 寄存器的高、低
字节进行交换;
(8)、最后得到的 CRC 寄存器内容即为:CRC 码。
以上计算步骤中的多项式 A001 是 8005 按位颠倒后的结果。
3、 模块配置命令(操作类型为 0x00) 命令字节定义如下: -->:0x02(切换当前使用模块为 13.56M-ISO14443) <--:0x00(切换成功)
验,说明它的使用方法。
根据 Modbus 协议,常规 485 通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nbyte 2byte
CRC 校验是前面几段数据内容的校验值,为一个 16 位数据,发送时,低 8 位在前,高 8 为
(3)、把 CRC 寄存器的内容右移一位(朝低位)用 0 填补最高位,并检查右移后的移出位;
(4)、如果移出位为 0:重复第 3 步(再次右移一位);如果移出位为 1,CRC 寄存器与多
项式 A001(1010 0000 0000 0001)进行异或;
(5)、重复步骤 3 和 4,直到右移 8 次,这样整个 8 位数据全部进行了处理;
2. 切换 TypeA/TypeB(切换类型前必须关闭天线,待切换完成后再开启天线) -->:0x02 0x12 0x41 Byte1:0x12(命令字) Byte2:0x41(TypeA 为 0x41,TypeB 为 0x42) <--:0x01 0x00(成功)
3. 寻卡 -->:0x02 0x02 0x26 Byte1:0x02(命令字) Byte2:0x26(RegMfOutSelect) <--:0x03 0x00 0x04 0x00(成功) Byte1:0x00(寻卡成功) Byte2:0x04 (Mifare One 卡) <--:0x01 0x01(失败) Byte1:0x01(寻卡失败)
10. 写入数据(校验密码后操作) -->:0x12 0x09 0x02 0x12 0x34 0x56 0x78 0x90 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00(写入块 2 数据) Byte1:0x09(命令字) Byte2:0x02(块 2) Byte3 – Byte19:0x12 0x34 0x56 0x78 0x90 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00(待写入的数据) <--:0x01 0x00(成功) Byte1:0x00(写入数据成功) <--:0x01 0x06(失败) Byte1:0x06(写入数据失败)
private void Form1_Load(object sender, EventArgs e) { //读注册表自动获取系统可用串口 RegistryKey keyCom =
Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); if (keyCom != null) { string[] sSubKeys = keyCom.GetValueNames(); foreach (string sName in sSubKeys) { string sValue = (string)keyCom.GetValue(sName); cmbEditCom.Items.Add(sValue); } cmbEditCom.SelectedIndex = 0; } //设置波特率可选项 string[] baudrate = { "9600", "115200" }; cmbBaudRate.Items.AddRange(baudrate); cmbBaudRate.SelectedIndex = 0;
0x00:表示模块配置操作,配置当前使用的模块类型 0x01:表示 125K 操作 0x02:表示 13.56M-ISO14443 操作 0x03:表示 13.56M-ISO15693 操作 0x04:表示 900M 操作 0x05:表示 Zigbee1 操作 0x06:表示 Zigbee2 操作 0x0A:表示 GPRS 操作 0x0B:表示有源标签操作 0x0C:表示蓝牙操作 0x0D:表示 wifi 操作 0xFF:表示全部关闭操作 Byte4 - Byte4+n:命令字节(后面会对不同模块类型详细说明) Byte4+n+1 - Byte4+n+2:Byte0 到 Byte4+n 的两位 CRC-16 数据校验,高字节在前,低字节 在后,CRC-16 多项式:0x8408,初始值:0xFFFF
4. 防冲突 -->:0x01 0x03 Byte1:0x03(命令字) <--:0x05 0x00 0xCD 0xB4 0xC6 0x91(成功) Byte1:0x00(防冲突成功) Byte2 – Byte5:0xCD 0xB4 0xC6 0x91 (卡号) <--:0x01 0x01(失败) Byte1:0x01(防冲突失败)
命令字节详细定义
1. 开启/关闭天线
-->:0x02 0x13 0x00(关闭天线) Byte1:0x13(命令字) Byte2:0x00(关闭) <--:0x01 0x00(成功)
-->:0x02 0x13 0x01(开启天线) Byte1:0x13(命令字) Byte2:0x01(开启) <--:0x01 0x00(成功)
9. 读取数据(校验密码后操作) -->:0x02 0x08 0x02(读取块 2 数据) Byte1:0x08(命令字) Byte2:0x02(块 2) <--:0x11 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00(成功) Byte1:0x00(读取数据成功) Byte2 – Byte18: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00(读取的数据) <--:0x01 0x05(失败) Byte1:0x05(读取数据失败)
11. 读取身份证(切换为 TpyeB 后操作) -->:0x02 0x14 0x00(读取身份证卡号) Byte1:0x14(命令字) <--:0x0D 0x00 0x40 0xB6 0xCB 0x10 0x56 0x52 0x6E 0x73 0x90 0x00 0x80 0x90(成功) Byte1:0x00(读身份证成功) Byte2 – Byte13:0x40 0xB6 0xCB 0x10 0x56 0x52 0x6E 0x73 0x90 0x00 0x80 0x90(卡号)
【实验目的】
实验八 安卓系统 RFID 1444 卡卡号的读取
1. 熟悉 RFID 应用协议;
2. 利用协议,可以在 windows 平台上编写读取 13.56M-ISO14443 标签的程序。
【实验内容】
1. 熟悉 RfidTest 工程,了解程序的架构,以及程序中数据的处理
2. 利用 RFID 应用协议,实现 13.56M-ISO14443 卡的卡号的读取
相关文档
最新文档