USB百科
+ -

USB控制器及分类

2021-01-13 3747 3

USB是一直在变化的,从最开始的1.0发展到现在开始大规模使用的3.0,甚至到今天已经发布的USB4.0。所以USB的控制器也在不断的变化升级。所以由于历史的原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。

OHCI,UHCI,EHCI,xHCI区别与联系

USB主机控制器类型 对应的USB的协议和支持的速率 创立者 功能划分 常用于
OHCI USB 1.1=Low Speed和Full Speed Compaq,Microsoft和National Semiconductor 硬件功能 > 软件功能⇒硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单 扩展卡,嵌入式开发板的USB主控
UHCI USB 1.1=Low Speed和Full Speed Intel 软件功能 > 硬件功能⇒软件的任务重,可以使用较便宜的硬件的USB控制器 PC端的主板上的USB主控
EHCI USB 2.0=High Speed Intel 定义了USB 2.0主控中所要实现何种功能,以及如何实现 各种USB 2.0主控
xHCI USB 3.0=Super Speed Intel 定义了USB 3.0主控中所要实现何种功能,以及如何实现 各种USB 3.0主控

OHCI和UHCI - USB1.1

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

两者之间的相同点是:

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

区别在于:

  • 虽然都是实现了USB1.1协议规范,但是在功能划分上,OHCI更多地把要做的事情,用硬件来实现,因此,实现OHCI的USB控制器的软件驱动的开发工作,相对要容易些,软件要做的事情,相对较少。 对应地,OHCI更多地应用在扩展卡,尤其是嵌入式领域中,常见的很多开发板中的USB的控制器,很多都是OHCI的。
  • OCHI是支持USB1.1的标准,但它不仅仅是针对USB,还支持其他的一些接口,比如它还支持Apple的火线(Firewire,IEEE 1394)接口。与UHCI相比,OHCI的硬件复杂,硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单。主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控。
  • 而UHCI把更多的功能,留给了软件,相对来说,软件做的事情,即负担要重些。但是实现对应的UHCI的硬件的USB控制器,价格上,就相对便宜些。 对应地,UHCI更多地应用在PC机中的主板上的USB控制器。Intel主导的对USB1.0、1.1的接口标准,与OHCI不兼容,Intel和VIA使用UHCI,而其余的硬件提供商使用OHCI。

EHCI - USB2.0

  • EHCI,Enhanced Host Controller Interface。

EHCI定义了USB 2.0的主机控制器的规范,定义了USB 2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。

EHCI对USB主控的定义,详细到了寄存器的级别了,即定义了USB主控都要实现哪些对应的功能和对应的寄存器有哪些,分别是何种功能等。然后对应的软件驱动人员,去写USB主控的驱动的时候,也就清楚有哪些可以利用的系统资源,如何去使用这些资源,读取,设置对应的寄存器,实现对应的功能了。

EHCI仅提供USB2.0的高速功能,而依靠UHCI或OHCI来提供对全速(full-speed)或低速(low-speed)设备的支持。

对应的EHCI规范,可以去Intel的官网找到:EHCI Specification

XHCI - USB3.0

xHCI 即Extensible Host Controller Interface,同EHCI是针对USB 2.0类似,xHCI是针对的USB 3.0规范。也是定义了USB 3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。

XHCI是最新最火的USB3.0的接口标准,它在速度、节能、虚拟化等方面都比前面3中有了较大的提高。xHCI支持所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed)。xHCI的目的是为了替换前面3中(UHCI/OHCI/EHCI)。

对应的xHCI规范,可以去Intel的官网找到:Extensible Host Controller Interface (xHCI) Specification for USB 3.0


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

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

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

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

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB控制器及分类
USB是一直在变化的,从最开始的1.0发展到现在开始大规模使用的3.0,甚至到今天已经发布的USB4.0。所以USB的控制器也在不断的变化升级。所以由于历史的原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。不论是那种USB主机控制器,简称主控,都是符合......
Windows系统USB控制器百科
Windows系统下的USB控制器可以通过设备管理器来查看。具体方法是选择任意一USB设备,然后按连接显示。这样其上级为PCIE设备的就是USB控制器。如本人计算机中的USB控制器设备如下:USB控制器一般是挂在PCIE总线上,该控制器会有一个根USB集线器。本人计算机中的该USB控制器硬......
USBIP USB控制器驱动键名称DriverKeyName
IOCTL_GET_HCD_DRIVERKEY_NAME用于获取USB主机控制器驱动注册表键值的名称即DriverKeyName。PAGEABLE NTSTATUSvhci_ioctl_vhci(pvhci_dev_t vhci, PIO_STACK_LOCATION irpstack, ULO......
USB控制器驱动注册表键名称DriverKeyName
使用IOCTL_GET_HCD_DRIVERKEY_NAME获取USB驱动注册表键值名称。DriverKeyName是一个Windows驱动程序的注册表键名。在Windows操作系统中,驱动程序使用注册表来存储设备和驱动程序的相关信息。DriverKeyName指的是驱动程序在注册表中的键名,它通......
获取USB控制器下的根集线器名称
每个USB根集线器下有惟一的USBS根控制器。当我们打开某个USB根控制器时,可以使用IOCTL_USB_GET_ROOT_HUB_NAME获取USB根控制的名称。而通过打开该控制器名称,就可以获取USB根集线器相的信息。注意:这里的根集线器名需要加上?之后,才能通过CreateFile在应......
USBIP USB控制器用户请求IOCTL_USB_USER_REQUEST
IOCTL_USB_USER_REQUEST用于在用户层和内核层执行相关的请求。PAGEABLE NTSTATUSvhci_ioctl_vhci(pvhci_dev_t vhci, PIO_STACK_LOCATION irpstack, ULONG ioctl_code, PVOID buff......
虚拟USB控制器USB集线器
实现自己的USB控制器、根集线器和USB虚拟设备 - 这个工程量有点大,以USBIP现在实现了大概30%左右的代码,并且还没有调试。感觉有点难啊。以上是自己大概1-2个月前写的计划,说是计划,倒不如说是心愿。因为本身这件事的象征意义更大一些,无所谓收益,只想弥补心中关于USB的最后一块板吧。......
USB中文网虚拟USB控制器USB集线器成果展示
一直有一个心愿,就是虚拟USB全家桶。从USB控制器,USB集线器开始,再到各个USB类设备。当然USB类设备也是很多的,包括HID,UVC,UAC,大容量存储等各种USB设备。由于本人对以上UVC, UAC ,HID待相对熟悉一些,故以这些设备来展示。整个驱动分为以下几层:typedef en......
USB控制器获取驱动键名和USB集线器获取节点连接驱动键名
文字不好表述,直接用IOCTL码比较好。其分别为IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME和IOCTL_GET_HCD_DRIVERKEY_NAME这两个IOCTL返回的结构体分别为:/**IOCTL_GET_HCD_DRIVERKEY_NAME *......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!