RoyalRay RRU9816 UHF RFID阅读器USB VSP串口无数据接收问题及命令协议问询
解决RoyalRay RRU9816 UHF RFID阅读器串口通信无数据的思路
我之前帮朋友搞定过类似没有官方文档的OEM RFID阅读器的通信问题,给你几个实际可行的方向,应该能帮到你:
先把基础配置的坑填上
首先别只盯着波特率,串口通信的其他参数不匹配也会导致收不到有效数据:
- 补全Python串口初始化的参数,用行业通用的配置试试:
import serial ser = serial.Serial( port='COM3', baudrate=9600, timeout=3, # 把超时调长点,RFID盘点需要一定时间 parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS ) - 确认设备当前是不是USB VSP模式:有些阅读器需要物理按键切换模式,比如长按某个按钮几秒钟,或者看指示灯的状态(不同颜色对应不同模式),别默认它就是VSP模式。
试试通用UHF RFID指令,大概率能蒙中
很多OEM阅读器都会抄主流品牌的指令集,或者用行业通用的帧格式,你可以挨个试试这些「启动盘点」的指令:
- 明文指令(带换行符,部分设备认这个):
ser.write(b'INVENTORY\r\n') # 发送盘点指令 response = ser.read(128) print("明文指令响应:", response.hex()) - 十六进制帧格式(常用的起始码+命令结构):
# 试试AA开头的通用帧:AA 长度 命令码 参数 校验和 ser.write(b'\xAA\x03\x01\x00\xAD') response = ser.read(128) print("十六进制指令响应:", response.hex()) - STX开头的ASCII帧:
ser.write(b'\x02INVENTORY\x03') # STX + 命令 + ETX response = ser.read(128) print("STX帧响应:", response.hex())
逆向工程指令的实用方法
如果通用指令不行,就得自己挖指令了,这些方法我亲测有效:
- USB HID模式抓包:把设备切换到HID模式,用Wireshark+USBPcap抓包,或者用USBlyzer这类工具。很多阅读器在HID模式下的通信数据和VSP模式是对应的,抓包后能直接提取出触发盘点的指令,再转用到VSP模式就行。
- 找同类OEM模块的协议:RRU9816很大概率是用了市面上通用的UHF RFID模块(比如瑞芯微、复旦微电子的方案),去搜同价位其他品牌的入门UHF阅读器的公开协议,比如新大陆、Honeywell的部分型号,指令格式几乎一模一样。
- 盲试帧结构:如果没抓包工具,就按常见的帧结构盲试:
- 起始码:先试
0xAA、0xBB、0x02、0x7E这些高频出现的 - 命令码:
0x01(盘点)、0x02(停止)、0x03(设置)是最常见的命令标识 - 校验位:要么是所有字节异或,要么是求和取低8位,比如
0xAA+0x03+0x01+0x00=0xAE,取低8位就是0xAE(异或的话是0xAA^0x03^0x01^0x00=0xA8)
- 起始码:先试
调试时的小技巧
- 别用PuTTY调试,换用专门的串口助手(比如SSCOM、友善串口助手),这些工具支持十六进制发送和接收,能更清晰看到原始数据。
- 发送指令后,别只等1秒,RFID盘点需要时间,把超时设为3-5秒,然后读取足够长的字节数(比如128),标签数据通常比指令长。
内容的提问来源于stack exchange,提问作者Adriel Oliveira Gomes
相关产品推荐
相关产品推荐

