一种支持定长包、变长包、混合包的串口数据提取方法与流程

文档序号:13876287阅读:1237来源:国知局
一种支持定长包、变长包、混合包的串口数据提取方法与流程

本发明属于嵌入式系统串口数据处理领域,涉及一种支持定长包、变长包、混合包的串口数据提取方法。



背景技术:

在嵌入式应用中,设备间数据交互很多是以串口数据包形式进行的。通常情况下,接收方通过以下两种方式接收串口数据包:嵌入式系统的cpu集成具有“空闲中断”特性的串口控制器,数据包传输完毕时,触发中断,中断服务程序读取控制器中的数据;嵌入式系统集成单独的串口协处理器,该协处理器可以是fpga、soc、专用ic等形式,通过软件设置包格式,该协处理器自动处理串口数据,将符合包格式的数据传送给cpu做进一步处理。

以上两种数据包接收形式,都对硬件有特殊需求,不仅增加了物料成本,还给后期应用带来了功耗等其它影响。本发明是通过软件完成数据包接收,软件动态配置包格式,完成系统的快速部署。



技术实现要素:

本发明的目的是提供一种串口数据包的提取方法,通过软件动态配置,完成串口数据包的接收,包格式支持定长包、变长包、混合包。

本发明的技术方案是:一种支持定长包、变长包、混合包的串口数据提取方法,包括以下步骤:

步骤1初始配置;

步骤2核对端口号:当输入的端口号,在系统串口列表中时,继续后续操作;否则返回异常代码;

步骤3串口数据溢出:当系统无法及时处理串口控制器fifo中的数据时,会发生数据溢出,执行清fifo数据操作,并清除串口控制器中的溢出标志字;

步骤4判断fifo中数据计数是否变化,若计数值变大,则备份该计数值,统计复位计数器;否则将计数器累加1;

步骤5判断是否“空闲触发”:计时器超时,且fifo的数据计数大于0;若满足条件,则判定数据传输完毕,可以提取fifo中的数据进一步处理,并触发cpu内部中断;若计时器超时,但fifo计数值为0,将计时器的值设置为“门限值+1”;

步骤6计时器复位,并根据设置的包格式完成数据包提取。

所述的一种支持定长包、变长包、混合包的串口数据提取方法,所述步骤1包括以下步骤:

步骤1.1配置包格式、串口通道号,所述包格式包括定长包、变长包、混合包;

步骤1.2配置包头长度、包尾长度、总长度;

步骤1.3配置包头字符、包尾字符、超时门限。

所述的一种支持定长包、变长包、混合包的串口数据提取方法,步骤6所述的包格式为定长包时,所述步骤6具体包括以下步骤:

6.1a读取串口控制器fifo中全部数据至软件缓冲区;

6.2a根据已设定的包头,在软件缓冲区中搜索该包头,搜索到时,返回第一个包头的缓冲区索引,并且执行步骤3;若未发现包头,则返回异常代码;

6.3a数据长度符合性判断,若缓冲区中的数据长度小于包长度,返回异常代码;若缓冲区中的数据长度满足条件,则根据指定长度,在软件缓冲区中顺序读取数据,并返回实际读取的数据长度及数据包。

所述的一种支持定长包、变长包、混合包的串口数据提取方法,步骤6所述的包格式为变长包时,所述步骤6具体包括以下步骤:

6.1b读取串口控制器fifo中全部数据至软件缓冲区;

6.2b根据已设定的包头,在软件缓冲区中搜索该包头,搜索到时,返回第一个包头的缓冲区索引,并且执行步骤3;若未发现包头,则返回异常代码;

6.3b根据已设定的包尾,从软件缓冲区中包头位置向后搜索该包尾,搜索到时,返回第一个包尾的缓冲区索引,并且执行步骤4;若未发现包尾,则返回异常代码;

6.4b读取软件缓冲区中包头和包尾之间的全部数据,返回读取的实际长度和全部数据。

所述的一种支持定长包、变长包、混合包的串口数据提取方法,步骤6所述的包格式为混合包,所述混合包由多个变长包组成,所述步骤6具体包括以下步骤:

6.1c读取串口控制器fifo中全部数据至软件缓冲区;

6.2c根据已定义的变长包序列,按照上文所述的变长包的数据提取步骤,依次在软件缓冲区中提取,若提取到某个变长包,则置位该变长包更新标志。

本发明的有益效果:本发明为嵌入式系统设计提供了一种具有实时性高、通用强、灵活性突出等特点串口数据包接收方案,可应用于外部交联数据协议多变的场合中,通过动态配置,完成串口接收重构。同时降低了硬件成本,亦能降低嵌入式系统整体功耗。

