首页 > 代码库 > 集线器规范

集线器规范

  集线器规范包括两大基本部分:集线器转发中继器(Hub Repeater)和集线器控制器(Hub Controller)。同时也描述了集线器的错误恢复,重启和挂起/唤醒操作。最后简述集线器请求行为和集线器描述子。

集线器提供了USB设备和主机之间的电子接口。集线器支持的主要的USB功能有:

?   连接行为

?   电源管理

?   设备连接和未连接检测

?   总线错误检测和恢复

?   高速和低速设备的支持。

集线器由集线器转发中继器和集线器控制器组成。集线器转发中继器负责连接方面的工作。它也支持像总线错误检测和恢复,连接和未连接检测这样的异常处理。集线器控制器提供主机到集线器的通讯机制。集线器特定的状态和控制命令允许主机配置集线器和监视与控制它的每个下行端口。

集线器根据它们是在传输包、唤醒信号或者是在空闲状态而表现出不同的连接行为。一、包信号连接。包信号连接分为上行连接和下行连接两种。上行连接是面向主机的。当某个使能的下行端口检测到SOP时,就建立了仅到上行端口而不是任何其它下行端口的上行连接。下行连接是面向设备的。当集线器在上行端口上检测到SOP时就建立到所有使能下行端口的连接。未处在使能状态的端口不能向下行方向传送。集线器还有没有任何连接的空闲状态。在空闲态时集线器所有端口都处在接收模式,等待下一个包的开始。二、唤醒连接。挂起的集线器将上行端口接收到的唤醒信号送到所有使能的下行端口。当挂起的集线器检测到来使局部挂起或使能下行端口的唤醒信号时,将反射唤醒信号到上行端口和包括自己在内的所有使能下行端口。唤醒信号不被反射到未使能的或挂起的下行端口。后面将有更详细的讨论。

集线器是主机和设备之间建立连接的极为重要的USB部件。检测和防止任何连错误,尤其是能导致死锁的连接就显得非常重要。集线器必须在转发模式下处理连接错误。集线器必须也能检测和恢复发往集线器控制器的包。

每个集线器都有一个帧计时器。它的时间来自集线器的本地时钟,并通过主机发来的SOF与主机同步。它提供被用来检测闲置(babbling)设备和防止集线器被上行集线器设为无效的时间参考。集线器必须跟踪主机帧周期并能在即使丢失两个连续SOF令牌的情况下仍然保持同步。在重启或唤醒后,帧计时器未同步。只要接收到两个连续的SOF包,它就必须同步。

EOF1和EOF2是由帧计时器产生的时刻。这些时刻用来确保设备和集线器不干扰来自主机的SOF包的正确传输。这些时刻仅当帧计时器与SOF同步时才有意义。图10-1给出了严格的EOP时刻。表10-1总结了主机和集线器EOF时刻。在EOF2时刻,任何有上行连接的端口将被置为无效。集线器通过在上行集线器EOF2之前发出EOP来防止被设为未使能。(如在EOF1时刻)。

  表10-1集线器和主机EOF时刻

描述

从SOF开始通常的位数

说明

EOF1

32

帧结束点#1

EOF2

10

帧结束点#2

    USB主机控制器应该负责不要设备回应,如果该回应会导致设备在EOF2时刻发出包。这时主机应该发出异常终止序列来保证设备不作回应。而且,因为集线器将在到达EOF1时刻时结束上行方向的包,如果来自设备的响应(数据或握手信号)未定或者集线器到EOF1时刻的过程中,主机不应开始一个事务。

内部接口(Internal port)连接着集线器转发中继器和集线器控制器。除了传送串行数据到集线器控制器或从集线器控制器接收串行数据外,内部端口还是一定唤醒信号的来源。图10-2给出了内部端口状态自动机。表10-2定义了内部端口的信号和事件。

表11-2 内部端口信号/事件定义

信号/事件名称

事件信号源

描述

EOI

内部

时间间隔结束

Rx­­­­­­­­­­­­_Suspend

接收器

接收器在挂起状态

Resume_Event

集线器控制器

集线器控制器中出现唤醒信号

只要接收器不处在挂起状态,内部端口就处在不活动状态。当接收器进入挂起状态时,内部端口就进入挂起延迟状态。该状态有2ms的时间限制。挂起时延状态过期后就进入充分挂起状态,在充分挂起状态时,如果集线器控制器中产生唤醒条件,就进入产生唤醒(Generate Resume)状态。在该状态时,内部端口产生追加SOP_FD到集线器转发中继器。

图10-3给出集线器下行端口的简化状态自动机。事件和信号在表10-3中定义。

表11-3 下行集线器端口信号/事件定义

信号/事件名称

事件信号源

描述

Power_sorce_off

依赖于实现

端口电源关闭是由于电流过载或退出源电流(例如:外部电源撤走)

Over_current

集线器控制器

集线器或端口上出现电流过载条件

EOI

内部

时间间隔或序列结束

SE0

内部

在端口上接收到SE0

Disconnect_Detect

内部

在端口上检测到长SE0(参见11.5.2)

LS

集线器控制器

低速设备接到该端口上

SOF

集线器控制器

接收到SOF令牌

J

内部

在端口上接收到‘J’

K

内部

在端口上接收到‘K’

Rx_Resume

接收器

上行接收器在唤醒状态

Rx_Suspend

接收器

上行接收器在挂起状态

Rptr_Exit_WFEOPFU

集线器转发中继器

集线器转发中继器离开WFEOFFU状态

Rptr_Enter_WFEOPFU

集线器转发中继器

集线器转发中继器进入WFEOFFU状态

Port_Error

内部

检测到错误条件(参见11.8.1节)

Configuration=0

集线器控制器

集线器控制器配置值为0

只要集线器配置的值为零下行端口就进入未配置(Not Configured)状态,并保持该状态不变。集线器将在端口上驱动SE0。不会有其它的活动信号发生。所有集线器都支持关掉电源(Power-off状态)。对端口的有非零配置值的SetConfiguration()请求将使端口从任何状态进入未供电状态。在除未配置状态外任何状态,并接收到ClearPortFeature(PORT_POWER)时或检测到电流过载条仲时也将进入该状态。在该状态时差分单端发送器和接收器未使能。在未供电状态时接收到SetPortFeature (PORT_POWER)请求或端口的未连接计时器超时,或Restart_S、Restart_E状态过期后就进入未连接状态(discorneeted)。在该状态时仅有连接检测是可能的。表明这时还没有设备接入该端口。该状态有时间限制。在该状态时,只要求接收到SE0信号时计时器就复位,在检测到其它信号时才开始计时。除集线器挂起时钟停止外,该计时器的时限是2.5us到2ms。如果集线器挂起并有远程唤醒功能,在一个未连接端口上从SE0状态变化将使集线器启动时钟并对该事件计时。集线器需能在状态变化后的12ms内起动时钟并对该状态计时,如果挂起的集线器没有远程唤醒功能,集线器将忽略该事件直到集线器被唤醒。在未连接状态过期或对端口有相应请求或检测到错误条件时进入未使能状态。在该状态时,对接收到的SE0信号都要计时。除未供电状态和未连接状态外,对端口发出重启请求时就进入重启状态。此时,集线器在端口上驱动SE0信号。该状态的时限通常10ms至20ms。在重启结束,或SendEOP状态结束,或在发送状态转发中继器离开WFEOPFU状态,或从挂起状态当挂起的上行接收器检测到‘K’时,进入使能(Enable)状态。在该状态时,

从‘J’到‘K’的状态变化就能建立上行连接。在使能状态时,如果上行接收器处在唤醒状态,或者在Restart-S、Restart-E状态,一检测到‘K’就进入发送状态。对于高速设备,是在端口处在使能状态且转发中继器进入WFEOPFU状态时进入发送状态。在该状态时,端口将传送在上行端口上接收的数据。对低速设备来说,是在上行端口上接收到一个高速PRE PID时从使能状态转入的。在该状态时,端口将对上行端口接收到的数据作适当变换后重新发出。端口在使能状态时接收到相应的请求时变为挂起(Suspend)状态。在该状态时,端口的差分发送器被设为未使能。端口在接收到相应的请求,或在接收器未挂起时检测到‘K’就进入唤醒状态(Resuming)。该状态名义上有20ms的时限。在该状态时,集线器在端口上驱动‘K’。重启状态结束后就进入SendEOP状态。在使能状态时接收到SOF且有低速设备接在该端口上也可进入该状态。该状态时,集线器将发送低速的EOP。在EOP结束时该状态也结束。端口处在使能状态,且接收器处在挂起状态时,在检测到SE0或‘K’时就从挂起状态进入Restart_S状态,或从使能状态进入Restart_E状态。在这些状态时端口继续监视总线状态,当看见‘K’时就立刻进入发送状态,否则就进入未连接状态。

