1.关于协议1.1 面向字符的BSC协议面向字符的同步方法也称“字符填充的首尾定界符法”。在该同步方法中,数据帧中的数据都被看作字符序列(所以称之为面向字符的同步传输),所有的控制信息也都是字符形式(当然数据的表示形式还是二进制的比特流),每个数据块的头部用一个或多个同步字符SYN来标记数据块的开始;尾部用字符ETX来标记数据决的结束。 面向字符的同步传输协议的典型代表就是IBM公司的BSC协议。BSC协议规定,链路上传送的数据必须是由规定字符集(可以是ASCII,或者EBCDIC(Extended Binary Coded Decimal Interchange Code,扩展二进制-十进制交换码))中的字符组成,控制信息也必须由同一个字符集中的若干指定的控制字符构成。
1.2 BSC控制字符和数据块结构BSC协议与所有同步传输协议一样,也是一次可以传送由若干个字符组成的数据块(通常是一帧),而不是一次只传送一个字符。同时规定了十种特殊字符(称为通信控制字符)作为这个数据块的开始与结束标志,以及整个传输过程的各种控制信息标志(并不是每个数据块中都有这十种全部的控制字符)。这十种通信控制字符说明如下:
❏ACK(AcknowLEDge):确认标志,由接收端发出的,作为对正确接收到报文的响应。 ❏DLE(Data Link Escape):转义标志,用于指示后面的字符是数据字符,而不是特殊控制字符。这是用来进行透明传输的,当在报文中也存在这十个控制字符时,在这些字符前加上DLE字符后,通知接收端把它们当作普通的报文处理,而不是作为控制字符来识别。具体将在本节后面介绍。
❏ENQ(Enquire):询问标志,用于请求远程站点给出响应。响应可能包括远程站点的身份或状态。
❏EOT(End of Transmission):发送完毕标志,用于表示一个或多个文本的发送结束,并拆除链路。
❏ETB(End of transmission Block):块终止或组终止标志,用于标志每个数据块的结束位置。仅在一个报文要分成多个数据块传输时才有此标志。
❏ETX(End of Text):文本终止标志,标志报文文本的结束。仅在一个报文不分成多个数据块传输时才有此标志。
❏NAK(Negative Acknowledge):否认标志,由接收端发出的,作为对未正确接收的报文响应。 ❏SOH(Start of Head):报头开始标志,用于表示报文的标题信息或报头的开始。仅在报文的第一个数据块中才有此标志。
❏STX(Start of Test):文本开始标志,标志标题信息的结束和报文文本的开始。每个数据块均有此标志。
❏SYN(Synchronous):字符同步标志,用以实现通信双方的字符同步,或用于在无数据传输时保持同步。在每个数据块中均有此标志,而且通常是两个。
以上这十种通信控制字符所对应的ASCII码(ASCII中是用低7位表示一个字符的,最高位为校验码)或EBCDIC码值如表5-3所示。这些控制字符代码所对应的ASCII也可参见图4-7。这种通信控制字符中,在数据同步传输中起关键作用的就是SYN、SOH、STX、ETB、ETX、EOT这六种通信控制字符。
2.约定本协议基于BSC协议,遵循BSC协议的通信规则,为防止与控制码冲突,报文均以json字符串的形式包装,约定报文规则如下:
[td]Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | Byte8 | Byte9 |
SYN | SYN | SOH | src addr | @ | dest addr | ACK/NAK | BCC(MSB) | BCC(LSB) |
ACK: 表示收到消息成功。NAK:表示收到消息错误或者BCC校验不一致,需要发送方重新发送消息,最多发送3次。响应超时时间: 1000ms二进制数据:需要转换成字符串形式,并添加前缀0b,例如:01100 :”0b01100”
十六进制数据:需要转换成字符串形式,并添加前缀0x,后面的字符串大小必须是2的倍数(一个char类型由两个十六进制数组成),例如:fbae98:”0xfbae98”
SOH(标题):包含源地址(发送方地址)、目的地址(接收方地址)、路由指示
约定:
0: 表示安卓机0xFF: 表示广播,广播消息不需要回复响应。例如:安卓主机发送指令给1号板,则指令内容如下:[td]Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | n*byte | Byte(7+n+1) | Byte(7+n+2) | Byte(7+n+3) |
SYN | SYN | SOH | 0 | @ | 1 | STX | … | ETX | BCC(MSB) | BCC(LSB) |
第一次接触这种协议不知道怎么下手请各位大佬清点。