嵌入式环境下分层的串行帧通信的设计与实现

发布者:BlissfulJoy最新更新时间:2013-02-25 来源: dzsc关键字:S3C2440  串行帧通信  系统通信 手机看文章 扫描二维码
随时随地手机看文章

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

  1 系统通信需求

  本系统主要完成野外环境下时间间隔测量和瞬态数据采集的功能,系统内各模块均选用三星公司的S3C2440芯片为处理器,操作系统使用嵌入式Linux。模块间通信的主要任务为控制命令的下发与应答、工作状态和采集数据的上报等,对通信的可靠性要求较高,无数据加密需求。

  根据系统软硬件情况设定串口工作参数如下:115 200波特率,8位数据位,1位停止位,奇校验、无流控。波特率的设置需要综合考虑所选用芯片的串口性能、串口连接线长度、传输数据的最大帧长和应用过程中的误码率等;无流控则是由于串口使用三线方式连接。

  2 通信协议的分层结构

  为保证不同设备之间通信协议的通用性,降低实现的复杂度,将通信协议为分上下两层:上层为应用层,规范了设备间应用程序通信使用的应用层数据格式;下层为链路层,提供物理线路数据的发送与接收,应用层数据拆分与合并、封装与解封装以及错误检测功能。协议应用层部分根据各设备功能的不同使用不同的数据格式,而链路层部分则完全通用。应用层通信过程如图1所示。

应用层通信过程
图1 应用层通信过程

  发方设备按照约定的应用层数据格式构造应用层数据,交由链路层进行数据的拆分、封装、校验,再将生成的数据以数据帧的形式发送至物理线路;收方设备则从物理线路上接收数据,进行帧定位、解封装、错误检测、数据合并等,最后将应用层数据上交给应用层处理。收发方设备的应用层可根据用户需求的变化,不断修改应用层数据格式,并利用链路层提供的功能接口完成通信功能,故该通信协议设计的关键在于链路层,以下着重阐述链路层的设计与实现。

  3 链路层设计

  链路层主要包含以下功能:数据拆分与合并、数据封装与解封装、数据帧的发送和接收以及错误检测与重发机制。

  3.1 数据拆分与合并

  数据拆分即是把过长的应用层数据分成几部分,用多帧数据帧发送,接收端收到后再进行数据合并,上交给应用层处理。过长的应用层数据如果不进行拆分,可能导致数据帧超出设计的缓冲区大小,也可能造成发送时间太长导致超时错误。这个长度需要根据实际需求合理设置,当数据帧传输出现错误时,这帧数据就需要重新传输,长度太大将造成较大开销;长度太小,封装时产生的开销字节所占比例又太高,影响传输效率。

  3.2 数据封装与解封装

  数据封装即是以一定格式把拆分后的应用层数据加上功能指示、数据长度等字段,以便对方收到后知道如何处理。数据封装格式及功能指示字段含义如表1,表2所示。

表1表2

  3.3 帧发送与接收

  链路层以帧为单位进行数据收发,一种普遍的界定帧起始与结束的方法是:在待发送数据的头部和尾部加入特殊的起始码和结束码,如果在数据中出现了这个码型,就必须在数据发送前进行转义处理,把它转换成其他码型,否则将导致帧定位错误,数据通信失败。很多协议实现者为求实现简单没有进行这种转义,存在通信失败的风险,其实在点对点协议(PPP协议)中的描述了一种转义处理方法,经简化后,实现起来也并不复杂,描述如下:

  数据发送方在帧首处发送0x7E作为起始码,逐字节发送封装后的数据,遇到0x7E时,发送0x7D,0x5E字节序列,遇到0x7D时,发送0x7 D,0x5D字节序列,最后在帧尾处发送0x7E作为结束码;[page]

  数据接收方在串口数据流中搜索第一个0x7E作为帧起始(连续的0x7E则以最后一个为帧起始),逐字节接收数据,遇到0x7D时,跳过不处理,而把该字节的后一个字节加上0x20,直到遇到0x7E认为帧结束。

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

  3.4 错误检测与重发机制

  综合考虑协议实现的简单性和数据收发的可靠性,决定采用停等协议进行数据收发,过程如下:

  发送方发送一帧数据帧后,设置一个最长等待时间,等待接收对方的确认帧或拒绝帧,若收到确认帧则发送下一帧;若收到拒绝帧或者在超时时间内未收到确认帧或拒绝帧,则重发当前帧,因等待超时而重发的帧要设置超时指示位。当连续收到拒绝帧三次或连续超时重发三次,则认为对端不可达,取消当前帧的发送,上报错误给应用层。

  接收方收到数据帧后,当超时指示位为0时,如果校验正确,则发送确认帧,并处理此帧,如果校验错误,则发送拒绝帧,不处理该帧;当超时指示位为1时,说明对方未正确收到确认帧或拒绝帧,如果上次非重发帧的校验结果是正确的,则该帧实际上已经处理过,直接发送确认帧即可;如果上次非重发帧的校验结果是错误的,则根据校验结果正常处理该帧。

  4 链路层实现

  链路层采用C++语言实现,以便于代码在各模块程序中复用。应用层数据发送和接收流程如图2,图3所示。

