ControlBulkServiceRatio(控制/批量传输服务比例)
该字段用于指定 控制传输(Control) 与 批量传输(Bulk) 端点描述符(EDs)之间的服务比例。
功能说明
调度逻辑:
在主机控制器(HC)处理 非周期性传输列表(Nonperiodic Lists) 前,需将本字段设定的比例与内部计数器进行比较:- 内部计数器记录 已处理的非空控制传输ED数量。
- 根据比较结果,HC决定继续处理控制传输ED 或 切换到批量传输ED。
跨帧保留:
HC的 内部计数器值会跨帧保留(不随帧边界重置)。复位要求:
若发生复位(Reset),主机控制器驱动(HCD) 需负责恢复该字段的原始值。
关键术语
- ED(Endpoint Descriptor):端点描述符,描述USB设备的通信端点。
- 非周期性传输列表:包含控制传输和批量传输的调度列表(与中断/等时传输的周期性列表区分)。
CBSR(Control/Bulk Service Ratio)控制与批量传输服务比例详解
功能定义
CBSR(Control/Bulk Service Ratio)是OHCI主机控制器中用于调节控制传输(Control Transfer)与批量传输(Bulk Transfer)调度优先级的2位字段。它通过设定服务比例,确保控制传输(关键操作如设备枚举)能获得足够的带宽,同时兼顾批量传输(大容量数据)的效率。
比例配置表
CBSR值 | 服务比例(Control : Bulk) | 适用场景 |
---|---|---|
00b | 1 : 1 | 默认平衡模式,控制与批量传输均等调度 |
01b | 2 : 1 | 控制传输优先级提升(如多设备枚举时) |
10b | 3 : 1 | 高控制负载场景(需快速完成配置命令) |
11b | 4 : 1 | 极端控制优先(实时性要求严格的系统) |
工作原理
调度机制
- HC在处理非周期性列表(Control/Bulk EDs)时,每完成 N个Control ED 后,才会处理 1个Bulk ED(N由CBSR决定)。
- 例如:
CBSR=10b
时,HC连续处理3个控制传输后,才调度1个批量传输。
内部计数器
- HC维护一个内部计数器记录已处理的Control ED数量,跨帧保持状态(不随SOF复位)。
- 当计数器达到CBSR设定比例时,HC自动切换至Bulk ED。
复位与初始化
- 硬件复位后CBSR可能清零,需由HCD显式配置(通常设为
00b
或01b
)。
- 硬件复位后CBSR可能清零,需由HCD显式配置(通常设为
驱动开发建议
典型配置
// 设置CBSR为2:1(控制传输优先级中等) uint32_t hc_control = read_reg(HcControl); hc_control = (hc_control & ~(0x3 << 8)) | (0x1 << 8); // CBSR=01b write_reg(HcControl, hc_control);
场景适配
- 设备枚举阶段:临时提高CBSR(如
11b
)加速配置过程。 - 数据传输阶段:降低至
00b
或01b
以平衡带宽。
- 设备枚举阶段:临时提高CBSR(如
注意事项
- 修改CBSR需通过Read-Modify-Write,避免覆盖其他字段(如
HCFS
)。 - 过高比例(如4:1)可能导致批量传输延迟,需实测验证。
- 修改CBSR需通过Read-Modify-Write,避免覆盖其他字段(如
硬件行为示例
- CBSR=01b 时调度流程:
Control ED → Control ED → Bulk ED → Control ED → Control ED → Bulk ED...
常见问题
Q:为何需要动态调整CBSR?
A:USB总线带宽有限,在设备枚举阶段需优先保证控制传输(如描述符请求),而大数据传输时需释放带宽给批量传输。
Q:CBSR与HcFmInterval
的关系?
A:无直接关联,但帧长度(如1ms)会影响实际调度的ED数量。较短帧需更高比例才能保证控制传输实时性。