发明内容
本发明提供一种不同接口设备通信中的数据传输方法及系统,用以提高数据传输效率。
本发明提供一种不同接口设备通信中的数据传输方法,通信双方设备通过对报文进行接口协议转换的报文转换模块相连,并且各自在内存中设置数据缓存器和描述寄存器,当数据传输时,包括步骤:
发送方设备向接收方设备发送寄存器读请求报文,携带接收方设备的描述寄存器地址;
接收方设备根据接收到的寄存器读请求报文,向发送方设备返回寄存器读回应报文,携带所述描述寄存器地址指向的描述寄存器中存储的数据缓存器地址和数据缓存器的状态指示信息;
发送方设备根据接收到的寄存器读回应报文确认接收方设备的数据缓存器状态为空时,向接收方设备发送内存写请求报文,携带所述数据缓存器地址和有效数据;
接收方设备根据接收到的内存写请求报文,将有效数据写入所述数据缓存器地址指向的数据缓存器中;
发送方设备将有效数据发送完成之后向接收方设备发送寄存器写请求报文,携带接收方设备的描述寄存器地址;
接收方设备根据接收到的寄存器写请求报文,在所述描述寄存器地址指向的描述寄存器中将数据缓存器的状态指示信息修改为非空;
接收方设备在将所述数据缓存器中的有效数据处理完成之后,清空所述数据缓存器,并在描述寄存器中将数据缓存器的状态指示信息修改为空。
本发明提供一种不同接口设备通信中的数据传输系统,包括各自在内存中设置数据缓存器和描述寄存器的通信双方设备和报文转换模块,其中:
所述报文转换模块,用于连接通信双方设备,并对通信双方设备发送的报文进行通信对端接口协议转换;
发送方设备,用于向接收方设备发送寄存器读请求报文,携带接收方设备的描述寄存器地址,以及根据接收到的寄存器读回应报文确认接收方设备的数据缓存器状态为空时,向接收方设备发送内存写请求报文,携带所述数据缓存器地址和有效数据;以及将有效数据全部发送之后向接收方设备发送寄存器写请求报文,携带接收方设备的描述寄存器地址;
接收方设备,用于根据接收到的寄存器读请求报文,向发送方设备返回寄存器读回应报文,携带所述描述寄存器地址指向的描述寄存器中存储的数据缓存器地址和数据缓存器的状态指示信息,以及根据接收到的内存写请求报文,将有效数据写入所述数据缓存器地址指向的数据缓存器中;根据接收到的寄存器写请求报文,在所述描述寄存器地址指向的描述寄存器中将数据缓存器的状态指示信息修改为非空,以及在所述数据缓存器中的有效数据处理完成之后,清空所述数据缓存器,并在描述寄存器中将数据缓存器的状态指示信息修改为空。
本发明提供的不同接口设备通信中的数据传输方法及系统,在数据传输过程中数据能否发送由发送方设备通过读取接收方设备的描述寄存器获知,数据发送过程只涉及数据缓存器和描述寄存器的读写操作,而不需要等待接收方设备响应请求的过程,接收方设备只需在发送方设备完成数据发送之后对数据进行处理即可,并且通信双方的数据发送都是采用写操作的形式,能有效的提升数据传输效率。
具体实施方式
针对现有技术在不同接口设备通信中存在的数据传输效率较低的问题,本发明实施例提供了一种不同接口设备通信中的数据传输方法,通信双方设备通过报文转换模块相连,报文转换模块用于对通信双方设备发送的报文进行通信对端接口协议转换,并且通信双方设备各自在内存中设置数据缓存器和描述寄存器,数据缓存器用于缓存接收到的有效数据,描述寄存器用于存储数据缓存器地址和数据缓存器的状态指示信息,状态指示信息用于指示数据缓存器状态为空还是非空,当在通信双方设备之间进行数据传输时,如图1所示,包括如下步骤:
S101、发送方设备向接收方设备发送寄存器读请求报文,携带接收方设备的描述寄存器地址;
S102、接收方设备根据接收到的寄存器读请求报文,向发送方设备返回寄存器读回应报文,携带描述寄存器地址指向的描述寄存器中存储的数据缓存器地址和数据缓存器的状态指示信息;
S103、发送方设备根据接收到的寄存器读回应报文确认接收方设备的数据缓存器状态为空时,向接收方设备发送内存写请求报文,携带数据缓存器地址和有效数据;
其中,发送方设备在待发送的有效数据总长度大于内存写请求报文能够携带的有效数据长度时,需要将待发送的有效数据封装在多个内存写请求报文中,并连续发送该多个内存写请求报文,直到将待发送的有效数据全部发送完毕;
S104、接收方设备根据接收到的内存写请求报文,将有效数据写入所述数据缓存器地址指向的数据缓存器中。
至此,已经实现了发送方设备向接收方设备发送有效数据,较佳的,该方法还包括:
发送方设备将有效数据全部发送之后向接收方设备发送寄存器写请求报文,携带接收方设备的描述寄存器地址,以通知接收方设备已经向其发送了有效数据;
接收方设备根据接收到的寄存器写请求报文,在描述寄存器地址指向的描述寄存器中将数据缓存器的状态指示信息修改为非空。
接收方设备在发送方设备完成有效数据的发送之后,对有效数据进行处理,较优的该方法还包括:
接收方设备在将数据缓存器中的有效数据处理完成之后,清空数据缓存器,并在描述寄存器中将数据缓存器的状态指示信息修改为空。
较佳的,通信双方设备各自在内存中设置至少两个数据缓存器和描述寄存器,内存结构示意图如图2所示。数据缓存器和描述寄存器一一对应,每一个描述寄存器中存储对应数据缓存器地址和数据缓存器的状态指示信息,各描述寄存器之间采用链表方式进行管理,在描述寄存器中增加一个指针用于指向下一个描述寄存器,即每一个描述寄存器中还存储下一个描述寄存器地址。
如果通信双方设备在各自的内存中设置了至少两个数据缓存器和描述寄存器,则接收方设备返回的寄存器读回应报文中还携带描述寄存器地址指向的描述寄存器中存储的下一个描述寄存器地址,以及该方法还包括:
发送方设备在将当前有效数据全部发送之后,根据接收到的寄存器读回应报文中携带的下一个描述寄存器地址,更新本地存储的接收方设备的描述寄存器地址,为下一次数据发送作准备。
本发明实施例中,发送方设备需要在中央处理器的控制下执行数据传输,中央处理器可以内置于发送方设备中或者设置在发送方设备的外部。
基于同一技术构思,本发明实施例提供了一种不同接口设备通信中的数据传输系统,如图3所示,包括报文转换模块300,各自在内存中设置数据缓存器和描述寄存器的通信双方设备,为了便于区分将一次数据传输过程中发送数据的设备称为发送方设备301,接收数据的设备称为接收方设备302,发送方设备和接收方设备是相对而言的,也是可以相互转换的。较佳的,发送方设备301在中央处理器CPU 303的控制下执行数据传输,中央处理器303可以内置于发送方设备301中或者设置在发送方设备301的外部,图3以中央处理器303设置在发送方设备301的外部为例。其中:
报文转换模块300,用于连接通信双方设备,并对通信双方设备发送的报文进行通信对端接口协议转换;
发送方设备301,用于向接收方设备302发送寄存器读请求报文,携带接收方设备的描述寄存器地址,以及根据接收到的寄存器读回应报文确认接收方设备302的数据缓存器状态为空时,向接收方设备302发送内存写请求报文,携带数据缓存器地址和有效数据;
接收方设备302,用于根据接收到的寄存器读请求报文,向发送方设备303返回寄存器读回应报文,携带描述寄存器地址指向的描述寄存器中存储的数据缓存器地址和数据缓存器的状态指示信息,以及根据接收到的内存写请求报文,将有效数据写入数据缓存器地址指向的数据缓存器中。
较佳的,发送方设备301,还用于将有效数据全部发送之后向接收方设备302发送寄存器写请求报文,携带接收方设备302的描述寄存器地址,以通知接收方设备向其发送了有效数据;
接收方设备302,还用于根据接收到的寄存器写请求报,在描述寄存器地址指向的描述寄存器中将数据缓存器的状态指示信息修改为非空。
较佳的,接收方设备302,还用于在将数据缓存器中的有效数据处理完成之后,清空数据缓存器,并在描述寄存器中将数据缓存器状态指示信息修改为空。
其中通信双方设备各自在内存中设置至少两个数据缓存器和描述寄存器,每一个描述寄存器中还存储下一个描述寄存器地址,数据缓存器和描述寄存器一一对应;以及
接收方设备302,还用于在返回的寄存器读回应报文中携带描述寄存器地址指向的描述寄存器中存储的下一个描述寄存器地址;
发送方设备301,还用于在将当前有效数据全部发送之后,根据接收到的寄存器读回应报文中携带的下一个描述寄存器地址,更新本地存储的接收方设备的描述寄存器地址,为下一次发送数据作准备。
需要指出的是,中央处理器303可以通过管理接口对报文转换模块300的内部寄存器进行访问,以获知报文转换模块300是否正常运行,从而有效控制发送方设备的数据传输。报文转换模块300的内部寄存器包括状态寄存器、控制寄存器和中断寄存器。
本发明实施例提供不同接口设备通信中的数据传输方法,相比现有技术提供的技术方案,减少了数据传输中发送要求读/写数据请求的过程,也就相应减少了等待接收方设备响应请求的过程;本发明实施例中数据能否发送由发送方设备通过读取描述寄存器获知,整个数据的发送过程只涉及数据缓存器和描述寄存器的读写操作,该部分的操作可由DMA(Direct Memory Access,直接内存接入)控制器完成,而不需要接收方设备参与其中,接收方设备只需在发送方设备完成数据发送之后对数据进行处理即可,并且所有的数据发送都是采用写操作的形式,能有效的提升数据传输效率。
为了方便理解,通信双方设备以SPI4设备和PCI Express设备为例,对本发明实施例提供的不同接口设备通信中的数据传输方法进行详细说明。当然通信双方设备也可以为SPI4设备和HT设备,SPI4设备和Rapid IO设备,等等,不再赘述。
SPI4设备发送基于SPI4接口协议的SPI4报文,SPI4报文格式如图4所示,包括类型、地址和数据三个字段,其中:
类型字段表示SPI4报文的类型,SPI4报文的类型包括寄存器读/写请求报文、寄存器读/写回应报文、内存读/写请求报文和内存读/写回应报文,其中写回应报文和读请求报文没有数据字段;
地址字段表示SPI4报文进行读写的地址;
数据字段表示SPI4报文携带的需要读写的数据内容。
PCI Express设备发送基于PCI Express接口协议的PCI Express报文,PCIExpress报文格式如图5所示,包括头部、数据和校验三个字段,其中:
头部字段表示PCI Express报文的类型和进行读写的地址等信息,PCIExpress报文的类型同样包括寄存器读/写请求报文、寄存器读/写回应报文、内存读/写请求报文和内存读/写回应报文,其中写回应报文和读请求报文没有数据字段;
数据字段表示PCI Express报文携带的需要读写的数据内容;
校验字段用于检验PCI Express报文是否被正确接收。
为了实现SPI4设备和PCI Express设备之间的相互通信,SPI4设备和PCIExpress设备通过报文转换模块相连,报文转换模块用于对通信双方发送的报文进行通信对端接口协议转换,即进行报文类型和地址等信息的解析并根据报文类型和地址等信息将SPI4设备发送的SPI4报文转换成相同类型和地址的PCI Express报文发送给PCI Express设备,将PCI Express设备发送的PCIExpress报文转换成相同类型和地址的SPI4报文发送给SPI4设备;
由于PCI Express报文的头部字段定义非常复杂,报文转换模块并不需要对PCI Express报文的头部字段全部解析,只需要能够解析出报文类型和地址,实现各种类型报文在SPI4报文与PCI Express报文之间的互相转换即可,这样就能保证SPI4设备与PCI Express设备之间的相互通信。
SPI4设备和PCI Express设备通信中的数据传输方法,主要解决思路是:在SPI4设备和PCI Express设备的内存(Memory)中设置多个数据缓存器和描述寄存器,数据缓存器和描述寄存器是一一对应的。其中,数据缓存器用于缓存接收到的有效数据,描述寄存器用于存储对应数据缓存器的相关信息,包括数据缓存器地址、数据缓存器的状态指示信息,以及下一个描述寄存器地址。当SPI4设备有数据需要发送给PCI Express设备时,SPI4设备根据本地存储的PCI Express设备中描述寄存器地址,从PCI Express设备中读取描述寄存器,获得对应数据缓存器的相关信息,如果根据相关信息确认数据缓存器为空,则根据数据缓存器地址连续向PCI Express设备中写入有效数据,有效数据全部写入数据缓存器之后,修改PCI Express设备的描述寄存器中存储的数据缓存器的状态指示信息,将该状态指示信息修改为非空,以通知PCI Express设备向其发送了有效数据。当PCI Express设备有数据需要发送给SPI4设备时,与SPI4设备向PCI Express设备发送数据的过程一致,只是由PCI Express设备向SPI4设备发起相关的读写操作。
下面,以SPI4设备向PCI Express发送数据为例说明SPI4设备与PCIExpress设备通信中的数据传输过程,如图6所示,为数据传输系统示意图,发送方设备即为SPI4设备,接收方设备即为PCI Express设备,通信双方设备通过报文转发模块相连,SPI4设备在CPU的控制下工作,假设CPU内置于SPI4设备中。
如图7所示,SPI4设备向PCI Express发送数据的处理流程,包括:
S701、SPI4设备在CPU的控制下,向报文转换模块发送SPI4报文(为了便于区分称为第一SPI4报文),该第一SPI4报文的类型为寄存器读请求报文,携带的地址为PCI Express设备的描述寄存器地址;
S702、报文转换模块将接收到的第一SPI4报文进行解析并转换为PCIExpress报文(对应的称为第一PCI Express报文)发送给PCI Express设备,该第一PCI Express报文的类型为寄存器读请求报文,携带的地址为PCIExpress设备的描述寄存器地址;
S703、PCI Express设备根据接收到的第一PCI Express报文,向报文转换模块返回PCI Express报文(为了便于区分称为第二PCI Express报文),返回的第二PCI Express报文的类型为寄存器读回应报文,数据字段携带描述寄存器地址指向的描述寄存器中存储的数据缓存器地址、数据缓存器是否可用的指示信息以及下一个描述寄存器地址;
S704、报文转换模块将接收到的第二PCI Express报文进行解析并转换为SPI4报文(对应的称为第二SPI4报文)发送给SPI4设备,第二SPI4报文的类型为寄存器读回应报文,数据字段携带描述寄存器地址指向的描述寄存器中存储的数据缓存器地址、数据缓存器的状态指示信息以及下一个描述寄存器地址:
S705、SPI4设备在CPU的控制下,从接收到的第二SPI4报文的数据字段中获取PCI Express设备的数据缓存器地址、该数据缓存器的状态指示信息以及下一个描述寄存器地址,如果状态指示信息指示该数据缓存器状态为空,SPI4设备在CPU的控制下向报文转换模块发送SPI4报文(为了便于区分称为第三SPI4报文),该第三SPI4报文的类型为内存写请求报文,携带的地址为PCI Express设备的数据缓存器地址,数据字段中携带需要发送给PCI Express设备的有效数据;
S706、报文转换模块将第三SPI4报文进行解析并转换为PCI Express报文(对应的称为第三PCI Express报文)发送给PCI Express设备,该第三PCIExpress报文的类型为内存写请求报文,携带的地址为PCI Express设备的数据缓存器地址,数据字段中携带需要发送给PCI Express设备的有效数据;
S707、PCI Express设备接收到第三PCI Express报文后,将该第三PCIExpress报文数据字段中携带的有效数据写入数据缓存器地址指向的数据缓存器中;
S708、SPI4设备在CPU的控制下,将有效数据全部发送之后,向报文转换模块发送SPI4报文(为了便于区分称为第四SPI4报文),该第四SPI4报文的类型为寄存器写请求报文,携带的地址为PCI Express设备的描述寄存器地址,并且根据接收到的第二SPI4报文中携带的下一个描述寄存器地址,更新本地存储的接收方设备的描述寄存器地址,为下一次发送数据作准备;
S709、报文转换模块将接收到的第四SPI4报文进行解析并转换为PCIExpress报文(对应的称为第四PCI Express报文)后发送给PCI Express设备,该第四PCI Express报文的类型为寄存器写请求报文携带的地址为PCI Express设备的描述寄存器地址,以通知PCI Express设备向其发送了有效数据;
S710、PCI Express设备根据接收到的第四PCI Express报文,在描述寄存器地址指向的描述寄存器中将数据缓存器的状态指示信息修改为非空;
S711、PCI Express设备在数据缓存器中的有效数据处理完成之后,清空数据缓存器,并在描述寄存器中将数据缓存器的状态指示信息修改为空。
PCI Express设备向SPI4设备发送数据的流程与SPI4设备向PCI Express发送数据的流程一致,在PCI Express设备为发送方设备时,同样需要受到CPU的控制,PCI Express设备的CPU可以设置于PCI Express设备内,也可以设置在PCI Express设备的外部。
本发明实施例提供的SPI4设备与PCI Express设备通信中的数据传输方法,实现了在该两种不同接口设备之间有效的数据通信,数据传输均采用写操作的形式以及通过设置多个数据缓存器和描述寄存器解决了SPI4设备和PCIExpress设备之间发送大量数据时可能出现的数据堵塞问题,提升了数据传输效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。