您的位置 首页 芯闻

根据嵌入式环境的串行帧通信协议规划

基于嵌入式环境的串行帧通信协议设计-嵌入式系统之间的通信通常有两种方式:并行通信和串行通信。并行方式传输数据速度快,但占用的通信线多,传输数据的可靠性随距离的增加而下降,只适用于近距离的数据传送。在远距离数据通信中,一般采用串行通信方式,它具有占用通信线少、成本低等优点。目前RS 232串口是PC机与通信工业中应用最广泛的一种串行接口,它应用于点对点通信模式,实际使用中多采用最简单的三线方式连接,即两端设备的串口只连接收、发、地三根线,即可实现简单的全双工通信。通信协议是两端设备数据交换的语言,是通信可靠性的保证,在保证功能的前提下,通信协议应该力求简洁。

嵌入式体系之间的通讯一般有两种办法:并行通讯和串行通讯。并行办法传输数据速度快,但占用的通讯线多,传输数据的牢靠性随距离的添加而下降,只适用于近距离的数据传送。在远距离数据通讯中,一般选用串行通讯办法,它具有占用通讯线少、本钱低一级长处。现在RS 232串口是PC机与通讯工业中运用最广泛的一种串行接口,它运用于点对点通讯方法,实践运用中多选用最简略的三线办法衔接,即两头设备的串口只衔接纳、发、地三根线,即可完结简略的全双工通讯。通讯协议是两头设备数据交换的言语,是通讯牢靠性的确保,在确保功用的前提下,通讯协议应该力求简练。

在嵌入式环境下,因设备间通讯距离较远,多选用串行通讯办法,但许多串行通讯协议只适用于协议设计时的运用体系环境,不具有通用性,且有些协议存在通讯失利的危险。经过剖析设备间的通讯需求,规划了一种分层的串行帧通讯协议,该协议简略牢靠,能习惯多种体系环境。在嵌入式Linux体系环境下,该协议在实践运用体系中运转安稳。

1 体系通讯需求

本体系首要完结户外环境下时刻距离丈量和瞬态数据收集的功用,体系内各模块均选用三星公司的S3C2440芯片为处理器,操作体系运用嵌入式Linux。模块间通讯的首要任务为操控指令的下发与应对、作业状况和收集数据的上报等,对通讯的牢靠性要求较高,无数据加密需求。

依据体系软硬件状况设定串口作业参数如下:115 200波特率,8位数据位,1位中止位,奇校验、无流控。波特率的设置需求归纳考虑所选用芯片的串口功用、串口衔接线长度、传输数据的最大帧长和运用进程中的误码率等;无流控则是因为串口运用三线办法衔接。

2 通讯协议的分层结构

为确保不同设备之间通讯协议的通用性,下降完结的杂乱度,将通讯协议为分上下两层:上层为运用层,标准了设备间运用程序通讯运用的运用层数据格局;基层为链路层,供给物理线路数据的发送与接纳,运用层数据拆分与兼并、封装与解封装以及过错检测功用。协议运用层部分依据各设备功用的不同运用不同的数据格局,而链路层部分则彻底通用。运用层通讯进程如图1所示。

依据嵌入式环境的串行帧通讯协议规划

发方设备依照约好的运用层数据格局结构运用层数据,交由链路层进行数据的拆分、封装、校验,再将生成的数据以数据帧的方法发送至物理线路;收方设备则从物理线路上接纳数据,进行帧定位、解封装、过错检测、数据兼并等,最终将运用层数据上交给运用层处理。收发方设备的运用层可依据用户需求的改变,不断修正运用层数据格局,并运用链路层供给的功用接口完结通讯功用,故该通讯协议规划的关键在于链路层,以下侧重论述链路层的规划与完结。

3 链路层规划

链路层首要包括以下功用:数据拆分与兼并、数据封装与解封装、数据帧的发送和接纳以及过错检测与重发机制。

3.1 数据拆分与兼并

