遍历机制取决于传输类型(控制、批量、中断、等时).

OHCI 主机控制器(HC)遍历端点描述符(ED)链表的机制如下:

一、三类传输的遍历入口

HC 通过不同的寄存器获取三类链表的起始地址:

传输类型 链表名称 HC 使用的寄存器入口 说明
控制传输 控制列表 HcControlHeadED 直接寄存器指针
批量传输 批量列表 HcBulkHeadED 直接寄存器指针
中断/等时传输 周期列表 HccaInterruptTable + 帧索引 间接查表(无直接遍历寄存器)

二、遍历流程核心步骤

1. 控制/批量列表(直接遍历)

HcControlHeadED / HcBulkHeadED 
    ↓
[ED1] → NextED → [ED2] → NextED → ... → 0x00000000
    |            |
  HeadP        HeadP
    ↓            ↓
  TD队列        TD队列

2. 周期列表(间接查表遍历)

当前帧号 (HccaFrameNumber) 
    ↓
计算索引 = (frame >> 5) & 0x1F
    ↓
HccaInterruptTable[索引]  // 32个入口的表
    ↓
[ED链表头] → NextED → [ED链表] → ...

三、关键硬件行为

  1. 遍历触发条件

    • 控制列表:HcControl.CLE=1ControlListFilled=1
    • 批量列表:HcControl.BLE=1BulkListFilled=1
    • 周期列表:HcControl.PLE=1 且每帧自动触发
  2. ED就绪判断ED.HeadP != ED.TailP 表示存在待处理TD

  3. 遍历状态保持

    • 控制/批量:遍历完成或遇到K=1(跳过位)时停止
    • 周期列表:跨帧断点续传(HC内部保存当前ED位置)

四、总结

HC的遍历是硬件自动完成的:

  • 控制/批量:从固定寄存器开始线性遍历
  • 周期列表:每帧从中断表的不同入口开始遍历,实现时间片轮询

这种设计确保了三类传输的优先级调度(周期列表优先于控制列表,控制列表优先于批量列表)。