相关申请的交叉引用
本申请基于并且要求于2016年9月14日提交的第2016-179288号日本专利申请的优先权的利益,其全部公开通过引用包含于此。
背景技术:
本公开涉及一种装置、数据传送系统和数据传送方法,并且例如涉及一种符合usb(通用串行总线)3.1gen2的装置、数据传送系统和数据传送方法。
usb3.1gen1(usb3.0)的输出传送中的数据包(dp)包括两个包,即数据包头(dph)和数据包净荷(dpp)。另外,按照dph和dpp的次序执行dp的传送。
这里,在usb3.1gen1中,如果在dph中发生某种包错误,则在usb装置的链路层中丢弃dph和dpp对。因此,由于usb装置的协议层不接收与错误相关的包,所以在协议层中不需要当发生包错误时执行的处理。
另外,在作为继usb3.1gen1之后的规范的usb3.1gen2中,在dph中添加了“lengthfieldreplica(长度字段副本)”字段。另外,所述规范被改变,从而当dph中的crc值是错误值并且“lengthfieldreplica(长度字段副本)”字段具有正确值时,仅dph在链路层中被丢弃并且对应的dpp被发送给协议层(通用串行总线3.1规范修订版1.0章节7和8)。
技术实现要素:
然而,本发明人已发现下面的问题。即,在通用串行总线3.1规范修订版1.0章节7和8中存在问题,即它需要用于处理下面的情况的电路结构:当dph在特定条件下不正确时,保留正确接收的dpp并且仅再次发送dph。
通过下面说明书中的描述和附图,其它目的和新的特征将会变得更加清楚。
根据一个实施例,一种通用串行总线usb装置包括:第一处理单元,被配置为当预定错误被包括在从主机设备接收到的包的头中时丢弃头并且将包的净荷发送给随后级;和第二处理单元,被配置为丢弃接收到的净荷并且向主机设备发送包重新发送请求。
根据上述实施例,可防止或减小电路尺寸的增加。
附图说明
通过下面结合附图对某些实施例进行的描述,以上和其它方面、优点和特征将会变得更加清楚,其中:
图1是显示根据第一实施例的主机设备和usb装置的结构的方框图;
图2是用于解释根据第一实施例的链路层中的dph接收处理的流程的流程图;
图3是用于解释根据第一实施例的协议层中的dph接收处理的流程的流程图;
图4是用于解释根据第一实施例的协议层中的dpp接收处理的流程的流程图;
图5是显示根据第一实施例的当在dph中发生预定错误时的每个层中的处理流程的序列图;
图6是用于解释根据第二实施例的链路层中的dph接收处理的流程的流程图;
图7是用于解释根据第二实施例的协议层中的dpp接收处理的流程的流程图;
图8是显示根据第二实施例的当在dph中发生预定错误时的每个层中的处理流程的序列图;
图9是用于解释根据第三实施例的主机设备中的dp发送处理的流程的流程图;
图10是显示根据第三实施例的当在dph中发生预定错误时的每个层中的处理流程的序列图;
图11是用于解释根据第四实施例的链路层中的dpp接收处理的流程的流程图;
图12是显示根据第四实施例的在dph和dpp的接收次序颠倒的情况下的每个层中的处理的序列图;
图13是显示当在usb3.1gen1中的dph中发生crc错误时的每个层中的处理流程的序列图;和
图14是显示当在根据usb3.1gen2的普通实现方式中的dph中发生预定错误时的每个层中的处理流程的序列图。
具体实施方式
以下参照附图详细地解释用于解决问题的上述方式所应用于的特定实施例。相同的符号在附图中始终被分派给相同的部件,并且其重复的解释根据需要被省略以使所述解释变得明晰。
在下面的实施例中,根据需要,通过使用不同部分或不同实施例来解释本公开。然而,除非另外指定,否则那些实施例并非彼此不相关。也就是说,它们以这种方式相关:一个实施例是另一个实施例的一部分或整体的修改示例、应用示例、详细示例或补充示例。另外,在下面的实施例中,当提及元件的数值等(包括数量、值、量、范围等)时,除了所述数值被明确地指定或所述数值基于其原理显然局限于特定数值的情况之外,所述数值不限于所述特定数值。即,也可使用比所述特定数值大的数值或比所述特定数值小的数值。
另外,在下面的实施例中,除了它们的部件(包括操作步骤等)被明确地指定或所述部件(包括操作步骤等)基于其原理显然不可缺少的情况之外,所述部件(包括操作步骤等)未必是不可缺少的。类似地,在下面的实施例中,当提及部件等的形状、位置关系等时,除了所述形状被明确地指定或基本上与所述形状类似或相似的形状等基于其原理被去除的情况之外,基本上与所述形状类似或相似的形状等也被包括在所述形状中。对于上述数值等(包括数量、值、量、范围等),这也是适用的。
以下解释本发明人如何得出以下示出的实施例的细节。首先,参照图13中示出的序列图解释当在usb3.1gen1中的dph中发生crc错误时执行的每个层中的处理流程,usb3.1gen1是在usb3.1gen2之前的规范。在这个示例中,示出根据usb3.1gen1在批量输出传送的中间开始的操作。即,假设:usb装置已经正确地接收到dp,直至从主机设备发送的具有序号(snum)x-1(snum=x-1)的dp。
因此,首先,usb装置的协议层将ack(snum=x)发送给主机设备。响应于此,主机设备将具有snumx(snum=x)的dph和dpp发送给usb装置。然后,usb装置在它的物理层和链路层中接收具有snumx(snum=x)的dph。假设:此时,在接收到的dph中检测到crc错误。因此,根据usb3.1gen1的链路层丢弃dph,并且也丢弃在dph之后接收到的具有snumx(snum=x)的dpp。注意,这个链路层不将具有snumx(snum=x)的dph和dpp传送给随后级的协议层。另外,这个链路层将lbad命令发送给主机设备作为dph重新发送请求。
在接收到lbad命令时,主机设备将lrty命令发送给usb装置。注意,usb装置忽略从主机设备发送的数据,直至usb装置从主机设备接收到lrty命令。在发送lrty命令之后,主机设备再次将具有snumx(snum=x)的dph和dpp发送给usb装置。当接收到的dph正确时,usb装置的链路层将lgood命令发送给主机设备并且将具有snumx(snum=x)的dph和dpp传送给协议层。当usb装置的协议层正确地接收到具有snumx(snum=x)的dph和dpp时,它将指示正确接收并且请求具有snumx+1(snum=x+1)的下一个数据的ack(snum=x+1)发送给主机设备。
接下来,解释根据作为继usb3.1gen1之后的规范的usb3.1gen2的普通实现方式。在usb3.1gen2中,如上所述,即使当dph中的crc值是错误值时并且当新添加的“lengthfieldreplica(长度字段副本)”字段具有正确值时,仅dph在链路层中被丢弃,并且对应的dpp被发送给协议层。因此,对于由于dph中的错误而不传送dph并且仅将dpp传送给协议层的情况,可设想在协议层中提供专用缓冲器。这个专用缓冲器不同于已经在协议层中提供的特定端点的数据缓冲器。另外,可设想在协议层中提供控制电路,所述控制电路在重新发送dph之后重新布置具有相同snum的已经接收到的dpp和重新发送的dph的存储次序。因此,当根据usb3.1gen2执行普通实现方式时,电路尺寸由于上述缓冲器和控制电路的添加而增加。例如,考虑这样的情况:在粗略估计中,数据缓冲器需要用于存储等同于至少一个包(1024字节)的数据的触发器(flip-flop)或ram(随机存取存储器)。
接下来,参照图14中示出的序列图解释当在根据usb3.1gen2的普通实现方式中的dph中发生crc错误时执行的每个层中的处理流程。在这个示例中,示出根据usb3.1gen2在批量输出传送的中间开始的操作。即,假设:usb装置已经正确地接收到dp,直至从主机设备发送的具有snumx-1(snum=x-1)的dp。
因此,根据usb3.1gen2的主机设备将具有snumx(snum=x)的dph和dpp发送给usb装置。然后,根据usb3.1gen2的usb装置在它的物理层和链路层中接收具有snumx(snum=x)的dph。假设:此时,在接收到的dph中检测到crc错误并且接收到的dph中的“lengthfieldreplica(长度字段副本)”字段具有正确值。注意,所述正确值意味着:“lengthfieldreplica(长度字段副本)”字段具有某个范围内的值。其后,usb3.1gen2中的链路层丢弃dph并且将dpp传送给协议层。另外,链路层将lbad命令发送给主机设备。
协议层将接收到的dpp存储到上述添加的缓冲器中。另外,主机设备在接收到lbad命令时发送lrty命令,然后再次将具有snumx(snum=x)的dph发送给usb装置。注意,重新发送的dph(即,重新传输的dph)在以下被称为“没有dpp的dph”(或“空dpp”)。当接收到的“没有dpp的dph”正确时,usb装置的链路层将lgood命令发送给主机设备并且将具有snumx(snum=x)的“没有dpp的dph”传送给协议层。当usb装置的协议层正确地接收到具有snumx(snum=x)的dph时,它重新布置具有snumx(snum=x)的已经接收到的dpp和当前接收到的dph的次序,并且通过使用上述控制电路将它们存储到数据缓冲器中。其后,协议层将指示正确接收并且请求具有snumx+1(snum=x+1)的下一个数据的ack(snum=x+1)发送给主机设备。
如上所述,在根据usb3.1gen2执行普通实现方式的情况下,当发生预定错误时,可能发生上述问题。因此,以下解释用于解决上述问题的实施例。
<第一实施例>
图1是显示根据第一实施例的设备1和装置2的结构的方框图。设备1是根据usb3.1gen2规范的具有主机功能的半导体装置(以下称为“主机设备”)。替代地,设备1可以是计算机等。装置2是根据usb3.1gen2规范的具有外设功能的半导体装置(以下称为“usb装置”)。假设:设备1通过usb3.1if与装置2连接。注意,包括设备1和装置2的结构也可以被称为“数据传送系统1000”。
usb装置2包括装置内核20(包括协议层21和链路层22)、数据缓冲器24和物理层23。注意,链路层22是第一处理单元的示例,并且协议层21是第二处理单元的示例。注意,第一处理单元可对应于物理层23和链路层22。
物理层23包括物理控制单元231。物理控制单元231符合usb3.1gen2规范,并且在物理层级别上控制将数据发送给主机设备1/从主机设备1接收数据。链路层22包括链路控制单元221。链路控制单元221符合usb3.1gen2规范,并且控制将数据发送给物理层23/从物理层23接收数据以及将数据发送给协议层21/从协议层21接收数据。另外,链路控制单元221在链路层级别上控制待发送/待接收的数据的包处理。协议层21包括管道控制单元211、链路if212和数据if213。链路if212符合usb3.1gen2规范,并且将数据发送给链路层22/从链路层22接收数据。数据if213将数据发送给数据缓冲器24/从数据缓冲器24接收数据。管道控制单元211包括管道输入/输出214。管道输入/输出214符合usb3.1gen2规范,并且在协议层级别上控制包处理。
数据缓冲器24是用于存储发送给主机设备1/从主机设备1接收的数据的存储区域。例如,dph和dpp被存储在数据缓冲器24中。
图2是用于解释根据第一实施例的链路层22中的dph接收处理的流程的流程图。
首先,链路层22的链路控制单元221通过物理层23从主机设备1接收dph(s101)。接下来,链路控制单元221确定“lengthfieldreplica(长度字段副本)”字段是否具有正确值(s102)。注意,当所述字段具有正确值(即,某个范围内的值)时,链路控制单元221确定接收到的dph是否具有crc错误(s103)。当接收到的dph具有crc错误时,链路控制单元221丢弃接收到的dph(s104)。即,链路层22不将接收到的dph传送给随后级的协议层21。另外,链路控制单元221将在dph之后接收到的dpp传送给协议层21(s105)。即,链路层22不丢弃具有与丢弃的dph的snum相同的snum的dpp,并且将所述dpp传送给协议层21。另外,链路层22通过物理层23将lbad命令发送给主机设备1(s106)。
当在步骤s102中“lengthfieldreplica(长度字段副本)”字段不具有正确值时,链路控制单元221执行预定错误处理(s107)。注意,这个错误处理是公知的,并且因此,它的详细的解释被省略。注意,在步骤s102中,假设:执行关于除了crc错误之外的错误的确定,即执行除了“lengthfieldreplica(长度字段副本)”字段是否具有正确值的确定之外的确定。另外,当检测到除了crc错误之外的某种错误时,执行步骤s107中的错误处理。
另外,在步骤s103中,当接收到的dph不具有crc错误时,即当crc具有正确值时,链路控制单元221将接收到的dph和随后接收到的dpp传送给随后级的协议层21(s108)。同时,链路层22通过物理层23将lgood命令发送给主机设备1(s109)。
图3是用于解释根据第一实施例的协议层21中的dph接收处理的流程的流程图。首先,协议层21从链路层22接收dph(s201)。接下来,协议层21在链路if212中确定接收到的dph是否正确(s202)。当dph正确时,链路if212确定接收到的dph是否是空dpp(s203)。即,协议层21确定在接收到的dph之后是否存在dpp。换句话说,协议层21确定紧接在接收到的dph之后是否存在具有与接收到的dph的snum相同的snum的dpp。在步骤s203中,当接收到的dph是空dpp时,协议层21通过链路层22和物理层23将“retryack(重试ack)”(snum=x)发送给主机设备1(s204)。注意,“retryack(重试ack)”指示(或对应于)协议层中的dp重新发送请求。
在步骤s203中,当链路if212确定接收到的dph不是空dpp时,协议层21将接收到的dph存储到数据缓冲器24中(s205)并且执行dpp接收处理(稍后描述)(s206)。另外,在步骤s202中,当链路if212确定dph不正确时,协议层21执行预定错误处理(s207)。
图4是用于解释根据第一实施例的协议层21中的dpp接收处理的流程的流程图。假设:在一些情况下,可执行图4中的处理作为图3中的步骤s206中所包括的子处理,并且在其它情况下,可在不执行dph接收处理的情况下独立地执行图4中的处理。
首先,协议层21从链路层22接收dpp(s211)。接下来,协议层21在链路if212中确定接收到的dpp是否正确(s212)。当接收到的dpp正确时,链路if212确定dpp是否是没有dph的dpp(s213)。即,协议层21确定它是否已经在接收当前接收的dpp之前接收到具有与当前接收的dpp的snum相同的snum的dph,或者确定它是否已在过去丢弃了具有与当前接收的dpp的snum相同的snum的dph。当协议层21在步骤s213中确定dpp是没有dph的dpp时,协议层21丢弃接收到的dpp(s214)。例如,协议层21不将接收到的dpp存储到数据缓冲器24中。替代地,虽然协议层21将接收到的dpp存储到数据缓冲器24中,但它使存储的数据可重写,从而它可以在存储下一个数据时被重写。
当链路if212在步骤s213中确定dpp不是没有dph的dpp时,即当紧挨在接收当前接收的dpp之前已经接收并且存储了具有相同snum的dph时,协议层21将接收到的dpp存储到数据缓冲器24中(s215)。同时,协议层21通过链路层22和物理层23将“ack(应答)”(snum=x+1)发送给主机设备1(s216)。
另外,当链路if212在步骤s212中确定接收到的dpp不正确时,协议层21执行预定错误处理(s217)。
图5是显示根据第一实施例的当在dph中发生crc错误时的每个层中的处理流程的序列图。在这个示例中,示出根据usb3.1gen2在批量输出传送的中间开始的操作。即,假设:usb装置2已经正确地接收到dp,直至从主机设备1发送的具有snumx-1(snum=x-1)的dp。注意,这个假设也被应用于以下示出的所有序列图。
因此,主机设备1将具有snumx(snum=x)的dph和dpp发送给usb装置2。然后,usb装置2在它的物理层23和链路层22中接收具有snumx(snum=x)的dph。假设:此时,在接收到的dph中检测到crc错误并且接收到的dph中的“lengthfieldreplica(长度字段副本)”字段具有正确值。其后,链路层22丢弃dph并且将dpp传送给协议层21。另外,链路层22通过物理层23将lbad命令发送给主机设备1。
由于接收到的dpp是正确的并且是没有dph的dpp,所以协议层21丢弃接收到的dpp。另外,主机设备1在接收到lbad命令时发送lrty命令,然后再次将具有snumx(snum=x)的“没有dpp的dph”发送给usb装置2。
由于接收到的“没有dpp的dph”是正确的,所以链路层22将lgood命令发送给主机设备1并且将具有snumx(snum=x)的“没有dpp的dph”传送给协议层21。在接收到具有snumx(snum=x)的“没有dpp的dph”时,协议层21将所述dph存储到数据缓冲器24中。同时,协议层21通过链路层22和物理层23将“retryack(重试ack)”(snum=x)发送给主机设备1。响应于“retryack(重试ack)”(snum=x),主机设备1将具有snumx(snum=x)的dph和dpp发送给usb装置2。在这个示例中,假设:dph和dpp被正确地接收。
因此,链路层22没有在接收到的dph中检测到crc错误,并且因此将具有snumx(snum=x)的dph和dpp按原样传送给协议层21并且将lgood命令发送给主机设备1。协议层21将接收到的dph和dpp存储到数据缓冲器24中,并且将“ack”(snum=x+1)发送给主机设备1。
如上所述,在第一实施例中,当在协议层中接收到没有dph的dpp时,dpp被丢弃,而不存储dpp,并且当下一次正确地接收到dp时,作为重新发送请求的“retryack(重试ack)”tp(事务包)被发送给主机设备。通过如此操作,可以可靠地接收dp。
因此,原本将会在接收到没有dph的dpp时暂时需要的dpp存储区域变得没有必要,因此使得可将电路尺寸减小与dpp存储区域等同的量。另外,原本基于当接收下一个dph时获得的信息将暂时存储的dpp存储到合适的存储区域中所需的存储控制变得没有必要。因此,可将电路尺寸减小与存储控制对应的量。另外,第一实施例是有用的,因为它可被应用于符合usb3.1gen2规范的主机设备1,而不用修改主机设备1。
注意,第一实施例能够被如下表示。即,一种usb装置包括:第一处理单元,被配置为当预定错误被包括在从主机设备接收到的第一包的第一头中时丢弃第一头并且将第一包的第一净荷发送给随后级;和第二处理单元,被配置为丢弃从第一处理单元接收到的第一净荷并且将第一包重新发送请求(例如,“retryack(重试ack)”)发送给主机设备。通过这种结构,可防止或减小如上所述的电路尺寸的增加。
另外,根据第一实施例的第一处理单元被配置为:当所述预定错误被包括在第一头中时,将第一头重新发送请求(例如,lbad命令)发送给主机设备,接收响应于第一头重新发送请求从主机设备发送的没有净荷的第二包的第二头(例如,没有dpp的dph),并且当接收到的第二头正确时,将第二头发送给第二处理单元。另外,第二处理单元被配置为:当从第一处理单元接收到第二头时,将第一包重新发送请求发送给主机设备。通过这种结构,可防止或减小电路尺寸的增加,同时有效地使用符合usb3.1gen2规范的已有命令。
另外,第一处理单元优选地是符合usb(通用串行总线)3.1gen2的链路层,并且第二处理单元优选地是符合usb3.1gen2的协议层。
另外,所述预定错误意味着:第一头的crc具有错误值并且“lengthfieldreplica(长度字段副本)”字段具有正确值。以这种方式,可灵活地将规范从usb3.1gen1改变为usb3.1gen2。
<第二实施例>
第二实施例是上述第一实施例的修改示例。即,当根据第二实施例的第一处理单元丢弃第一头时,第一处理单元将伪正确接收响应发送给主机设备。另外,第二处理单元丢弃第一净荷,并且将第一包重新发送请求发送给主机设备。以这种方式,与第一实施例相比,可减少数据重新发送处理时间。
图6是用于解释根据第二实施例的链路层22中的dph接收处理的流程的流程图。在图6中示出的流程图中,步骤s106a替换图2中示出的流程图中的步骤s106。其它步骤类似于图2中的那些步骤,并且因此,它们的解释根据需要而被省略。
具体地讲,在链路控制单元221丢弃包括预定错误的dph(s104)之后,链路控制单元221将伪lgood命令发送给主机设备1(s106a),同时将随后的dpp传送给协议层21(s105)。假设:伪lgood命令的内容类似于普通lgood命令的内容。换句话说,在步骤s106a中,链路层22将lgood命令而非lbad命令发送给主机设备1。
图7是用于解释根据第二实施例的协议层21中的dpp接收处理的流程的流程图。与图4相比,图7包括与步骤s214并行执行的步骤s218中的执行。其它步骤类似于图2中的那些步骤,并且因此,它们的解释根据需要而被省略。
具体地讲,当在步骤s213中在链路if212中确定dpp是没有dph的dpp时,协议层21丢弃接收到的dpp(s214),并且通过链路层22和物理层23将“retryack(重试ack)”(snum=x)发送给主机设备1(s218)。
图8是显示根据第二实施例的当在dph中发生crc错误时的每个层中的处理流程的序列图。首先,主机设备1将具有snumx(snum=x)的dph和dpp发送给usb装置2。然后,usb装置2在它的物理层23和链路层22中接收具有snumx(snum=x)的dph。假设:此时,在接收到的dph中检测到crc错误并且接收到的dph中的“lengthfieldreplica(长度字段副本)”字段具有正确值。其后,链路层22丢弃dph并且将dpp传送给协议层21。另外,链路层22通过物理层23将lgood命令而非lbad命令发送给主机设备1。
协议层21丢弃从链路层22接收到的dpp。同时,协议层21通过链路层22和物理层23将“retryack(重试ack)”(snum=x)发送给主机设备1。响应于“retryack(重试ack)”(snum=x),主机设备1将具有snumx(snum=x)的dph和dpp发送给usb装置2。随后的处理类似于图5中的那些处理。
即,在第二实施例中,链路层22发送作为正确响应(即,指示正确接收的响应)的lgood命令,而非应该在正常情况下发送的lbad命令。另外,当协议层21接收到没有dph的dpp时,它立即发送“retryack(重试ack)”(snum=x)。因此,主机设备1可以重新发送具有snumx(snum=x)的dph和dpp,而不发送lrty命令和“没有dpp的dph”。因此,与第一实施例相比,可减少发送和接收lrty命令和“没有dpp的dph”的处理所需的时间。另外,类似于第一实施例,第二实施例是有用的,因为它可以被应用于符合usb3.1gen2规范的主机设备1,而不用修改主机设备1。
另外,与第一实施例相比,通过在协议层中发送“retryack(重试ack)”而不从链路层发送lbad命令并且因此不用等待主机设备的lrty命令和重新发送的没有dpp的dph,第二实施例可以进一步提高传送性能。
<第三实施例>
第三实施例是上述第一实施例的另一个修改示例。即,当根据第三实施例的主机设备从第一处理单元接收到第一头重新发送请求时,主机设备暂停第一净荷的发送并且开始第二包的发送。以这种方式,与第一实施例相比,可在发生预定错误时减少重新发送时间。
图9是用于解释根据第三实施例的主机设备1中的dp发送处理的流程的流程图。首先,主机设备1将dph发送给usb装置2(s301)。接下来,主机设备1开始发送具有与发送的dph的snum相同的snum的dpp(s302)。其后,主机设备1确定它是否已在dpp的发送期间从usb装置2接收到lbad命令(s303)。当主机设备1已接收到lbad命令时,主机设备1在它的发送处理期间暂停dpp的发送(s304),并且同时,将lrty命令发送给usb装置2(s305)。其后,主机设备1再次发送dph和dpp。
图10是显示根据第三实施例的当在dph中发生crc错误时的每个层中的处理流程的序列图。首先,主机设备1将具有snumx(snum=x)的dph和dpp发送给usb装置2。假设:正在发送dpp。然后,usb装置2在它的物理层23和链路层22中接收具有snumx(snum=x)的dph。假设:此时,在接收到的dph中检测到crc错误并且接收到的dph中的“lengthfieldreplica(长度字段副本)”字段具有正确值。其后,链路层22丢弃dph并且开始将dpp传送给协议层21。另外,链路层22通过物理层23将lbad命令发送给主机设备1。
此时,在接收到lbad命令时,主机设备1在它的发送处理期间暂停具有snumx(snum=x)的dpp的发送。然后,主机设备1发送lrty命令,并且随后再次将具有snumx(snum=x)的“没有dpp的dph”发送给usb装置2。随后的处理类似于图5中的那些处理。
如上所述,当接收到lbad命令时,正在发送的dpp变得没有必要。因此,通过在接收到lbad命令之后立即暂停dpp的发送并且由此使lrty命令的发送和dph的重新发送操作提前(即,加快),可提高传送性能。
<第四实施例>
在第四实施例中,解释当具有相同snum的dph和dpp的接收次序颠倒时可被应用于链路层的处理。图11是用于解释根据第四实施例的链路层22中的dpp接收处理的流程的流程图。首先,链路层22接收dpp(s401)。接下来,链路控制单元221确定是否还未接收到具有与接收到的dpp的snum相同的snum的dph(s402)。当还未接收到dph时,链路层22丢弃dpp(s403)。当已经接收到dph时,链路层22将dpp传送给协议层21。
图12是显示根据第四实施例的在dph和dpp的接收次序颠倒的情况下的每个层中的处理流程的序列图。首先,主机设备1按照dpp和dph的次序将具有snumx(snum=x)的dpp和dph发送给usb装置2。链路层22通过物理层23从主机设备1接收dpp。此时,由于链路层22还未接收到具有snumx(snum=x)的dph,所以它丢弃接收到的dpp。其后,链路层22接收到具有snumx(snum=x)的dph。由于接收到的dph正确,所以链路层22将接收到的dph传送给协议层21,并且通过物理层23将lgood命令发送给主机设备1。虽然协议层21从链路层22正确地接收dph,但它确定接收到的dph是空dpp并且因此将“retryack(重试ack)”(snum=x)发送给主机设备1。随后的处理类似于图5中的那些处理。
注意,在图12中,由主机设备1执行的发送的次序是dpp和dph的次序。然而,即使当发送次序正确(即,发送次序是dph和dpp的次序)时,也可以在由于异常通信等而导致它们的接收次序颠倒时应用上述处理。
另外,在图12中,即使当在第一dpp之后发送的dph具有预定错误时,链路层22也将lbad命令发送给主机设备1。然而,什么也没有从链路层22发送给协议层21。在这种情况下,类似于第一实施例,从主机设备1发送没有dpp的dph。其后,执行与图5中的处理相同的处理。
注意,第四实施例可以被表示为下面的补充说明。
(补充说明)一种usb装置包括:
第一处理单元,被配置为:当从主机设备接收到第一包的第一净荷时,确定是否已经接收到第一包的第一头,当第一处理单元确定还未接收到第一头时,丢弃第一净荷,并且当从主机设备接收到的第一包的第一头正确时将第一头发送给随后级;和
第二处理单元,被配置为:从第一处理单元接收第一头,并且当还未接收到第一净荷时将第一包重新发送请求发送给主机设备。
另外,虽然在上述实施例中本公开被解释为硬件结构,但本公开不限于硬件结构。通过使诸如cpu(中央处理单元)的处理器执行计算机程序,可以通过实现任意处理来实现本公开。
在上述示例中,可以使用任何类型的非暂态计算机可读介质,将程序存储并且提供给计算机。非暂态计算机可读介质包括任何类型的有形存储介质。非暂态计算机可读介质的示例包括磁存储介质(诸如,软盘、磁带、硬盘驱动器等)、光磁存储介质(例如,磁光盘)、cd-rom(压缩盘只读存储器)、cd-r(压缩盘可记录)、cd-r/w(压缩盘可重写)、dvd(数字通用盘)、bd(蓝光(注册商标)盘)和半导体存储器(诸如,掩模rom、prom(可编程rom)、eprom(可擦除prom)、闪速rom、ram(随机存取存储器)等)。可以使用任何类型的暂态计算机可读介质,将程序提供给计算机。暂态计算机可读介质的示例包括电信号、光学信号和电磁波。暂态计算机可读介质可以经由有线通信线路(例如,电线和光纤)或无线通信线路将程序提供给计算机。
以上已基于实施例以具体方式解释了由本申请的发明人提出的本公开。然而,本公开不限于上述实施例,并且当然,可以在不脱离本公开的精神和范围的情况下做出各种变型。
第一实施例、第二实施例、第三实施例和第四实施例可以由本领域普通技术人员根据需要组合。
尽管已根据几个实施例描述了本发明,但本领域技术人员将会意识到,可以利用所附权利要求的精神和范围内的各种变型实施本发明,并且本发明不限于上述示例。
另外,权利要求的范围不受上述实施例限制。
另外,注意,本申请人的目的是包括所有权利要求元件的等同物,即使稍后在申请过程期间修改。