The HcRhPortStatus[1:NDP] register is used to control and report port events on a per-port basis. NumberDownstreamPorts represents the number of HcRhPortStatus registers that are implemented in hardware. The lower word is used to reflect the port status, whereas the upper word reflects the status change bits. Some status bits are implemented with special write behavior (see below). If a transaction (token through handshake) is in progress when a write to change port status occurs, the resulting port status change must be postponed until the transaction completes. Reserved bits should always be written ‘0’.

上文:
端口状态寄存器(HcRhPortStatus[1:NDP])
该寄存器用于按端口控制和报告端口事件。NumberDownstreamPorts表示硬件中实际实现的HcRhPortStatus寄存器数量。低字用于反映端口状态,而高字反映状态变化位。某些状态位采用特殊写入行为实现(详见下文)。当写入操作试图改变端口状态时,若此时正在进行事务处理(从令牌包到握手包),则端口状态变化必须延迟至事务完成后生效。保留位应始终写入’0’。

字段功能说明

  • CCS bit[0]
    (read) CurrentConnectStatus
    This bit reflects the current state of the downstream port.
    0 = no device connected
    1 = device connected
    (write) ClearPortEnable
    The HCD writes a ‘1’ to this bit to clear the PortEnableStatus bit. Writing a ‘0’ has no effect. The CurrentConnectStatus is not affected by any write.
    Note: This bit is always read ‘1b’ when the attached device is nonremovable (DeviceRemoveable[NDP]).

上文:
(读操作)当前连接状态(CurrentConnectStatus)
该位反映下游端口的当前状态:
0 = 无设备连接
1 = 设备已连接
(写操作)清除端口使能(ClearPortEnable)
主机控制器驱动程序(HCD)向该位写入’1’以清除端口使能状态位(PortEnableStatus)。写入’0’无效。当前连接状态不受任何写入操作影响。
注:当连接设备为不可拆卸时(DeviceRemoveable[NDP]),该位始终读取为’1b’。

  • PES
    (读操作)端口使能状态(PortEnableStatus)
    该位指示端口是否处于使能状态。根集线器在检测到过流、断开连接、电源关闭或总线错误(如信号紊乱)时可能清除该位,此操作将同时置位PortEnabledStatusChange。主机控制器驱动程序(HCD)通过写入SetPortEnable置位该位,通过写入ClearPortEnable清除该位。当CurrentConnectStatus为清零状态时无法置位该位。若端口复位完成(ResetStatusChange置位)或端口挂起恢复(SuspendStatusChange置位)时,该位将自动置位(若未置位)。
  • 0:端口禁用
  • 1:端口使能

(写操作)设置端口使能(SetPortEnable)
HCD通过写入’1’置位PortEnableStatus,写入’0’无效。若CurrentConnectStatus为清零状态,该操作不会置位PortEnableStatus,而是置位ConnectStatusChange,以此通知驱动程序尝试使能了已断开的端口。

  • PSS
    (读操作)端口挂起状态(PortSuspendStatus)
    该位指示端口处于挂起状态或恢复序列中:
  • 置位条件:通过写入SetSuspendState置位
  • 清除条件:在恢复间隔结束时PortSuspendStatusChange置位
  • 约束条件:若CurrentConnectStatus为清零状态则无法置位
  • 强制清除:端口复位完成(PortResetStatusChange置位)或HC进入USBRESUME状态时自动清除
  • 上行恢复传播:若存在上行恢复信号应传递至HC

状态值:

  • 0:端口未挂起
  • 1:端口已挂起

(写操作)设置端口挂起(SetPortSuspend)
HCD通过写入’1’置位PortSuspendStatus,写入’0’无效。若CurrentConnectStatus为清零状态,该操作不会置位PortSuspendStatus,而是置位ConnectStatusChange,以此通知驱动程序尝试挂起了已断开的端口。

  • POCI
    (读操作)端口过流指示(PortOverCurrentIndicator)
    该位仅在根集线器配置为按端口报告过流状态时有效:
  • 不支持每端口过流报告时:该位固定为0
  • 清零状态:该端口电源操作正常
  • 置位状态:该端口存在过流状态(始终反映过流输入信号)

状态值:

  • 0:无过流状态
  • 1:检测到过流状态

(写操作)清除挂起状态(ClearSuspendStatus)
HCD写入’1’发起恢复操作(写入’0’无效),仅在PortSuspendStatus置位时生效。

  • PRS
    (读操作)端口复位状态(PortResetStatus)
    该位通过写入SetPortReset置位时,将激活端口复位信号。复位完成后,当PortResetStatusChange置位时自动清除该位。若CurrentConnectStatus为清零状态则无法置位该位。

状态值:

  • 0:端口复位信号未激活
  • 1:端口复位信号激活

(写操作)设置端口复位(SetPortReset)
HCD通过写入’1’激活端口复位信号(写入’0’无效)。若CurrentConnectStatus为清零状态,该操作不会置位PortResetStatus,而是置位ConnectStatusChange,以此通知驱动程序尝试对已断开的端口执行了复位操作。

  • PPS
    (读操作)端口电源状态(PortPowerStatus)
    该位反映端口的电源状态(与电源切换类型无关)。检测到过流状态时将自动清除该位。主机控制器驱动程序(HCD)通过写入SetPortPower或SetGlobalPower置位该位,通过写入ClearPortPower或ClearGlobalPower清除该位。实际生效的电源控制开关由PowerSwitchingMode和PortPowerControlMask[NDP]决定:
  • 全局切换模式(PowerSwitchingMode=0):仅Set/ClearGlobalPower可控制该位
  • 每端口电源切换(PowerSwitchingMode=1)
    • 若端口的PortPowerControlMask[NDP]位置位,仅响应Set/ClearPortPower命令
    • 若掩码未置位,仅响应Set/ClearGlobalPower命令

当端口断电时,CurrentConnectStatus、PortEnableStatus、PortSuspendStatus和PortResetStatus应被重置。

状态值:

  • 0:端口电源关闭
  • 1:端口电源开启

(写操作)设置端口电源(SetPortPower)
HCD写入’1’置位PortPowerStatus(写入’0’无效)。

注:若不支持电源切换功能,该位始终读取为’1b’。

  • LSDA
    (读操作)低速设备连接状态(LowSpeedDeviceAttached)
    该位指示端口连接设备的速度类型:
  • 置位时:连接低速设备(Low Speed)
  • 清零时:连接全速设备(Full Speed)

有效性说明:仅当CurrentConnectStatus置位时本字段有效

状态值:

  • 0:连接全速设备
  • 1:连接低速设备

(写操作)清除端口电源(ClearPortPower)
HCD通过写入’1’清除PortPowerStatus位(写入’0’无效)。

  • CSC
    连接状态变化(ConnectStatusChange)
    该位在发生连接或断开事件时置位。主机控制器驱动程序(HCD)通过写入’1’清除该位,写入’0’无效。当CurrentConnectStatus为清零状态时,若发生SetPortReset、SetPortEnable或SetPortSuspend写入操作,该位将被置位以强制驱动程序重新评估连接状态(因端口断开时不应执行这些操作)。

状态值:

  • 0:CurrentConnectStatus无变化
  • 1:CurrentConnectStatus发生变化

注:若DeviceRemovable[NDP]位置位,该位仅在根集线器复位后置位,用于通知系统设备已连接。

  • PESC
    端口使能状态变化(PortEnableStatusChange)
    该位在硬件事件导致PortEnableStatus位被清除时置位(HCD写入操作引发的状态变化不会置位该位)。主机控制器驱动程序(HCD)通过写入’1’清除该位,写入’0’无效。

状态值:

  • 0:PortEnableStatus无变化
  • 1:PortEnableStatus已变化
  • PSSC
    端口挂起状态变化(PortSuspendStatusChange)
    该位在完整恢复序列完成后置位,恢复序列包括:
  • 20ms恢复脉冲
  • 低速包结束信号(LS EOP)
  • 3ms再同步延迟

主机控制器驱动程序(HCD)通过写入’1’清除该位(写入’0’无效),当ResetStatusChange置位时该位也会被清除。

状态值:

  • 0:恢复未完成
  • 1:恢复已完成
  • OCIC
    端口过流状态变化指示位(PortOverCurrentIndicatorChange)
    该位仅在系统配置为按端口报告过流状态时有效。当根集线器改变PortOverCurrentIndicator位状态时,硬件将自动置位该位。主机控制器驱动程序(HCD)通过写入’1’清除该位(写入’0’无效)。

状态值:

  • 0:PortOverCurrentIndicator无变化
  • 1:PortOverCurrentIndicator已变化
  • PRSC
    端口复位状态变化位(PortResetStatusChange)
    该位在10毫秒端口复位信号结束时由硬件自动置位。主机控制器驱动程序(HCD)通过写入’1’清除该位(写入’0’无效)。

状态值:

  • 0:端口复位未完成
  • 1:端口复位已完成