寄存器描述
0x000 CAPLENGTH (EHCI)
默认值:0x01000010 | CAPLENGTH 寄存器(CAPLENGTH) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | R | 0x0100 | EHCI 接口版本号,高八位代表 EHCI 的主版本号,低八位代表 EHCI 的次版本号。 |
15:8 | - | - | - |
7:0 | R | 0x10 | 指示 USB Host 工作寄存器的偏移地址。 |
0x004 HCSPARAMS(EHCI)
默认值:0x00001111 | HCSPARAMS 寄存器(HCSPARAMS) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:24 | - | - | - |
23:20 | R | 0x0 | Debug Port Number (Optional) 此域用于表示 Debug Port Number。 |
19:17 | - | - | - |
16 | R | 0x0 | P_INDICATOR Port Indicators,表示端口是否支持端口指示器控制 。当该位为 1 时,端口状态和控制寄存器包含一个可读写的字段,用于控制端口指示器的状态。 |
15:12 | R | 0x1 | N_CC Number of Companion Controller,表示 USB 2.0 Host Controller 包括的的 companion controller 数量。只有一个 OHCI HostControlller。 |
11:8 | R | 0x1 | N_PCC Number of ports supported per companion host controller,表示每个 companion controller 支持的端口数。只有一个端口。 |
7 | R | 0x0 | Port Routing Rules,表示端口与
companion
controller
的映射方式
|
6:5 | - | - | - |
4 | R | 0x1 | PPC Port Power Control,指示 Host Controller 是否实现端口电源控制开关。 |
3:0 | R | 0x1 | N_PORTS Number of physical downstream ports,表示 Host Controller 具有多少个下行的物理端口。 |
0x008 HCCPARAMS(EHCI)
默认值:0x00001400 | USB PHY 接口寄存器(USB PHY Interface) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:8 | R | 0xA0 | EECP EHCI Extended Capabilities Pointer,指示 capabilities 清单。 |
7:4 | R | 0x1 | Isochronous Scheduling Threshold,同步调度阈值
|
3 | - | - | - |
2 | R | 0x0 | Asynchronous Schedule Park
Capability 是否支持 Asynchronous Schedule Park 功能
|
1 | R | 0x0 | Programmable Frame List Flag,表示 Frame List Size 是否可编程
|
0 | R | 0x0 | 64-bit Addressing Capability,表示
32-bit
地址还是
64-bit
地址。
|
0x010 USBCMD(EHCI)
默认值:0x00080000 | USBCMD 寄存器(USBCMD) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:24 | - | - | - |
23:16 | R/W | 0x08 | Interrupt Threshold
Control,中断阈值控制 此字段由系统软件用来选择主控制器发出中断的最大速率。以下是定义的唯一有效值。如果软件向此寄存器写入无效值,结果将是未定义的。
在此寄存器中任何其他值都会产生未定义的结果。 |
15:8 | - | - | - |
7 | R/W | 0x0 | Light Host Controller Reset (OPTIONAL) EHCI 控制器轻复位。 这个控制位不是必需的。如果实现了,它允许驱动程序重置 EHCI 控制器,而不影响端口的状态或与伴随主机控制器的关系。例如,PORSTC 寄存器不应重置为其默认值,CF 位设置也不应为零(保持端口所有权关系)。主机软件将此位读为零表示轻量级主机控制器复位已完成,主机软件可以重新初始化主机控制器。主机软件将此位读为一表示轻量级主机控制器复位尚未完成。如果没有实现,读取此字段将始终返回零。 |
6 | R/W | 0x0 | Interrupt on Async Advance Doorbell 使能产生异步调度器向前中断(对应 USBSTS
的中断状态位 Advance )
此位被软件用作门铃,以通知主机控制器在下一次推进异步调度时发出中断。软件必须向此位写入 1 以按响门铃。当主机控制器已经清除了所有适当的缓存调度状态后,它会在 USBSTS 寄存器中设置“异步前进中断”状态位。如果 USBINTR 寄存器中的“异步前进中断启用”位为一,则主机控制器将在下一个中断阈值处断言一个中断。主机控制器在将 USBSTS 寄存器中的“异步前进中断”状态位设置为一之后,会将此位设置为零。当异步调度被禁用时,软件不应向此位写入一。这样做将产生未定义的结果。 |
5 | R/W | 0x0 | Asynchronous Schedule Enable,异步调度使能 This bit controls whether
the host controller skips processing the Asynchronous
Schedule.
|
4 | R/W | 0x0 | Periodic Schedule
Enable,周期调度使能 此位控制主机控制器是否跳过处理异步调度。
|
3:2 | RO | 0x0 | Frame List
Size 此功能不支持 这个字段是可读写的,但仅当
HCCPARAMS 寄存器中的可编程帧列表标志设置为 1
时。该字段指定了帧列表的大小。帧列表的大小控制了帧索引寄存器中哪些位应该被用来表示当前帧列表索引。各个值的含义如下: 这个字段是可读写的,但仅当 HCCPARAMS 寄存器中的可编程帧列表标志设置为 1 时。该字段指定了帧列表的大小。帧列表的大小控制了帧索引寄存器中哪些位应该被用来表示当前帧列表索引。各个值的含义如下:0b00:1024 个元素(4096 字节)。默认值。0b01:512 个元素(2048 字节)0b10:256 个元素(1024 字节)
- 用于资源受限环境 0b11:保留
|
1 | R/WAC | 0x0 | Host Controller Reset (HCRESET) EHCI 控制复位,复位完成后会自动清 0. 这个控制位由软件用来重置主机控制器。这种重置对根集线器寄存器的影响类似于芯片硬件重置。当软件向该位写入 1 时,主机控制器会将内部管道、定时器、计数器、状态机等重置为初始值。USB 上正在进行的任何事务都会立即终止。下游端口不会进行 USB 重置。PCI 配置寄存器不受此重置的影响。所有操作寄存器,包括端口寄存器和端口状态机,都被设置为其初始值。端口所有权将归还给伴随的主机控制器,并产生副作用。软件必须重新初始化主机控制器,以使其恢复到工作状态。当重置过程完成时,主机控制器会将此位设置为 0。软件不能通过向该寄存器写入 0 来提前终止重置过程。当 USBSTS 寄存器中的 HCH alted 位为 0 时,软件不应将此位设置为 1。尝试重置正在运行的主机控制器将导致未定义的行为。 |
0 | R/W | 0x0 | Run/Stop (RS)
当设置为 1 时,主机控制器开始执行调度。只要这个位设置为 1,主机控制器就会继续执行。当这个位被设置为 0 时,主机控制器会完成当前和 USB 上任何正在流水线处理的事务,然后停止。在软件清除运行位后的 16 微帧内,主机控制器必须停止。状态寄存器中的 HC H alted 位表示主机控制器已完成其待处理的流水线事务并已进入停止状态。除非主机控制器处于停止状态(即 USBSTS 寄存器中的 HCH alted 为 1),否则软件不得向此字段写入 1。这样做将产生不可知的结果。 |
0x014 USBSTS(EHCI)
默认值:0x00001000 | USBSTS 寄存器(USBSTS) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15 | RO | 0x0 | Asynchronous Schedule Status 指示当前异步调度的状态
当软件在 USBCMD 寄存器中转换异步调度启用位时,主机控制器不需要立即禁用或启用异步调度。当这个位和异步调度启用位具有相同的值时,异步调度要么被启用(1),要么被禁用(0)。 |
14 | RO | 0x0 | Periodic Schedule Status 此位指示当前周期调度的状态
当软件在 USBCMD 寄存器中转换周期性调度启用位时,主机控制器不需要立即禁用或启用周期性调度。当这个位和周期性调度启用位具有相同的值时,周期性调度要么被启用(1),要么被禁用(0)。 |
13 | RO | 0x0 | Reclamation 此位用于检测异步调度是否为空。 |
12 | RO | 0x1 | HCH alted 用于指示 EHCI 的调度器是否停止。
|
11:6 | - | - | - |
5 | R/W1C | 0x0 | Interrupt on Async
Advance 异步调度器向前中断 系统软件可以通过将 1 写入 USBCMD 寄存器中的 Interrupt on Async Advance Doorbell 位来强制主机控制器在下一次主机控制器推进异步调度时发出中断。此状态位表示该中断源的断言。 |
4 | R/W1C | 0x0 | Host System Error EHCI 系统错误中断
|
3 | R/W1C | 0x0 | Frame List Rollover 帧链表溢出中断
主机控制器在帧列表索引从其最大值回滚到零时将此位设置为 1。回滚发生的具体值取决于帧列表的大小。例如,如果帧列表大小(如 USBCMD 寄存器中的 Frame List Size 字段所编程)为 1024,则每当 FRINDEX[13] 切换时,帧索引寄存器就会回滚。类似地,如果大小为 512,则每当 FRINDEX[12] 切换时,主机控制器就会将此位设置为 1。 |
2 | R/W1C | 0x0 | Port Change Detect 端口归属变化中断
主机控制器在以下情况下将此位设置为 1:
此位可以在辅助电源中保持。另外,也可以接受在 EHCI HC 设备的 D3 到 D0 转换期间,此位加载所有 PORTSC 更改位的 OR 值(包括:强制端口恢复、过电流变化、启用/禁用更改和连接状态更改) |
1 | R/W1C | 0x0 | USB Error Interrupt (USBERRINT) USB 错误中断
当 USB 事务的完成导致错误状态(例如,错误计数器下溢)时,主机控制器会将此位设置为 1。如果发生错误中断的传输描述符(TD)也设置了 IOC 位,则此位和 USBINT 位都会被设置。 |
0 | R/W1C | 0x0 | USB Interrupt (USBINT)
在 USB 事务完成并导致设置了 IOC 位的传输描述符(TD)被回收时,主机控制器会将此位设置为 1。当检测到短包(实际接收到的字节数少于预期字节数)时,主机控制器也会将此位设置为 1。 |
0x018 USBINTR(EHCI)
默认值:0x00000000 | FRINDEX 寄存器(FRINDEX) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:6 | - | - | - |
5 | R/W | 0x0 | Interrupt on Async Advance
Enable 异步调度器向前中断使能 当该位为 1,且 USBSTS 寄存器中的“中断异步提前”位也为 1 时,主机控制器将在下一个中断阈值处发出中断。软件通过清除“中断异步提前”位来确认此中断。 |
4 | R/W | 0x0 | Host System Error Enable EHCI 系统错误中断使能 当该位为 1,且 USBSTS 寄存器中的“主机系统错误状态”位也为 1 时,主机控制器将发出中断。软件通过清除“主机系统错误状态”位来确认此中断。 |
3 | R/W | 0x0 | Frame List Rollover
Enable 帧链表溢出中断使能 当该位为 1,且 USBSTS 寄存器中的“帧列表翻转”位也为 1 时,主机控制器将发出中断。软件通过清除“帧列表翻转”位来确认此中断。 |
2 | R/W | 0x0 | Port Change Interrupt
Enable. 端口归属变化中断使能 当该位为 1 ,且 USBSTS 寄存器中的“端口变化检测”位也为 1 时,主机控制器将发出中断。软件通过清除“端口变化检测”位来确认此中断。 |
1 | R/W | 0x0 | USB Error Interrupt Enable USB 错误中断使能 当该位为 1,且 USBSTS 寄存器中的“ USBERRINT ”位也为 1 时,主机控制器将在下一个中断阈值处发出中断。软件通过清除“ USBERRINT ”位来确认此中断。 |
0 | R/W | 0x0 | USB Interrupt Enable USB 中断使能 当该位为 1,且 USBSTS 寄存器中的“ USBINT ”位也为 1 时,主机控制器将在下一个中断阈值处发出中断。软件通过清除“ USBINT ”位来确认此中断。 |
0x01C FRINDEX(EHCI)
默认值:0x00000000 | FRINDEX 寄存器(FRINDEX) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:14 | - | - | - |
13:0 | R/W | 0x0 | Frame
Index 帧索引号 这个寄存器的值在每个时间帧(例如微帧)结束时递增。位[12:3]用于当前帧列表索引。这意味着在移动到下一个索引之前,每个帧列表的位置被访问 8 次(帧或微帧)。 |
0x024 PERIODICLISTBASE(EHCI)
默认值:0x00000000 | PERIODICLISTBASE 寄存器(PERIODICLISTBASE) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:12 | R/W | 0x0 | Base Address 此域对应空间地址的 Bit[31:12] 这个 32 位寄存器包含了系统内存中周期性帧列表的起始地址。这些位分别对应于内存地址信号 [31:12]。 |
11:0 | R/W | 0x0 | Reserved 必须写为 0。 |
0x028 ASYNCLISTADDR(EHCI)
默认值:0x00000000 | ASYNCLISTADDR 寄存器(ASYNCLISTADDR) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:5 | R/W | 0x0 | Link Pointer Low (LPL). 此域为下一个将要被执行的异步 QH 的地址。 这个 32 位寄存器包含了下一个待执行的异步队列头的地址。这些位分别对应于内存地址信号 [31:5]。此字段只能引用一个队列头( QH )。 |
4:0 | - | - | - |
0x050 CONFIGFLAG(EHCI)
默认值:0x00000000 | CONFIGFLAG 寄存器(CONFIGFLAG) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:1 | - | - | - |
0 | R/W | 0x0 | Configure Flag
(CF) 配置标志位 主机软件在配置主机控制器的过程中,将此位设置为最后一步操作。该位用于控制默认的端口路由控制逻辑。
|
0x054 PORTSC(EHCI)
默认值:0x00002000 | PORTSC 寄存器(PORTSC) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:23 | - | - | - |
22 | R/W | 0x0 | Wake on Over-current Enable 使能过流唤醒
将此位设置为 1 会使端口对过电流条件敏感,并将其作为唤醒事件。如果端口电源为零,则该字段为零。 |
21 | R/W | 0x0 | Wake on Disconnect Enable (WKDSCNNT_E) 使能断开唤醒
将此位设置为 1 会使端口对设备断开连接敏感,并将其作为唤醒事件。如果端口电源为零,则该字段为零。 |
20 | R/W | 0x0 | Wake on Connect Enable (WKCNNT_E) 使能连接唤醒
将此位设置为 1 会使端口对设备连接敏感,并将其作为唤醒事件。如果端口电源为零,则该字段为零。 |
19:16 | R/W | 0x0 | Port Test Control 端口测试控制
|
15:14 | - | - | - |
13 | R/W | 0x1 | Port
Owner 端口归属 当 CONFIGFLAG 寄存器中的“配置”位从 0 变为 1 时,该位无条件地变为 0 。无论何时,只要“配置”位为 0,该位都会无条件地变为 1 。系统软件使用这个字段来将端口的所有权释放给选定的主机控制器(在所连接的设备不是高速设备的情况下)。当连接的设备不是高速设备时,软件会向这个位写入 1。这个位中的 1 表示一个伴随的主机控制器拥有并控制着端口。 |
12 | R/W | 0x0 | Port Power (PP) 端口电源控制
当端口上没有电源可用时(即 PP 等于 0),该端口将不起作用,不会报告连接、断开等状态。当在供电端口检测到过电流情况时,每个受影响端口的 PP 位可能会被主机控制器从 1 转换到 0(从端口移除电源)。 |
11:10 | RO | 0x0 | Line
Status 这些位反映了
D+(位 11)和 D-(位 10)信号线的当前逻辑电平。这些位用于在端口复位和使能序列之前检测低速 USB
设备。此字段仅在端口使能位为零且当前连接状态位设置为一时有效。
|
9 | - | - | - |
8 | R/W | 0x0 | Port Reset 端口复位
当软件将此位从 0 写入 1 时,USB 规范修订版 2.0 中定义的总线复位序列开始。软件将此位写入 0 以终止总线复位序列。软件必须保持此位为 1 足够长的时间,以确保按照 USB 规范修订版 2.0 指定的复位序列完成。注意:当软件将此位写入 1 时,还必须将 Port Enable 位写入零。请注意,当软件将此位写入 0 时,状态更改为 0 之前可能会有延迟。只有在复位完成后,该位的状态才会读取为 0。如果复位完成后端口处于高速模式,主机控制器会自动启用此端口(例如,将 Port Enable 位设置为 1)。主机控制器必须在软件将此位从 1 变为 0 后的 2ms 内终止复位并稳定端口状态。例如:如果端口在复位期间检测到连接的设备是高速设备,则主机控制器必须在软件将此位写入 0 后的 2ms 内使端口处于启用状态。在软件尝试使用此位之前,USBSTS 寄存器中的 HCHalted 位应为 0。当 HCHalted 位为 1 时,主机控制器可能会保持 Port Reset 为 1。如果 Port Power 为 0,则此字段为 0。 |
7 | R/W | 0x0 | Suspend
这个寄存器的“端口启用位”和“挂起位”定义了以下端口状态: Bits [Port Enabled, Suspend]
当端口处于挂起状态时,除了端口重置外,该端口上的数据下游传播将被阻塞。如果在将此位设置为 1 时有事务正在进行,则阻塞将在当前事务结束时发生。在挂起状态下,端口对恢复检测敏感。请注意,位的状态直到端口被挂起才会改变,并且如果 USB 上有事务正在进行,则挂起端口可能会有延迟。 主机控制器会忽略对此位的写 0 操作。在以下情况下,主机控制器会无条件地将此位设置为 0: • 软件将强制端口恢复位设置为 0(从 1 开始)。 • 软件将端口重置位设置为 1(从 0 开始)。 如果主机软件在端口未启用(即端口启用位为 0)时将此位设置为 1,结果未定义。如果端口电源为 0,则此字段为 0。 |
6 | R/W | 0x0 | Force Port Resume 强制端口 Resume
此功能定义用于操作该位,取决于“挂起”位的值。例如,如果端口未被挂起(即“挂起”和“启用”位都为 1),并且软件将此位转换为 1,则其在总线上的影响是未定义的。软件将此位设为 1 以驱动恢复信号。在端口处于挂起状态时,如果检测到 J 至 K 转换,主控制器会将此位设置为 1。当由于检测到 J 至 K 转换而使此位变为 1 时, USBSTS 寄存器中的“端口更改检测”位也会被设置为 1。如果软件将此位设置为 1,则主控制器不得设置“端口更改检测”位。请注意,当 EHCI 控制器拥有端口时,恢复序列遵循 USB 规范修订版 2.0 中定义的顺序。只要该位保持为 1,就会在端口上驱动恢复信号(全速‘K’)。软件必须适当地计时恢复操作,并在适当的时间过后将此位设置为 0。将此位从 1 开始写为 0 会导致端口返回到高速模式(强制端口下方的总线进入高速空闲状态)。在软件将此位设置为 0 后的 2 毫秒内,该位将保持为 1,直到端口已切换到高速空闲状态。如果端口电源为 0,则该字段为 0。 |
5 | R/W1C | 0x0 | Over-current Change 端口过流状态变化
软件通过将此位位置写为 1 来清除该位。 |
4 | RO | 0x0 | Over-current Active 端口过流
当过电流情况消失时,该位会自动从 1 变为 0。 |
3 | R/W1C | 0x0 | Port Enable/Disable Change 端口使能/禁止变化
对于根集线器,只有在 EOF2 点存在适当条件时,该位才会被设置为 1,以禁用端口。软件通过将此位写为 1 来清除它。如果 Port Power 为 0,则此字段为 0。 |
2 | R/W | 0x0 | Port Enabled/Disabled 端口使能/禁止
端口只能由主机控制器作为重置和启用的一部分来启用。软件不能通过将此字段写为 1 来启用端口。主机控制器只有在复位序列确定连接的设备是高速设备时才会将此位设置为 1。端口可以通过故障条件(断开事件或其他故障条件)或主机软件禁用。请注意,端口状态实际发生变化之前,位状态不会改变。由于其他主机控制器和总线事件,禁用或启用端口可能会有一定的延迟。当端口被禁用(0)时,除了复位之外,该端口上的数据向下传播会被阻止。如果 Port Power 为 0,则此字段为 0。 |
1 | R/WC | 0x0 | Connect Status Change 端口连接状态发生变化
表示端口的当前连接状态发生了变化。主机控制器会为端口设备连接状态的所有变化设置此位,即使系统软件尚未清除现有的连接状态变化。例如,在系统软件清除已更改的状态之前,插入状态发生了两次变化,集线器硬件将“设置”一个已经设置的位(即,该位将保持设置)。软件通过向其写入 1 来将此位重置为 0。如果端口电源为 0,则此字段为 0。 |
0 | RO | 0x0 | Current Connect Status 当前端口连接状态
这个值反映了端口的当前状态,可能并不直接对应于导致连接状态更改位(位 1)被设置的事件。如果端口电源为 0,则此字段为 0。 |
0x400 HcRevision(OHCI)
默认值:0x00000110 | HcRevision 寄存器(HcRevision) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:9 | - | - | - |
8 | R | 0x1 | LEGACY_SUPPORT |
7:0 | R | 0x10 | Revision OHCI 版本 这个只读字段包含 HCI 规范实现的版本号的 BCD 表示。例如,值 11h 对应于版本 1.1。所有符合此规范的 HC 实现都将具有值为 10h 的值。 |
0x404 HcControl (OHCI)
默认值:0x00000000 | HcControl 寄存器(HcControl) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:11 | - | - | - |
10 | R/W | 0x0 | RWE Remote Wakeup Enable 远程唤醒使能 该位由 HCD 用于在检测到上游恢复信号时启用或禁用远程唤醒功能。当此位被设置并且 Hc 中断状态中的 Resume Detected 位也被设置时,将向主机系统发送远程唤醒信号。设置此位不会影响硬件中断的产生。 |
9 | R/W | 0x0 | RWC Remote Wakeup Connected 该位指示 HC 是否支持远程唤醒信号。如果系统支持并使用了远程唤醒,则系统固件在 POST 期间负责设置此位。硬件复位时,HC 会清除该位,但软件复位时不会更改它。主机系统的远程唤醒信号是特定于主机总线的,本规范中未进行描述。 |
8 | R/W | 0x0 | IR Interrupt Routing,中断通路
该位确定由 Hc 中断状态中注册的事件生成的中断的路由。如果清除,则所有中断都路由到正常的主机总线中断机制。如果设置,则中断路由到系统管理中断。硬件复位时,HCD 会清除此位,但在软件复位时不会更改此位。HCD 使用此位作为标签来指示 HC 的所有权。 |
7:6 | R/W | 0x0 | HCFS Host Controller Functional State for USB USB Host
控制器的功能状态
从另一个状态过渡到 USB OPERATIONAL 会导致 1 毫秒后开始生成 SOF。HCD 可以通过读取 HcInterruptStatus 的帧开始字段来确定 HC 是否已开始发送 SOFs。此字段仅在 USBSUSPEND 状态下由 HC 更改。HC 在检测到来自下游端口的恢复信号后,可以从 USBSUSPEND 状态移动到 USBRESUME 状态。软件复位后,HC 进入 USBSUSPEND 状态,而硬件复位后,它进入 USBRESET 状态。后者还会重置根集线器并向下游端口发出后续重置信号。 |
5 | R/W | 0x0 | BLE Bulk List Enable,Bulk 链表使能 此位被设置为在下一个帧中启用 Bulk 列表的处理。如果 HCD 清除了此位,则在下一个 SOF 之后不会进行 Bulk 列表的处理。HC 在确定处理列表时检查此位。当禁用时,HCD 可以修改列表。如果 HcBulkCurrentED 指向一个要移除的 ED,HCD 必须在重新启用列表处理之前通过更新 HcBulkCurrentED 来推进指针。 |
4 | R/W | 0x0 | CLE Control List Enable,控制链表使能 这个位被设置为启用下一帧中控制列表的处理。如果 HCD 清除了这个位,那么在下一个 SOF 之后将不会处理控制列表。 HC(主机控制器)在决定处理列表时必须检查这个位。当禁用时,HCD 可以修改列表。如果 HcControlCurrentED 指向要移除的端点描述符(ED),HCD 必须在重新启用列表处理之前通过更新 HcControlCurrentED 来移动指针。 |
3 | R/W | 0x0 | IE Isochronous Enable,同步端点描述符使能 这个位被 HCD 用来启用/禁用同步 EDs 的处理。在处理帧中的周期性列表时,HC 在发现一个同步 ED(F=1)时会检查这个位的状态。如果设置(启用),HC 会继续处理 EDs。如果清除(禁用),HC 会停止处理周期性列表(现在只包含同步 EDs),并开始处理批量/控制列表。设置这个位保证在下一帧生效(而不是当前帧)。 |
2 | R/W | 0x0 | PLE Periodic List Enable,周期链表使能 这个位被设置为启用下一帧中周期性列表的处理。如果 HCD 清除了这个位,那么在下一个 SOF 之后将不会处理周期性列表。HC(主机控制器)在开始处理列表之前必须检查这个位。 |
1:0 | R/W | 0x0 | CBSR Control Bulk Service Ratio,Control Bulk 服务比 这指定了控制
EDs 和批量 EDs 之间的服务比率。在处理任何非周期性列表之前,HC
(主机控制器)必须将指定的比率与其内部计数进行比较,该计数记录了已处理的非空控制 EDs 的数量,以确定是继续处理另一个控制
ED 还是切换到批量 EDs。内部计数将在跨越帧边界时保留。在重置的情况下,HCD
负责恢复这个值。(Control EP 描述符与 Bulk EP 描述符之比)
|
0x408 HcCommandStatus(OHCI)
默认值:0x00000000 | HcCommandStatus 寄存器(HcCommandStatus) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:18 | - | - | - |
17:16 | R/W | 0x0 | SOC SchedulingOverrunCount,调度器溢出计数 这些位在每次调度超时错误发生时递增。它初始化为 00b,并在 11b 时回绕。即使 HcInterruptStatus 中的调度超时已经被设置,当检测到调度超时时,这也会递增。HCD 使用这个来监控任何持续的调度问题。 |
15:3 | - | - | - |
3 | R/W | 0x0 | OCR OwnershipChangeRequest,归属变化请求信号 这个位由操作系统的 HCD 设置,以请求更改 HC(主机控制器)的控制权。当设置了这个位,HC 将在 HcInterruptStatus 中设置所有权更改字段。在移交后,这个位将被清除,并保持清除状态,直到操作系统 HCD 的下一个请求。 |
2 | R/W | 0x0 | BLF BulkListFilled,Bulk 链表填入 TD 这个位用来指示批量列表上是否有任何事务描述符(TD)。每当 HCD 将一个 TD 添加到批量列表中的一个端点描述符(ED)时,它就会设置这个位。当主机控制器(HC)开始处理批量列表的头部时,它会检查 BF(Bulk List Filled,批量列表填充)标志。只要 BulkListFilled 为 0,HC 就不会开始处理批量列表。如果 BulkListFilled 为 1,HC 将开始处理批量列表,并将 BF 设置为 0。如果 HC 在列表上找到一个 TD,那么 HC 将设置 BulkListFilled 为 1,导致批量列表的处理继续进行。如果在批量列表上没有找到 TD,并且如果 HCD 没有设置 BulkListFilled,那么当 HC 完成处理批量列表时,BulkListFilled 仍将为 0,批量列表的处理将停止。 |
1 | R/W | 0x0 | CLF ControlListFilled,控制链表填入 TD 这个位用来表示 Control 列表上是否有任何传输描述符(TD)。每当主机控制器驱动(HCD)向控制(Control)列表中的一个端点描述符(ED)添加一个 TD 时,它就会设置这个位。当主机控制器(HC)开始处理 Control 列表的头部时,它会检查 CLF(Control List Filled)。只要 ControlListFilled 是 0,HC 就不会开始处理 Control 列表。如果 CF(Control List Full)是 1,HC 将开始处理 Control 列表,并将 ControlListFilled 设置为 0。如果 HC 在列表中找到了一个 TD,那么 HC 会将 ControlListFilled 设置为 1,使得 Control 列表的处理继续进行。如果在 Control 列表中没有找到 TD,并且 HCD 没有设置 ControlListFilled,那么当 HC 完成处理 Control 列表时,ControlListFilled 仍将为 0,Control 列表的处理将会停止。 |
0 | R/W | 0x0 | HCR HostControllerReset,OHCI 软复位 此位由主机控制器驱动(HCD)设置,用以启动主机控制器(HC)的软件重置。无论 HC 的功能状态如何,它都会转移到 USBSUSPEND 状态,在该状态下,大多数操作寄存器都会被重置,除了那些特别声明的以外;例如,HcControl 的 InterruptRouting 字段,并且不允许进行任何主机总线访问。这个位会在重置操作完成后由 HC 清除。重置操作必须在 10 毫秒内完成。当设置此位时,不应导致根集线器(Root Hub)重置,且不应向其下游端口断言任何后续的重置信号。 |
0x40C HcInterruptStatus
默认值:0x00000000 | HcInterruptStatus 寄存器(HcInterruptStatus) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | - | - | - |
30 | R/W | 0x0 | OC OwnershipChange,归属状态变化 当主机控制器驱动(HCD)在 HcCommandStatus 结构中设置 OwnershipChangeRequest 字段时,主机控制器(HC)会设置此位。当该事件未被屏蔽时,将立即生成一个系统管理中断(SMI)。如果 SMI 引脚没有实现,则此位会被绑定到 0b。 |
29:7 | - | - | - |
6 | R/W | 0x0 | RHSC RootHubStatusChange 当 HcRhStatus 的内容或任何 HcRhPortStatus[NumberofDownstreamPort] 的内容发生变化时,此位会被设置。 |
5 | R/W | 0x0 | FNO FrameNumberOverflow 当 HcFmNumber 的最高有效位(第 15 位)的值发生变化,从 0 变为 1 或从 1 变为 0,并且在更新了 HccaFrameNumber 之后,此位会被设置。 |
4 | R/W | 0x0 | UE UnrecoverableError 当 HC 检测到与 USB 无关的系统错误时,此位会被设置。在系统错误被纠正之前,HC 不应继续进行任何处理或发出信号。HCD 在 HC 被重置后清除此位。 |
3 | R/W | 0x0 | RD ResumeDetected 当 HC 检测到 USB 上的设备正在发出恢复信号时,此位会被设置。这是从没有恢复信号到恢复信号的转变导致此位被设置。当 HCD 设置 USBRESUME 状态时,此位不会被设置。 |
2 | R/W | 0x0 | SFStartofFrame 在每个帧开始时以及 HccaFrameNumber 更新之后,HC 会设置这个位。同时,HC 也会产生一个 SOF 令牌。 |
1 | R/W | 0x0 | WDHWritebackDoneHead 在 HC 将 HcDoneHead 写入 HccaDoneHead 之后,这个位会立即被设置。在清除此位之前,不会对 HccaDoneHead 进行进一步的更新。HCD 应在保存了 HccaDoneHead 的内容后才清除此位。 |
0 | R/W | 0x0 | SO SchedulingOverrun 当当前帧的 USB 调度超时时,这个位会被设置,并在 HccaFrameNumber 更新后。调度超时还会导致 HcCommandStatus 中的 SchedulingOverrunCount 增加。 |
0x410 HcInterruptEnable
默认值:0x00000000 | HcInterruptEnable 寄存器(HcInterruptEnable) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | R/W | 0x0 | MIE
HCD 将其用作主中断使能。 |
30 | R/W | 0x0 | OC
|
29:7 | - | - | - |
6 | R/W | 0x0 | RHSC
|
5 | R/W | 0x0 | FNO
|
4 | R/W | 0x0 | UE
|
3 | R/W | 0x0 | RD
|
2 | R/W | 0x0 | SF
|
1 | R/W | 0x0 | WDH
|
0 | R/W | 0x0 | SO
|
0x414 HcInterruptDisable
默认值:0x00000000 | HcInterruptDisable 寄存器(HcInterruptDisable) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | R/W | 0x0 | MIE
此字段在硬件或软件复位后被设置。 |
30 | R/W | 0x0 | OC
|
29:7 | - | - | - |
6 | R/W | 0x0 | RHSC
|
5 | R/W | 0x0 | FNO
|
4 | R/W | 0x0 | UE
|
3 | R/W | 0x0 | RD
|
2 | R/W | 0x0 | SF
|
1 | R/W | 0x0 | WDH
|
0 | R/W | 0x0 | SO
|
0x418 HcHCCA
默认值:0x00000000 | HcHCCA 寄存器(HcHCCA) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:8 | R/W | 0x0 | HCCA[31:8] 这是主机控制器通信区域的基地址。 |
7:0 | R | 0x0 | HCCA[7:0] 通过检查低位中零的数量来评估对齐情况。最小对齐是 256 字节;因此,在读取时,位 0 到位 7 必须始终返回‘0’。 |
0x41C HcPeriodCurrentED
默认值:0x00000000 | HcPeriodCurrentED 寄存器(HcPeriodCurrentED) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R/W | 0x0 | PCED[31:4] PeriodCurrentED 这被主机控制器( hc )用来指向一个周期性列表的头部,该列表将在当前帧中被处理。这个寄存器的内容在非周期事件描述符( ed )被处理后由主机控制器( hc )更新。主机控制器驱动程序( hcd )可以读取此内容,以确定在读取时正在处理哪个事件描述符 ( ed )。 |
3:0 | R | 0x0 | PCED[3:0] 由于通用 TD 长度为 16 字节,因此 TD 的内存结构必须对齐到 16 字节边界。因此,PCED 中的低位(从位 0 到位 3)在这个字段中必须为零。 |
0x420 HcControlHeadED
默认值:0x00000000 | HcControlHeadED 寄存器(HcControlHeadED) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R/W | 0x0 | CHED[31:4] ControlHeadEDHC 从 HcControlHeadED 指针开始遍历控制列表。内容在 HC 初始化期间从 HCCA 加载。 |
3:0 | R | 0x0 | CHED[3:0] 因为通用 TD 的长度是 16 字节,所以 TD 的内存结构必须对齐到 16 字节边界。因此,CHED 中的低比特位,从第 0 位到第 3 位在这个字段中必须是零。 |
0x0424 HcControlCurrentED
默认值:0x00000000 | HcControlCurrentED 寄存器(HcControlCurrentED) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R/W | 0x0 | CCED[31:4] ControlCurrentEDThis 指针在服务当前 ED 后前进到下一个 ED。HC 将从上一帧中离开的地方继续处理列表。当它到达控制列表的末尾时,HC 检查 inHcCommandStatus 中的 ControlListFilled 位。如果设置了该位,它将复制 HcControlHeadED 的内容到 HcControlCurrentED 并清除该位。如果没有设置该位,则不执行任何操作。只有在 HcControl 的 ControlListEnable 被清除时,HCD 才允许修改此寄存器。当设置时, HCD 只读取此寄存器的瞬时值。最初,此寄存器设置为零,表示控制列表的结束。 |
3:0 | R | 0x0 | CCED[3:0] 因为通用 TD 的长度是 16 字节,所以 TD 的内存结构必须对齐到 16 字节边界。因此,CCED 中的低比特位,从第 0 位到第 3 位在这个字段中必须是零。 |
0x0428 HcBulkHeadED
默认值:0x00000000 | HcBulkHeadED 寄存器(HcBulkHeadED) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R/W | 0x0 | BHED[31:4] BulkHeadED HC 遍历 Bulk 列表,从 HcBulkHeadEDpointer 开始。内容在 HC 初始化时从 HCCA 加载。 |
3:0 | R | 0x0 | BHED
[3:0] 由于一般的传输描述符(TD)长度为 16 字节,因此 TD 的内存结构必须对齐到 16 字节边界。所以,在缓冲区头部使能器/描述符(BHED)中,从第 0 位到第 3 位的较低位必须在此字段中为零。 |
0x042C HcBulkCurrentED
默认值:0x00000000 | HcBulkCurrentED 寄存器(HcBulkCurrentED) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R/W | 0x0 | BCED[31:4] BulkCurrentED 在主机控制器(Host Controller, HC)处理完当前的端点描述符(Endpoint Descriptor, ED)后,它会前进到下一个 ED。接着,HC 会继续处理列表,从上一帧中断的地方继续执行。当 HC 到达批量传输列表的末尾时,它会检查 HcControl 中的 ControlListFilled 位。如果此位被设置,HC 会将 HcBulkHeadED 的内容复制到 HcBulkCurrentED,并清除该位;如果该位未被设置,则不执行任何操作。只有在 HcControl 的 BulkListEnable 位被清除的情况下,主机控制器驱动(Host Controller Driver, HCD)才允许修改这个寄存器。当 BulkListEnable 位被设置时,HCD 只能读取该寄存器的瞬时值。这个寄存器最初被设置为 0,以指示批量传输列表的结束。 |
3:0 | R | 0x0 | BCED
[3:0] 由于一般的传输描述符(TD)长度为 16 字节,因此 TD 的内存结构必须对齐到 16 字节边界。所以,在 BCED ,从第 0 位到第 3 位的较低位必须在此字段中为零。 |
0x0430 HcDoneHead
默认值:0x00000000 | HcDoneHead 寄存器(HcDoneHead) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:4 | R | 0x0 | DH[31:4] DoneHead 当一个传输描述符(TD)完成时,主机控制器(Host Controller,HC)会将 HcDoneHead 的内容写入该 TD 的 NextTD 字段。随后,HC 用这个 TD 的地址重写 HcDoneHead 的值。每当 HC 把这一寄存器的内容写入 Host Controller Channel Assignment(HCCA)时,这个值就会被清零。同时,它还会设置 HcInterruptStatus 的 WritebackDoneHead 位。 |
3:0 | R | 0x0 | 在 USB 协议中,传输描述符(TD)的长度通常为 16 字节,因此 TD 的内存结构必须对齐到 16 字节边界。这意味着在描述符头部(DH)的低 4 位(从第 0 位到第 3 位)必须为零,以确保对齐。 |
0x0434 HcFmInterval
默认值:0x00002EDF | HcFmInterval 寄存器(HcFmInterval) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | R/W | 0x0 | FIT FrameIntervalToggle HCD(Host Controller Driver)会在加载新的值到 FrameInterval 时切换这个位。 |
30:16 | R/W | 0x0 | FSMPS FSLargestDataPacket 这个字段指定了在每个帧开始时加载到最大数据包计数器(Largest Data Packet Counter)的值。计数器的值表示在任何给定时间,HC 可以在单个事务中发送或接收的最大数据量(以位为单位),而不会导致调度溢出。字段值由 HCD 计算得出。 |
15:14 | - | - | - |
13:0 | R/W | 0x2EDF | FI FrameInterval 这个字段指定了两个连续 SOF 之间的间隔时间(以位为单位)。名义值设置为 11,999。在重置 HC 之前,HCD 应存储此字段的当前值。通过将 HcCommandStatus 的 HostControllerReset 字段设置为 1,这将导致 HC 将此字段重置为其名义值。在完成重置序列后,HCD 可以选择恢复存储的值。 |
0x0438 HcFmRemaining
默认值:0x00000000 | HcFmRemaining 寄存器(HcFmRemaining) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | R | 0x0 | FRT FrameRemainingToggle 当 Frame Remaining 达到 0 时,这个位将从 HcFmInterval 的 FrameIntervalToggle 字段加载。HCD 使用这个位来同步 Frame Interval 和 Frame Remaining。 |
30:14 | - | - | - |
13:0 | R | 0x0 | FR FrameRemaining 这个计数器在每个位时间递减。当它达到零时,它将在下一位时间边界处加载 HcFmInterval 中指定的 Frame Interval 值进行重置。当进入 USBOPERATIONAL 状态时,HC 会在下一个 SOF 时重新加载 HcFmInterval 的 Frame Interval 内容,并使用更新后的值。 |
0x043C HcFmNumber
默认值:0x00000000 | HcFmNumber 寄存器(HcFmNumber) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | - | - | - |
15:0 | R | 0x0 | FN FrameNumber 当 HcFmRemaining 重新加载时,该值会增加。在 ffffh 之后,它将回滚到 0h。当进入 USBOPERATIONAL 状态时,它会自动增加。每当 HC 在每个帧边界处递增 FrameNumber 并发送 SOF,但在读取该帧中的第一个 ED 之前,内容将被写入 HCCA。写入 HCCA 后,HC 将在 HcInterruptStatus 中设置 StartofFrame。 |
0x440 HcPeriodicStart
默认值:0x00000000 | HcPeriodicStart 寄存器(HcPeriodicStart) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:14 | - | - | - |
13:0 | R/W | 0x0 | PSPeriodicStart 硬件重置后,该字段将被清除。然后在 HC 初始化期间由 HCD 设置。该值大约计算为 HcFmInterval 的 90%。一个典型值将是 3E67h。当 HcFmRemaining 达到指定值时,周期性列表的处理将优先于控制/批量处理。因此,在完成当前正在进行的控制或批量事务后,HC 将开始处理中断列表。 |
0x444 HcLSThreshold
默认值:0x00000628 | HcLSThreshold 寄存器(HcLSThreshold) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:12 | - | - | - |
11:0 | R/W | 0x628 | LST LSThreshold 该字段包含一个值,该值在启动低速事务之前与“帧剩余”字段进行比较。仅当“帧剩余”大于或等于该字段时,才会启动事务。该值由 HCD 计算,同时考虑到传输和设置开销。 |
0x448 HcRhDescriptorA
默认值:0x02000001 | HcRhDescriptorA 寄存器(HcRhDescriptorA) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:24 | R/W | 0x2 | POTPGT PowerOnToPowerGoodTime POWER 启动时间 这个字节指定了 HCD 在访问根集线器的加电端口之前需要等待的时间长度。这是特定于实现的。时间单位为 2 毫秒。持续时间计算为 POTPGT * 2 毫秒。 |
23:13 | - | - | - |
12 | R/W | 0x0 | NOCP NoOverCurrentProtection 不支持过流保护 这个位描述了根集线器端口的过电流状态是如何报告的。当该位被清除时,OverCurrentProtectionMode
字段指定全局或每个端口的报告方式。
|
11 | R/W | 0x0 | OCPM OverCurrentProtectionMode 过流保护模式 这个位描述了根集线器端口的过电流状态是如何被报告的。在重置时,这个字段应该反映出与电源切换模式相同的模式。这个字段只有在
NoOverCurrentProtection 字段被清除的情况下才有效。
|
10 | R/W | 0x0 | DT DeviceType 这个位指定根集线器不是一个复合设备。根集线器不允许是复合设备。此字段应始终读/写为 0。 |
9 | R/W | 0x0 | NPS NoPowerSwitching 不支持电源开关 这些位用于指定是否支持电源切换或端口始终处于供电状态。它是特定于实现的。当此位被清除时,PowerSwitchingMode
指定全局或每个端口的切换。
|
8 | R/W | 0x0 | PSM PowerSwitchingMode 电源开关模式 这个位用于指定根集线器端口的电源切换是如何控制的。它是特定于实现的。只有在
NoPowerSwitching 字段被清除时,此字段才有效。
|
7:0 | R/W | 0x1 | NDP NumberDownstreamPorts 下行端口的数目 这些位指定根集线器支持的下游端口数量。它是特定于实现的。最小端口数为 1。OpenHCI 支持的最大端口数为 15。 |
0x44C HcRhDescriptorB
默认值:0x00000000 | HcRhDescriptorB 寄存器(HcRhDescriptorB) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:16 | R/W | 0x0 | PPCM PortPowerControlMask 端口电源控制屏蔽 这些位用于指定根集线器支持的下游端口数量。具体的数量取决于实现方式,最小的端口数量是 1 个,OpenHCI 支持的最大端口数量为 15 个。 每个位指示在 PowerSwitchingMode 被设置时,是否有端口受到全局电源控制命令的影响。当该位被设置时,端口的电源状态只会受到每端口电源控制(Set/ClearPortPower)的影响;而当该位被清除时,端口则由全局电源开关(Set/ClearGlobalPower)控制。如果设备被配置为全局切换模式(PowerSwitchingMode = 0),则此字段无效。
|
15:0 | R/W | 0x0 | DR DeviceRemovableDevice 可移除设置 每个位专门对应根集线器的一个端口。当位被清除时,连接在该端口上的设备可以被移除;当位被设置时,连接在该端口上的设备则不可以被移除。
|
0x450 HcRhStatus
默认值:0x00000000 | HcRhStatus 寄存器(HcRhStatus) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31 | W | 0x0 | CRWE ClearRemoteWakeupEnable 清除远程唤醒使能 写入‘1’会清除 DeviceRemoveWakeupEnable (设备移除唤醒启用)功能。 写入‘0’则没有任何效果。 |
30:18 | - | - | - |
17 | R/W | 0x0 | OCIC OverCurrentIndicatorChange 过流状态出现变化
当这个寄存器的 OCI 字段发生变化时,硬件会设置这个位。主机控制器驱动(HCD)通过写入‘1’来清除这个位。写入‘0’则没有任何效果。 |
16 | R/W | 0x0 | SetGlobalPower 全局电源使能
在全局电源模式(PowerSwitchingMode=0)下,将此位写入‘1’会为所有端口开启电源(清除 PortPowerStatus)。在每个端口的电源模式下,它仅在那些没有设置 PortPowerControlMask 位的端口上设置 PortPowerStatus。写入‘0’则没有任何效果。 |
15 | R/W | 0x0 | DRWE (read)
DeviceRemoteWakeupEnable 这个位启用
ConnectStatusChange 位作为一个恢复事件,导致 USBSUSPEND 状态转换到 USBRESUME
状态,并设置 ResumeDetected 中断。
写入设置远程唤醒启用。 写入‘1’会设置 DeviceRemoveWakeupEnable。写入‘0’则没有任何效果。 |
14:2 | - | - | - |
1 | R/W | 0x0 | OCI OverCurrentIndicator 过流指示位
这个位在实现全局报告时报告过电流情况。当设置为 1 时,表示存在过电流条件;当清除为 0 时,所有电源操作正常。如果实现了每个端口的过电流保护,则此位始终为‘0’。 |
0 | R/W | 0x0 | ClearGlobalPower 全局电源断开
在全局电源模式(PowerSwitchingMode=0)中,将此位写入‘1’会关闭所有端口的电源(清除 PortPowerStatus)。在每个端口的电源模式中,它只会清除那些未设置 PortPowerControlMask 位的端口上的 PortPowerStatus。写入‘0’则没有任何效果。 |
0x454 HcRhPortStatus
默认值:0x00000080 | HcRhPortStatus 寄存器(HcRhPortStatus) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:21 | - | - | - |
20 | R/W | 0x0 | PRSC PortResetStatusChange 端口 RESET 状态改变 这个位在
10 毫秒端口复位信号结束时被设置。HCD
写入‘1’来清除这个位。写入‘0’则没有任何效果。
|
19 | R/W | 0x0 | OCIC PortOverCurrentIndicatorChange 这个位只在每个端口报告过电流条件时有效。当
Root Hub 改变 PortOverCurrentIndicator 位时,这个位被设置。HCD
写入‘1’来清除这个位。写入‘0’则没有任何效果。
|
18 | R/W | 0x0 | PSSC PortSuspendStatusChange 这个位在完整的恢复序列完成后被设置。这个序列包括 20 秒的恢复脉冲、LSEOP 和 3 毫秒的重新同步延迟。HCD 写入‘1’来清除这个位。写入‘0’则没有任何效果。当 ResetStatusChange 被设置时,这个位也会被清除。
|
17 | R/W | 0x0 | PESC PortEnableStatusChange 这个位在硬件事件导致
PortEnableStatus 位被清除时被设置。来自 HCD 写入的更改不会设置此位。HCD
写入‘1’来清除这个位。写入‘0’则没有任何效果。
|
16 | R/W | 0x0 | CSC ConnectStatusChange 这个位在连接或断开事件发生时被设置。HCD 写入‘1’来清除这个位。写入‘0’则没有任何效果。 如果 CurrentConnectStatus 在 SetPortReset、SetPortEnable 或 SetPortSuspend 写入发生时被清除,这个位将被设置为强制驱动程序重新评估连接状态,因为这些写入不应该发生在端口断开连接的情况下。
注意:如果 DeviceRemovable[NDP] 位被设置,只有在 Root Hub 重置后才会设置此位以通知系统设备已连接。 |
15:10 | - | - | - |
9 | R/W | 0x0 | LSDA (read) LowSpeedDeviceAttached 这个位表示连接到此端口的设备的速度。当设置为 1 时,表示连接到此端口的设备是低速设备;当清除为 0 时,表示连接到此端口的设备是全速设备。只有在
CurrentConnectStatus 被设置的情况下,这个字段才有效。
(write) ClearPortPower HCD 通过向此位写入‘1’来清除 PortPowerStatus 位。写入‘0’则没有任何效果。 |
8 | R/W | 0x0 | PPS (read) PortPowerStatus 这个位反映了端口的电源状态,无论实现哪种类型的电源切换。如果检测到过电流条件,该位将被清除。HCD
通过写入 SetPortPower 或 SetGlobalPower 来设置此位。HCD 通过写入 ClearPortPower
或 ClearGlobalPower 来清除此位。由 PowerSwitchingMode 和
PortPort-ControlMask[NDP]
确定启用哪些电源控制开关。在全局切换模式(PowerSwitchingMode=0)中,只有 Set/
ClearGlobalPower 控制此位。在每个端口的电源切换(PowerSwitchingMode=1)中,如果端口的
PortPowerControlMask[NDP] 位被设置,则仅启用 Set/ ClearPortPower
命令。如果未设置掩码,则仅启用 Set/ ClearGlobalPower 命令。当禁用端口电源时,应重置
Current-ConnectStatus、PortEnableStatus、PortSuspendStatus 和
Port-ResetStatus。
(write) SetPortPower HCD 写入‘1’以设置 PortPowerStatus 位。写入‘0’没有任何效果。注意:如果不支持电源切换,此位始终读取为‘1b’。 |
7:5 | - | - | - |
4 | R/W | 0x0 | PRS (read) PortResetStatus 当此位被写入
SetPortReset 时,端口重置信号被激活。当重置完成后,当 PortResetStatusChange
被设置时,此位将被清除。如果 CurrentConnectStatus
被清除,则无法设置此位。
(write) SetPortReset HCD 通过向此位写入‘1’来设置端口重置信号。写入‘0’没有任何效果。如果 CurrentConnectStatus 被清除,这个写入不会设置 PortResetStatus,而是设置 ConnectStatusChange。这通知驱动程序它尝试重置一个断开连接的端口。 |
3 | R/W | 0x0 | POCI (read) PortOverCurrentIndicator 当根集线器被配置为在每个端口基础上报告过电流情况时,此位才有效。如果不支持每端口的过电流报告,则此位设置为
0。如果清除,该端口的所有电源操作都正常。如果设置,则表示该端口存在过电流情况。此位始终反映过电流输入信号。 HCD
写入‘1’以启动恢复。写入‘0’无效。只有在 PortSuspendStatus
被设置的情况下才会启动恢复。
|
2 | R/W | 0x0 | PSS (read) PortSuspendStatus 该位表示端口处于暂停状态或恢复序列中。它由
SetSuspendState 写入操作设置,并在恢复间隔结束时,当 PortSuspendStatusChange
被设置时清除。如果 CurrentConnectStatus 被清除,则不能设置此位。此位还在端口重置结束时
PortResetStatusChange 被设置或 HC 置于 USBRESUME
状态时被清除。如果上游恢复正在进行中,它应该传播到 HC。
(write) SetPortSuspend HCD 通过向此位写入‘1’来设置 PortSuspendStatus 位。写入‘0’无效。如果 CurrentConnectStatus 被清除,此写入不会设置 PortSuspendStatus;相反,它会设置 ConnectStatusChange。这通知驱动程序它尝试暂停一个断开连接的端口。 |
1 | R/W | 0x0 | PES (read) PortEnableStatus 此位表示端口是启用还是禁用状态。当检测到过电流状况、断开连接事件、电源关闭或操作总线错误(如絮叨)时,根集线器可能会清除此位。这种改变还会导致 PortEnabledStatusChange 被设置。HCD 通过写入 SetPortEnable 来设置此位,并通过写入 ClearPortEnable 来清除它。 如果 CurrentConnectStatus 被清除,此位不能被设置。 此外,在端口重置完成时,如果 ResetStatusChange 被设置,或者在端口暂停时 SuspendStatusChange 被设置,此位也会被设置(如果尚未设置)。
(write) SetPortEnable HCD 通过写入‘1’来设置 PortEnableStatus。写入‘0’无效。如果 CurrentConnectStatus 被清除,此写入不会设置 PortEnableStatus,而是设置 ConnectStatusChange。这通知驱动程序它尝试启用一个断开连接的端口。 |
0 | R/W | 0x0 | CCS (read) CurrentConnectStatus 此位反映下游端口的当前状态。
(write) ClearPortEnable 主机控制器驱动(HCD)向此位写入‘1’以清除 PortEnableStatus 位。写入‘0’无效。任何写入操作都不影响 CurrentConnectStatus。 注意:当附加设备为不可移除(DeviceRemoveable[NDP])时,此位始终读取为‘1’。 |
0x800 USB_HOST_CTL
默认值:0x00000001 | USB HOST 控制寄存器(USB Host Control) | ||
---|---|---|---|
位域 | 类型 | 默认值 | 描述 |
31:26 | - | - | - |
25 | R/W | 0x0 | Ohci_0_cntsel_i_n OHCI count select
|
24 | R/W | 0x0 | Ss_simulation_mode_i Simulation Mode
此信号仅用于模拟。 |
23:20 | - | - | - |
19 | R/W | 0x0 | App_prt_ovrcur_i Port Overcurrent Indication From Application 当应用程序断言该信号时,相应的端口进入禁用状态。此信号控制 EHCI 和 OHCI 控制器的端口状态机。根据端口的所有权,相应的 EHCI 或 OHCI 控制器会生成过电流检测中断。 |
18:16 | - | - | - |
15 | R/W | 0x0 | Ohci_susp_lgcy_i 这是一个静态绑定信号。
|
14 | R/W | 0x0 | App_start_clk_i 这是主机核心的一个异步主输入信号。当 OHCI 时钟被暂停时,系统必须断言这个信号来启动时钟( 12 和 48 MHz)。这应在时钟启动后且在主机再次被挂起前取消断言。(主机被挂起意味着 HCFS =SUSPEND 或所有 OHCI 端口都被挂起)。 |
13 | R/W | 0x0 | Ss_autoppd_on_overcur_en_i 0x0:No effect 0x1:此绑定信号在主机控制器中启用自动端口电源禁用。 当此信号处于活动状态时,如果在供电端口上检测到过电流条件且 PPC 为 1,则主机控制器会自动将受影响端口的 PP 位从 1 变为 0,从而断开端口的电源。 |
12 | R/W | 0x0 | Ss_ulpi_pp2vbus_i
|
11 | R/W | 0x0 | Ss_ena_incr16_i AHB Burst Type INCR16 Enable
|
10 | R/W | 0x0 | Ss_ena_incr8_i AHB Burst Type INCR8 Enable
|
9 | R/W | 0x0 | Ss_ena_incr4_i AHB Burst Type INCR4 Enable
|
8 | R/W | 0x0 | Ss_ena_incrx_align_i Burst Alignment Enable
|
7:5 | - | - | - |
4 | R/W | 0x0 | Utmi_word_if
|
3:1 | - | - | - |
0 | R/W | 0x1 | ULPI bypass enable
|