开放主机控制器接口OHCI
2026-04-20
本文链接为:http://www.usbzh.com/article/detail-1617.html ,欢迎转载,转载请附上本文链接。
OHCI (Open Host Controller Interface)由Compaq,Microsoft,National Semiconductor开发,它将更多负担放在了硬件上,而软件更简单. 规格书见:http://www.o3one.org/hwdocs/usb/hcir1_0a.pdf
Open Host Controller Interface(OHCI)
开放主机控制器接口
OHCI 是 USB 1.1 时代的开放主机控制器规范,用于控制 全速(12Mbps)、低速(1.5Mbps) USB 设备。
- 与 UHCI 并列,但寄存器不兼容
- 比 UHCI 更智能,硬件自动完成链表调度
- 负责:帧调度、 Bulk/Control/Interrupt/Isochronous 传输
USB 1.1 全速/低速主机控制器标准(Linux/嵌入式最常用)
二、OHCI 核心架构
┌─────────────────────────────────────────────────────────┐
│ OHCI 主机控制器 │
└───────────────────┬─────────────────────────────────────┘
│
┌─────────────┴─────────────┐
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ 周期性调度 │ │ 异步/批量调度 │
│ Periodic │ │ Async/Bulk │
└─────┬─────┘ └─────┬─────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ 帧列表 Frame List │ │ 控制/批量队列头 │
│ 1024 项,1ms/帧 │ │ Control/Bulk Head│
└─────┬─────┘ └─────┬─────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ ED 链表 │◄──────────►│ ED 链表 │
│ 端点描述符 │ │ 端点描述符 │
└─────┬─────┘ └─────┬─────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ TD 链表 │ │ TD 链表 │
│ 传输描述符 │ │ 传输描述符 │
│ (ITD/ITD_TD) │ │(CTD/BTD/ITD) │
└─────┬─────┘ └─────┬─────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ 中断/等时设备 │ │ 控制/批量设备 │
└───────────┘ └───────────┘
结构说明(极简版)
1. ED(Endpoint Descriptor)
- 每个 ED 对应一个 USB 端点
- 保存:设备地址、端点号、方向、最大包长、速度
- 串联成链表,由硬件自动遍历
2. TD(Transfer Descriptor)
- 每个 TD 对应一次总线事务
- 保存:数据缓冲区、长度、PID、DATA0/DATA1、状态
- 挂在 ED 下方
3. 调度分类
- 周期性调度
- 帧列表 Frame List(1024 项)
- 用于:中断 + 等时
- 异步调度
- 控制队列头 + 批量队列头
- 用于:控制 + 批量
4. 与 EHCI 的对应关系
- OHCI ED ≈ EHCI QH
- OHCI TD ≈ EHCI qTD / iTD
- OHCI 帧列表 ≈ EHCI 周期列表
超精简记忆版
OHCI = 帧列表 + ED + TD
- 帧列表管周期
- ED 管端点
- TD 管传输
- 硬件自动跑链表,CPU 很轻松
1. 调度结构
OHCI 使用 帧列表 + 链表 完成所有传输:
- 帧列表 Frame List:1024 项,每项指向一个 ED
- 每 1ms 一帧,对应一个帧号
2. 两大核心数据结构
ED(Endpoint Descriptor)端点描述符
- 代表一个 USB 端点
- 保存:设备地址、端点号、方向、最大包长、速度、挂起链表
- 是调度的最小单元
TD(Transfer Descriptor)传输描述符
- 代表一次数据传输
- 包含:缓冲区地址、数据长度、PID、切换位、状态
- 多个 TD 可以串成一条链表
三、OHCI 四大 TD 类型
四、OHCI 寄存器(核心翻译)
1. 控制类
- HcControl:控制 OHCI 运行/复位/挂起
- HcCommandStatus:命令状态、调度使能
- HcInterruptStatus / HcInterruptEnable:中断状态与使能
2. 调度类
- HcHCCA:主机控制器通信区指针(驱动与控制器共享)
- HcFrameCounter:当前帧号
- HcPeriodicStart:周期性调度起始点
- HcListHead:批量/控制链表头
3. 端口类
五、OHCI 工作流程(总结)
- 控制器复位
- 初始化帧列表(Frame List)
- 初始化 Bulk/Control 链表
- 使能调度
- 硬件自动遍历 ED → TD 执行传输
- 完成后写中断,驱动处理 TD 状态
六、OHCI 关键特点(考试必背)
- 硬件自动调度链表,CPU 负担低
- 支持 等时、中断、批量、控制 全部传输类型
- 帧周期:1ms
- 帧列表:1024 项
- 只支持 FS/LS,不支持高速 HS
- 与 UHCI 不兼容,与 EHCI 是配套关系
七、最简一句话总结
OHCI 是 USB 1.1 的开放、智能、硬件自动调度的主机控制器,
用 ED + TD + 帧列表 完成全速/低速设备传输,
是 Linux/嵌入式最常见的 USB 1.1 控制器。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936 USB技术交流3:1031974172
USB控制器





