一种通用串口总线数据传输处理方法

文档序号:6558361阅读:148来源:国知局
专利名称:一种通用串口总线数据传输处理方法
技术领域
本发明涉及通用串口总线(USB,Universal Serial Bus)数据传输领域,特别是指USB硬件不符合USB协议栈所使用的开放的主机控制器接口(OHCI,Open Host Controller Interface)规范时,USB数据传输处理的方法。
背景技术
USB数据的传输需要由操作系统、I/O接口、文件系统、USB驱动、USB存储器(U盘)等几部分配合完成。如图1所示,为USB数据传输系统结构示意图,U盘18被操作系统视为块设备。操作系统不通过I/O系统12直接访问块设备,由I/O系统12通过文件系统13来访问块设备,支持U盘的USB驱动挂接在文件系统13上。支持U盘的USB驱动根据功能的不同分为MSC类驱动14、Hub类驱动15、USB驱动(USBD,UniversalSerial Bus Driver)16和主机控制器驱动(HCD,Host ControllerDriver)17,MSC类驱动14为文件系统13提供标准的块设备的API(Application Programming Interface)接口;Hub类驱动15通过调用USB系统软件提供的功能完成根集线器的配置和U盘的热插拔;USBD16处理与硬件无关的USB协议事件;HCD17处理与硬件相关的USB协议事件,向下驱动U盘18,实现USB数据传输。
请参阅图2,为增加了适配层的USB数据传输系统示意图,当USB驱动的协议栈使用OHCI规范,而USB硬件即主机控制器(HC,HostController)20不符合OHCI规范时,需要在HCD17与HC20之间加一个适配层19,完成不同协议间的转换,使HCD17能驱动不符合OHCI规范的USB硬件20,实现USB数据传输。需要传输数据时,操作系统11根据指令将数据处理成数据包,通过文件系统13、MSC类驱动14和USBD15,发送到HCD17上,适配层19完成不同协议间的转换后,U盘内的HC20进行数据的传输。
现有技术实现数据传输处理的方法为一帧起始(SOF,Start OfFlash)中断扫描HCD中的端点描述符(ED,Endpoint Descriptor)、传输描述符(TD,Transfer Descriptor)链,找到有数据要传输的TD;适配层在一帧(1毫秒)内将TD中相关数据信息填充到一个缓冲区描述符(BD,Buffer Descriptor)内,将BD的状态标志位R位置1;本帧内,HC扫描到填充好的BD;下一帧HC读取BD内相关数据信息,根据相关数据信息,HC进行数据的传输,并将数据传输的结果填充到BD相应状态位,作为BD的返回状态;下一个SOF中断扫描传输完成的BD,如果传输正确,BD返回状态为已接收(ACK),则继续传输数据;如果传输错误,BD返回状态为无响应(NAK),则保持HC状态,将返回状态为NAK的BD所描述的数据重传。
依据OHCI规范,在现有技术中,适配层在一帧内仅填充一个BD,HC只能基于单BD进行数据传输,数据的传输速度大约40k bytes/s,难以满足人们对数据传输快速、高效的要求。

发明内容
有鉴于此,本发明解决的技术问题是提供一种USB数据传输处理的方法,保证数据快速、高效的传输。
本发明的技术特征包括a、扫描端点描述符、传输描述符链,找到有数据传输的传输描述符,在一帧内将所述传输描述符内数据信息填充到至少两个缓冲区描述符中,同时将缓冲区描述符的状态标志位置位;b、主机控制器扫描状态标志位已置位的缓冲区描述符,根据所述缓冲区描述符内数据信息传输数据;c、缓冲区描述符返回状态为无响应时,从该缓冲区描述符开始重传。
其中,缓冲区描述符返回状态为已接收时,继续进行下一数据的传输。
其中,如果在一帧内将所述传输描述符内数据信息填充到三个或三个以上缓冲区描述符中,当缓冲区描述符返回状态为无响应时,停止数据传输,从返回状态为无响应的缓冲区描述符开始重传。
其中,主机控制器在一帧内扫描所有状态标志位已置位的缓冲区描述符,在下一帧主机控制器读取缓冲区描述符内数据信息,根据所述数据信息进行数据的传输,并将传输结果填充到缓冲区描述符的相应状态位。
其中,缓冲区描述符返回状态为无响应时,中断处理程序将主机控制器禁能,停止数据的传输,找出返回状态为来无响应的缓冲区描述符,将主机控制器解禁,从该缓冲区描述符开始进行数据重传。
其中,所述中断处理程序在主机控制器没有开始传输返回状态为无响应的缓冲区描述符之后第二个缓冲区描述符时,将主机控制器禁能。
其中,主机控制器将返回状态为无响应的缓冲区描述符及其后一个缓冲区描述符所描述的数据丢弃。
其中,如果程序在一帧内填充两个缓冲区描述符,当第一个缓冲区描述符返回状态为无响应时,主机控制器将两个缓冲区描述符所描述的数据丢弃;如果第二个缓冲区描述符返回状态为无响应,主机控制器将第二个缓冲区描述符所描述的数据丢弃。
其中,传输的数据包,其数据交替位表现为非0、1交替出现时,主机控制器判定数据包出错并将出错的数据包丢弃。
其中,如果程序在一帧内填充多个缓冲区描述符,通用串口总线中断级别设置为最高级别,并且所有的其他中断都为可重入、可嵌套的。
本发明USB数据传输处理方法,程序在一帧内填充至少两个BD,使HC可以基于至少两个BD进行数据传输,提高数据传输速度;当BD返回状态为NAK时,程序及时将HC禁能,停止数据传输,从返回状态为NAK的BD开始重传,保证传输数据的顺序不发生混乱,实现数据快速、高效的传输,将USB数据传输数度提高一倍以上。


