法律状态公告日
法律状态信息
法律状态
2020-06-30
授权
授权
2018-03-30
实质审查的生效 IPC(主分类):G06F13/12 申请日:20170906
实质审查的生效
2018-03-06
公开
公开
技术领域
本发明属于嵌入式系统串口数据处理领域,涉及一种支持定长包、变长包、混合包的串口数据提取方法。
背景技术
在嵌入式应用中,设备间数据交互很多是以串口数据包形式进行的。通常情况下,接收方通过以下两种方式接收串口数据包:嵌入式系统的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),按照变长包的数据提取方式,依次在软件缓冲区中提取,若提取到某个变长包,则置位该变长包更新标志。
机译: 数据包交换机可将可变长度的数据包转换为固定长度的数据包,并且在输入队列中使用的QOS类别比输出队列中的少
机译: HDLC可变长度包和非HDLC固定长度包的混合传输系统
机译: 集成消息系统,用于可变长度的HDLC数据包和固定长度的语音/视频包。