打印
[应用相关]

求助在STM32中实现面向字符的BSC协议,有没有哪位大佬有参...

[复制链接]
409|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2021-2-23 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
终端通信协议

一、通信配置
通信方式:rs485

[td]
波特率
数据位
校验
停止位
1152008E1


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字符串的形式包装,约定报文规则如下:
  • 本协议使用ASCII字符集
  • 响应:

[td]
Byte1
Byte2
Byte3
Byte4
Byte5
Byte6
Byte7
Byte8
Byte9
SYNSYNSOHsrc addr@dest addrACK/NAKBCC(MSB)BCC(LSB)
ACK: 表示收到消息成功。NAK:表示收到消息错误或者BCC校验不一致,需要发送方重新发送消息,最多发送3次。响应超时时间: 1000ms
  • 二进制数据:需要转换成字符串形式,并添加前缀0b,例如:01100 :”0b01100”
  • 十六进制数据:需要转换成字符串形式,并添加前缀0x,后面的字符串大小必须是2的倍数(一个char类型由两个十六进制数组成),例如:fbae98:”0xfbae98”
  • SOH(标题):包含源地址(发送方地址)、目的地址(接收方地址)、路由指示
    约定:

0: 表示安卓机0xFF: 表示广播,广播消息不需要回复响应。
  • @: 表示地址分隔符,A@B表示消息从A发往B
例如:安卓主机发送指令给1号板,则指令内容如下:[td]
Byte1
Byte2
Byte3
Byte4
Byte5
Byte6
Byte7
n*byte
Byte(7+n+1)
Byte(7+n+2)
Byte(7+n+3)
SYNSYNSOH0@1STXETXBCC(MSB)BCC(LSB)
第一次接触这种协议不知道怎么下手请各位大佬清点。

使用特权

评论回复
沙发
白马过平川| | 2023-1-9 10:02 | 只看该作者
其实这个协议好像也不复杂吧,就是标记要知道是干啥的就行了

使用特权

评论回复
板凳
她已醉| | 2023-1-10 07:53 | 只看该作者
这是干啥的协议啊?

使用特权

评论回复
地板
故意相遇| | 2023-1-10 08:25 | 只看该作者
其实你可以自己设计一套协议,也不一定非要用它的协议的

使用特权

评论回复
5
我吃小朋友| | 2023-1-10 08:57 | 只看该作者
字符协议?是传输字符么?

使用特权

评论回复
6
将爱藏于深海| | 2023-1-10 09:29 | 只看该作者
给我的感觉就是首尾加上控制字,数据和校验,基本通讯就完成了

使用特权

评论回复
7
捧一束彼岸花| | 2023-1-10 10:34 | 只看该作者
我也不知道咋下手,但是按照人家说的,一步一步操作就行的

使用特权

评论回复
8
风凉| | 2023-1-10 11:06 | 只看该作者
校验是E是什么操作?累加和?

使用特权

评论回复
9
西洲| | 2023-1-10 11:38 | 只看该作者
数据结构看着有点复杂呢?

使用特权

评论回复
10
一只眠羊| | 2023-1-10 12:10 | 只看该作者
数据结构看着有点复杂呢?

使用特权

评论回复
11
未说出口的像你| | 2023-1-10 12:41 | 只看该作者
话说,他这协议没有什么示例么?

使用特权

评论回复
12
在曼谷的春| | 2023-1-10 13:13 | 只看该作者
   标记位还按byte弄,好麻烦啊,有点带加密的意思了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

970

主题

2982

帖子

7

粉丝