应用层数据发送流程图
应用层数据接收流程图

  5 结语

  链路层的作用是可靠地把应用层数据发送到对端设备,但如果仅仅是这样,应用程序使用起来并不是很方便,如果使用面向对象编程的方法,把链路层代码封装在一个类中,向应用程序提供一些较为简单的功能接口,如发送数据,接收数据,检测对端是否可达等,就可以很好地解决易用性问题。另外当数据发送失败时,应当以返回值或事件方式通知应用程序,当有应用层数据需要处理时,最好以回调函数或事件方式激活应用层处理程序,以避免应用程序低效的循环检测。通过在协议设计和协议实现两个方面同时进行优化,该协议在实际应用过程中表现出极好的可靠性和一定的通用性,可供参考借鉴。

关键字:S3C2440  串行帧通信  系统通信 引用地址:嵌入式环境下分层的串行帧通信的设计与实现

上一篇:基于IPv6的嵌入式互联网视频应用开发
下一篇:基于ZigBee无线传感网络的节水灌溉系统设计

推荐阅读最新更新时间:2024-03-16 13:19

基于脉冲同步的混沌保密通信系统
摘要:介绍了脉冲混沌同步的基本原理,提出了基于脉冲同步的一般化混沌保密通信系统。针对该系统存在的传输时间帧拥堵问题,提出一种“信息感应”脉冲同步系统。该系统中有用信息被嵌入在发射端的同步脉冲里,在接收端再通过这些脉冲被感应出来,解决了时间帧拥堵的问题。 关键词:脉冲同步 混沌保密通信 时间帧拥堵 1990年,美国海军实验室研究人员Pecora和Carroll首次利用驱动一响应法实现了两个混沌的同步后,混沌同步技术和混沌保密通信成为国际、国内通信领域的一个研究热点。国际上相继提出了各种混沌通信制式及其理论与方法,由此使混沌保密通信成为现代通信领域的一个新的分支。 混沌保密通信发展历比为四代。第一代为1993年提出的加性混沌遮
[应用]
双向通信渔船测报仪系统电路模块设计
  提出了一种双向通信渔船测报仪电路系统设计方案。该渔船测报仪电路系统具有低功耗、微型化、接口丰富、可靠性高等特点,可为渔民提供船舶定位、海上通信、遇险求救等多种功能服务,可提升海上船舶安全防范能力,因而对相关行业主管部门具有重要意义。渔船测报仪采用三星公司基于ARM920T内核的S3C2440A作为系统中央处理器,配备128M的SDRAM,256M的NAND FLASH和16M的NOR FLASH,以应对嵌入Linux操作系统所消耗的内存。S3C2440A集成了MMC/SD卡读写控制器,LCD与触摸屏接口,3路UART串口,1路主控与1路从动USB接口,1个IDE接口可挂接大容量硬盘,实时时钟。S3C2440A内部集成的3路串口
[单片机]
双向<font color='red'>通信</font>渔船测报仪<font color='red'>系统</font>电路模块设计
基于TMS320F2812集中供电系统的串口通信设计
引言 集中供电系统是电量的自动计量及管理的发展趋势,它将促进电力系统的潜能得到最大限度的发挥。 本集中供电系统利用RS-485通信,网络应用计算机、通信技术等,以DSP为核心、将智能计量与通信控制单元有机结合起来。 TMS320F2812串行通信接口概述 TMS320F2812串行通信接口(SCI)是一个双线通信异步串行通信接口,为减少串口通信时CPU的开销,F2812的串口支持16级接收和发送FIFO。串行通信接口支持与CPU以及其他使用费归零格式的异步外设之间的异步串行数字通信,它的接收器和发送器都是双级缓冲器,有各自独立的控制位与中断位,都可以同时工作在全双工模式下,为保证数据的完整性,串行通信接口对接收的数据进行间
[工业控制]
Facebook开发激光通信系统:从天空传输数据
据科技网站SiliconBeat报道,Facebook首席执行官马克 扎克伯格(Mark Zuckerberg)当地时间周三宣布,该公司在开发一种激光通信系统,从天空传输数据。 开发激光通信系统是Facebook Internet.org项目的一部分。它还在开发利用太阳能动力无人机提供互联网服务的技术。但是,并非所有Facebook类似项目都取得了预期成功,例如,有媒体报道称它放弃了耗资10亿美元生产和发射一颗卫星提供互联网服务的计划。 扎克伯格在Facebook上发布消息称, 我们的Connectivity实验室在开发一款激光通信系统,能从天空向社区传输数据。这一系统将极大提高远距离数据传
[网络通信]
Facebook开发激光<font color='red'>通信</font><font color='red'>系统</font>:从天空传输数据
基于AT89C51应用系统串行通信设计
1 引 言 在红外成像技术的电力设备状态检测系统中,基于AT89C51单片机的应用系统,采用美国雷态公司的型号为3iLRL3的非接触式红外测温仪.该测温仪采用的是RS232C串行通信标准接口,该接口在很多通信设备中通用,目前与PC机的直接串行通信也是RS 232C接口。尽管RS232C性能指标并非很好,但还是有广泛的市场支持。串行通信技术在测控系统中占有很重要的地位,只用三根线.就可以方便的在2个数字设备之间进行信息的交换,实现全双工的传送数据,硬件成本低.而且通用性好。 2 串行通信的硬件设计 在所开发的系统中.红外测温仪将检测电力没备的工作和环境温度,通过RS 232C串口传给单片机,同时由单片机控制检测装置的在线工作组态
[单片机]
村田推出为CPU/通信系统负载点用DC-DC模块
村田推出了MonoBK DC-DC转换器系列。该系列的第一款产品MYWGC3R53FFW92RAE具有过流(OCP),过压(OVP),欠压(UVP)和过热(OTP)保护。 目标应用市场包括FPGA,CPU和数据通信/电信系统。据该公司称,新的负载点(POL)模块的占地面积比竞争解决方案小50%,并在尺寸,效率和性能方面树立了新的标准。 MonoBK MYW系列是4通道DC-DC转换器,将所有无源组件(包括电感器)集成到9.3 mm x 9.0 mm x 2.9 mm(L×W×H)的外形尺寸中。该产品的输入电压范围为2.8–5.5V,可编程输出为0.4–3.58V(最高3.0A),只需要很少的外部组件。 该模块的热性能可
[电源管理]
s3c2440栈分配情况(fl2440裸机 stack)
//2440INIT.S ;The location of stacks UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~ UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~ AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~ IRQStack EQU (_STACK_BASEADDRESS-0x1000)
[单片机]
防碰撞无线通信汽车黑匣子的系统设计
随着我国国民经济的高速发展,渣土车、长途客运车的重、特大道路交通事故频发,给国家和人民生命财产带来了巨大损失。为了在全国范围内深入开展预防和减少道路交通事故工作,国内已有很多企业和科研单位研制汽车行驶记录仪。但现有的记录仪,使用有线方式阅读,对执法交警很不方便,交警很少操作;采用无线方式读取数据,既方便,又快捷,必将受到执法交警的欢迎,因此,研制无线读取数据的汽车记录仪势在必行。 汽车行驶记录仪(俗称汽车黑匣子),是对车辆行驶速度、时间、里程以及有关车辆行驶的其他状态信息进行记录、存储并可通过接口实现数据输出的数字式电子记录装置。对遏止疲劳驾驶、车辆超速等交通违章、约束驾驶人员的不良驾驶行为、保障车辆行驶安全以及道路交通事
[单片机]
防碰撞无线<font color='red'>通信</font>汽车黑匣子的<font color='red'>系统</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved