ControlBulkServiceRatio(控制/批量传输服务比例)

该字段用于指定 控制传输(Control)批量传输(Bulk) 端点描述符(EDs)之间的服务比例。

功能说明

  1. 调度逻辑
    在主机控制器(HC)处理 非周期性传输列表(Nonperiodic Lists) 前,需将本字段设定的比例与内部计数器进行比较:

    • 内部计数器记录 已处理的非空控制传输ED数量
    • 根据比较结果,HC决定继续处理控制传输ED 切换到批量传输ED。
  2. 跨帧保留
    HC的 内部计数器值会跨帧保留(不随帧边界重置)。

  3. 复位要求
    若发生复位(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 极端控制优先(实时性要求严格的系统)

工作原理

  1. 调度机制

    • HC在处理非周期性列表(Control/Bulk EDs)时,每完成 N个Control ED 后,才会处理 1个Bulk ED(N由CBSR决定)。
    • 例如:CBSR=10b 时,HC连续处理3个控制传输后,才调度1个批量传输。
  2. 内部计数器

    • HC维护一个内部计数器记录已处理的Control ED数量,跨帧保持状态(不随SOF复位)。
    • 当计数器达到CBSR设定比例时,HC自动切换至Bulk ED。
  3. 复位与初始化

    • 硬件复位后CBSR可能清零,需由HCD显式配置(通常设为00b01b)。

驱动开发建议

  1. 典型配置

    // 设置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);
  2. 场景适配

    • 设备枚举阶段:临时提高CBSR(如11b)加速配置过程。
    • 数据传输阶段:降低至00b01b以平衡带宽。
  3. 注意事项

    • 修改CBSR需通过Read-Modify-Write,避免覆盖其他字段(如HCFS)。
    • 过高比例(如4:1)可能导致批量传输延迟,需实测验证。

硬件行为示例

  • CBSR=01b 时调度流程:
    Control ED → Control ED → Bulk ED → Control ED → Control ED → Bulk ED...

常见问题

Q:为何需要动态调整CBSR?
A:USB总线带宽有限,在设备枚举阶段需优先保证控制传输(如描述符请求),而大数据传输时需释放带宽给批量传输。

Q:CBSR与HcFmInterval的关系?
A:无直接关联,但帧长度(如1ms)会影响实际调度的ED数量。较短帧需更高比例才能保证控制传输实时性。