2024年3月26日发(作者:)

实验七 安卓系统RFID 125K只读卡卡号的读取

【实验目的】

1. 熟悉创维特RFID应用协议;

2. 利用协议,可以在Android平台上编写读取125K只读卡卡号的安卓程序。

【实验内容】

1. 熟悉RfidTest工程,了解程序的架构,以及程序中数据的处理

2. 利用RFID应用协议,实现125K只读卡的卡号的读取

【基础知识】

1. RFID 125K应用协议

RFID协议v1.0

数据帧定义:

Byte0

0x43

Byte1

0xBC

Byte2 Byte3 Byte4 - Byte4+n

命令字节

Byte4+n+1 - Byte4+n+2

CRC-16校验 帧长度 操作类型

Byte0:帧头1,‘C’的ASCII码

Byte1:帧头2,Byte0的反码

Byte2:Byte0到Byte4+n+2的总字节数

Byte3:表示命令操作针对的模块

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

125K命令(操作类型为0x01)

命令字节定义:

Byte0

0x02

Byte1

数据长度

Byte2 - Byte2+n

数据

Byte2+n+1

异或校验

Byte2+n+2

0x03

Byte0:帧头

Byte1:Byte1到Byte2+n+1的总字节数

Byte2 - Byte2+n:数据字节

Byte2+n+1:Byte1到Byte2+n的异或校验字节

Byte2+n+2:帧尾

1. 只读卡读卡操作

-->:0x02 0x03 0x86 0x85 0x03(读卡)

Byte2:0x86(读卡命令字)

<--:0x02 0x0A 0x86 0x00 0x01 0x52 0x00 0x84 0xAB 0xA0 0x50 0x03(成功)

Byte2:0x86(命令字)

Byte3:0x00(读卡成功)

Byte5:0x52(Customer ID)

Byte6 – Byte9:0x00 0x84 0xAB 0xA0(Data)

<--:0x02 0x0A 0x86 0x14 0x01 0x00 0x00 0x00 0x00 0x00 0x99 0x03(失败)

Byte2:0x86(命令字)

Byte3:0x14(读卡失败)

通过协议的理解,读取125K只读卡的命令为:

Byte0 Byte1 Byte2 Byte3 Byte4 Byte5

R-len

0x03

Byte6

CMD

0x86

Byte7

CMD

0x85

Byte8

CMD

0x03

Byte9 Byte10

帧头1 帧头2

P-len

0x43 0xBC 0x0B

TYPE CMD

0x01 0x02

CRC1 CRC2

0xC7 0xBD

卡号读取成功,返回的数据(以数据为例)

Byte6 Byte7 Byte10------------Byte13

0x02 0x0A 0x86 0x00 0x01 0x52 0x00 0x84 0xAB 0xA0 0x50 0x03(成功)

Byte2:0x86(命令字)

Byte3:0x00(读卡成功)

Byte5:0x52(Customer ID)

Byte6 – Byte9:0x00 0x84 0xAB 0xA0(Data)

2. 安卓工程RfidTest解析

(1) activity_负责工程中界面的编程。如图

(2) 负责主窗体中,java代码的编写。目前已经完成的功能有: