您的位置 首页 制造

嵌入式体系中串口通讯帧的同步办法研讨

一、引言串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式。在嵌入式

一、导言

串口通讯是日前单片机和DSP等嵌入式体系之间,以及嵌入式体系与PC机或无线模块之间的一种非常重要且遍及运用的通讯办法。在嵌入式体系的硬件结构中,一般只要一个8位或16位的CPU,不只要完结主流程的作业,一起还要处理随时发生的各种中止,因此嵌入式体系中的串口通讯程序规划与PC机有很大的不同。若嵌入式体系中.中止服务子程序在体系运转进程中占用了较多的时刻,就有可能在中止服务子程序正运转时,又发生一个同类型或其他类型的中止,然后形成主程序得不到履行或后续中止数据丢掉。所以,嵌入式体系中的串口通讯尽管看似简略,但其间仍有许多问题值得研讨,例如串口通讯进程中的帧同步问题。本文针对该问题给出了逐次比较、依据FIFO行列和依据状况机的3种帧同步办法。经过测验、剖析和比较得出,依据有限状况机的办法是嵌入式体系串口通讯中很有用的帧同步办法,一起也是一种很不错的串口通讯程序规划结构。

二、串口通讯的数据帧结构

现代工业操控,往往需求由多个独立的操控模块来共同完结。它们之间经过串口通讯完结杂乱的操控进程,有必要在通讯进程中参加必要的通讯协议,以进步体系的可靠性和稳定性;而要完结特定的通讯协议,就得有必定的同步机制。下面介绍一下简化的串口通讯数据帧结构,以便剖析阐明嵌入式体系串口通讯进程中的帧同步办法。

假定串口发送的数据帧结构为:

其间:包头用于同步,一般是一个或多个ASCII字符,本文中假定数据帧同步头有2字节(0xAA、0x55);包长表明数据包中除掉包头和包长的字节数,一般用约定好的几个字节表明;类型为通讯协议里规则的指令类型;数据为应发送的首要信息;校验一般选用单字节“异或的办法。

二、串口通讯中的帧同步办法

1、逐次比较的帧同步办法

首要等候串口数据,将接纳到的第1个字节数据与约定好的包头信息的第1个字节进行比较。假如不正确,则等候新字节,直到接纳的数据与包头信息的第1个字节相同。第1个字节比较正确今后,将收到的第2个字节与包头信息的第2个字节进行比较。假如依然正确,则阐明串口接纳现已同步,能够开端接纳数据帧中的数据部分;不然,从头开端同步进程。其程序流程如图1所示。

此种办法代码量小,编程简略,一般用于在主程序中以非中止办法接纳串口数据、实时性很差、数据帧较短的场合。可是,在串口速度过快且包头字节数比较多的情况下,串口完成同步花费的时刻很长或很难完成同步。例如,串口接纳到序列Ox0O OxAA 0xAA 0x55…,当遇到第一个“0xAA时,该办法以为第1个字节正确开端比较第2个同步头。第2个字节仍是“0xAA而不是“0x55,所以有必要等候新的字节从头开端比较第1个同步头。而紧随其后的是“0x55,因此,此刻包头的第1个字节也没有同步上。事实上,“0x00 OxAA是搅扰字节,“0xAA 0x55才是通讯协议中的同步头。

2、依据FIFO行列的帧同步办法

依据同步包头的长度,界说一个相同长度的大局字节数组,把该数组看成是一个如图2所示的先入先出(FIFO)的行列。程序流程如图3所示。

本例中界说两个字节HEADl和HEAD2,都初始化为0xFF。同步时,丢掉数组头字节HEADl,数组中的一切数据向前移动一个字节,串口接纳到的新字节存入数组末字节HEAD2中,将整个数组与协议中的包头信息比较。假如正确,则置位已同步标志位,然后开端接纳、存储有用数据;不然,持续等候同步。串口数据接纳完后,不只要铲除已同步标志,还要把HEADl和HEAD2两个字节都赋值0xFF;不然,将会影响下一帧数据的同步和接纳。用前面说到的序列“0x00 0xAA 0xAA 0x55…进行测验,跟着串口接纳中止收到新的字节。帧同步行列中的数据顺次为:[0xFF,0xFF]→[0x00,0xFF]→[0xAA,0x00]→[0xAA,0xAA]→[0x55,0xAA]。此刻,该算法检测出[HEAD2,HEAD2]==[0x55,0xAA],然后完成了同步,置位已同步标志位以便下次进入串口接纳中止服务子程序时开端接纳数据包的数据部分。

此种办法与逐次比较的帧同步办法比较,能够比较快速、正确地检测出同步包头;可是假如包头的字节数许多,同步进程中每次进入串口中止服务子程序都要进行很多的字节搬移,将必定消耗很长的时刻。为了使嵌入式体系更强健,程序规划应掌握的基本原则之一便是使中止处理程序最短。所以依据FIFO行列的帧同步办法也不是最优的。

3、依据有限状况机的帧同步办法

为处理以上问题,能够选用依据有限状况机的规划办法。该办法将数据帧的接纳进程分为若干个状况:接纳信息头HEADl状况、接纳信息头HEAD2状况、接纳包长状况、接纳数据类型状况、接纳数据状况及接纳校验和状况。体系的初始状况为HEADl状况,各接纳状况间的状况搬运图如图4所示,仍用前面说到的序列“0x00 0xAA 0xAA 0x55…进行测验。跟着串口接纳中止新字节的接纳,体系的接纳状况顺次为HEAD1→HEAD1→HEAD2→HEAD2→LEN。可见此刻便是同步状况。该办法也快速、有用地完成了同步;可是需求留意的是,在每一次接纳完1帧完好的数据之后,有必要把体系的接纳状况从头设置为HEADl,不然将会影响下一帧的数据接纳。

尔后,程序依照协议开端顺次接纳数据帧长度、指令类型、数据和校验位。接纳完后,从头设置体系接纳状况为HEADl,一起对该数据帧进行校验。校验正确后,使用音讯机制告诉主程序依据指令类型对数据帧进行处理或履行相应的指令操作。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部