适用于μFR系列器件的μFR串行通信协议
μFR系列设备可以通过FTDI的虚拟COM端口建立通信,因此设备被视为标准的COM端口硬件。
通信参数 #
带 FTDI 串行接口的读卡器 #
带 USB 连接的 μFR 经典版和 μFR 高级读卡器:
串行通信:1 Mbps,8-N-1,流量控制:无;
RTS 引脚用于重置器件。 设置 RTS 后,设备处于重置状态。 当RTS清除时,设备处于正常状态。
安装了“μFR 支持”固件的 μFR BaseHD 读卡器(例如 XR 和 μFR XRc 读卡器):
串行通信(使用 VCOM FTDI 驱动程序):250 kbps,8-N-1,流量控制:无;
不带 FTDI 串行接口的读卡器 #
RS485(不带 USB/RS-485 转换器的连接):
可变波特率可以通过软件工具设置。 更改波特率时必须知道当前的波特率。 默认波特率为 250 kbps。
μFR 经典纳米 RS232 和存储卡尺寸 RS232:
UART / TTL: 115200 bps, 8-N-1, 流量控制: 无.
115200 bps 是默认波特率。 可变波特率可以通过软件工具设置。
连接器上的 PIN 4 用于重置设备。 如果该引脚上的电压较高(3.3 V),则器件处于复位状态。 如果电压低(0 V),则设备处于正常工作状态。
如果设备连接到我们的 RS232 到 TTL 转换器,则引脚 4 上的电压电平通过 RTS 控制。 当 RTS 清除时,设备处于重置状态。 设置 RTS 后,设备处于正常状态。
在固件更新期间,RTS 引脚必须连接到设备上的引脚 4。
UART/TTL模型的引脚排列如下所示:
为了在读卡器和主机PC之间进行通信,创建了D-Logic的专有协议,称为“μFR串行”。
所有通信均由设备连接的主机(PC 或其他平台)启动。
从固件版本 3.9.44 传输的单个命令或由一个设备响应接收的最大数据为 256 字节,之前为 192 字节。
通常,有两种类型的数据包:
- CMD – 主机发送到设备的命令
- ANS – 从设备发送到主机的应答
CMD可以是短集或长集。 CMD 短集始终为 7 字节长,而 CMD 长集 – 称为 CMD_EXT 可以具有可变长度。
答案是:
- ACK – 确认,一切正常,设备正在等待下一个 CMD 或 CMD EXT
- ERR – 发生错误,错误字节定义ERR_TYPE
- RSP – 设备在 CMD 或CMD_EXT上的响应
通信常量字节定义数据包的类型,可以在每个数据包的前三个字节中看到。
每个数据包的第一个字节是标头字节。 第二个字节始终CMD_CODE。 第三个字节是 TRAILER 字节。
表 1. 通信常量
CMD_HEADER | 0x55 | CMD_TRAILER | 0xAA |
ACK_HEADER | 0xAC | ACK_TRAILER | 0xCA |
RESPONSE_HEADER | 0xDE | RESPONSE_TRAILER | 0xED |
ERR_HEADER | 0xEC | ERR_TRAILER | 0xCE |
校验和 #
本文档中的所有校验和都以相同的方式计算:一行字节用于校验和计算,每个字节与下一个字节进行异和运算,直到行尾。 最终值随0x07递增。
例如,CMD 数据包有 7 个字节,其中第 7 个字节是前 6 个字节的校验和:
校验和 = (字节 1 异或字节2 异或字节3 异或字节4 异或字节5 异或字节6) + 0x07
CMD 代码 #
每个命令都有其相应的值 – 查看命令概述。
错误代码 #
如果发生错误,设备将使用 ERR 数据包进行应答。 每个错误都有其相应的值,可以在附录:错误代码中的表格中找到。
CMD 数据包 #
CMD 数据包可以短 – 7 字节长或以可变长度结束的 EXT。 对于EXT CMD数据包,CMD数据包的第四个字节大于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:命令参数 0,根据命令采用不同的值
- 字节 6:CMD_Par1:命令参数 1,根据命令采用不同的值
- 字节 7:校验和 – 如上所述的字节 1 到 6 的校验和
CMD_EXT数据包具有以下结构:
CMD_EXT数据包具有以下结构:
CMD_EXT数据包结构 | |||
字节 1 | … | 字节 N | 字节 N+1 |
参数字节 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:校验和 – 如上所述的字节 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:ERR_CODE如表 3 中定义。 错误代码。
- 字节 3:表 1 中定义的ERR_TRAILER.通信常量,0xCE
- 字节 4:如果存在ERR_EXT,则此字节包含ERR_EXT数据包的长度(包括校验和ERR_EXT)
- 字节 5:可以在ERR_Val0中定义有关错误的可能附加信息
- 字节 6:可以在ERR_Val1中定义有关错误的可能附加信息
- 字节 7:校验和 – 如上所述的字节 1 到 6 的校验和
ERR_EXT,并具有以下结构:
ERR_EXT数据包结构 | |||
字节 1 | .. | 字节 N | 字节 N+1 |
错误字节 1 到 N | ERR_EXT_CHECKSUM |
- 字节 1:ERR_EXT的第一个字节
- ……
- 字节 N:ERR_EXT的第 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.通信常量,0xED
- 字节 2:表 2 中定义的CMD_CODE。 CMD_CODE值
- 字节 3:表 1 中定义的ERR_TRAILER.通信常量,0xDE
- 字节 4:如果存在RSP_EXT,则此字节包含RSP_EXT数据包的长度(包括RSP_EXT校验和)
- 字节 5:可以在 RESPONSE 中定义有关 RESPONSE 的可能附加信息RSP_Val0
- 字节 6:可以在 RSP_Val1 中定义有关 RESPONSE 的可能附加信息
- 字节 7:校验和 – 如上所述,字节 1 到 6 的校验和。
t
RSP_EXT数据包结构 | |||
字节 1 | .. | 字节 N | 字节 N+1 |
RSP 字节 1 到 N | RSP_EXT_CHECKSUM |
- 字节 1:RSP_EXT的第一个字节
- ……
- 字节 N:RSP_EXT的第 N 个字节
- 字节 N+1:RSP_EXT_CHECKSUM,字节 1 到 N 的校验和,如前所述计算。