每个端口需要一个未连接计时器。该计时器用来连续监视端口的单端接收器,来检测未连接事件。

表11-4 上行集线器端口接收器信号/事件定义

信号/事件名称

事件信号源

描述

Tx_active

发送器

发送器在活动状态

J

内部

在上行端口上接收到一个‘J’(空闲)

EOI

内部

时间间隔结束

K

内部

在上行端口上接收到一个‘K’

Tx_resme

发送器

发送器在Sresume状态

SE0

内部

在上行端口上接收到一个SE0

POR

以赖于实现

Power­_On_Reset

图10-4给出了集线器上行接收器的状态自动机。表10-4定义了事件和信号。在发送器活跃时或接收器检测到SJ条件时从除挂起状态外的任何状态进入ReceivingJ状态。该状态有3ms的时间限制。每当进入该状态时计时器复位,且只有在发送器处在不活动状态时该计时器才计时。该状态过期后就进入挂起状态。进入该状态后控制器开始了一个2ms的计时器。如果计时器过期且接收器仍在该状态则控制器挂起。控制器挂起后,它可产生唤醒信号。当在总线上检测到SK条件且转发中继器处在WFSOP或WFSOPEU状态时,接收器从除唤醒状态外的任何状态进入ReceivingK状态。该状态有2.5us到100us的期限。当ReceivingK状态过期后就进入唤醒状态。当发送器处在Sresume状态,或在上行端口上检测到‘K’状态时,从挂起状态也可进入该状态。接收器检测到SE0条件,且转发中继器处在WFSOP或SOPFU状态时,从除总线重启状态外的任何状态进入ReceivingSE0状态。该状态有时间限制,最短2.5ms,最长取决于集线器。当RecevingSE0状态过期后就进入总线重启状态(Bus-Reset)。只要端口上连续接收到SE0就保持该状态不变,该状态也在集线器本地电路产生POR时进入。在POR活跃时不能离开该状态。

 

表11-5 上行集线器端口发送器信号/事件定义

信号/事件名称

事件信号源

描述

Rx_Bus_Reset

接收器

接收器在总线重启状态

EOF1

帧计时器

集线器帧计时器到达EOF1时刻或在EOF1和帧结束之间

图10-5是发送器的状态变化图。表10-5定义了图10-5中出现的事件和信号。发送器用来在转发中继器有上行连接时监视上行端口。其目的是防止错误指示被传到上行方向。在接收器处在总线重启状态,或SendJ状态结束时,发送器进入不活动(Inactlve)状态。在Sresume状态结束时也进入该状态。这时差分和单端接收器都未使能,并置为高阻状态。转发中继器进入WFEOP状态时,发送器从不活动状态进入活动状态(Active)。如果在转发SE0状态时,在SE0后的不是J状态则进入活动状态。在该状态时,来自下行端口的数据在上行端口上被转发。发送器在上行端口上发送一个位时间的SE0时就从活动状态进入转发SE0状态(RepeatingSEO)。这时发送器仍然转发下行端口上的信号。该状态的时限是23个高速位时间。在转发SE0状态时,如果到达位时间23,或转发信号从SE0变为‘J’就进入发送J状态(Send J)。在GEOPTU状态结束时也进入该状态。该状态持续一个高速位时间,在此期间集线器在端口上驱动J。帧计时器到EOF1时刻时发送器从转发SE0或活动状态进入GEOPTU状态。GEOPTU的含义是向上行端口发出EOP。在该状态时,端口发送2个高速位时间的SE0。如果集线器转发中继器进入WFEOP状态且接收器在挂起状态,发送器就从不活动状态进入发送唤醒状态(Send resume,简记为Sresume)。这意味着下行设备(或端口对控制器)产生了唤醒信号,导致建立上行连接。端口在该状态至少停留1ms,但不超过15ms。