附图说明

图1“空闲触发”的处理流程;

图2为数据接收主流程;

图3为定长包数据接收流程;

图4为变长包数据接收流程;

图5为混合包数据接收流程。

具体实施方式

本发明对串口控制器及通信的包格式有以下约束:

1)“空闲触发”机制:设置空闲时间的门限为ts,当检测到串口数据后,若在数据总线的一个ts时间内,没有接收到新数据,则判定完成一次数据包传输,触发cpu内部中断。“空闲触发”后,中断服务程序读取串口fifo中的数据,并根据已配置的包格式,完成数据包(定长包、变长包、混合包中的任意一种)的提取,若提取成功,返回已提取的数据,否则返回异常代码。

2)定长包:数据帧由固定长度的帧头以及固定长度的数据组成。

3)变长包:数据帧由固定长度的帧头及固定长度的帧尾及数据足证,帧头与帧尾之间的数据长度可变。

4)混合包:由若干个变长包组成,这些变长包更新周期可以不同。混合包的长度不固定。

5)定长包长度,初始化时,设置包格式为定长包,并根据实际长度设定。

6)变长包长度,初始化时,设置包格式为变长包,并根据实际设置包头、包尾长度,以包头与包尾长度总和作为最小包长度。

7)定长包包头,初始化时,设置包格式为定长包,并设置包头长度及包头每个字节的字符。

8)变长包包头,初始化时,设置包格式为变长包,并设置包头长度及包头每个字节的字符。

9)变长包包尾,初始化时,设置包格式为变长包,并设置包尾长度及包尾每个字节的字符。

10)软件缓冲区:在ram中开辟的一段空间,最小长度同串口控制器fifo的大小一致。

11)硬件需求:集成串口控制器的嵌入式系统,串口控制器中含一定大小的接收fifo,系统采用定期查询方式采集串口数据,查询周期为ts。

12)数据包1,初始化时,设置的混合包序列中的第一个变长包。

13)数据包n,初始化时,设置的混合包序列中的最后一个变长包。

下文结合说明书附图对本发明做详细说明,空闲触发主流程见附图1、图2。

1.初始配置:

1.1配置包格式(定长包、变长包、混合包)、串口通道号。

1.2配置包头长度、包尾长度、总长度(含包头、包尾)。

1.3配置包头字符、包尾字符、超时门限。

2.核对端口号:当输入的端口号,在系统串口列表中时,继续后续操作;否则返回异常代码。

3.串口数据溢出:当系统无法及时处理串口控制器fifo中的数据时,会发生数据溢出,执行清fifo数据操作,并清除串口控制器中的溢出标志字。

4.判断fifo中数据计数是否变化,若计数值变大,则备份该计数值,统计复位计数器;否则将计数器累加1。

5.判断是否“空闲触发”:计时器超时,且fifo的数据计数大于0。若满足条件,则判定数据传输完毕,可以提取fifo中的数据进一步处理,并触发cpu内部中断;若计时器超时,但fifo计数值为0,将计时器的值设置为“门限值+1”。

6.计时器复位,并根据设置的包格式(定长包、变长包、混合包),按照以下步骤完成数据包提取。

定长包提取,见附图3:

6.1a读取串口控制器fifo中全部数据至软件缓冲区。

6.2a根据已设定的包头,在软件缓冲区中搜索该包头,搜索到时,返回第一个包头的缓冲区索引,并且执行步骤6.3a;若未发现包头,则返回异常代码。

6.3a数据长度符合性判断,若缓冲区中的数据长度小于包长度,返回异常代码;若缓冲区中的数据长度满足条件,则根据指定长度,在软件缓冲区中顺序读取数据,并返回实际读取的数据长度及数据包。

变长包提取,见附图4:

6.1b读取串口控制器fifo中全部数据至软件缓冲区。

6.2b根据已设定的包头,在软件缓冲区中搜索该包头,搜索到时,返回第一个包头的缓冲区索引,并且执行步骤6.3b;若未发现包头,则返回异常代码。

6.3b根据已设定的包尾,从软件缓冲区中包头位置向后搜索该包尾,搜索到时,返回第一个包尾的缓冲区索引,并且执行步骤6.4b;若未发现包尾,则返回异常代码。

6.4b读取软件缓冲区中包头和包尾之间的全部数据,返回读取的实际长度和全部数据。

混合包提取,见附图5:

6.1c读取串口控制器fifo中全部数据至软件缓冲区。

6.2c根据已定义的变长包序列(数据包1至数据包n),按照变长包的数据提取方式,依次在软件缓冲区中提取,若提取到某个变长包,则置位该变长包更新标志。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1