图1为USB数据传输系统结构示意图;图2为增加了适配层的USB数据传输系统示意图;图3为HCD内ED、TD链结构示意图;图4为数据传输单元功能示意图;图5为BD的内部结构示意图;图6为本发明数据传输处理流程图;图7为本发明的一个实时例中,当BD返回状态为NAK时,数据处理方法示意图。
具体实施例方式
本发明采用的USB数据传输处理方法,在SOF中断扫描HCD内ED、TD链,找到有数据要传输的TD;适配层在一帧内将TD内相关数据信息填充到至少两个的BD中,同时将完成填充BD的状态标志位R位置1;本帧内HC扫描到R位为1的BD;在下一帧,HC根据BD内数据信息,进行数据的传输。
因此,本发明中适配层在一帧内填充至少两个BD,HC进行数据传输时,需要确保传输数据的正确性,而按照现有技术在BD返回状态为NAK时的处理方法,当一个BD返回状态为NAK时,HC本帧内不停止数据传输,继续从下一个BD中读取相关数据信息进行数据传输,这样会造成传输数据顺序错乱。
当BD返回状态为NAK时,利用中断处理程序及时将HC禁能,停止数据的传送,找出返回状态为NAK的BD,再将HC解禁,从该BD开始,进行数据重传,确保HC在一帧内基于多BD进行数据传输时,所传输数据的顺序不发生混乱,使USB数据传输速度增加一倍以上。
需要传输数据时,操作系统根据指令将数据处理成数据包,通过文件系统、MSC类驱动和USBD,发送到HCD上,HCD进行ED、TD数据结构的组建。请参阅图3,为HCD内ED、TD链结构示意图,TD链挂在ED链下。ED描述USB设备的一个端点的所有的数据传输,所有的ED连接在一起,组成ED链。TD描述最终要在USB总线上传输的数据包,属于同一个USB设备端点的TD连接在一起,组成TD链。HCD将需要传输的数据放置在TD链表下。
适配层主要功能是完成不同协议之间的转换,本发明中,USB硬件不符合OHCI规范,HC不能直接从HCD中直接读取数据,适配层负责将HCD中的TD转换成HC进行数据传输所需要的数据结构BD。请参阅图4,为数据传输单元功能示意图,数据传输单元41位于适配层内,适配层在数据传输中主要功能是通过数据传输单元41实现的,数据传输单元41包括有控制传输链表定位单元42、批传输处理链表定位单元43、带宽分配单元44、传输处理及出错处理45单元。
控制传输链表定位42和批传输链表定位43两单元负责对ED、TD链表的搜索,找到有数据要传输的TD。
带宽分配单元44负责将TD中相关数据信息填充到HC中的BD内,将TD转换成HC进行数据传输需要的数据结构BD,具体表现为将TD中相关数据信息填充到BD中,HC根据BD内相关数据信息进行数据的传输,带宽分配模块在一帧内填充BD的数量直接影响数据传输的速度。
本发明带宽分配单元44在一帧内填充至少两个BD,使HC在一帧内扫描到至少两个BD,在下一帧HC从所扫描到的BD中读取数据信息进行数据传输,请参阅图5,为BD的内部结构示意图,DATA LENGTH指BD所描述数据的长度,DATA BUFFER POINTER指BD所描述数据的起始地址,R位是BD的状态标志位,R位为1时,表示与该BD相关联的数据缓冲区已经准备好传输,R位为0时,表示与该BD相关联的数据缓冲区没有准备好传输。RXER、NAK、STAL、TO、UN、BOV表示BD的传输错误状态,这些状态位全为0,表示BD所描述的数据传输正确。
传输处理及出错处理单元45负责读取BD的返回状态,当数据传输错误时,控制数据的传输。传输处理及出错处理单元45从BD中读取返回状态,填充到TD的状态位,如果BD返回状态为ACK,继续进行数据的传输;如果返回状态为NAK,传输处理及出错处理单元45会在HC没有读取返回状态为NAK的BD之后第二个BD时,利用中断处理程序将HC禁能,停止数据的传送,找出返回状态为NAK的BD所描述的数据,再将HC解禁,从该BD开始,进行数据重传。
在USB系统中,各种USB设备都需要与主机相连,必须通过一个共同的接口接入主机,这个接口就是USB HC,HC是硬件、软件及固件的综合体,HC根据BD内数据长度、起始位置等相关信息将其所描述的数据传送到指定位置,并将数据传输的结果填充到BD相应的状态位,数据传输出错时,HC将传输错误的数据丢弃并重传。
本发明采用的数据传输处理方法是适配层内的带宽分配单元在一帧内填充至少两个BD,HC在一帧就可以扫描到至少两个BD,HC基于至少两个BD进行数据传输时,提高传输数度。当BD返回状态为NAK时,适配层中的传输处理及出错处理单元利用中断处理程序及时将HC禁能,停止数据的传输,找出返回状态为NAK的BD,从该BD开始进行数据的重传,使HC所传输的数据顺序不发生混乱。
请参阅图6,为本发明数据传输处理流程图,具体步骤为61、在SOF中断,扫描ED、TD链,找到有数据要传输的TD,操作系统将要传输的数据处理成数据包,通过文件系统、MSC类驱动、USBD传送到HCD上,HCD内的TD含有传输数据的相关信息;62、适配层在一帧内将TD中的数据信息填充到至少两个BD中,即是将TD转换成数据传输所需要的数据结构BD,同时将BD的状态标志位R位置1,表示与该BD相关联的数据缓冲区已经准备好传输;63、本帧内,HC扫描所有R位置1的BD,下一帧HC从扫描到的BD内读取数据信息,根据数据长度、起始地址等数据信息进行数据传输;HC每帧扫描一次R位为1的BD,并将所有扫描到的BD在下一帧进行传输,本发明适配层在一帧内填充至少两个BD,同时将其R位置1,HC基于至少两个BD进行数据的传输。
64、HC根据数据传输的结果填充BD相应的状态位,作为BD的返回状态,如果数据传输为已接收,BD返回状态为ACK;如果数据传输为无接收,BD返回状态为NAK,适配层将BD返回状态填充到TD的状态位;65、适配层根据BD的返回状态判断数据传输的结果,如果BD返回状态为ACK,则继续下一数据的传输;如果BD返回状态为NAK,并且一帧内填充三个或三个以上的BD,则利用中断处理程序,将HC禁能,在HC还没读取返回状态为NAK的BD之后第二个BD,停止数据的传输,若一帧内填充两个BD,则不需将HC禁能;66、找出返回状态为NAK的BD,将HC解禁,从该BD开始,进行数据重传;67、HC将返回状态为NAK的BD及其后一个BD中所描述的数据包,丢弃;如果在一帧内填充多个BD,其中一个BD返回状态为NAK时,该BD及其后一个BD所描述的数据包都丢弃;如果在一帧内填充两个BD,第一个BD返回状态为NAK时,两个BD所描述的数据包都丢弃;如果第二个BD返回状态为NAK,只需将第二个BD所描述的数据包丢弃。
请参阅图7,为本发明的一个实施例中,当BD返回状态为NAK时,数据处理方法示意图,HC在一帧内扫描到5个R位置1的BD,下一帧进行数据的传输,HC依次从5个BD中读取数据信息,进行数据传输。数据是以数据包的形式进行传输的,一个BD可能只描述一个数据包,也可能描述多个数据包,HC在传送第二个BD描述的数据包时发生传输错误,数据包丢失,HC将数据传输结果填充到第二个BD的状态位,第二个BD的返回状态位为NAK,BD的返回状态为NAK,利用TXE1中断程序及时将HC禁能,即在HC还没有开始读取第四个BD时将HC禁能,停止数据的传输,这时,HC只传输了前三个BD描述的数据包,找到第二个BD,将HC解禁,从第二个BD开始进行数据的重传,HC将第二个BD和第三个BD描述的数据包丢弃。
如果HC在一帧内扫描到两个BD,第一个BD返回状态为NAK时,两个BD描述的数据包都丢弃;如果第二个BD返回状态为NAK,只需将第二个BD描述的数据包丢弃。
数据是以数据包形式进行传输的,数据包有一个数据交替(datatoggle)位,当前一个数据包的data toggle位为0,下一个数据包的data toggle位则为1,数据包的data toggle位交替出现,当BD返回状态为NAK时,表明HC所传输的数据包为无响应情况,其后数据包的顺序就会发生混乱,数据包的data toggle位表现出非0、1交替状况,HC将data toggle出错的数据包全部丢弃,这样可以确保在出现在一个BD返回状态为NAK状态时,其后一个BD描述的数据包不被接受,将两个BD描述的数据丢弃重传,这样即保证了传输数据的顺序不会出错,也保证了程序的中断响应时间,HC传输后一个BD所描述数据包的时间,是中断程序响应的反应时间。
如果适配层在一帧内填充多个BD,要求USB中断级别设置为最高级别,并且要求所有的其他中断都为可重入、可嵌套的,这样即使CPU在处理其他的中断时,TXE1中断处理程序也能够实时响应;如果适配层在一帧内填充两个BD,TXE1中断处理程序不需要实时响应。
以上仅为本发明较佳实施例,并非用于限定本发明,任何熟悉该技术者,在不脱离本发明的精神和范畴内,所作的更动和润饰,均属本发明保护范围。
权利要求
1.一种通用串口总线数据传输处理方法,其特征在于,包括a、扫描端点描述符、传输描述符链,找到有数据传输的传输描述符,在一帧内将所述传输描述符内数据信息填充到至少两个缓冲区描述符中,同时将完成填充的缓冲区描述符的状态标志位置位;b、主机控制器扫描状态标志位已置位的缓冲区描述符,根据所述缓冲区描述符内数据信息传输数据;c、缓冲区描述符返回状态为无响应时,从该缓冲区描述符开始重传。
2.根据权利要求1所述的方法,其特征在于,在步骤c之后还包括缓冲区描述符返回状态为已接收时,继续进行下一数据的传输。
3.根据权利要求1所述的方法,其特征在于,所述步骤c还包括如果在一帧内将所述传输描述符内数据信息填充到三个或三个以上缓冲区描述符中,当缓冲区描述符返回状态为无响应时,停止数据传输,从返回状态为无响应的缓冲区描述符开始重传。
4.根据权利要求1所述的方法,其特征在于,所述步骤b具体为主机控制器在一帧内扫描所有状态标志位已置位的缓冲区描述符,在下一帧主机控制器读取缓冲区描述符内数据信息,根据所述数据信息进行数据的传输,并将传输结果填充到缓冲区描述符的相应状态位。
5.根据权利要求1所述的方法,其特征在于,所述步骤c具体为缓冲区描述符返回状态为无响应时,中断处理程序将主机控制器禁能,停止数据的传输,找出返回状态为无响应的缓冲区描述符,将主机控制器解禁,从该缓冲区描述符开始进行数据重传。
6.根据权利要求4所述的方法,其特征在于,所述中断处理程序将主机控制器禁能具体为所述中断处理程序在主机控制器没有开始传输返回状态为无响应的缓冲区描述符之后第二个缓冲区描述符时,将主机控制器禁能。
7.根据权利要求1至6任一项所述的方法,其特征在于,还包括主机控制器将返回状态为无响应的缓冲区描述符及其后一个缓冲区描述符描述的数据丢弃。
8.根据权利要求7所述的方法,其特征在于,还包括如果程序在一帧内填充两个缓冲区描述符,当第一个缓冲区描述符返回状态为无响应时,主机控制器将两个缓冲区描述符描述的数据丢弃;如果第二个缓冲区描述符返回状态为无响应,主机控制器将第二个缓冲区描述符描述的数据丢弃。
9.根据权利要求7所述的方法,其特征在于,还包括传输的数据包,其数据交替位表现为非0、1交替出现时,主机控制器判定数据包出错并将出错的数据包丢弃。
10.根据权利要求7所述的方法,其特征在于,还包括如果在一帧内填充多个缓冲区描述符,通用串口总线中断级别设置为最高级别,并且所有的其他中断都为可重入、可嵌套的。
全文摘要
本发明公开一种通用串口总线数据传输处理方法,包括扫描端点描述符、传输描述符链,找到有数据传输的传输描述符,将所述传输描述符内数据信息填充到至少两个缓冲区描述符中,同时将缓冲区描述符的状态标志位置1;主机控制器扫描状态标志位为1的缓冲区描述符,根据所述缓冲区描述符内数据信息传输数据;缓冲区描述符返回状态为无响应时,从该缓冲区描述符开始重传。缓冲区描述符返回状态为已接收时,继续进行下一数据的传输。本发明使主机控制器在基于至少两个缓冲区描述符进行数据传输时,所传输的数据顺序不发生混乱,保证数据快速、高效的传输,使数据的传输速度提高一倍以上。
文档编号G06F13/42GK1828571SQ20061007672
公开日2006年9月6日 申请日期2006年4月18日 优先权日2006年4月18日
发明者程翔 申请人:杭州华为三康技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1