串口通信协议
在USB模式下,POS和支付终端之间使用串行通信协议
通信参数
- Baud Rate : 115200
- Data bits : 8
- Stop bits : 1
消息结构
Offset | Field | Byte Length | Description |
---|---|---|---|
0x00 | STX | 2 | Start text, fixed value: 0x55AA |
0x02 | Message type | 1 | 0x00: normal package 0x01: handshake command 0x02: handshake confirmation command |
0x03 | ACK | 1 | If the field is 0, it means that the field is invalid; non-0, it represents the id of the last received data packet that passed the verification |
0x04 | Message ID | 1 | There is no valid data in the message, the value is 0; the initial value can be 1, and each time a new data packet is sent, it will automatically + 1, greater than 255, and reset to the initial value of 1; |
0x05 | Message Data length | 2 | Represents the sum of the lengths of message data segments, with high bytes first; |
0x07 | Message Data | n | Valid data, the upper business layer is responsible for parsing the specific Action category; |
0x08+n | CRC | 1 | Checksum, Byte-by-byte XOR result for data from “message type” to “message data” |
0x09+n | ETX | 2 | End text, fixed value: 0xCC33 |
消息最大长度为1024字节
通信序列
消息类型
1. 握手信息
POS向支付终端发送一个空包,包类型为1,ack字段为0,数据包id为0。支付终端侧收到后,将当前状态设置为连接,并将包类型为2的空包返回给POS(握手说服)。如果支付终端侧在收到握手命令之前已连接,则需要清除相关状态。
Sample message (HEX)
Handshake Message:
55AA010000000001CC33
Handshake Confirmation Message:
55AA020000000002CC33
2. 心跳信息
此支付终端每2秒发送一次心跳消息信息。
Sample message (HEX)
55AA000000000000CC33
3. ACK消息
由于串行通信过程的不可靠性,传输的数据不可避免地会遇到丢失、延迟、错误、重复等各种情况。因此,使用了这种ACK机制。这种机制的核心是,在发送方向接收方发送数据后,接收方向发送方发送ACK(收据)。如果发送方没有收到正确的ACK,它将重新发送数据,直到收到ACK。
Sample message (HEX)
55AA000100000001CC33
4. 交易消息
发送数据
对于对方发送的具有有效数据的数据包,接收方应及时返回ack。可能存在同时接收多个不同数据包(具有不同ID)的情况。在这种情况下,只需要返回最后一个数据包的ack。为了防止对另一方重新发送的数据包进行重复处理,接收器应该记录上次接收的数据包的id。如果id相等,则意味着另一方重新发送了该数据包,并且该数据包将自动被忽略。
重新发送数据
堆栈顶部的新数据包,发送后标记为已发送,并将数据包的发送次数记录为1。到发布版本时间的下一个100ms代码包,在发布版本的代码包之前检查数据包的接收情况,如果收到了对方相应的ack,则将数据包从堆栈中删除。如果没有收到,则重新发送数据包,+1为数据包的已发送次数。如果发送5次后没有收到相反的ack消息,请将连接设置为断开连接且为空。
消息数据字段
字段格式
POS应用程序和CodePay Register以JSON格式通信