基于OHCI协议的S3C2440 USB Host Driver之协议介绍(二)
2022-05-24 来源:eefocus
<一>HCD的职责:
1.HCD负责HC的操作。
HCD可以直接与HC的可操作寄存器通信,且在HCCA中建立中断ED表头指针。HCD维护HC的状态,表处理指针,表处理使能,中断使能。
2.带宽分配。
HCD负责对USB访问进行调度。HCD给每一个周期端点分配一定可用的带宽。如果没有足够的带宽可用,一个新连接的周期端点不允许访问总线。
一部分带宽分给非周期传输。这会确保在每帧里一定量的批量和控制传输会发生。每帧是1ms。
每帧的开始,HC发起SOF给USB总线。HC紧接着服务非周期列表。然后服务周期列表。还有剩余时间的话,再次服务非周期列表。
3列表管理。
USB传输机制以通过连接ED表上的TD。HCD建立这些结构,HC会处理。HCD负责ED的入表和出表。出表时,HCD需要禁止HC处理正在要被删除的ED的所属的整个表,以确保HC不访问该ED。
HCD也负责TD的入表。正常完成的话,HC负责TD的出表。但是,来自客户软件或者特定错误的请求导致TD正在被取消,HCD负责对TD的出表。
4Root Hub
HC集成了Root Hub。根集线器的寄存器是可以被HCD访问的。HCD负责用USB Driver和合适的Root Hub的协议提供给合适的Hub-class协议。
<二>HC的职责
1.USB的状态
2.帧的管理
HC追踪当前帧计数以及帧周期。每帧开始,HC产生一个SOF且在系统内存中更新帧计数值。HC也决定在帧中是否有足够多得时间发起下一个数据包。
3.表处理
HC在ED上操作,且HCD负责TD的入表。
对于中断和同步传输,HC在当前帧开始于中断ED头指针。该表持续遍历,直到调度来自第一个TD上的一个数据包进行传输尝试。
对于控制和批量,HC分别在各自的表开始。当HC到达表尾,它载入头指针的值接着从头开始。HCD设置控制批量传输比n,HC处理n个控制传输才处理1个批量传输。
当一个TD完成,成功或者产生错误,HC将其移到完成队列中。将最近完成的TD加入到队列的头中。通过HCCA,完成队列周期性地从HC传输到HCD中。