带有缓存区的SDIO-WIFI数据传输方法及系统与流程

文档序号:16146694发布日期:2018-12-05 16:32阅读:547来源:国知局

本发明涉及无线通信技术领域,尤其涉及一种带有缓存区的sdio-wifi数据传输方法及系统。

背景技术

目前,sdio接口的wifi模组被广泛使用在平板电脑、行车记录仪等电子产品的内核当中。sdio-wifi模组是基于sdio接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议ieee802.11协议栈以及tcp/ip协议栈,能够实现用户主平台数据通过sdio口到无线网络之间的转换。sdio具有传输数据快,兼容sd、mmc接口等特点。sdio-wifi模组的吞吐是影响用户体验的一个重要因素,容易受到软、硬件性能的影响。

现有的内核当中,wifi驱动和sdio驱动的通信采用的是同步方式,即wifi驱动向sdio驱动发送数据时,必须等待当前一笔sdio数据发送结束后,才能准备发送下一笔数据。这种通信方式导致wifi驱动和sdio驱动无法并行执行,并且同步过程中的等待时间很容易受到操作系统调度速度的影响,wifi吞吐效率低,吞吐抖动大,影响用户体验。



技术实现要素:

针对现有技术的不足,本发明提出了一种带有缓存区的sdio-wifi数据传输方法及系统,该方法或系统通过先进先出形式的缓存区对wifi驱动发送给sdio驱动的数据进行缓存,wifi驱动无需等待sdio驱动把数据发送完毕,即可处理其它的数据,解决了现有sdio-wifi模组的wifi驱动和sdio驱动无法并行执行,同步过程中的等待时间容易受到操作系统调度速度的影响,wifi吞吐效率低,吞吐抖动大,影响用户体验的问题。

为了实现上述目的,本发明技术方案如下:

一种带有缓存区的sdio-wifi数据传输方法,包括以下步骤:

s1:接收数据,将数据打包成数据包,然后将数据包写入先进先出形式的缓存区。

s2:从该缓存区中读取数据包;解析数据包,获取数据;然后将数据从sdio接口发送到外部设备。

进一步地,该缓存区为环形缓存区。

进一步地,该s1包括以下步骤:

s101:判断该环形缓存区是否非满;若为是,则执行s102;若为否,则重新执行s101。

s102:将当前接收的数据打包成数据包,把数据包写入该环形缓存区。

s103:接收新的数据。

s104:返回执行s101。

进一步地,该s2包括以下步骤:

s201:判断该环形缓存区是否非空;若为是,则执行s202;若为否,则重新执行s201。

s202:从该环形缓存区中读取数据包。

s203:通过dma控制器解析数据包,获取数据;然后将数据从sdio接口发送到外部设备。

s204:返回执行s201。

进一步地,该s203包括以下步骤:

s2031:向cpu提出总线接管请求。

s2032:判断是否接收到cpu发出的允许接管信号;若为是,则执行s2033;若为否,则返回执行s2031。

s2033:对该环形缓存区里面的数据包进行解析,从解析的数据包中获取读指针和数据大小。

s2034:读取该读指针所指向的数据,并将读取的数据从sdio接口发送到外部设备。

s2035:根据数据大小判断数据发送是否完成;若为是,则释放总线;若为否,则执行s2036。

s2036:将该读指针增1。

s2037:返回执行s2034。

一种带有缓存区的sdio-wifi数据传输系统,包括wifi驱动模块、sdio驱动模块、缓存模块。该wifi驱动模块获取数据,将数据打包成数据包,然后将数据包写入先进先出形式的该缓存模块。该缓存模块对数据包进行缓存。该sdio驱动模块从该缓存模块读取数据包;解析数据包获取数据;然后将数据从sdio接口发送到外部设备。

进一步地,该缓存模块为环形缓存区。

进一步地,该wifi驱动模块包含数据接收单元、第一判断单元、数据包写入单元。该数据接收单元接收当前的数据。该第一判断单元判断环形缓存区是否非满;若为是,则驱动该数据包写入单元将该数据接收单元接收的数据打包成数据包,并把数据包写入环形缓存区,并驱动该数据接收单元接收新的数据;若为否,则重新判断环形缓存区是否非满。

进一步地,该sdio驱动模块包含第二判断单元、数据读取单元、dma控制器、sdio接口。该第二判断单元判断环形缓存区是否非空;若为是,则驱动该数据读取单元从环形缓存区中读取数据包;若为否,则重新判断环形缓存区是否非空。该dma控制器将该数据读取单元读取的数据包进行解析,获取数据;然后将数据从sdio接口发送到外部设备。

进一步地,该dma控制器包含总线接管请求部、接管信号判断部、数据包解析部、寻址部、数据读取及发送部、数据发送状态判断部、读指针修改部。该总线接管请求部用于向cpu提出总线接管请求。该接管信号判断部用于断是否接收到cpu发出的允许接管信号;若为是,则驱动该寻址部;若为否,则驱动该总线接管请求部。该数据包解析部用于解析从环形缓冲区获取的数据包,从解析的数据包中获取读指针和数据大小。该寻址部用于根据读指针对数据进行寻址。该数据读取及发送部用于读取该读指针所指向的数据,并将读取的数据从sdio接口发送到外部设备。该数据发送状态判断部用于根据数据大小判断数据发送是否完成;若为是,则释放总线;若为否,则驱动该读指针修改部。该读指针修改部用于将该读指针增1,然后驱动该寻址部。

本发明的有益效果:

该方法或系统通过先进先出形式的缓存区对wifi驱动发送给sdio驱动的数据进行缓存,wifi驱动无需等待sdio驱动把数据发送完毕,即可处理其它的数据,提高了wifi吞吐效率,吞吐抖动小,可以在终端减少延时,提高通信效率。

附图说明

图1为该带有缓存区的sdio-wifi数据传输方法的流程示意图。

图2为图1中步骤s1的流程示意图。

图3为图1中步骤s2的流程示意图。

图4为图3中步骤s203的流程示意图。

图5为该带有缓存区的sdio-wifi数据传输系统的逻辑方块图。

其中,图1至图5的附图标记为:wifi驱动模块1、sdio驱动模块2、缓存模块3。

具体实施方式

下面结合附图和实施例,进一步阐述本发明。

实施例1:

如图1所示,一种带有缓存区的sdio-wifi数据传输方法,包括以下步骤:

s1:接收数据,将数据打包成数据包,然后将数据包写入先进先出形式的缓存区。

s2:从缓存区中读取数据包;解析数据包,获取数据;然后将数据从sdio接口发送到外部设备。

先进先出的缓存区,其特点是缓存区内的数据的写入或读取可以并发执行。这样,wifi驱动无需等待sdio驱动把数据发送完毕,即可处理其它的工作,例如准备其它的数据。提高了wifi吞吐效率,吞吐抖动小,可以在终端减少延时,提高通信效率。

把数据长度,数据地址等进行打包,对数据进行打包的时候,不进行数据拷贝,仅仅复制数据地址。数据传递采用指针传递的方式,数据包里面保存指向需要传输的数据的指针,这样避免数据拷贝开销,减少内存的使用,提高效率。

较佳地,缓存区采用环形缓存区(ringbuffer)。环形缓存区是一种首尾相连的队列数据结构,遵循先进先出原则。环形缓存区的写入进程与读取进程可以采用“生产者与消费者”的模型来缓冲,从而方便了缓存的使用和管理。环形缓存区的容量大小可根据上传数据包的的多少来设置。

具体地,如图2所示,步骤s1包括以下步骤:

s101:判断该环形缓存区是否非满;若为是,则执行s102;若为否,则重新执行s101,等待环形缓存区非满。

