在嵌入式环境下,因设备间通信距离较远,多采用串行通信方式,但许多串行通信协议只适用于协议设计时的应用系统环境,不具有通用性,且有些协议存在通信失败的风险。通过分析设备间的通信需求,设计了一种分层的串行帧通信协议,该协议简单可靠,能适应多种系统环境。在嵌入式Linux系统环境下,该协议在实际应用系统中运行稳定。
2 Z! z$ k) Z, K5 w1 r! J
1 系统通信需求
" O2 A" _; n$ y5 N4 t( J( K2 z+ U本系统主要完成野外环境下时间间隔测量和瞬态数据采集的功能,系统内各模块均选用三星公司的S3C2440芯片为处理器,操作系统使用嵌入式Linux。模块间通信的主要任务为控制命令的下发与应答、工作状态和采集数据的上报等,对通信的可靠性要求较高,无数据加密需求。
% N) k6 e8 J% \5 S0 J( V5 s3 `6 O根据系统软硬件情况设定串口工作参数如下:115 200波特率,8位数据位,1位停止位,奇校验、无流控。波特率的设置需要综合考虑所选用芯片的串口性能、串口连接线长度、传输数据的最大帧长和应用过程中的误码率等;无流控则是由于串口使用三线方式连接。
( F8 b7 J" S4 v/ Y8 T. |% c2 通信协议的分层结构
' [( `& r n4 ]+ d+ f
为保证不同设备之间通信协议的通用性,降低实现的复杂度,将通信协议为分上下两层:上层为应用层,规范了设备间应用程序通信使用的应用层数据格式;下层为链路层,提供物理线路数据的发送与接收,应用层数据拆分与合并、封装与解封装以及错误检测功能。协议应用层部分根据各设备功能的不同使用不同的数据格式,而链路层部分则完全通用。应用层通信过程如图1所示。
, l$ e! z0 z1 A8 `2 z: K! l( l4 z# ~+ L* K# v) t. z! i4 N M
6 A! L: m# Q" r' K5 T
8 j6 K% @6 d* f! f! j/ R
发方设备按照约定的应用层数据格式构造应用层数据,交由链路层进行数据的拆分、封装、校验,再将生成的数据以数据帧的形式发送至物理线路;收方设备则从物理线路上接收数据,进行帧定位、解封装、错误检测、数据合并等,最后将应用层数据上交给应用层处理。收发方设备的应用层可根据用户需求的变化,不断修改应用层数据格式,并利用链路层提供的功能接口完成通信功能,故该通信协议设计的关键在于链路层,以下着重阐述链路层的设计与实现。
& G$ G& y* b- R9 {, G