数据拆分便是把过长的运用层数据分红几部分,用多帧数据帧发送,接纳端收到后再进行数据兼并,上交给运用层处理。过长的运用层数据假如不进行拆分,或许导致数据帧超出规划的缓冲区巨细,也或许形成发送时刻太长导致超时过错。这个长度需求依据实践需求合理设置,当数据帧传输呈现过错时,这帧数据就需求从头传输,长度太大将形成较大开支;长度太小,封装时发生的开支字节所占份额又太高,影响传输功率。

3.2 数据封装与解封装

数据封装便是以必定格局把拆分后的运用层数据加上功用指示、数据长度等字段,以便对方收到后知道怎么处理。数据封装格局及功用指示字段意义如表1,表2所示。

依据嵌入式环境的串行帧通讯协议规划

3.3 帧发送与接纳

链路层以帧为单位进行数据收发,一种遍及的界定帧开始与完毕的办法是:在待发送数据的头部和尾部参加特别的开始码和完毕码,假如在数据中呈现了这个码型,就必须在数据发送前进行转义处理,把它转换成其他码型,否则将导致帧定位过错,数据通讯失利。许多协议完结者为求完结简略没有进行这种转义,存在通讯失利的危险,其实在点对点协议(PPP协议)中的描绘了一种转义处理办法,经简化后,完结起来也并不杂乱,描绘如下:

数据发送方在帧首处发送0x7E作为开始码,逐字节发送封装后的数据,遇到0x7E时,发送0x7D,0x5E字节序列,遇到0x7D时,发送0x7 D,0x5D字节序列,最终在帧尾处发送0x7E作为完毕码;

数据接纳方在串口数据流中查找第一个0x7E作为帧开始(接连的0x7E则以最终一个为帧开始),逐字节接纳数据,遇到0x7D时,越过不处理,而把该字节的后一个字节加上0x20,直到遇到0x7E以为帧完毕。

在链路帧发送前,应运用CRC16算法对封装数据进行校验,校验多项式为,校验值写入校验字段中;在链路帧接纳后,先对其进行校验,假如查验成功再进行数据解封装处理,假如校验失利则依照下述重发机制进行重发。

3.4 过错检测与重发机制

归纳考虑协议完结的简略性和数据收发的牢靠性,决议选用停等协议进行数据收发,进程如下:

发送方发送一帧数据帧后,设置一个最长等候时刻,等候接纳对方的承认帧或回绝帧,若收到承认帧则发送下一帧;若收到回绝帧或许在超时时刻内未收到承认帧或回绝帧,则重发当时帧,因等候超时而重发的帧要设置超时指示位。当接连收到回绝帧三次或接连超时重发三次,则以为对端不可达,撤销当时帧的发送,上报过错给运用层。

接纳方收到数据帧后,当超时指示位为0时,假如校验正确,则发送承认帧,并处理此帧,假如校验过错,则发送回绝帧,不处理该帧;当超时指示位为1时,阐明对方未正确收到承认帧或回绝帧,假如前次非重发帧的校验成果是正确的,则该帧实践上现已处理过,直接发送承认帧即可;假如前次非重发帧的校验成果是过错的,则依据校验成果正常处理该帧。

4 链路层完结

链路层选用C++言语完结,以便于代码在各模块程序中复用。运用层数据发送和接纳流程如图2,图3所示。

依据嵌入式环境的串行帧通讯协议规划

5 结语

链路层的作用是牢靠地把运用层数据发送到对端设备,但假如仅仅是这样,运用程序运用起来并不是很便利,假如运用面向对象编程的办法,把链路层代码封装在一个类中,向运用程序供给一些较为简略的功用接口,如发送数据,接纳数据,检测对端是否可达等,就可以很好地处理易用性问题。别的当数据发送失利时,应当以返回值或事情办法告诉运用程序,当有运用层数据需求处理时,最好以回调函数或事情办法激活运用层处理程序,以防止运用程序低效的循环检测。经过在协议规划和协议完结两个方面一起进行优化,该协议在实践运用进程中表现出极好的牢靠性和必定的通用性,可供参考学习。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/88556.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部