2.1.1.1. OHCI和UHCI

OHCI,Open Host Controller Interface,创立者是Compaq,Microsoft和National Semiconductor。

UHCI,Universal Host Controller Interface,创立者是Intel。

两者之间的相同点是:

不论是OHCI还是UHCI都是对应于USB 1.1的标准的,都是完全符合USB协议标准的。

区别在于:

只是各自的实现方式有些略微不同而已。当然对应的具体的性能,也略有差别,具体的差异,,和实际的应用有关系。

但是本身OHCI和UHCI的区别在于:

虽然都是实现了USB1.1协议规范,但是在功能划分上,OHCI更多地把要做的事情,用硬件来实现,因此,实现OHCI的USB控制器的软件驱动的开发工作,相对要容易些,软件要做的事情,相对较少。

对应地,OHCI更多地应用在扩展卡,尤其是嵌入式领域中,常见的很多开发板中的USB的控制器,很多都是OHCI的。

而UHCI把更多的功能,留给了软件,相对来说,软件做的事情,即负担要重些。但是实现对应的UHCI的硬件的USB控制器,价格上,就相对便宜些。

对应地,UHCI更多地应用在PC机中的主板上的USB控制器。

2.1.1.1.1. 为何Intel设计的UHCI把更多的任务都留给软件实现?

对于两者的区别和实际的应用,自己分析,不难发现,其是有着内在的逻辑关系的。

因此,作为UHCI的创立者Intel,创立了UHCI,把更多的USB需要做的事情,留给了软件,这样就可以实现出相对教便宜的USB的主控制器了,可以用于PC端的CPU所对应的主板上,便宜的USB主控,当然相对市场来说,更容易多卖出去一点,有利于市场推广。

PC主板卖出的多了, 自然对应的Intel的CPU,也会多卖点,Intel自然可以赚更多的钱了。

2.1.1.1.2. 为何嵌入式系统中的USB主控多用OHCI,而非UHCI?

而对应的Compaq,Microsoft和National Semiconductor所创立的OHCI,由于把更多的USB要做的事情,都用硬件实现了,这样对应的软件驱动所要做的事情,就少了,这样就有利于实现对应的OHCI的USB主控的驱动了,这点对于嵌入式系统来说,尤其重要,因为本身嵌入式系统就是资源有限,所以要尽量少的利用其他资源,比如CPU资源,去实现特点的功能,所以,倾向于采用对软件资源要求少的OHCI,而不是UHCI,否则用了UHCI的USB主控的话,需要实现对应的驱动,软件要做的事情太多,不利于在嵌入式系统这有限的资源环境下实现。

2.1.1.1.3. OHCI和UHCI技术细节上的区别

关于OHCI和UCHI在技术细节方面,更加详细的区别主要有这些:

  1. 单帧内的stage的个数

    对于控制传输来说:

    • OHCI:在单个帧内,可以调度多个stage;
    • UHCI:在单个帧内,只调度一个stage。
  2. 单帧内的transaction的个数

    对于最大数据包大小小于64字节的Bulk端点来说:

    • OHCI:单个帧内,可能会有多个transaction。
    • UHCI:单个帧内,不超过一个transaction;
  3. 轮询的频率
    • OHCI:,即使端点描述符中,已经指定了最大延迟是255ms,但是OHCI主控还是会,至少每32ms就去轮询一次中断端点
    • UHCI:UHCI主控可以支持,但是不是必须要支持,更低频率地轮询