编写 Python 代码,实现以下功能: 1、15693 射频标签的寻卡; 2、15693 射频标签应用族信息读取及更改; 3、15693 射频标签的数据块读写(从地址 00 开始,2 块内存数据)。 主要目的是: 1、 了解 Python 开发环境及应用程序; 2、 掌握程序通过串口与 RFID 实验系统平台建立连接并通信的原理和方法; 3、 了解 RFID 实验平台 COM 协议并实现 15693 射频标签的寻卡、应用族信息读取及更 改、数据块读写功能。 本设计所需设备如下。 (1)硬件:PC(Pentium 500 以上,硬盘 80GB 以上,内存大于 1GB,Windows 操作系统), ISO 15693M(高频 13.56MHz)RFID 原理模块(基于 8 位 AT89C54 嵌入式处理器),ISO 15693 卡片,串口线,USB 转串口线。 (2)软件:Python。 本设计主要原理:上位机应用程序采用 Python 语言开发,遵守 Python 编程规范,卡操作 功能根据 RFID 原理模块 COM 协议实现,使用串口线和 USB 转串口线将 PC 与 RFID 原理模 块连接;上位机程序根据 RFID 原理模块 COM 协议实现寻卡功能后,通过串口与 RFID 原理 模块进行通信,最终完成存数据块读写功能及应用族信息读取及更改。
import time
import serial
# 定义RF15693寻卡数据字节数组
find15693 = bytearray(12)
find15693[:] = 0xEE, 0xCC, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x0A
read15693 = bytearray(21)
read15693[:] = 0xEE, 0xcc, 0x07, 0x01, 0x00, 0x00, 0x0A, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0D, 0x0A
# 读取
info15693 = bytearray(19)
info15693[:] = 0xEE, 0xCC, 0x0C, 0x01, 0x00, 0x00, 0x08, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0D, 0x0A
# 改写
af15693 = bytearray(20)
af15693[:] = 0xEE, 0xCC, 0x05, 0x01, 0x00, 0x00, 0x09, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x0D, 0x0A
# 写入
write15693 = bytearray(33)
write15693[:] = 0xEE, 0xCC, 0x08, 0x01, 0x00, 0x00, 0x016, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x0D, 0x0A
com = serial.Serial()
com.baudrate = 115200
com.port = 'COM4'
com.open()
if com.isOpen():
print(f'串口{com.port}已打开')
com.write(find15693)
time.sleep(1.5)
findData = com.read_all()
print(f'寻卡返回:{findData.hex()}')
cardNum = bytearray(8)
cardNum[:] = findData[7:15]
print(f"卡号:{cardNum.hex()}")
info15693[7:15] = cardNum
com.write(info15693)
time.sleep(1.5)
infoData = com.read_all()
print(
f'系统信息返回:{infoData.hex()},应用族标志:{infoData[7]},存储格式标志:{infoData[8]},数据块数量:{infoData[9] + 1},数据块长度:{infoData[10] + 1}')
af15693[7:15] = cardNum
af15693[15] = 0x01
com.write(af15693) # 改写应用族信息
time.sleep(1.5)
afData = com.read_all()
print(f'改写应用族信息返回:{infoData.hex()}')
com.write(info15693)
time.sleep(1.5)
infoData = com.read_all()
print(
f'系统信息返回:{infoData.hex()},应用族标志:{infoData[7]},存储格式标志:{infoData[8]},数据块数量:{infoData[9] + 1},数据块长度:{infoData[10] + 1}')
read15693[7:15] = cardNum
read15693[15:17] = 0x00, 0x03
com.write(read15693)
time.sleep(1.5)
readData = com.read_all()
print(f'读卡数据:{readData[7:19].hex()}')
write15693[7:15] = cardNum
write15693[17:29] = 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x09, 0x09, 0x09, 0x09
com.write(write15693)
time.sleep(1.5)
writeData = com.read_all()
print(f'写入返回:{writeData.hex()}')
com.write(read15693)
time.sleep(1.5)
readData = com.read_all()
print(f'写入后读卡返回:{readData[7:19].hex()}')
com.write(read15693)
time.sleep(1.5)
readData = com.read_all()
print(f'再次读卡返回:{readData.hex()}')
print(f'写入的值为:{readData[7:19].hex()}')
com.close()