硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4945|回复: 2
收起左侧

[技术讨论] 求助在STM32中实现面向字符的BSC协议,有没有哪位大佬有参考文档或者例程的。

[复制链接]

27

主题

94

回帖

175

积分

初级会员

积分
175
发表于 2020-11-12 09:58:33 | 显示全部楼层 |阅读模式
本帖最后由 Mark 于 2020-11-12 10:20 编辑

终端通信协议

一、通信配置
通信方式: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)


第一次接触这种协议不知道怎么下手请各位大佬清点。


回复

使用道具 举报

7

主题

146

回帖

167

积分

初级会员

积分
167
发表于 2020-11-12 17:27:22 | 显示全部楼层
照着协议写就是了,也没啥难度吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2020-11-13 09:45:46 | 显示全部楼层
描述挺详细的,楼主按照他的要求一步一步实现就行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 07:28 , Processed in 0.219904 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表