集线器转发中继器提供的功能有,在包的边界建立连接和确保有序的进入和离开挂起状态,包括远程唤醒的处理。图10-6是转发中继器的状态自动机。表10-6是相应的信号和事件。一些状态变化是在检测到EOP时发生的,但并不是一检测到EOP就发生,要到集线器转发SE0到‘J’的转变且驱动‘J’至少一个位时间之后发生。一些是由SOP触发的。在上行接收器在总线重启状态,或在WFSOP状态时帧计时器到了或过了EOF1时刻,或在WFEOP状态时到达EOF2时刻,或在WFEOPFU状态且帧计时器未同步时接收到EOP,就进入等待来自上行端口的SOP状态(WFSOPFU)。在该状态时,集线器等待上行接口的SOP并忽略下行端口的状态变化。这时并未建立连接。该状态用来在帧结束(过EOF1时刻)时确保集线器能接收到来自主机的SOF。如果集线器处在WFSOP或WFSOPFU状态并检测到SOP时就进入等待来自上行端口的EOP状态(WFEOPFU)。当接收器进入唤醒状态时集线器也从其它状态进入该状态。在该状态时下行连接建立了,处在使能状态的下行端口在集线器进入该状态时被置为发送状态。集线器在WFEOP状态并检测到EOP,或在WFEOPFU状态且帧计时器已同步时接收到EOP,或在WFSOPFU、WFEOPFU状态时上行接收器进入挂起状态,就进入等待SOP状态(WFSOP)。该状态时等待来自上行端口,或使能下行端口的SOP。这时连接并未建立。在WFSOP时检测到来自使能下行端口的SOP时就进入等待EOP状态(WFEOP)。该状态时建立了上行连接,上行发送器在集线器进入该状态时就进入活动状态。在该状态时到达EOF2时刻,建立连接的下行端口被设为未使能。

表11-6. 集线器转发中继器信号/事件定义

信号/事件名称

事件信号源

描述

Rx_Bus_Reset

接收器

接收器在总线重启状态

UEOP

内部

在上行端口上接收到EOP

DEOP

内部

在发送器进入SendJ状态是产生

EOF1

帧计时器

帧计时器到达EOF1时刻或在EOF1和帧结束之间

EOF2

帧计时器

帧计时器到达EOF2时刻或在EOF2和帧结束之间

Lock

帧计时器

帧计时器被琐定

Rx_Suspend

接收器

接收器在挂起状态

Rx_Resume

接收器

接收器在唤醒状态

SOP_FD

内部

从下行端口或集线器控制器接收到SOP。在端口从空闲态转到K状态是产生

SOP_FU

内部

从上行端口接收到SOP。在上行端口从空闲态转到K状态是产生

集线器需要评估端口上的连接状态来作出正确的状态转换。

当集线器转发中继器处在WFEOP状态而帧计时器到达EOF2时刻;或在EOF2时刻集线器处在WFSOPFU状态,但端口上并没有J状态时出现端口错。接入设备的速度是由设备上拉电阻的位置决定的。当接入一个设备时,集线器期望通过感知总线空闲状态来检测速度。速度检测可在端口离开未使能状态进入重启状态时进行,也可在重启结束时即在重启状态结束和使能状态开始之间进行。当集线器转发中继器处在WFEOP状态时在其它使能端口上检测到SOP,这时就产生冲突条件。集线器有两种相应的处理,第一种,也是首选的一种,是“窜改”信息以使主机能检测问题。集线器通过在上行端口发送‘K’来窜改信息。这个‘K’持续到所有下行端口的传输结束,集线器用最后一个EOP来结束窜改的包。另一种是阻塞第二个包,在第一个结束时使集线器适当的返回到WFSOPFU或WFSOP。这种方式不向主机报告问题。集线器上行连接总是高速的,而下行连接则要支持高速和低速设备。高速设备和低速设备表现出不同的行为。在总线上没有低速的传输时低速设备就会被挂起,为防止低速设备被挂起。必须在每帧中接收到SOF时产生一个打入信号。

