如何制定好的串口通信的指令通讯协议

通信按照数据的传输方式可以分为串行通信和并行通信。

按照数据的同步方式可以分为同步传输和异步传输。

按照数据的传输方向与时间关系,可以分为单工通信、半双工通信、全双工通信。

相关定义:

串行通信:使用一对信号线进行数据传输,其中一个为信号线,一个为信号地线,信号电流通过信号线到达目标设备,再经过信号地线返回,构成一个信号回路,将数据按位传输。

并行通信:使用多对信号线进行数据传输。

同步通信:发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。同步通信中双方使用频率一致的时钟,它的数据分组比异步则大得多,称为一个数据帧。通过独特的 bit 串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备。

异步通信:接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组。发送方只发送数据帧,异步传输中不传输时钟,发送和接收双方必须约定相同的波特率。

单工通信:只允许数据按照一个固定的方向传送,在任何时刻都只能进行一个方向的通信,一个设备固定为发送设备,一个设备固定为接收设备。

半双工通信:两个设备之间可以收发数据,但是不能在同一时刻进行,每次只能有一个设备发送,另一个站接收。

全双工通信:在同一时刻,两个设备之间可以同时进行发送和接收数据。

以下内容适用于串口通信开发的项目,皆是工作中的工作总结,仅供参考:

串行通信中制定指令协议:

基于串口的通信协议通常不能太复杂,因为串口通信速率、抗干扰能力以及其他各方面原因。

一般自定义通信协议内容大致有以下部分组成,酌情参考:

        帧头 + 设备地址/类型 + 命令/指令 + 命令类型 + 数据长度 + 数据 + 帧尾 + 校验位

在制定通信协议时,需要考虑到的地方:

        1.双方使用串口通信的时候,分别有接收缓冲区和发送缓冲区,在建立通信协议的时候,需要有对应的请求帧和响应帧,并且对应的指令格式对应并且完整,例如请求帧包含校验位,那么响应帧最好也包含校验位。

        2.指令协议制定需要考虑后续的可扩展性。一个好的指令协议对于将来是易于扩展的。例如在数据域中定义很多不同数据内容的字段,如果给每个字段中分别增加上当前字段的长度,后续如果需要扩展字段,只需要根据字段长度进行解析,获取指定长度的内容,安全并且高效。

        3.如果是在已经定义好的指令协议上修改或者增加其他的指令协议,则需要注意:

                1)不同应用版本之间的升级和维护,在已经发布版本的情况下,一般不建议修改原有的指令,这样会导致旧版本无法使用,是不可取的。

                2)若新增指令协议,新增的指令协议需要和项目中原有的指令格式保持一致,当然,如果原有的指令协议不够严谨,那么也可以重新制定严谨的指令协议,但是新增的指令协议也需要保证格式一致,并且需要做好后续的版本维护工作。

串口通信中的开发步骤:

        1.确定指令格式后,制定指令协议,形成通讯协议文档。

        2.按照协议文档做代码开发,在开发过程中,注意多人开发的情况,如果需要修改指令协议,那么就需要及时更新协议文档,并且通知到项目组成员,避免沟通不到位引发的不必要的麻烦。

        3.开发完成后,进行自测试。自测试的过程中需要注意,如果串口通信的一方开发完成,可是用PC借助串口调试工具按照已经定义好的指令协议组装指令进行测试,确保一方没有问题之后,再进行联调,这样效率比较高。

        4.在联调中,若通信出现问题,也是用同样的方式通过串口调试工具组装指令去排查一方,首先确保一方没有问题之后再定位,这种调试的方法效率比较高。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值