一种串口通信方法与装置的制作方法

文档序号:6364608阅读:126来源:国知局
专利名称:一种串口通信方法与装置的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种串口通信方法与装置。
背景技术
串口通信作为一种方便,简单的数据交换手段,在嵌入式通信和调试中得到广泛的应用。由于以往串口一般用在速度要求不是很高的场合,因此,在现有的串口通信实现中,并没有过多的考虑串口通信的效率。参见图1,在现有的串口通信实现方式中,采用了多层次的结构。其中,串口设备作 为一个tty设备来实现,对应用程序来说,串口是一个tty设备,应用程序可以像操作一个普通文件一样来操作串口,保留了串口简单易用的优势。但是,现有的串口通信实现方式无法满足高速通信的要求。

发明内容
本发明的目的在于提供一种串口通信方法与装置,以简化串口通信装置的结构了,提高串口通信的速度,为此,本发明采用如下技术方案一种串口通信装置,包括应用程序模块、串口芯片驱动模块以及串口通信控制模块,其中串口芯片驱动模块,用于提供发送接口,当所述发送接口被应用程序模块调用时,将用户缓冲区中的数据拷贝到发送硬件缓冲区;接收来自串口通信控制模块发送的中断信号,并当接收到中断信号时,将接收硬件缓冲区中的数据拷贝到用户缓冲区;串口通信控制模块,用于接收数据,将接收到的数据存储在接收硬件缓冲区中,并向所述串口芯片驱动模块发送中断信号;将发送硬件缓冲区的数据发送出去。本发明实施例还提供一种利用上述的串口通信装置实现的串口通信方法,该方法包括应用程序模块通过调用所述串口芯片驱动模块的发送接口,由所述串口芯片驱动模块将用户缓冲区中的用户数据拷贝到发送硬件缓冲区,并由所述串口通信控制模块发送所述发送硬件缓冲区中的用户数据;当所述串口通信装置接收数据时,串口通信控制模块将接收到的数据存储到接收硬件缓冲区,并向所述串口芯片驱动模块发送中断信号,由所述串口芯片驱动模块将接收硬件缓冲区中的数据拷贝到用户缓冲区。本发明的上述实施例,串口通信装置包括应用程序模块、串口芯片驱动模块以及串口通信控制模块;在数据发送方向,应用程序模块通过调用所述串口芯片驱动模块的发送接口,由所述串口芯片驱动模块将用户缓冲区中的用户数据拷贝到发送硬件缓冲区,并由所述串口通信控制模块发送所述发送硬件缓冲区中的用户数据;在数据接收方向,串口通信控制模块将接收到的数据存储到接收硬件缓冲区,并向所述串口芯片驱动模块发送中断信号,由所述串口芯片驱动模块将接收硬件缓冲区中的数据拷贝到用户缓冲区,简化了串口通信装置的结构,提高了串口通信的速度。


