RFID 高频 ISO15693 实践开发代码

编写 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()

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值