CN101692213B - 通用串行总线主机控制方法和通用串行总线主机控制器 - Google Patents
通用串行总线主机控制方法和通用串行总线主机控制器 Download PDFInfo
- Publication number
- CN101692213B CN101692213B CN2009102070169A CN200910207016A CN101692213B CN 101692213 B CN101692213 B CN 101692213B CN 2009102070169 A CN2009102070169 A CN 2009102070169A CN 200910207016 A CN200910207016 A CN 200910207016A CN 101692213 B CN101692213 B CN 101692213B
- Authority
- CN
- China
- Prior art keywords
- end points
- buffer cell
- buffer
- usb host
- pseudo
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明提供了一种USB主机控制方法和USB主机控制器。USB主机控制器连接到包括一个或多个端点的USB设备,并且包括缓冲器。该USB主机控制方法包括:将要发送给所述一个或多个端点中的第一端点的输出数据存储在缓冲器内的用于第一端点的一个或多个缓冲单元中;向第一端点发送所述输出数据,并且当从第一端点接收到第一预定响应时,在所述一个或多个缓冲单元内设置伪释放标记以及包括与第一端点对应的信息标签,而不释放所述一个或多个缓冲单元。由于在接收到第一预定响应时并没有释放缓冲单元,因此当随后从第一端点接收到预定请求时,可以直接将缓冲单元内的数据发送给第一端点,减少了响应该预定请求的时间,提高了USB主机控制器的性能。
Description
技术领域
本发明涉及基于通用串行总线(USB)3.0协议的USB主机控制器的下行周期/输出事务的处理,并且具体涉及一种基于USB 3.0协议的USB主机控制方法和USB主机控制器,其能够减少对***存储器的访问次数,提高USB主机控制器的性能。
背景技术
目前,已经制定了通用串行总线(USB)3.0协议。在USB 3.0协议中定义了NRDY(未就绪)/ERDY(就绪)机制。具体地,USB主机控制器连接到外部的***存储器,并且还经由USB总线连接到一个或多个USB设备,每个USB设备包括一个或多个端点。当USB主机控制器向某一个端点发送请求(例如输入请求(IN request)或输出请求(OUT request))以请求读/写数据时,如果该端点没有准备好发送/接收所请求的数据,则该端点向USB主机控制器发送NRDY响应。当该端点随后准备好发送/接收所请求的数据时,其向USB主机控制器发送ERDY请求,使得USB主机控制器重新开始执行先前由于NRDY响应而未能执行的对应事务。
传统上,在处理输出事务的过程中,USB主机控制器在其内部的缓冲器中分配一个缓冲单元,从***存储器读取输出数据,并且将该输出数据写入所分配的缓冲单元中。然后,USB主机控制器向端点发送该输出数据。如果接收到来自该端点的NRDY响应,则USB主机控制器释放所分配的缓冲单元,即删除其中存储的输出数据。随后,当接收到来自该端点的ERDY请求时,USB主机控制器再次在缓冲器中分配缓冲单元,从***存储器读取将要发送的输出数据,并暂存至所分配的缓冲单元,然后将该输出数据发送给所述端点。之后,USB主机控制器再次释放所分配的缓冲单元。
可以看到,在传统的USB主机控制器中,每次从端点接收到NRDY响应,都释放存储输出数据的缓冲单元,这使得每次接收到ERDY请求时,都需要从外部的***存储器重新读取输出数据,从而使USB主机控制器响应ERDY请求的时间过长,对***存储器的访问次数过多,降低了性能。
因此,需要一种USB主机控制器和USB主机控制方法,其能够减少USB主机控制器响应ERDY请求的时间,减少对***存储器的访问次数,提高USB主机控制器的性能。
发明内容
考虑到以上问题而做出了本发明。本发明的目的是提供一种USB主机控制器和USB主机控制方法,其能够减少USB主机控制器响应ERDY请求的时间,减少对***存储器的访问次数,提高USB主机控制器的性能。
根据本发明的一个方面,提供了一种USB主机控制方法,用于USB主机控制器,所述USB主机控制器连接到包括一个或多个端点的USB设备,并且所述USB主机控制器包括缓冲器,该方法包括以下步骤:将要发送给第一端点的输出数据存储在缓冲器内的用于第一端点的一个或多个缓冲单元中;向第一端点发送所述输出数据,并且当从第一端点接收到未就绪NRDY响应时,在所述一个或多个缓冲单元内设置伪释放标记以及包括与第一端点对应的信息标签,而不释放所述一个或多个缓冲单元。
根据本发明的另一方面,提供了一种USB主机控制器,连接到包括一个或多个端点的USB设备,该USB主机控制器包括:缓冲器,包括一个或多个缓冲单元,用于存储要发送给所述一个或多个端点的输出数据;以及控制单元,用于控制向所述一个或多个端点的输出事务,其中,所述控制单元向第一端点发送输出数据,并且当从第一端点接收到未就绪NRDY响应时,在所述缓冲单元中用于存放第一端点输出数据的缓冲单元内设置伪释放标记以及与第一端点对应的信息标签,而不释放所述用于存放第一端点输出数据的缓冲单元。
在根据本发明的USB主机控制器和USB主机控制方法中,当接收到端点发送的NRDY响应时,在存储对应输出数据的缓冲单元内设置预定标记,而不释放该缓冲单元。这样,当所述端点随后发送ERDY请求时,可以将缓冲单元中的输出数据直接发送给该端点,而不需要像传统技术那样再次访问***存储器。由此,减少了USB主机控制器响应ERDY请求的时间,减少对***存储器的访问次数,提高了USB主机控制器的性能。
附图说明
通过结合附图对本发明的实施例进行详细描述,本发明的上述和其它目的、特征、优点将会变得更加清楚,其中:
图1是根据本发明实施例的USB主机控制器的框图;
图2是示出根据本发明实施例的USB主机控制方法的流程图;
图3是示意性地说明在执行根据本发明实施例的USB主机控制方法时输出缓冲器和缓冲单元的存储状态的变化的图。
具体实施方式
首先,简要描述本发明的原理。
在简单的情况中,当执行对于端点的数据输出事务时,将从***存储器读取的要发送给该端点的输出数据暂存在一个缓冲单元中。如果接收到来自该端点的NRDY响应,仅是将该缓冲单元标记为伪释放缓冲单元,而不释放该缓冲单元,即不删除其中存储的输出数据,并且在该缓冲单元中设置包含与所述端点有关的信息的标签。当随后从某一端点接收到ERDY请求时,将该ERDY请求中的端点信息与输出缓冲器内的各个伪释放缓冲单元中设置的标签进行比较,以查看是否存在与所述某一端点匹配的伪释放缓冲单元。如果存在匹配的伪释放缓冲单元,则将该匹配的伪释放缓冲单元中的数据直接发送给该端点,然后释放该伪释放缓冲单元,即删除其中存储的输出数据。否则,在输出缓冲器中为所述某一端点分配缓冲单元,从***存储器读取相应的输出数据并将其存储在所分配的缓冲单元中,然后将该输出数据发送给所述某一端点。
在较为复杂的情况中,如果要发送给端点的输出数据被存储在多个缓冲单元中,则在接收到来自该端点的NRDY响应时,将所述多个缓冲单元都标记为伪释放缓冲单元,并且按照输出数据的发送顺序对它们进行排序。当随后接收到来自该端点的ERDY请求时,按照序号从小到大的顺序将伪释放缓冲单元中的数据发送给该端点。此外,当在处理对于某一端点的事务期间需要为该端点分配缓冲单元时,优先分配输出缓冲器中未被标记为伪释放缓冲单元的缓冲单元。如果未被标记为伪释放缓冲单元的缓冲单元的空间不够,则在用于任一其它端点的伪释放缓冲单元中,按照序号从大到小的顺序将缓冲单元分配给所述某一端点。
下面将参照附图来更详细地描述根据本发明实施例的USB主机控制器和USB主机控制方法。在附图中,相同的参考标号自始至终表示相同的元件。
首先,参照图1来描述根据本发明实施例的USB主机控制器。应当注意,图1所示的USB主机控制器仅仅是与本发明的构思有关的基于USB 3.0协议的USB主机控制器的一部分。
如图1所示,USB主机控制器300连接到驱动单元100和***存储器200,并且还经由USB总线连接到USB设备400。USB设备400包括一个或多个端点(Endpoint)401-1、401-2、...401-n。应当注意,可以将一个或多个USB设备连接到USB主机控制器300,但是由于它们的结构和工作方式基本相同,因此为简单起见,在图1中只示出一个USB设备400。
驱动单元100用于驱动USB主机控制器。在要执行输出事务的情况下,驱动单元100通知USB主机控制器300向USB设备400中的端点输出数据,并且将要输出的数据存储在***存储器200中。驱动单元100可以由硬件、软件或者二者的组合形成,但优选地由诸如操作***之类的软件形成。
***存储器200位于USB主机控制器300外部,用于存储要输出到USB设备400中的端点的输出数据。
USB主机控制器300包括控制单元301、缓冲器控制器302和输出缓冲器303。
输出缓冲器303可被划分为多个预定大小的缓冲单元,每个缓冲单元内设置有一个标签,该标签包含多个标志位,包括“有效位(VALID)”、“伪释放标识(DTRDY)”、“设备地址”、“设备上下文索引(DCI)”、和“序号(SEQ)”。标签内的各个标志位的宽度及含义如表1所示。
表1
需要说明的是,上述表1中的各个标志位并不限于本实施例中所举的宽度及取值。
控制单元301控制USB主机控制器300的总体操作。
USB主机控制器300执行下行周期/输出事务的动机一般来自两方面,一方面是当驱动模块100通知USB主机控制器300向USB设备400中的某个端点(为便于描述,假设为端点401-1)输出数据时,控制单元301对要执行的关于各个端点的事务(包括对于端点401-1的数据输出事务以及关于其它端点的事务)进行调度,以便确定所述数据输出事务的执行顺序,并且按照该顺序执行对于端点401-1的数据输出。另一方面是当控制单元301从USB设备400的某个端点(也假设为端点401-1)接收到ERDY请求时,控制单元301也对要执行的关于各个端点的事务(包括处理该ERDY请求并且向端点401-1发送数据的事务以及关于其它端点的事务)进行调度,以便确定处理该ERDY请求的顺序,并且按照该顺序处理来自端点401-1的ERDY请求。
无论执行下行周期/输出事务的动机是来自哪一方面,当所调度的执行时刻来临时,控制单元301向缓冲器控制器302发出缓冲单元分配请求,而后缓冲器控制器302首先确定在输出缓冲器302内的伪释放缓冲单元中是否存在具有与端点401-1对应的标签的缓冲单元。为此,缓冲器控制器302将分配请求中包含的USB设备400的设备地址和端点401-1的DCI分别与各个伪释放缓冲单元中的“设备地址”和“DCI”标志位进行比较,以便确定它们是否一致。
应当注意,对于驱动单元100通知USB主机控制器300向端点401-1输出数据的情况,由于该输出数据是第一次被发送给端点401-1,因此,在输出缓冲器303中不存在由于NRDY响应而标记的伪释放缓冲单元,因而也不存在具有与端点401-1对应的标签的缓冲单元。只有在控制单元301接收到ERDY请求的这种情况下,由于该端点之前发送了NRDY响应,在输出缓冲器303中才可能存在具有与该端点对应的标签的伪释放缓冲单元,而存储在其中的数据就是ERDY请求所请求发送的输出数据。因此,当确定存在具有与端点401-1对应的标签的伪释放缓冲单元时,控制单元301将存储在伪释放缓冲单元中的数据按照发送顺序发送给端点401-1。
另一方面,如果在伪释放缓冲单元中不存在具有与端点401-1对应的标签的缓冲单元,则缓冲器控制器302确定在输出缓冲器303中是否存在没有被标记为伪释放缓冲单元的空闲缓冲单元(即缓冲单元内的“有效位”值为“1”)。如果存在空闲缓冲单元,则缓冲器控制器302在输出缓冲器303中分配用于暂存对应端点401-1的输出数据的缓冲单元。由于缓冲单元的大小是固定的,因此,如果输出数据比较多,则需要多个缓冲单元来存储该输出数据;在这种情况下,控制单元301将依序向缓冲器控制器302发出与输出数据的量相对应的数量的缓冲单元分配请求,使得缓冲器控制器302针对每个分配请求而分配一个缓冲单元,从而最终为端点401-1分配与输出数据的量相对应的数量的缓冲单元。所有被分配的缓冲单元,其内部标签的“有效位”都将会被设置成“0”,而于释放之后,才会被重置成“1”。
在缓冲器控制器302分配了缓冲单元之后,控制单元301进行控制,将要发送给端点401-1的对应输出数据按照发送顺序从***存储器200读出并且存储到所分配的缓冲单元中,然后将按照发送顺序将该输出数据发送给端点401-1。
反之,如果在输出缓冲器303中不存在上述空闲缓冲单元,这意味着,输出缓冲器303中的缓冲单元均已被标记为伪释放缓冲单元并且具有与其它端点相对应的标签,则缓冲器控制器302忽略在这些缓冲单元内设置的标签,并且从这些缓冲单元中,选择用于某一端点的一个或多个缓冲单元,然后将所述一个或多个缓冲单元中序号最大的缓冲单元分配给端点401-1。此外,控制单元301还将所分配的缓冲单元内的“伪释放标识”标志位修改为0,这使得在所分配的缓冲单元内设置的“设备地址”,“DCI”和“序号”标志位不再有效。随后,控制单元301将要发送给端点401-1的对应输出数据按照发送顺序从***存储器200读出并且存储到所分配的缓冲单元中,然后将按照发送顺序将该输出数据发送给端点401-1。
在向端点401-1发送数据之后,控制单元301接收来自该端点的响应。如果接收到确认(ACK)响应,则控制单元301释放所分配的缓冲单元,并且当存在其它要发送的数据时,继续按照上述方式处理这些数据,直到处理了全部要发送的数据为止。如果从端点401-1接收到停滞(STALL)响应,这意味着发生了错误,则控制单元301执行与该停滞响应相关联的其它处理,由于在这种情况下控制单元301执行的处理与传统USB主机控制器相同,并且与本发明的构思无关,因此在这里省略其详细描述。
另一方面,如果从端点401-1接收到NRDY响应,则控制单元301将所分配的缓冲单元中的“伪释放标识”标志位设置为“1”,即,将所分配的缓冲单元标记为伪释放缓冲单元,而不是像传统技术那样释放所分配的缓冲单元。此外,控制单元301将所分配的缓冲单元中的“设备地址”和“DCI”标志位分别设置为发送该NRDY响应的端点401-1所属的USB设备400的设备地址以及端点401-1的DCI。所述“设备地址”和“DCI”共同形成指示端点401-1的标识,该标识将所述伪释放缓冲单元与端点401-1相关联。另外,控制单元301还根据输出数据的发送顺序,在先前分配给端点401-1的缓冲单元的序号的基础上,对当前分配给端点401-1的缓冲单元进行排序,以便从先前分配给端点401-1的缓冲单元的序号开始按照从小到大的顺序对当前分配的缓冲单元添加序号,该序号被保存到当前分配的缓冲单元内的“SEQ”标志位中。
可以看到,在根据本发明实施例的USB主机控制器中,当从USB设备中的端点接收到NRDY响应时,并不是像传统技术那样释放存储输出数据的缓冲单元,而是在该缓冲单元内设置伪释放标记以及指示相应端点的标签。这样,当从端点接收到ERDY请求时,可以根据所述标签识别对应于所述端点的伪释放缓冲单元,并且将存储在其中的数据发送给所述端点,而不必再访问***存储器。由此,减少了USB主机控制器响应ERDY请求的时间以及对***存储器的访问次数,提高了USB主机控制器的性能。
下面,将参照图2来描述根据本发明实施例的USB主机控制方法的流程图。
如图2所示,在步骤S501,控制单元301确定是否从驱动单元100接收到向某个端点输出数据的通知或者从某个端点接收到ERDY请求。在这里,为了便于描述,假设所述某个端点为端点401-1。如果步骤S501的确定结果为否,则该过程返回步骤S501。反之,如果在步骤S501确定从驱动单元100接收到向端点401-1输出数据的通知或者从端点401-1接收到ERDY请求,则在步骤S502,控制单元301对关于各个端点的事务(包括关于端点401-1的事务和关于其它端点的事务)进行调度,以便确定执行关于端点401-1的事务的顺序。
然后,当所调度的执行时刻来临时,在步骤S503,控制单元301向缓冲器控制器302发出缓冲单元分配请求,以请求缓冲器控制器302在输出缓冲器303中分配用于端点401-1的缓冲单元。
接下来,在步骤S504,缓冲器控制器302确定在输出缓冲器303内的伪释放缓冲单元中是否存在具有与端点401-1对应的标签的缓冲单元。如上文所述,缓冲器控制器302可以将所述分配请求中包含的设备地址和DCI分别与各个伪释放缓冲单元中的“设备地址”和“DCI”标志位进行比较来执行步骤S504。
当在步骤S504确定存在具有与端点401-1对应的标签的缓冲单元时,在步骤S505,缓冲器控制器302将这些缓冲单元中序号最小的缓冲单元分配给端点401-1。然后,该过程进行到步骤S510。
另一方面,如果在步骤S504确定不存在具有与端点401-1对应的标签的缓冲单元,则在步骤S506中,缓冲器控制器302确定在输出缓冲器303中是否存在没有被标记为伪释放缓冲单元的空闲缓冲单元(即缓冲单元内的“有效位”值为“1”)。如果存在空闲缓冲单元,则在步骤S507,缓冲器控制器302将这些空闲控制单元之一分配给端点401-1。此外,缓冲器控制器302将所分配的缓冲单元内的“VALID”标志位设置为0,以表明该缓冲单元已被分配。反之,如果在步骤S506确定不存在所述空闲缓冲单元,也就是说,输出缓冲器303中的缓冲单元均被标记为伪释放缓冲单元并且具有与其它端点相对应的标签,则在步骤S508,缓冲器控制器302忽略伪释放缓冲单元的标签,从这些伪释放缓冲单元中任意选择用于某一端点的一个或多个缓冲单元,并且将所述一个或多个缓冲单元中序号最大的缓冲单元分配给端点401-1。在这种情况下,控制单元301还将所分配的缓冲单元内的“伪释放标识”标志位改变为0,以取消所分配的缓冲单元的伪释放标识。
接下来,在步骤S509,控制单元301将要发送给端点401-1的对应输出数据从***存储器200读入在步骤S507或S508分配的缓冲单元。
在步骤S510,控制单元301将当前存储在所分配的缓冲单元内的数据发送给端点401-1。
在步骤S511,控制单元301接收来自端点401-1的响应。然后,控制单元根据所接收的响应的类型而执行不同的处理。
具体地,当接收到ACK(确认)响应时,在步骤S512,控制单元301释放所分配的缓冲单元。随后,在步骤S513,控制单元301确定是否存在其它要发送的数据。如果存在其它要发送的数据,则该过程返回步骤S503并且依序执行上述步骤。反之,如果不存在要发送的数据,则该过程结束。
当在步骤S511接收到STALL(停滞)响应时,在步骤S514,控制单元301执行与该STALL响应相关联的其它处理,然后该过程结束。由于上文所述的原因,在这里省略其详细描述。
当在步骤S511接收到NRDY响应时,在步骤S515,控制单元301将所分配的缓冲单元中的“伪释放标识”标志位设置为“1”以将其标记为伪释放缓冲器;在所分配的缓冲单元中设置指示发送NRDY响应的端点401-1的标签,即,将所分配的缓冲单元中的“设备地址”和“DCI”标志位分别设置为端点401-1所属的USB设备400的地址以及端点401-1的DCI;并且,根据输出数据的发送顺序,在先前分配给端点401-1的缓冲单元的序号的基础上,对在步骤S507或S508分配的缓冲单元进行排序,以便从先前分配给端点401-1的缓冲单元的序号开始按照从小到大的顺序对在步骤S507或S508分配的缓冲单元添加序号,该序号被保存到缓冲单元内的“SEQ”标志位中。然后,该过程进行到步骤S513,并且执行上文所述的处理。
可以看到,在根据本发明实施例的USB主机控制方法中,当从端点接收到NRDY响应时,仅仅将存储输出数据的缓冲单元标记为伪释放缓冲单元,而不释放该缓冲单元。因此,当随后USB主机控制器从同一端点接收到ERDY请求时,可以直接将存储在缓冲单元中的数据发送给该端点,而不需要访问***存储器,这减少了USB主机控制器响应ERDY请求的时间,提高了USB主机控制器的性能。
上文描述的USB主机控制器和USB主机控制方法的实施例不是限制性的,也可以对它们做出各种改变。例如,尽管在上文中提到,在缓冲单元内设置的标签包括“设备地址”和“DCI”,但是该标签也可以包括任何其它能够标识USB设备和端点的信息。另外,对于驱动单元100通知USB主机控制器300向端点输出数据的情况,在执行了步骤S503之后,也可以不执行步骤S504和S505,而是直接执行步骤S506。
下面,参照图3,针对一种特定的情况来示意性地说明在执行根据本发明实施例的USB主机控制方法时输出缓冲器和缓冲单元的存储状态的变化。
如图3所示,在初始状态1中,在输出缓冲器中不存在为端点401-1分配的缓冲单元。
在操作1中,驱动单元100通知USB主机控制器300向端点401-1输出数据,缓冲器控制器302在输出缓冲器303中为端点401-1分配缓冲单元。因此,在状态2中,输出缓冲器303内的部分缓冲单元(如斜线部分所示)被分配给端点401-1。
在操作2中,控制单元301从***存储器200读取要输出到端点401-1的输出数据,并将该输出数据存储到所分配的缓冲单元中。因此,在状态3中,在所分配的缓冲单元中存储了输出数据(如阴影部分所示)。
在操作3中,控制单元301向端点401-1发送数据,并且接收来自端点401-1的NRDY响应。因此,控制单元301将所分配的缓冲单元标记为伪释放缓冲单元,并且在其中设置相应的标签和序号。因此,在状态4中,分配给端点401-1的缓冲单元成为伪释放缓冲单元,并且具有从小到大排序的序号(在图3所示的例子中,为“0”和“1”)。
在操作4中,由于需要为另一端点分配缓冲单元,并且在输出缓冲器303中不存在空闲缓冲单元,因此,将用于端点401-1的一个缓冲单元分配给该另一端点。此时,将用于端点401-1的缓冲单元中序号最大的缓冲单元(序号为“1”的缓冲单元)分配给该另一端点。因此,在状态5中,只有序号为“0”的缓冲单元用于端点401-1。
在操作5中,接收到来自端点401-1的ERDY请求,因此,如上文所述,缓冲器控制器302先确定在输出缓冲器303内的伪释放缓冲单元中是否存在具有与端点401-1对应的标签的缓冲单元,若存在,则直接将该伪释放缓冲单元中的数据发送给端点401-1,而后根据需要,再在输出缓冲器303中重新分配缓冲单元,并且将相应的输出数据从***存储器读入该缓冲单元。此时,输出缓冲器303回到状态3。
在操作6中,将存储在缓冲单元中的数据发送给端点401-1,从端点401-1接收到ACK响应,然后释放为端点401-1分配的缓冲单元。此时,输出缓冲器303状态回到状态1。
尽管在上文中已经示出和描述了本发明的示例实施例,但是本领域技术人员应当理解,在不背离权利要求及其等价物中限定的本发明的范围和精神的情况下,可以对这些示例实施例做出各种形式和细节上的变化。
Claims (18)
1.一种USB主机控制方法,用于USB主机控制器,所述USB主机控制器连接到包括一个或多个端点的USB设备,并且所述USB主机控制器包括缓冲器,该方法包括以下步骤:
将要发送给一第一端点的输出数据存储在缓冲器内的用于第一端点的一个或多个缓冲单元中;
向第一端点发送所述输出数据,并且当从第一端点接收到未就绪NRDY响应时,在所述一个或多个缓冲单元内设置伪释放标记以及与第一端点对应的信息标签,而不释放所述一个或多个缓冲单元。
2.如权利要求1所述的USB主机控制方法,其中,当从第一端点接收到未就绪NRDY响应时,按照输出数据的发送顺序,对所述一个或多个缓冲单元进行排序并且将序号设置到相应的缓冲单元中。
3.如权利要求2所述的USB主机控制方法,还包括以下步骤:
当接收到向一第二端点发送输出数据的通知时,在缓冲器中分配用于第二端点的缓冲单元。
4.如权利要求3所述的USB主机控制方法,其中,在缓冲器中分配用于第二端点的缓冲单元的步骤包括以下步骤:
确定缓冲器中是否存在空闲的缓冲单元;以及
当存在空闲的缓冲单元时,在空闲的缓冲单元中分配用于第二端点的缓冲单元,而当不存在空闲的缓冲单元时,在用于任一其它端点的、包含所述伪释放标记的一个或多个缓冲单元中分配用于第二端点的缓冲单元,
其中上述空闲的缓冲单元是指不包含所述伪释放标记的缓冲单元。
5.如权利要求4所述的USB主机控制方法,其中,将用于任一其它端点的、包含所述伪释放标记的一个或多个缓冲单元中序号最大的缓冲单元分配给第二端点。
6.如权利要求1所述的USB主机控制方法,还包括以下步骤:
当从所述第一端点接收到就绪ERDY请求时,确定在缓冲器内的包含所述伪释放标记的缓冲单元中是否存在具有与第一端点对应的信息标签的缓冲单元;以及
当存在具有与第一端点对应的信息标签的缓冲单元时,将存储在具有与第一端点对应的信息标签的缓冲单元内的输出数据发送给第一端点。
7.如权利要求6所述的USB主机控制方法,其中确定在缓冲器内的包含所述伪释放标记的缓冲单元中是否存在具有与第一端点对应的信息标签的缓冲单元的步骤还包括以下步骤:
将所述就绪ERDY请求中包含的第一端点所属的USB设备的设备地址和第一端点的设备上下文索引与包含所述伪释放标记的缓冲单元中的信息标签进行比较。
8.如权利要求1所述的USB主机控制方法,还包括以下步骤:
当从第一端点接收到确认ACK响应时,释放所述一个或多个缓冲单元。
9.如权利要求1所述的USB主机控制方法,其中,所述与第一端点对应的信息标签至少包括第一端点所属的USB设备的设备地址、以及第一端点的设备上下文索引。
10.一种USB主机控制器,连接到包括一个或多个端点的USB设备,该USB主机控制器包括:
缓冲器,包括一个或多个缓冲单元,用于存储要发送给所述一个或多个端点的输出数据;以及
控制单元,用于控制向所述一个或多个端点的输出事务,
其中,所述控制单元向一第一端点发送输出数据,并且当从第一端点接收到未就绪NRDY响应时,在所述缓冲单元中用于存放第一端点输出数据的缓冲单元内设置伪释放标记以及与第一端点对应的信息标签,而不释放所述用于存放第一端点输出数据的缓冲单元。
11.如权利要求10所述的USB主机控制器,其中,当从第一端点接收到未就绪NRDY响应时,控制单元按照输出数据的发送顺序,对所述用于存放第一端点输出数据的缓冲单元进行排序并且将序号设置到相应的缓冲单元中。
12.如权利要求11所述的USB主机控制器,还包括:
缓冲器控制器,用于在USB主机控制器接收到向一第二端点发送输出数据的通知时,在缓冲器中分配用于第二端点的缓冲单元。
13.如权利要求12所述的USB主机控制器,其中,缓冲器控制器按照以下方式分配用于第二端点的缓冲单元:
确定缓冲器中是否存在空闲的缓冲单元;
当存在空闲的缓冲单元时,在空闲的缓冲单元中分配用于第二端点的缓冲单元,而当不存在空闲的缓冲单元时,在用于任一其它端点的、包含所述伪释放标记的一个或多个缓冲单元中分配用于第二端点的缓冲单元,
其中上述空闲的缓冲单元是指不包含所述伪释放标记的缓冲单元。
14.如权利要求13所述的USB主机控制器,其中,缓冲器控制器将用于任一其它端点的、包含所述伪释放标记的一个或多个缓冲单元中序号最大的缓冲单元分配给第二端点。
15.如权利要求10所述的USB主机控制器,其中,当从所述第一端点接收到就绪ERDY请求时,控制单元确定在缓冲器内的包含所述伪释放标记的缓冲单元中是否存在具有与第一端点对应的信息标签的缓冲单元;以及
当存在具有与第一端点对应的信息标签的缓冲单元时,控制单元将存储在具有与第一端点对应的信息标签的缓冲单元内的输出数据发送给第一端点。
16.如权利要求15所述的USB主机控制器,其中,控制单元将所述就绪ERDY请求中包含的第一端点所属的USB设备的设备地址和第一端点的设备上下文索引与包含所述伪释放标记的缓冲单元中的信息标签进行比较,以确定在缓冲器内的包含所述伪释放标记的缓冲单元中是否存在具有与第一端点对应的信息标签的缓冲单元。
17.如权利要求10所述的USB主机控制器,其中,当从第一端点接收到确认ACK响应时,控制单元释放所述一个或多个缓冲单元。
18.如权利要求10所述的USB主机控制器,其中,所述与第一端点有关的信息包括第一端点所属的USB设备的设备地址、以及第一端点的设备上下文索引。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102070169A CN101692213B (zh) | 2009-10-23 | 2009-10-23 | 通用串行总线主机控制方法和通用串行总线主机控制器 |
US12/906,431 US8417853B2 (en) | 2009-10-23 | 2010-10-18 | Universal serial bus host control methods and universal serial bus host controllers |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102070169A CN101692213B (zh) | 2009-10-23 | 2009-10-23 | 通用串行总线主机控制方法和通用串行总线主机控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101692213A CN101692213A (zh) | 2010-04-07 |
CN101692213B true CN101692213B (zh) | 2012-06-27 |
Family
ID=42080904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102070169A Active CN101692213B (zh) | 2009-10-23 | 2009-10-23 | 通用串行总线主机控制方法和通用串行总线主机控制器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8417853B2 (zh) |
CN (1) | CN101692213B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102036305B (zh) * | 2009-09-30 | 2014-05-07 | 华为技术有限公司 | 控制信息的发送和接收方法、装置和通信*** |
CN101673255B (zh) * | 2009-10-21 | 2012-07-11 | 威盛电子股份有限公司 | 通用串行总线主机控制器和通用串行总线主机控制方法 |
US8631255B2 (en) * | 2010-07-02 | 2014-01-14 | Intel Corporation | Method, system and apparatus for dynamic buffer management for power saving |
US9542356B2 (en) | 2011-08-25 | 2017-01-10 | Intel Corporation | Determining, at least in part, one or more respective amounts of buffer memory |
TW201321986A (zh) * | 2011-11-18 | 2013-06-01 | Asmedia Technology Inc | 降低傳輸延遲的方法及其控制模組 |
CN103744816B (zh) * | 2014-02-18 | 2017-01-11 | 威盛电子股份有限公司 | 通用串行总线设备以及其数据传输方法 |
TWI736092B (zh) * | 2019-12-31 | 2021-08-11 | 新唐科技股份有限公司 | 通用串列匯流排裝置以及存取方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5584003A (en) * | 1990-03-29 | 1996-12-10 | Matsushita Electric Industrial Co., Ltd. | Control systems having an address conversion device for controlling a cache memory and a cache tag memory |
CN101266584A (zh) * | 2008-05-13 | 2008-09-17 | 威盛电子股份有限公司 | 通用串行总线主机控制器及其控制方法 |
CN101539899A (zh) * | 2008-03-19 | 2009-09-23 | 恩益禧电子股份有限公司 | Usb控制器以及缓冲存储器控制方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7757028B2 (en) * | 2005-12-22 | 2010-07-13 | Intuitive Surgical Operations, Inc. | Multi-priority messaging |
-
2009
- 2009-10-23 CN CN2009102070169A patent/CN101692213B/zh active Active
-
2010
- 2010-10-18 US US12/906,431 patent/US8417853B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5584003A (en) * | 1990-03-29 | 1996-12-10 | Matsushita Electric Industrial Co., Ltd. | Control systems having an address conversion device for controlling a cache memory and a cache tag memory |
CN101539899A (zh) * | 2008-03-19 | 2009-09-23 | 恩益禧电子股份有限公司 | Usb控制器以及缓冲存储器控制方法 |
CN101266584A (zh) * | 2008-05-13 | 2008-09-17 | 威盛电子股份有限公司 | 通用串行总线主机控制器及其控制方法 |
Non-Patent Citations (1)
Title |
---|
Hewlett-Packard Company et.al.Universal Serial Bus 3.0 Specification.《Universal Serial Bus 3.0 Specification》.2008,(第1版),41-482. * |
Also Published As
Publication number | Publication date |
---|---|
US8417853B2 (en) | 2013-04-09 |
CN101692213A (zh) | 2010-04-07 |
US20110099305A1 (en) | 2011-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101692213B (zh) | 通用串行总线主机控制方法和通用串行总线主机控制器 | |
CN103262030B (zh) | 经由动态聚合操作的快速且线性化并发优先级队列 | |
JP6082752B2 (ja) | メモリ応答の順序付けのためのメモリ装置、コンピュータシステムおよび方法 | |
CN100504827C (zh) | 在次序混乱的dma命令队列中建立命令次序 | |
CN102567258B (zh) | 多维dma传输装置与方法 | |
CN100382060C (zh) | 用于处理不同类型的存储器命令的仲裁装置和方法 | |
CN108885584A (zh) | 使用主机存储器缓冲区的无序读取传输 | |
EP1826677A1 (en) | Apparatus and method for performing DMA data transfer | |
CN102428451A (zh) | 用于数据存储装置的命令及中断分组 | |
CN101359314A (zh) | 通过将所检索的数据直接写入存储器的存储控制器来最佳使用缓冲器空间 | |
CN102084357B (zh) | 检索装置以及检索方法 | |
TWI727236B (zh) | 資料位寬轉換器及其系統晶片 | |
CN101026526A (zh) | 总线装置、总线***和信息传输方法 | |
CN1279790A (zh) | 快速16位分离事务i/o总线 | |
CN102622192A (zh) | 一种弱相关多端口并行存储控制器 | |
CN114020662B (zh) | 桥接模块、数据传输***和数据传输方法 | |
CN103049240A (zh) | Pci-e设备及其接收数据重排序方法 | |
CN101160569A (zh) | 改进具有多个存储器控制器的电路的带宽的设备 | |
CN101673255A (zh) | 通用串行总线主机控制器和通用串行总线主机控制方法 | |
CN101421705B (zh) | 具有高储存容量的多媒体卡 | |
CN101430739B (zh) | 一种集成芯片参数配置的***及方法 | |
US10095643B2 (en) | Direct memory access control device for at least one computing unit having a working memory | |
US20080147906A1 (en) | DMA Transferring System, DMA Controller, and DMA Transferring Method | |
CN103186351A (zh) | 高性能ahci接口 | |
KR101847976B1 (ko) | 반도체 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |