此处记录之前学习USB OHCI过程中所记录的一些心得:
OHCI主要应用于嵌入式等系统,因为其特点就是用硬件实现了尽可能多的功能,而使得USB软件驱动部分,相对要容易很多,相对更加统一,使用统一的接口。
所以,OHCI spec里面写道,其目的就是为了推广USB,让大家更加接受USB。
端点描述符(ED),一个放在内存里的数据结构,描述了主机控制器(HC)和设备之间如何交互。
ED里面包含了一个 TD(Transfer Endpoint,传输描述符)指针
常见的缩写:
- HC(Host Controller)
- HCCA(Host Controller Communication Area)
- HCD(Host Controller Driver)
- HCDI(Host Controller Driver Interface)
- HCI(Host Controller Interface)
一些关系:
Phase,意思可以理解为阶段。
一个完整的数据传输(Transaction)分三个阶段。
对应的,USB传输完成后的结果表示中,关于错误,就有个Phase Error,意思应该就是,其中某个阶段出错了。
队列:传输描述符(TD,Transfer Descriptor)的列表
SOF,Start Of Frame。
SOF的作用是让端点能够识别帧的开始,和同步内部端点的始终,使其和Host一致。
OHCI里面,数据传输分两类:周期性和非周期性。
周期性的包含,中断传输和等时传输,因为他们是以固定的间隔调度执行。
非周期性传输即是控制传输和大块(Bulk)传输。
HC和HCD之间通信的通道有2个:一堆寄存器和[可选的]HCCA:
HCCA里有个头指针,指向一个ED链表。其中每一个ED里面,包含一个TD链表,有一个或多个要被处理的TD。处理原则是,谁先到,先处理谁。
大块传输和控制传输的ED链表的头指针,是放在HC的操作寄存器里面的;
中断传输的ED链表的头指针是放在HCCA里面的。
没有相应的等时传输的ED链表的头指针。第一个等时传输的ED链表,直接指向最后一个中断传输的ED。