具体实施方式
图1表示包括根据本发明的第一方面的设备的系统。设备10采用硬件加密狗的形式,能连接到USB设备14中的USB端口12。
在通过USB总线连接所连接的系统中,将一个装置指定为主机,而其他装置指定为外围设备。必须使一个装置能够充当主机,以便控制与其他设备的通信。装置充当USB主机,或充当USB外围设备的能力由其具有适当的功能性而定。
在这种情况下,装置14是USB设备,即,它不具有允许它充当USB主机的功能性。然而,硬件加密狗10的目的是允许设备14充当主机,从而在此将设备14描述为伪主机。
通过传统的USB D+/D-线路18,设备10,在此也称为主桥(hostbridge),通过端口16连接到伪主机14的USB端口12。
主桥设备10包括控制器20和存储器22,它们的功能将在下文中更详细地描述。主桥设备10还具有传统的小型AB插口形式的USB端口24,所述小型AB插口能容纳传统的USB插头。
主桥设备10能由插入插口24的插头的类型,确定何种设备连接到它上。
即,如果小型B插头插入插口24中,主桥设备10能确定插入它中的设备是能操作为USB主机的装置。例如,这可以是个人计算机(PC)或类似的装置。
另一方面,在本发明的该示例性实施例中,插入插口24中的插头26是小型A插头,向主桥设备10表示该设备28是USB外围设备,即,不能充当USB主机。如前所述,插头26和USB外围设备28间的连接是通过本领域的技术人员非常公知的传统的USB D+/D-线路30,以及在此不再描述。
在插入插口24中的设备是USB主机的情况下,主桥10充当透明集线器。即,将数据从插口24直接传送到端口16,允许外围设备14以就象直接连接USB主机和设备14一样的方式起作用。
这与具有设备引擎、意指所连USB主机不能直接与USB设备中的设备控制器直接相互作用,而仅与主桥设备中的设备控制器相互作用的其他公知主桥设备形成对比。
在插入插口24中的设备28是USB外围设备的情况下,主桥10用来允许伪主机设备14就象它是传统的USB主机设备一样起作用。现在,参考剩余的图,将更详细地描述该操作。
在该操作模式中,主桥10在其控制器20的控制下起作用,但也在D+/D-线路18上,从伪主机设备14接收控制信息。特别地,定义调度方法。作为时间表的一部分,为伪主机14预留D+/D-线路18上的定期(regular)时隙,以便将控制信息发送到主桥10的控制器20。另外,在不同的连接设备间定义循环调度形式。即,尽管图1仅示出连接到主桥10的单一USB外围设备28,但将意识到如在传统的USB总线系统中,能将多个外围设备连接到主机。
在传统的USB总线系统中,响应于令牌传送数据,且通常从主机传送到所连设备。
在本发明的这个实施例中,主桥10将令牌发送到伪主机14和外围设备28。因此,现在将更详细地描述根据本发明的系统的操作。
众所周知,USB事务采用四种形式。在传送所有数据重要的情况下,批处理(Bulk)和中断事务用于传送数据,因此,通过接收设备应答每一传送数据包。
当快速传送数据更重要时,使用同步事务,在这种情况下没有应答发送。
使用控制事务以便根据需要设置系统。
图2表示当将执行批处理事务时执行的过程,以便将数据从伪主机14通过主桥10传送到所连外围设备28。
如上所述,定义时间表,意指每隔一定时间,主桥10发送IN令牌到伪主机14。
响应一个这种令牌201,伪主机14返回第一数据包202。该第一数据包存储在先入先出存储器(FIFO)32中,所述先入先出存储器32构成主桥10的存储器22的一部分。
然后,主桥10将应答(ACK)203发送到伪主机14,同时,将OUT令牌204发送到所连外围设备28,以便表示那一数据将继之而来。然后,从FIFO 32检索缓存的第一数据包,在205,发送到所连外围设备28。
在所示的情况下,所连外围设备28未准备好接收所传送的数据205,因此,将无应答(NAK)206发送回主桥10。
主桥10通过发送另一OUT令牌207,响应NAK206,以及在208重传第一数据包。
在所示的情况下,由所连外围设备28正确地接收第一数据包208,因此,发送ACK 209。
当主桥10接收已经由所连外围设备28正确地接收第一数据包的应答时,将另一IN令牌210发送到伪主机14。在所示的情况下,伪主机14未准备好发送数据,因此,发送NAK消息211作为应答。主桥10通过重新发送IN令牌212来响应。
在所示的情况下,然后,伪主机14准备发送数据,因此,它通过发送第二数据包213来响应。
如前所述,该第二数据包213存储在FIFO 32中,以及主桥10将ACK消息214发送到伪主机14。同时,将OUT令牌215发送到所连外围设备28,表示另一数据包将继之而来。然后,将该数据包216发送到所连外围设备28,它在这种情况下能正确地接收数据包,以及发送ACK消息217。
同样地,如前所述,主桥通过将另一IN令牌218发送到伪主机14,要求其发送另一数据来响应。伪主机14通过发送第三数据包219来响应。因此,如前所述,第三数据包219存储在FIFO 32中,而将ACK消息220发送到伪主机14,同时,将OUT令牌221发送到所连外围设备28,在此之后,将第三数据包222发送到所连外围设备。
在所示的情况下,将停止(sta11)响应223从所连外围设备28发送到主桥10,尽管STALL响应也能从伪主机14发送。在任一情况下,那个传送的另外的调度将停止,直到重新启动为止。
因此,如从该描述所能看出的,仅要求FIFO 32每次缓冲一个数据包,尽管也能作为选择地使用双缓冲或环形FIFO,这可以在某些方面提高系统性能。然而,在任一情况下,大大地降低对主桥10存储数据的需求。
图3表示在批处理事务的情况下执行的过程,其中,通过主桥10,将数据从所连外围设备28传送到伪主机14。
该过程从主桥10发送到外围设备28的定期调度的IN令牌301的一个开始。由于外围设备28有数据要发送,其发送第一数据包302,所述第一数据包302存储在同样形成主桥10的存储器22的一部分的FIFO 34中。FIFO 34,以及在此提及的其他FIFO,可以是与图2所示的FIFO 32相同的物理设备的一部分,或可以是单独的。
然后,主桥10将应答ACK 303发送到所连外围设备28,同时,将OUT令牌304发送到伪主机14,表示它有数据要发送。
然后,主桥10将第一数据包305发送到伪主机14。在所示的情况下,伪主机14未准备好接收第一数据包305,因此,其将无应答(NAK)306发送到主桥10。主桥10通过重新发送OUT令牌307来响应,此后,重新发送第一数据包308。
在这种情况下,正确地接收第一数据包308,因此,伪主机14将ACK309发送到主桥10。然后,主桥10将另一IN令牌310发送到所连外围设备28,要求它发送另一数据。在这种情况下,所连外围设备28未准备好接收数据,因此,发送NAK 311。主桥10通过重新发送IN令牌312来响应,在这种情况下,所连外围设备28准备接收数据,因此,它通过第二数据包313来响应。
同样地,该数据包存储在FIFO 34中,以及主桥10将ACK 314发送到所连外围设备28,同时,将OUT令牌315发送到伪主机14。这之后为已经从FIFO 34检索出的第二数据包316。由伪主机14正确地接收第二数据包316,向主桥10发送ACK 317。
然后,主桥10将另一IN令牌318发送到所连外围设备28。
在这种情况下,所连外围设备28发送STALL响应319,如上参考图2所述起作用,而且没有另外的数据传送。
同样,因此大大地降低对主桥10缓存传送数据的需求。
图2和3表示用于批处理事务的过程。在本发明的所示实施例中,中断事务遵循相同的协议,差别在于不同地调度由主桥10发送到伪主机14和所连外围设备28的IN令牌。
图4表示用于执行同步事务的过程。在第一所示同步事务中,将数据从所连外围设备传送到伪主机14。
通过表示它是用于批处理还是同步事务的“类型”,在USB系统中局部定义所连外围设备27中的每一端点。因此,一些类型的设备非常适合于数据传送,其中实际上传送所有数据,以及其他类型的设备非常适合于快速传送数据的传送。
因此,当主桥10将IN令牌401发送到所连外围设备28时,图4所示的过程开始。由于已知所连外围设备28是使用同步事务的类型,主桥10还同时将OUT令牌402发送给伪主机14,以表示它打算接收数据。
在所示的情况下,所连外围设备28有数据要发送,因此,将第一数据包403返回给主桥10。在这种情况下,通过主桥10,直接路由所接收的数据包,而没有任何FIFO缓存,以及作为数据包404通过伪主机14直接传递。其结果是在通过主桥10传送数据中,存在最小延迟,例如,可以是仅几纳秒的门延迟。由于这是同步事务,不存在应答消息,以及该过程通过主桥10将另一IN令牌405发送到所连外围设备28,以及将另一OUT令牌406发送到伪主机14来继续。由于所连外围设备28有更多数据要发送,将第二数据包407返回给主桥10,其再次直接传递它到伪主机14作为数据包408,而没有缓存。
图4的下面部分表示逆过程,其中,在同步事务中,将数据从伪主机14传送到所连外围设备28。
同样地,该过程以从主桥10发送到伪主机14的定期调度的IN令牌409开始,同时,将OUT令牌410发送到已知为参与同步事务的类型的所连外围设备28。由于伪主机14将数据发送到那个特定所连外围设备,其返回第一数据包411,通过主桥10,作为数据包412直接传递到所连外围设备28。如上所述,通过主桥10,直接传递数据包,而没有FIFO缓存,因此,具有最小延迟。
同样地,没有应答,以及该过程经从主机10发送到伪主机14的另一IN令牌413,以及将另一OUT令牌414从主桥10发送到所连外围设备28继续。
伪主机14具有另一数据要发送,因此,返回第二数据包415,同样地,通过主桥10直接传递,而没有FIFO缓存,并传递到所连外围设备28作为数据包416。
如前所述,该过程能持续,只要伪主机14具有数据要发送到所连外围设备28。
图5表示执行从伪主机14到所连外围设备28的“无数据控制”的过程。这等效于无数据阶段的控制写入。
该过程从主桥10发送到伪主机14的SETUP消息501开始,这之后为用于控制写入的厂商专用命令(VSC-CW)502。
伪主机14发送ACK 503以表示它已经正确地接收VSC-CW 502,以及主桥10通过IN令牌504响应。
在该所示情况下,伪主机14发送STALL响应,表示它不希望执行控制传送。这会暂时终止该过程。此时的NAK响应表示尽管伪主机希望执行控制写入传送,但此时未准备好(即它忙)。
根据预定时间表,将出现用于控制传送的另一机会,以及SETUP、VSC-CW和ACK消息,如上所述,均由传送506表示。同样地,该阶段之后为从主桥10发送到伪主机14的IN令牌507,以及在这种情况下,伪主机14希望执行控制传送,以及返回设置数据508。在由主桥10接收时,将设置数据包存储在FIFO 36中。主桥10将ACK消息509发送到伪主机14,同时,将SETUP消息510发送到所连外围设备28。主桥10通过从FIFO 36检索的设置数据包511追随。
应答设置数据508后,主桥10将另一IN令牌512发送到伪主机14,请求它传送另外的数据。
在接收设置数据511后,所连外围设备28将ACK消息513发送回主桥10,以及主桥10通过将IN令牌514发送到所连外围设备28来响应。
在这种情况下,伪主机14没有要发送的另外的数据,因此,将零数据消息515发送到主桥10,以及作为回应,主桥10发送ACK消息516。另外,在该实施例中,所连外围设备不具有要传送的数据,因此,发送零数据消息517。主桥10通过ACK消息518应答此,以及还将OUT令牌519发送到伪主机,以表示它具有用于它的消息。在这种情况下,简单地传递从所连外围设备28接收的零数据消息520。伪主机通过发送ACK消息521响应。
因此,可以看出零数据响应515表示控制传送结束,以及主桥10进行结束两端的控制传送。
图6表示用于执行从伪主机14至所连外围设备28的控制写入的过程。
如参考图5所述,该过程从将SETUP VSC-CW消息从主桥10发送到伪主机14,以及将ACK从伪主机14发送到主桥10开始。在图6中将这些消息示为单个块601。如前所述,这之后为从主桥10发送到伪主机14的IN令牌602。当伪主机希望执行控制传送时,返回设置数据603。如前所述,在由主桥10接收后,将设置数据存储在设置数据FIFO 36中,以及主桥10将ACK消息604发送到伪主机14,同时,将SETUP消息605发送到所连外围设备28。主桥通过从FIFO 36检索的设置数据来追随。所连外围设备28通过ACK 607响应设置数据606。
在应答设置数据603后,主桥10将另一IN令牌608发送到伪主机14,要求它传送另外的数据。
在这种情况下,与图5所示的情形不同,伪主机14不通过零数据消息响应,而是响应以表示它希望执行与数据阶段的控制写入传送。具体地,伪主机14通过第一CW数据包609响应。这由主桥10通过ACK消息610来应答,以及将数据包存储在与设置数据FIFO 36分开的数据FIFO 38中。
主桥10还将OUT消息611发送到所连外围设备28,表示它打算发送数据,然后,从FIFO 38发送第一CW数据包612。所连外围设备28通过ACK消息613应答接收该数据包。
主桥10将另外的IN令牌发送到伪主机14,以便允许它发送另外的数据,以及在图6中示出了一个这种IN令牌614,伪主机14通过发送最后一个CW数据包615来响应它。如上所述,主桥10发送ACK消息616来应答该数据,所述数据也存储在FIFO 38中。主桥10还将OUT令牌617发送到所连外围设备28,然后,将最后一个CW数据包618发送到所连外围设备28。所连外围设备28通过ACK消息619对此进行响应。
然后,主桥10将另外的IN令牌620发送到伪主机14,其通过零数据消息621响应,以及主桥10通过ACK消息622应答。主桥10还将IN令牌623发送到所连外围设备28,以便给它提供发送数据的机会,但所连外围设备28没有要传送的数据,因此,它发送零数据消息624。主桥10通过ACK消息625应答,以及还将OUT令牌626发送到伪主机14,以表示它具有用于它的消息。在这种情况下,它简单地传递从所连外围设备28接收的零数据消息627。伪主机14通过发送ACK消息628来响应。
图7表示用于执行从所连外围设备28到伪主机14的“控制读取”的过程。首先,执行设置过程,如前所述,除所发送的消息是用于控制读取的厂商专用命令(VSC-CR)外,如块701所示。存在两种形式的VSC-CR消息,即,在设置阶段期间使用的VSC-CR1消息,以及在数据阶段期间发送的VSC-CR2消息。
接着,主桥10将IN令牌702发送到伪主机14,其通过设置数据703响应。如前所述,这通过ACK消息704应答,该设置数据存储在FIFO 36中,以及主桥10将SETUP消息705发送到所连外围设备28,其之后为设置数据706。所连外围设备28通过ACK消息707来应答。
主桥10然后将OUT/0-数据消息708发送到伪主机14,以及执行数据设置阶段709。然后,主桥10将IN令牌710发送到所连外围设备28,其通过第一控制数据包711应答。这通过ACK消息712来应答,以及在主桥10中将该数据存储在适当的FIFO 40中。
然后,主桥10将OUT令牌713发送到伪主机14,以及紧随之后为所检索的第一控制数据包714。伪主机14通过ACK消息715来应答,以及主桥10将另外的IN令牌716发送到所连外围设备28。在这种情况下,所连外围设备28通过最后一个控制数据包717响应该IN令牌716。这由主桥10通过ACK消息718来应答,以及该数据存储在FIFO 40中。主桥10还将OUT令牌719发送到伪主机14,然后,发送最后一个控制数据包720。伪主机14通过ACK消息721应答,以及主桥10将另外的IN令牌722发送到所连外围设备28。即,主桥10不需要知道将接收的控制数据包的数量,或应当发出的IN令牌的数量,相反,它继续发出IN令牌,直到如在此所述,所连外围设备28通过STALL消息723响应为止。该过程通过来自所连外围设备28的零数据响应类似地终止。
响应于STALL消息723,主桥10和伪主机14执行状态阶段724。图7还表示在主桥10和所连外围设备28间执行的状态阶段725,尽管仅当在前事务为IN/0-数据时要求。
因此,如上所述,伪主机14能与所连外围设备28执行控制事务。另外,伪主机14能与主桥10执行控制事务,现在,将更详细地描述。
因此,图8表示用于执行到主桥的控制寄存器写入过程的进程。块801表示设置进程,包括用于寄存器写入的厂商专用命令(CSC-RegW),其使用与参考图5所述的相同的协议。在这种情况下,主桥10将IN令牌802发送到伪主机14,以及在这种情况下,伪主机14不希望执行寄存器写入控制传送,因此,通过STALL消息803响应。此时的NAK响应表示尽管伪主机14希望执行寄存器写入控制传送,但此时未准备好(即它忙)。
因此,在稍后时间,重复804该设置进程,以及主桥10发送另外的IN令牌805。此时,伪主机希望执行该传送,以及它通过第一数据包806响应。这由主桥10,通过ACK消息807来响应,然后,发送另外的IN令牌808,伪主机14通过第二数据包809来响应。同样地,这通过ACK消息810应答,以及该过程继续,直到当没有待传送的另外的数据时执行的阶段811、812为止。
图9表示用于执行从伪主机14到主桥10的控制寄存器读取的过程。同样地,使用类似的设置过程901,包含厂商专用命令寄存器读取(VSC-RegR)。在这种情况下,主桥10将OUT令牌902发送到伪主机14,通过发送第一数据包903来紧跟此。伪主机14通过ACK消息904来应答。然后将另外的OUT令牌905和第二数据包906从主桥10发送到伪主机14,通过ACK消息907来应答这些。同样地,该过程继续,直到表示没有待传送的另外的数据的阶段908为止。
因此,公开了这样一种设备,它能连接到USB设备,当将另外的USB外围设备连接到它上时,它允许USB设备充当USB主机。