s102:将当前接收的数据打包成数据包,把数据包写入该环形缓存区。

s103:接收新的数据。

s104:返回执行s101。

具体地,如图3所示,步骤s2包括以下步骤:

s201:判断环形缓存区是否非空;若为是,则执行s202;若为否,则重新执行s201,等待环形缓存区非空。

s202:从环形缓存区中读取数据包。

s203:通过dma控制器解析数据包,获取数据;然后将数据从sdio接口发送到外部设备。

s204:返回执行s201。

环形缓存区用一组连续地址的存储单元依次存放从队列头到队列尾的数据,设置写指针write_pos、读指针read_pos,通过两个指针write_pos和read_pos分别指向读取位置和写入位置。

初始化队列时,令write_pos=read_pos=0。当有数据写入环形缓存区时,写指针write_pos增1;当有数据从环形缓存区读出时,读指针read_pos增1。若队列已满,不能往队列写入数据;若队列为空,则不能读取数据。判断队列是否为满的的方法是判断(write_pos+1)%queue_size==read_pos%queue_size是否成立;若为是,则队列为满;若为否,则队列非满。判断队列是否为空的方法是判断read_pos==write_pos是否成立;若为是,则队列为空;若为否,则队列非空。queue_size为环形缓存区存储空间的大小。

dma即为直接存储器存取(directmemoryaccess)。是指外部设备不通过cpu而直接与系统内存交换数据的接口技术。

要把外部设备的数据读入内存或把内存的数据传送到外部设备,一般都要通过cpu控制完成,如cpu程序查询或中断方式。利用中断进行数据传送,可以大大提高cpu的利用率。

但是采用中断传送有它的缺点,对于一个高速i/o设备,以及批量交换数据的情况,dma方式,能解决上述问题。dma在外部设备与dram间直接进行数据交换,而不通过cpu,这样数据传送的速度就只取决于dram和外部设备的工作速度。

通常系统的总线是由cpu管理的。在dma方式时,就希望cpu把这些总线让出来,即cpu连到这些总线上的线处于第三态--高阻状态,而由dma控制器接管,控制传送的字节数,判断dma是否结束,以及发出dma结束信号。

如图4所示,步骤s203具体包括以下步骤:

s2031:向cpu提出总线接管请求。

s2032:判断是否接收到cpu发出的允许接管信号;若为是,则执行s2033;若为否,则返回执行s2031。

s2033:对环形缓存区里面的数据包进行解析,从解析的数据包中获取该包数据的数据大小,读指针read_pos,目标地址等。根据读指针read_pos对数据进行寻址。

s2034:读取读指针read_pos所指向的数据,并将读取的数据从sdio接口发送到外部设备。

s2035:根据数据大小判断数据发送是否完成;若为是,则释放总线;若为否,则执行s2036。

s2036:将读指针read_pos增1。

s2037:返回执行s2034。

实施例2:

如图5所示,一种带有缓存区的sdio-wifi数据传输系统,包括wifi驱动模块1、sdio驱动模块2、缓存模块3。

wifi驱动模块1获取内核封装后的数据,将数据打包成数据包,然后将数据包写入先进先出形式的缓存模块3;缓存模块3对数据包进行缓存;sdio驱动模块2从缓存模块3读取数据包;解析数据包获取数据;然后将数据从sdio接口发送到外部设备。

先进先出形式的缓存模块3,其特点是缓存区内的数据的写入或读取可以并发执行。这样,wifi驱动模块1将当前数据发送到缓存模块3后,无需等待sdio驱动模块2发送数据,即可准备下一次数据的发送,wifi驱动模块1与sdio驱动模块2并行工作,提高wifi吞吐量,并降低吞吐抖动和延时,可以在终端减少延时,提高通信效率。

把数据长度,数据地址等进行打包,对数据进行打包的时候,不进行数据拷贝,仅仅复制数据地址。数据传递采用指针传递的方式,数据包里面保存指向需要传输的数据的指针,这样避免数据拷贝开销,减少内存的使用,提高效率。