集线器作为一个USB设备或为了传输挂起和唤醒信号都要求它支持挂起和唤酲。集线器支持全局挂起和局部挂起或唤醒。全局挂起或唤醒是指整个总线被挂起或唤醒而不影响集线器下行端口的状态;局部挂起和唤醒是指集线器下行端口被挂起或唤醒而不影响集线器状态。全局挂起或唤醒是通过主机的根端口来实现的。局部挂起和唤醒是通过对集线器发出请求来实现的。远程唤醒是指由设备发出的唤醒。

集线器的重启信号仅定义在下行方向即在上行端口上。集线器在检测到2.5ms或更长时间的连续SE0信号时开始重启,并必须在该信号结束时完成重启序列。挂起的集线器必须将重启信号解释为唤醒事件,它必须在重启信号结束之前醒过来并完成重启序列。重启结束后集线器处在下面的状态:

?   控制器缺少地位为0;

?   集线器状态变化位都为0;

?   转发中继器在WFSOPFU状态;

?   发送器在不活动状态;

?   下行端口在未配置状态并在所有下行端口上驱动SE0信号。

由总线供电的集线器要求有电源开关。自供电的集线器可以有电源开关但并不是必需的。有电源开关的集线器可以控制每组端口的电源,或每个端口的电源或每组有任意个端口的电源。集线器通过设置wHubCharateristic中的逻辑电源开关模式域来指示是否支持电源开关。集线器电流过载保护也类似,可以分组:电流过载保护的分组和电流开关的分组是独立的。

集线器的所有端口必须都能检测和生成所有的总线信号状态。这就要求集线器能在它的每个端口上驱动和监视D+和D-的输出。每个集线器端口必须有单端的接收器和发送器。集线器和接在它上的设备使用上拉电阻和下拉电阻的组合在D+和D-未被积极驱动时来控制D+和D-。每个集线器下行端口在每根数据线上需要一个下拉电阻(Rpd),上行端口则需要上拉电阻(Rpu)。集线器下行端口必须支持低速和高速信号斜率(Edge rate)的传送和接收。下行端口上的信号斜率必须是可选择的,要看接入端口的设备是高速的还是低速的。上行端口总是使用高速的信号。

集线器逻辑结构如图10-7所示。

集线器类(Hub Class)定义了除缺省控制管道外的附加的所有设备都需要的端点(endport):状态变化端点。主机系统通过该端点接收集线器状态变化通知。它是一个中断的端点。如果没有状态变化位被设置时,集线器在被轮询时返回NAK。如果状态变化位被设置时就返回数据。USB系统软件能用该数据来决定读哪些寄存器能判断状态变化的确切原因。图10-8给出了状态,状态变化和控制信息是怎样与设备发生连系的。集线器描述子和集线器/端口状态和控制是通过缺省控制管道读取。集线器描述子随时可读取。当集线器在端口上检测到变化或它自身状态变化时,状态变化端点就以指定的形式向主机发出数据。集线器状态变化位能由于硬件或软件事件而设置。设置后一直保持直到被USB系统软件清除。USB系统软件用与状态变化位相连的中断管道来检测集线器或端口的状态变化。USB系统软件通过消除集线器报告的相应位来确认端口的变化。USB设备必须被设置为符合一定的安全标准。通常这意味着自供电和集线器在下行端口上实现电流限制。当出现电流过载条件时,它导致一个或多个端口的状态变化。这种变化被报告给USB系统软件以采取正确的行动。集线器是通过标准的USB设备配置命令配置的。USB系统软件检查集线器描述子信息来决定集线器的特征。

 

集线器描述子是源自USB设备框架。集线器描述子定义了集线器上的集线器设备和端口。主机通过集线器缺省管道来读取集线器描述子。USB规范定义了下面的描述子:

?   Device;

?   Configuration;

?   Interface;

?   Endpoint;

?   String(可选的)

      集线器对请求处理过程的时间有比标准设备更严格的要求。下面列出最坏情况下的请求时间。

  1 没有数据阶段的完成时间:50ms

  2 有数据阶段的标准请求的完成时间

             从装配包到第一个数据阶段的时间:50ms

             每两个相继数据阶段间的时间:50ms

             最后数据阶段和状态阶段之间的时间:50ms