图I为现有串口通信实现方式中的软件层次结构示意图;图2为本发明实施例提供的串口通信装置的结构示意图;图3为现有技术中的串口通信数据传输流程示意图;图4A为本发明实施例提供的串口通信数据发送流程示意图;图4B为本发明实施例提供的串口通信数据接收流程示意图; 图5为本发明实施例提供缓冲区设置方式的示意图;图6为本发明实施例提供的数据接收过程中缓冲区数组指针指向示意图;图7为本发明实施例提供的一种数据帧的结构示意图;图8为本发明实施例提供的数据帧在缓冲区中的分布情况示意图;图9为本发明实施例提供的数据帧接收流程示意图。
具体实施例方式下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。参见图2,为本发明实施例提供的一种串口通信装置的结构示意图,包括应用程序丰旲块I、串口芯片驱动I旲块2以及串口通彳目控制I旲块3。其中串口芯片驱动模块2,用于提供发送接口,当发送接口被应用程序模块I调用时,将用户缓冲区中的数据拷贝到发送硬件缓冲区;此外,串口芯片驱动模块2还可以用于接收来自串口通信控制模块发送的中断信号,并当接收到中断信号时,将接收硬件缓冲区中的数据拷贝到用户缓冲区;串口通信控制模块3,用于接收数据,将接收到的数据存储在接收硬件缓冲区中,并向所述串口芯片驱动模块发送中断信号;此外,串口通信控制模块3还可以用于将发送硬件缓冲区的数据发送出去。具体的,考虑到软件的层次越多,通信的开销越大。在本发明实施例中,对现有串口通信层次结构进行了简化。即在本发明实施例提供的串口通信装置中,软件层次包括应用程序模块I和串口芯片驱动模块2,减少了数据收发过程中,数据和/或地址拷贝造成的软件开销。进一步的,在现有串口通信实现方式中,串口芯片驱动中设计有驱动缓冲区。在数据接收流程中,需要将数据从接收硬件缓冲区拷贝到驱动缓冲区,然后由串口芯片驱动将数据从自身的缓冲区拷贝到用户缓冲区。数据发送流程则反之。其数据传输流程可以参见图3。由于内存拷贝是一个很费时间的操作,为了减少拷贝的次数,提高数据传输的效率,在本发明实施例提供的技术方案中,应用程序模块I采用函数直接调用的方式通过串口芯片驱动2发送数据;串口芯片驱动模块2通过回调的方式提交接收到的数据。
具体的,在数据发送流程中,应用程序模块I直接调用驱动的发送接口(以Tx(ints32SrcId, int s32DstId, int s32Len, void*pvoidTxBuf)为例),由串口芯片驱动模块 2将用户缓冲区中的数据拷贝到发送硬件缓冲区中,并置发送硬件缓冲区的状态为“可以发送”,由串口通信控制模块3将发送硬件缓冲区中的用户数据发送出去。即发送数据流程中,不需要将数据拷贝到驱动缓冲区,减少了拷贝的次数,其流程示意图可以如图4A所示。相应地,在数据接收流程中,当串口通信控制模块3接收到数据时,向驱动发送中断信号。驱动接收到中断信号后,调用应用程序的回调函数(如callbackO)。该回调函数调用串口芯片驱动模块2的接收接口(如Rx(ints32SrcId,int s32DstId,int s32Len,void*pvoidRxBuf)),由串口芯片驱动模块2将接收到的数据直接从接收硬件缓冲区拷贝到用户缓冲区。应用程序模块I使用回调函数获取并处理用户缓冲区中的数据,其数据发送流程示意图可以如图4B所示。通过以上描述可以得知,在本发明实施例提供的技术方案中,在数据发送/接收流程设计中,串口芯片驱动模块需要设计由用户缓冲区向发送硬件缓冲区拷贝数据的发送接口,以及由接收硬件缓冲区向用户缓冲区拷贝数据的接收接口。由于在数据收发过程中,串口芯片驱动模块将待发送数据从用户缓冲区拷贝到发送硬件缓冲区,或将串口通信装置接收到的数据从接收硬件缓冲区拷贝到用户缓冲区,而不需要驱动内部的数据拷贝,减少了拷贝次数,提高了串口通信速率。下面结合附图对本发明实施例中的缓冲区的设置方式进行详细说明。参见图5,在本发明实施例中,串口通信装置中设置有n个接收硬件缓冲区,以及分别对应各接收硬件缓冲区的n个备份缓冲区,并对应接收硬件缓冲区和备份缓冲区分别设置有接收硬件缓冲区指针数组和备份缓冲区指针数组,其中,接收硬件缓冲区指针数组中各元素分别指向对应的接收硬件缓冲区,备份缓冲区指针数组中各元素分别指向对应的备份缓冲区。如,接收硬件缓冲区数组的元素0指向接收硬件缓冲区0,接收硬件缓冲区数组的元素I指向接收硬件缓冲区1,以此类推。备份缓冲区数组的元素0指向备份缓冲区0,备份缓冲区数组的元素I指向备份缓冲区1,以此类推。参见图6当串口通信装置接收到数据时,串口通信控制模块3将数据放到接收硬件缓冲区0,当接收硬件缓冲区0装满或者在预设时间内未再接收到数据时,串口通信控制模块3关闭接收硬件缓冲区0并向串口芯片驱动模块2发送一个中断信号。串口芯片驱动模块2接收到中断信号后,将接收硬件缓冲区指针数组的元素0指向备份缓冲区0,同时把备份缓冲区指针数组的元素0指向接收硬件缓冲区O。此时,接收硬件缓冲区指针数组的元素0指向的缓冲区(备份缓冲区0)可以立即用作下次数据接收;同时,备份缓冲区指针数组的元素0指向的缓冲区(接收硬件缓冲区0)已经包含了接收到的数据,可以由串口芯片驱动模块2将其中的数据直接拷贝到用户缓冲区。后续流程中串口通信装置接收到的数据会放到接收硬件缓冲区I中,接收硬件缓冲区I的处理和接收硬件缓冲区0类似。通过以上描述可以得知,在本发明实施例提供的技术方案中,在数据接收过程,串口芯片驱动模块2内部只是交换了接收硬件缓冲区以及备份缓冲区的指针,并不需要将接收硬件缓冲区数据拷贝到备份缓冲区,实现了驱动内部的零拷贝,减少了驱动开销,提高了驱动的效率。进一步的,在现有串口通信实现的方式中,在接收数据的流程中,串口通信控制模、块3每接收到一个字符就产生一次中断信号。在现有串口通信实现方式中,中断开销一般为20us左右,则现有串口通信实现方式中,理论上最高的速度为8bits/20us,即400kbps。无法满足高速串口通信的需求。为了减少中断次数,提高串口通信速率,在本发明实施例提供的技术方案中,串口通信控制模块3仅在接收完一帧数据或接收硬件缓冲区装满时,向串口芯片驱动模块2发送中断信号,减少了中断开销。具体的,在本发明实施例提供的技术方案中,在串口通信的实现中设计了一种帧结构,其结构示意图可以如图7所示,其中同步头8bit,源模块ID长度为4bit,目的模块ID长度为4bit,数据长度域为16bit。源模块ID、目的模块ID以及数据长度域共3个byte共同组成帧头。用数据结构表
示如下
typedef struct tagSTRUSCCFRMHDR{
u32bit8FrmFlag: 8; /* 顿头标识 */
u32bit4SrcModuleId : 4; /*源模块 ID */
u32bit4DstModuleId : 4; /* 目的模块 ID*/
u32bitl6Length: 16;/* 数据长度 */
} STRUSCC—FRMHDR;其中,源模块ID和目的模块ID分别用于标识发送数据的应用程序和接收数据的应用程序,串口芯片驱动模块2根据数据帧中包含的源模块ID和目的模块ID进行相应数据转发。例如,串口通信装置A和串口通信装置B各有两个应用程序(应用程序A_1和八_2以及应用程序B_1和B_2),则根据源模块ID和目的模块ID可以识别数据在应用程序间的传输方向,进而进行相应的处理。其中,同一个应用程序接收到不同的应用程序发送的数据时,进行的处理流程可能不同,其具体实现在此不再赘述。当接收硬件缓冲区装满时,或接收完一帧数据时,串口通信控制模块3向串口芯片驱动模块2发送中断信号,以使串口芯片驱动模块2将接收硬件缓冲区中的数据拷贝到对应的备份缓冲区中(在本发明实施例中可以通过改变接收硬件缓冲区指针数组以及备份缓冲区指针数组中的指针的指向实现)。在这种实现方式下,一个接收硬件缓冲区中可能会收到多帧数据,也可能一帧数据同时存储在两个接收硬件缓冲区中,但串口芯片驱动模块2可以根据数据帧的格式把数据从备份缓冲区中解析出来,再拷贝到用户缓冲区。下面结合附图以及具体的应用场景对本发明实施例中数据帧的接收流程进行详细描述。在该实施例中,假设每个数据帧的最大长度 为2048bytes,每个接收硬件缓冲区/备份缓冲区的大小为3072byte,则数据帧在缓冲区里的分布可以包括如图8中所示的5种情况。
参见图9,在该实施例中,解析缓冲区中的数据帧可以具体包括以下步骤步骤I、在第i个缓冲区逐字节搜索同步头(如0x5A);若找到同步头,则转至步骤
2;若未找到同步头,转至步骤11 ;步骤2、判断缓冲区剩余字节数r是否小于3 ;若判断为否,则转至步骤3 ;若判断为是,则转至步骤9;步骤3、在缓冲区i中收帧头得到数据帧长度L2,转至步骤4 ;步骤4、判断缓冲区i剩余长度LI是否小于L2,若判断为否,则判定其为分布情况
(一),并转至步骤5;若判断为是,则转至步骤6 ;步骤5、调用回调函数整段拷贝数据帧到用户缓冲区,转至步骤11 ; 步骤6、判断缓冲区i剩余长度LI是否为0 ;若判断为是,则判定气氛不情况为(四),令i = i+1,并转至步骤5;若判断为否,则判定其分布情况为(五),令i = i+1,并转至步骤7 ;步骤7、在缓冲区i-1收LI个字节,并在缓冲区i收L2-L1个字节,转至步骤8 ;步骤8、调用回调函数分段拷贝数据帧到用户缓冲区,转至步骤11 ;步骤9、判断缓冲区i剩余字节数r是否为0 ;若判断为是,则判定其分布情况为
(二),令i= i+1,并转至步骤3 ;若判断为否,则判定其分布情况为(三),令i = i+1,并转至步骤10 ;步骤10、在缓冲区i-1收r个字节,并在缓冲区i收3-r个字节组成帧头,得到数据帧长度L2,转至步骤5 ;步骤11、缓冲区i剩余长度是否为0通过以上描述可以得出,在本发明实施例提供的技术方案中,一个接收硬件缓冲区装满或接收完一帧数据产生一次中断信号,而非一个字符产生一次中断信号,减少了中断开销,提高了串口通信速率。同时,为数据块设计帧结构,使得在不同数据分布情况下,均可以根据数据帧的格式把数据从缓冲区中解析出来。为了进一步提高串口通信速率,在本发明实施例中,在分配接收硬件缓冲区/发送硬件缓冲区/备份缓冲区/用户缓冲区时,采用4字节对齐的方式,即接收硬件缓冲区/发送硬件缓冲区/备份缓冲区/用户缓冲区的起始地址为4的倍数,且接收硬件缓冲区/发送硬件缓冲区/备份缓冲区/用户缓冲区的大小为4字节的整数倍。具体的,由于对于32/64位处理器,4字节对齐拷贝所消耗的CPU Cycle (CentralProcessing Unit Cycle,中央处理器周期)相对非4字节拷贝要少,为了减少拷贝消耗,进一步提高串口通信速率,在本发明实施例中,在分配接收硬件缓冲区、发送硬件缓冲区、备份缓冲区以及用户缓冲区时,均采用4字节对齐的分配方式。其中,在具体实现上,可以采用系统调用cacheDmaMalloc函数以及R0UND_UP宏来保证分配的缓冲区都是4字节对齐的。同时,实测结果表明4字节对齐拷贝要比非4字节拷贝快3到4倍,相应地,将数据从备份缓冲区中拷贝到用户缓冲区的拷贝速度比非4字节的情况下可以快3到4倍,较明显地提高了串口通信的速率。应该认识到,上述实施例中描述的数据帧结构以及相应数据结构的长度仅为本发明实施例提供的技术方案的一种具体实现,并不是对本发明保护范围的影响,基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他数据帧结构以及相应数据结构的长度,都属于本申请保护的范围
通过以上流程可以看出,在本发明实施例提供的技术方案中,首先,将串口通信实现的软件层次结构简化为应用程序模块和串口芯片驱动模块,减少了数据收发过程中,数据和/或地址拷贝造成的软件开销,提高了串口通信速率;其次,在收据收发过程中,通过串口芯片驱动模块将待发送的用户数据从用户缓冲区拷贝到发送硬件缓冲区,或将接收到的数据从接收硬件缓冲区拷贝到用户缓冲区,减少了驱动内部的拷贝操作,减少了拷贝开销,进一步提高了串口通信速率;再者,通过为数据块设计帧结构,一个数据块产生一次中断信号,减少了中断次数,进一步提高了串口通信速率;最后,分配数据缓冲区(用户缓冲区/接收硬件缓冲区/发送硬件缓冲区/备份缓冲区)采用4字节对齐的方式,进一步提高了串口通信速率。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端测试设备(可以是手机终端测试仪,或者矢量信号分析仪等设备)执行本发明各个实施例所述的方法。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
权利要求
1.一种串口通信装置,其特征在于,包括应用程序模块、串口芯片驱动模块以及串口通信控制模块,其中串口芯片驱动模块,用于提供发送接口,当所述发送接口被应用程序模块调用时,将用户缓冲区中的数据拷贝到发送硬件缓冲区;接收来自串口通信控制模块发送的中断信号, 并当接收到中断信号时,将接收硬件缓冲区中的数据拷贝到用户缓冲区;串口通信控制模块,用于接收数据,将接收到的数据存储在接收硬件缓冲区中,并向所述串口芯片驱动模块发送中断信号;将发送硬件缓冲区的数据发送出去。
2.如权利要求I所述的串口通信装置,其特征在于,所述串口芯片驱动模块具体通过以下方式将接收硬件缓冲区中的数据拷贝到用户缓冲区所述串口芯片驱动模块调用所述应用程序模块的回调函数,由该回调函数调用所述串口芯片驱动模块的接收接口将所述接收硬件缓冲区中的数据拷贝到用户缓冲区。
3.如权利要求I所述的串口通信装置,其特征在于,所述串口通信装置中设置有多个接收硬件缓冲区,以及分别对应各接收硬件缓冲区的备份缓冲区,并对应所述接收硬件缓冲区和备份缓冲区分别设置有接收硬件缓冲区指针数组和备份缓冲区指针数组,其中,所述接收硬件缓冲区指针数组中各元素分别指向对应的接收硬件缓冲区,所述备份缓冲区指针数组中各元素分别指向对应的备份缓冲区;所述串口通信控制模块具体用于,将接收到的数据存储到接收硬件缓冲区,并当接收硬件缓冲区装满或在预设时间内未再接收到数据时,向所述串口芯片驱动模块发送中断信号;所述串口芯片驱动模块具体用于,当接收到所述串口通信控制模块的中断信号时,将指向该接收硬件缓冲区的元素指向对应该接收硬件缓冲区的备份缓冲区,并将指向该备份缓冲区的元素指向该接收硬件缓冲区;将该接收硬件缓冲区中的数据拷贝到用户缓冲区。
4.如权利要求I所述的串口通信装置,其特征在于,所述串口通信控制模块具体用于,当接收硬件缓冲区装满或接收完一帧数据时,向所述串口芯片驱动模块发送中断信号;其中,所述一帧数据包括同步头、帧头以及数据;所述串口芯片驱动模块具体用于,当接收到所述串口通信控制模块发送的中断信号时,将接收硬件缓冲区中的数据以数据帧的形式拷贝到用户缓冲区。
5.如权利要求I所述的串口通信装置,其特征在于,所述接收硬件缓中区、发送硬件缓冲区以及用户缓冲区的起始地址为4的整数倍,且所述接收硬件缓冲区、发送硬件缓冲区以及用户缓冲区的大小为4字节的整数倍。
6.一种利用如权利要求I所述的串口通信装置实现的串口通信方法,其特征在于,该方法包括应用程序模块通过调用所述串口芯片驱动模块的发送接口,由所述串口芯片驱动模块将用户缓冲区中的用户数据拷贝到发送硬件缓冲区,并由所述串口通信控制模块发送所述发送硬件缓冲区中的用户数据;当所述串口通信装置接收数据时,串口通信控制模块将接收到的数据存储到接收硬件缓冲区,并向所述串口芯片驱动模块发送中断信号,由所述串口芯片驱动模块将接收硬件缓冲区中的数据拷贝到用户缓冲区。
7.如权利要求6所述的方法,其特征在于,所述串口芯片驱动模块将接收硬件缓冲区中的数据拷贝到用户缓冲区,具体为所述串口芯片驱动模块调用所述应用程序模块的回调函数,由该回调函数调用所述串口芯片驱动模块的接收接口将所述接收硬件缓冲区中的数据拷贝到用户缓冲区。
8.如权利要求6所述的方法,其特征在于,所述串口通信装置中设置有多个接收硬件缓冲区,以及分别对应各接收硬件缓冲区的备份缓冲区,并对应所述接收硬件缓冲区和备份缓冲区分别设置有接收硬件缓冲区指针数组和备份缓冲区指针数组,其中,所述接收硬件缓冲区指针数组中各元素分别指向对应的接收硬件缓冲区,所述备份缓冲区指针数组中各元素分别指向对应的备份缓冲区; 所述串口通信控制模块向所述串口芯片驱动模块发送中断信号,具体为将接收到的数据存储到接收硬件缓冲区,并当接收硬件缓冲区装满或在预设时间内未再接收到数据时,向所述串口芯片驱动模块发送中断信号;所述串口通信控制模块将所述接收硬件缓冲区中的数据拷贝到用户缓冲区,具体为 当接收到所述串口通信控制模块的中断信号时,所述串口通信控制模块将指向该接收硬件缓冲区的元素指向对应该接收硬件缓冲区的备份缓冲区,并将指向该备份缓冲区的元素指向该接收硬件缓冲区;将该接收硬件缓冲区中的数据拷贝到用户缓冲区。
9.如权利要求6所述的方法,其特征在于,所述串口通信控制模块向所述串口芯片驱动模块发送中断信号,具体为当接收硬件缓冲区装满或接收完一帧数据时,向所述串口芯片驱动模块发送中断信号;其中,所述一帧数据包括同步头、帧头以及数据;所述串口芯片驱动模块将接收硬件缓冲区中的数据拷贝到用户缓冲区,具体为当接收到所述串口通信控制模块发送的中断信号时,所述串口芯片驱动模块将接收硬件缓冲区中的数据以数据帧的形式拷贝到用户缓冲区。
10.如权利要求6所述的方法,其特征在于,所述接收硬件缓冲区、发送硬件缓冲区以及用户缓冲区的起始地址为4的整数倍,且所述接收硬件缓冲区、发送硬件缓冲区以及用户缓冲区的大小为4字节的整数倍。
全文摘要
本发明公开了一种串口通信方法与装置,该串口通信装置包括应用程序模块、串口芯片驱动模块以及串口通信控制模块,其中串口芯片驱动模块,用于提供发送接口,当所述发送接口被应用程序模块调用时,将用户缓冲区中的数据拷贝到发送硬件缓冲区;接收来自串口通信控制模块发送的的中断信号,并当接收到中断信号时,将接收硬件缓冲区中的数据拷贝到用户缓冲区;串口通信控制模块,用于接收数据,将接收到的数据存储在接收硬件缓冲区中,并向所述串口芯片驱动模块发送中断信号;将发送硬件缓冲区的数据发送出去。在本发明中,简化了串口通信装置的结构,提高了串口通信速度。
文档编号G06F13/38GK102629240SQ201210031090
公开日2012年8月8日 申请日期2012年2月13日 优先权日2012年2月13日
发明者张力, 钱红燕 申请人:上海创远仪器技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1