较佳地,缓存模块3为环形缓存区。环形缓存区是一种首尾相连的队列数据结构,遵循先进先出原则。环形缓存区的写入进程与读取进程可以采用“生产者与消费者”的模型来缓冲,从而方便了缓存的使用和管理。环形缓存区的容量大小可根据数据包的多少来设置。

具体地,wifi驱动模块1包含数据接收单元、第一判断单元、数据包写入单元。

数据接收单元接收当前的数据。第一判断单元判断环形缓存区是否非满;若为是,则驱动数据包写入单元将数据接收单元接收的数据打包成数据包,并把数据包写入环形缓存区,并驱动数据接收单元接收新的数据;若为否,则重新判断环形缓存区是否非满。

具体地,sdio驱动模块2包含第二判断单元、数据读取单元、dma控制器、sdio接口。

第二判断单元判断环形缓存区是否非空;若为是,则驱动数据读取单元从环形缓存区中读取数据包;若为否,则重新判断环形缓存区是否非空。dma控制器将数据读取单元读取的数据包进行解析,获取数据;然后将数据从sdio接口发送到外部设备。

环形缓存区用一组连续地址的存储单元依次存放从队列头到队列尾的数据,设置写指针write_pos、读指针read_pos,通过两个指针write_pos和read_pos分别指向读取位置和写入位置。

初始化队列时,令write_pos=read_pos=0。当有数据写入环形缓存区时,写指针write_pos增1;当有数据从环形缓存区读出时,读指针read_pos增1。若队列已满,不能往队列写入数据;若队列为空,则不能读取数据。判断队列是否为满的的方法是判断(write_pos+1)%queue_size==read_pos%queue_size是否成立;若为是,则队列为满;若为否,则队列非满。判断队列是否为空的方法是判断read_pos==write_pos是否成立;若为是,则队列为空;若为否,则队列非空。queue_size为环形缓存区存储空间的大小。

dma即为直接存储器存取(directmemoryaccess)。是指外部设备不通过cpu而直接与系统内存交换数据的接口技术。

要把外部设备的数据读入内存或把内存的数据传送到外部设备,一般都要通过cpu控制完成,如cpu程序查询或中断方式。利用中断进行数据传送,可以大大提高cpu的利用率。

但是采用中断传送有它的缺点,对于一个高速i/o设备,以及批量交换数据的情况,dma方式,能解决上述问题。dma在外部设备与dram间直接进行数据交换,而不通过cpu,这样数据传送的速度就只取决于dram和外部设备的工作速度。

通常系统的总线是由cpu管理的。在dma方式时,就希望cpu把这些总线让出来,即cpu连到这些总线上的线处于第三态--高阻状态,而由dma控制器接管,控制传送的字节数,判断dma是否结束,以及发出dma结束信号。

dma控制器包含总线接管请求部、接管信号判断部、数据包解析部,寻址部、数据读取及发送部、数据发送状态判断部、读指针修改部。

总线接管请求部用于向cpu提出总线接管请求。

接管信号判断部用于断是否接收到cpu发出的允许接管信号;若为是,则驱动寻址部;若为否,则驱动总线接管请求部。

数据包解析部用于解析从环形缓冲区获取的数据包,从解析的数据包中获取读指针和数据大小。

寻址部用于根据读指针read_pos对数据进行寻址。

数据读取及发送部用于读取读指针read_pos所指向的数据,并将读取的数据从sdio接口发送到外部设备。

数据发送状态判断部用于根据数据大小判断数据发送是否完成;若为是,则释放总线;若为否,则驱动读指针修改部。

读指针修改部用于将读指针read_pos增1,然后驱动寻址部。

以上所述的仅是本发明的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的基本构思的前提下直接导出或联想到的其它改进和变化均应认为包含在本发明的保护范围之内。

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