4.5. USB OHCI学习笔记

此处记录之前学习USB OHCI过程中所记录的一些心得:

  1. OHCI主要应用于嵌入式等系统,因为其特点就是用硬件实现了尽可能多的功能,而使得USB软件驱动部分,相对要容易很多,相对更加统一,使用统一的接口。

    所以,OHCI spec里面写道,其目的就是为了推广USB,让大家更加接受USB。

  2. 端点描述符(ED),一个放在内存里的数据结构,描述了主机控制器(HC)和设备之间如何交互。

    ED里面包含了一个 TD(Transfer Endpoint,传输描述符)指针

  3. 常见的缩写:

    • HC(Host Controller)
    • HCCA(Host Controller Communication Area)
    • HCD(Host Controller Driver)
    • HCDI(Host Controller Driver Interface)
    • HCI(Host Controller Interface)
  4. 一些关系:

    图 4.13. USB主机中软件和硬件之间的关系

    USB主机中软件和硬件之间的关系

  5. Phase,意思可以理解为阶段。

    一个完整的数据传输(Transaction)分三个阶段。

    对应的,USB传输完成后的结果表示中,关于错误,就有个Phase Error,意思应该就是,其中某个阶段出错了。

  6. 队列:传输描述符(TD,Transfer Descriptor)的列表

  7. SOF,Start Of Frame。

    SOF的作用是让端点能够识别帧的开始,和同步内部端点的始终,使其和Host一致。

  8. OHCI里面,数据传输分两类:周期性和非周期性。

    周期性的包含,中断传输和等时传输,因为他们是以固定的间隔调度执行。

    非周期性传输即是控制传输和大块(Bulk)传输。

  9. HC和HCD之间通信的通道有2个:一堆寄存器和[可选的]HCCA:

    图 4.14. USB Communication Channel

    USB Communication Channel

  10. HCCA里有个头指针,指向一个ED链表。其中每一个ED里面,包含一个TD链表,有一个或多个要被处理的TD。处理原则是,谁先到,先处理谁。

    图 4.15. USB Typical List Structure

    USB Typical List Structure

  11. 大块传输和控制传输的ED链表的头指针,是放在HC的操作寄存器里面的;

    中断传输的ED链表的头指针是放在HCCA里面的。

    没有相应的等时传输的ED链表的头指针。第一个等时传输的ED链表,直接指向最后一个中断传输的ED。