串口通信协议实现

       最近在做导师项目的机载仪器通信,底层采集板(DataCenter)和人机界面(HMI)的全双工串口通信,目前设计的协议规则基于问答机制。帧只分为两类主叫帧和应答帧,数据均可在两类帧中传输(按照规程), 帧定义末尾.
    
       比如当前HMI发送主叫帧至DataCenter 请求数据,DataCenter 接收后校验正确会发送应答帧,则HMI开始检测接收缓存是否有应答帧,若有则接收处理,此主叫帧结束响应。以上是预设理想状态流程。接下来针对此过程考虑通信异常情况。
      异常1. DataCenter 和HMI全双工通信,双方均可以随时发起通信,假若双方均同时发起主叫帧命令,HMI此时的状态为 接收缓存区中和发送缓存区中均存在数据,发送完毕命令后监测接收区中是否存在应答帧且应答帧命令字与发送命令字相同,若存在则处理应答帧中数据,HMI完成主叫帧命令。若检测为主叫帧按照过程直接响应应答帧,继续监听该命令字应答帧。若检测的帧校验错误,由于错误数据不可靠无法确定是否主叫或应答及应答命令字,则发送 NAK的应答,无绑定命令字。晕了吧,我也早就晕了``_^,(明天再讲)
      希望了解这方面的朋友能够积极参与,请各位大虾请多多指教 Orz  ^__^
 
附件协议规则
      
报文第一个字节为命令字;对于主叫帧,收到后要发送应答帧,校验正确发送ACK+命令字;校验错误发送NAK无命令字。
控制码的格式如下所示。

D7

D6

D5

D4

D3

D2

D1

D0

      

 

 

D7=0:由主叫命令帧;=1:命令应答帧(ACK/NAK

D6     =0ACK =1 NAK

D5     =0:无后续数据帧;=1:有后续数据帧

D4—D0 帧序号

帧序号当数据长度超过255(包括命令字)需要进行分帧传输,D51表示有后续帧,最后一帧D5=0

 L为数据域的有效字节数;

最大数据长度:Lmax=255。超过此长度报文需要分帧发送;

数据域包括命令代码和数据。

你可能感兴趣的:(串口通信协议实现)