µFR系列设备的串行通信协议
µFR系列设备可以通过FTDI的虚拟COM端口建立通信,因此设备是被视为标准COM端口硬件。
通信参数#
读卡器采用FTDI串行接口#
µFR经典和µFR高级读卡器与USB连接:
串行通信:1mbps, 8-N-1,流量控制:无;
RTS引脚用于重置设备。设置RTS后,设备处于复位状态。当RTS为clear时,表示设备处于正常状态。
安装了“µFR支持”固件的µFR BaseHD读取器(例如XR和µFR XRc读取器):
串行通信(使用VCOM FTDI驱动):250kbps, 8-N-1,流量控制:无;
读写器无FTDI串行接口#
RS485(无USB/RS-485转换器连接):
可变波特率可通过软件工具进行设置。修改波特率时,需要了解当前波特率。默认波特率为250kbps。
µFR经典Nano RS232和卡尺寸RS232:
UART / TTL: 115200bps, 8-N-1,流量控制:无。
默认波特率为115200bps。可变波特率可通过软件工具进行设置。
连接器上的pin4用于复位设备。如果该引脚上的电压高(3.3 V),则设备处于复位状态。如果电压低(0 V),则设备处于正常工作状态。
如果设备连接到我们的RS232到TTL转换器,那么引脚4上的电压水平控制RTS。当RTS为clear时,设备处于reset状态。设置RTS后,设备处于正常状态。
在固件更新期间,RTS引脚必须连接到设备上的引脚4。
UART / TTL模型的Pinout如下所示:
为了在阅读器设备和主机PC之间进行通信,D-Logic创建了称为“µFR串行”的专有协议。
所有通信都是由设备所连接的主机(PC或其他平台)发起的。
从固件版本3.9.44开始,单个命令传输或一次设备响应接收的最大数据为256字节,在此之前为192字节。
通常有两种类型的数据包:
- CMD-主机发送给设备的命令
- 答-设备发送给主机的应答
CMD可以是短集,也可以是长集。CMD短集总是7字节长,而CMD长集称为CMD_EXT可以有可变长度。
答案是:
- 消-确认,一切正常,设备正在等待下一个CMD或CMD EXT
- 犯错-发生错误,错误字节定义ERR_TYPE
- 负责-设备对CMD或CMD_EXT的响应
通信常数bytes定义了数据包的类型,可以在每个数据包的前三个字节中看到。
每个包的第一个字节是HEADER字节。第二个字节总是CMD_CODE。第三个字节是TRAILER字节。
表1。传播常数
CMD_HEADER | 0 x55 | CMD_TRAILER | 0 xaa |
ACK_HEADER | 0 xac | ACK_TRAILER | 0 xca |
RESPONSE_HEADER | 0 xde | RESPONSE_TRAILER | 0中 |
ERR_HEADER | 0 xec | ERR_TRAILER | 0 xce |
校验和#
本文档中所有校验和的计算方式相同:一行字节用于校验和计算,每个字节与下一个字节进行异或运算,直到该行结束。最终值增加了0x07。
例如,一个CMD包有7个字节,其中第7个字节是前6个字节的校验和:
CHECKSUM = (Byte1 XOR Byte2 XOR Byte3 XOR Byte4 XOR Byte5 XOR Byte6) + 0x07
CMD代码#
每个命令都有其相应的值——查看COMMANDS OVERVIEW。
错误代码#
如果发生错误,设备将返回ERR报文。每个错误都有相应的值,可以在附录:错误代码表中找到。
CMD包#
CMD包可以短至7字节长,也可以以可变长度的ext结束。对于EXT CMD报文,CMD报文的第4个字节大于0,包含整型值- CMD_EXT报文的长度。当发出CMD_EXT时,总是主CMD 7字节长包先走。如果一切正常,设备将应答ACK报文,等待CMD_EXT报文。如果出错,设备将返回ERR报文。CMD_EXT由各种不同的参数组成,这取决于命令类型,因此CMD_EXT没有固定的长度和参数顺序。
CMD报文的结构如下:
CMD报文的结构如下:
必选7字节CMD报文结构 |
||||||
---|---|---|---|---|---|---|
1字节 | 2字节 | 3字节 | 4字节 | 5字节 | 6字节 | 7字节 |
CMD_HEADER | CMD_CODE | CMD_TRAILER | CMD_EXT_Length | CMD_Par0 | CMD_Par1 | 校验和 |
- 1字节:表1中定义的CMD_HEADER。通信常数,0x55
- 2字节:表2中定义的CMD_CODE。CMD_CODE值
- 3字节:表1中定义的CMD_TRAILER。通信常数,0xAA
- 4字节: CMD_EXT_Length:如果0则“CMD EXT”不使用);ELSE值为整个CMD_EXT报文的长度
- 5字节: CMD_Par0:命令parameter0,不同命令取值不同
- 6字节: CMD_Par1:命令parameter1,根据命令不同取值不同
- 7字节: CHECKSUM -字节1到6的校验和,如上所述
CMD_EXT报文的结构如下:
CMD_EXT报文的结构如下:
CMD_EXT报文结构 | |||
1字节 | ... | 字节N | 字节N + 1 |
参数bytes 1 ~ N | CMD_EXT_CHECKSUM |
参数字节1 ~ N -不同的参数,值取决于命令的类型
- CMD_EXT_CHECKSUM -字节1到N的校验和
- CMD_EXT_Length是所有字节的个数,包括CMD_EXT_CHECKSUM;例如,长度为N+1
应答报文类型#
设备可以应答以下报文类型:
ACK—确认报文
如果命令和CMD报文配置正确(结构和校验和),并且需要发送一个额外的CMD_EXT报文,设备将以ACK报文回答。
ERR -错误报文
如果发生错误,设备将返回ERR报文。有些命令可以返回ERR_EXT集。在这种情况下,ERR_EXT包紧跟在ERR包之后。
RSP -响应报文
如果发送了正确配置的CMD或CMD_EXT报文,则设备将应答RSP或RSP_EXT报文,这取决于所发出的命令。例如,如果CMD需要一个对RSP包足够短的应答,则不会有RSP_EXT包。否则,如果CMD或CMD_EXT需要一个更多字节的应答,RSP_EXT将立即在RSP包之后出现。一种常见的情况是当使用LinearRead命令读取数据时,设备将回答一行卡片数据字节。
ACK—确认报文#
ACK报文的结构如下:
ACK报文的结构如下:
ACP包结构 |
||||||
1字节 | 2字节 | 3字节 | 4字节 | 5字节 | 6字节 | 7字节 |
ACK_HEADER | CMD_CODE | CMD_TRAILER | 无关,不用于ACK报文 | 校验和 |
- 1字节:表1中定义的ACK_HEADER。通信常数,0x55
- 2字节:表2中定义的CMD_CODE。CMD_CODE值。设备确认上一条命令发送正确
- 3字节:表1中定义的ACK_HEADER。通信常数,0x55
- 4字节:字节5,字节6:不用于ACK报文,取值为0x00
- 7字节: CHECKSUM -字节1到6的校验和,如上所述
ERR -错误报文#
ERR报文的结构如下:
必选7字节ERR |
||||||
1字节 | 2字节 | 3字节 | 4字节 | 5字节 | 6字节 | 7字节 |
ERR_HEADER | ERROR_CODE | ERR_TRAILER | ERR_EXT_Length | Err_Val0 | Err_Val1 | 校验和 |
- 1字节:表1中定义的ERR_HEADER。通信常数,0xEC
- 2字节:表3中定义的ERR_CODE。错误代码。
- 3字节:表1中定义的ERR_TRAILER。通信常数,0xCE
- 4字节:如果ERR_EXT存在,这个字节包含ERR_EXT包的长度(包括ERR_EXT校验和)
- 5字节:关于错误的可能的附加信息可以在ERR_Val0中定义
- 6字节:关于错误的可能附加信息可以在ERR_Val1中定义
- 7字节: CHECKSUM -字节1到6的校验和,如上所述
ERR_EXT,具有如下结构:
ERR_EXT报文结构 | |||
1字节 | .. | 字节N | 字节N + 1 |
错误字节1到N | ERR_EXT_CHECKSUM |
- 字节1:ERR_EXT的第一个字节
- ...
- Byte N: ERR_EXT的N- N个字节
- 字节N+1: ERR_EXT_CHECKSUM,字节1到N的校验和,如前面解释的那样计算。
RSP响应报文#
RSP报文的结构如下:
强制7字节RSP |
||||||
1字节 | 2字节 | 3字节 | 4字节 | 5字节 | 6字节 | 7字节 |
RSP_HEADER | CMD_CODE | RSP_TRAILER | RSP_EX_length | RSP_Val0 | RSP_Val1 | 校验和 |
- 1字节:表1中定义的RSP_HEADER。通信常数,0x
- 2字节:表2中定义的CMD_CODE。CMD_CODE值
- 3字节:表1中定义的ERR_TRAILER。通信常数,0xDE
- 4字节:如果RSP_EXT存在,这个字节包含RSP_EXT报文的长度(包括RSP_EXT校验和)
- 5字节: RESPONSE的可能附加信息可以在RSP_Val0中定义
- 6字节: RESPONSE的可能附加信息可以在RSP_Val1中定义
- 7字节: CHECKSUM -字节1到6的校验和,如上所述。
t
RSP_EXT报文结构 | |||
1字节 | .. | 字节N | 字节N + 1 |
RSP字节1 ~ N | RSP_EXT_CHECKSUM |
- 字节1:RSP_EXT的第一个字节
- ...
- Byte N: RSP_EXT的N- N个字节
- 字节N+1: RSP_EXT_CHECKSUM,字节1到N的校验和,如前面解释的那样计算。