ehci符合USB2.0,uhci,ohci,

uhci   ohci   ehci他们都是主机控制器的规格,OHCI主要为非PC系统上以及带有SiShe ALi芯片组的
PC主板上的USB芯片,UHCI大多为Intel和Via主板上的USB控制器芯片。
UHCI的硬件电路比OHCI简单,成本第,但驱动复杂。但他们都是由USB1.1规格的。
EHCI是有Intel等几个厂商研发,兼容OHCI  UHCI 遵循USB2.0规范。

USB规范EHCI,UHCI,OHCI区别

为 了实现USB主机功能的统一,提高系统的可靠性与可移植性,上游芯片生产厂家在确定USB标准的同时,也确定了相应的主机规范。现在用得比较广泛的有三 种,其中的用于USB2.0高速设备的EHCI (Enhanced Host Control Interface增强主机控制接口)规范是INTEL用于USB2.0高速主机的。而同是INTEL推出的UHCI(Universal Host Control Interface 通用主机)与前Compaq 、Microsoft等推出的OHCI (Open Host Control Interface开放主机控制接口)可用于全速与低速USB系统中,硬件的要求与系统性能、软件复杂的要求相对较低,也能够满足大部分的具有USB接口 嵌入式系统的要求。而在UHCI与OHCI的对比中,UHCI对硬件的要求相对较少,但对系统的处理能力与软件的开发要求相对要高(PC机就较多地采用了 UHCI);OHCI则把较多的功能定义在硬件中,软件需要处理的内容就相对容易,对系统的处理能力和系统资源的要求就低。因此,在嵌入式的USB  HOST功能中,较多地选用了遵循OHCI的规范的硬件,从而简化了系统的设计。

主控器(HC)控制总线上包的传输。使用1毫秒的帧。在每帧开始时,主控器产生一个帧开始(SOF, Start of Frame)包。

  SOF包用于同步帧的开始和跟踪帧的数目。包在帧中被传输,或由host
到设备(out),或由设备到host(in)。传输总是由host发起(轮询传输)。因此每条USB总线只能有一个host。每个包的传输都有一个状态

阶段,数据接收者可以在其中返回ACK(应答接收),NAK(重试),STALL(错误条件)或什么也没有(混乱数据阶段,设备不可用或已断开)。USB
规范 USB
specification的第8.5节更详细地解释了包的细节。USB总线上可以出现四中不同类型的传输:控制(control),大块(bulk),
中断 (interrupt)和同步(isochronous)。传输的类型和他们的特性在下面描述(`管道‘子节中)。

  USB总线上的设备和设备驱动程序间的大型传输被主控器或HC 驱动程序分割为多个包。

  到默认端点的设备请求(控制传输)有些特殊。它们由两或三个阶段组成:启动(SETUP),数据(DATA,可选)和状态
(STATUS)。设置(set-up)包被发送到设备。如果存在数据阶段,数据包的方向在设置包中给出。状态阶段中的方向与数据阶段期间的方向相反,或
者当没有数据阶段时为IN。主控器硬件也提供寄存器,用于保存根端口的当前状态和自从状态改变寄存器最后一次复位以来所发生的改变。USB规范
[2]建议使用一个虚拟hub来提供对这些寄存器的访问。虚拟hub必须符合规范第11章中给出的
hub设备类。它必须提供一个默认管道使得设备请求可以发送给它。它返回标准和hub类特定的一组描述符。它也应当提供一个中断管道用来报告其端口发生的
变化。当前可用的主控器规范有两个: 通用主控器接口(UHCI;英特尔)和 开放主控器接口(OHCI;康柏,微软,国家半导体)。
UHCI规范的设计通过要求主控器驱动程序为每帧的传输提供完整的调度,从而减少了硬件复杂性。OHCI类型的控制器自身提供一个更抽象的接口来完成很多
工作,从而更加独立。

UHCI
UHCI主控器维护着带有1024个指向每帧数据结构的帧列表。它理解两种不同的数据类型:传输描述符(TD)和队列头(QH)。每个 TD表示表示与设备端点进行通信的一个包。QH是将一些TD(和QH)划分成组的一种方法。

  每个传输由一个或多个包组成。UHCI驱动程序将大的传输分割成多个包。除同步传输外,每个传输都会分配一个
QH。对于每种类型的传输,都有一个与此类型对应的QH,所有这些QH都会被集中到这个QH上。由于有固定的时延需求,同步传输必须首先执行,它是通过帧

列表中的指针直接引用的。最后的同步TD传输引用那一帧的中断传输的QH。中断传输的所有QH指向控制传输的QH,控制传输的QH又指向大块传输的QH。
下面的图表给出了一个图形概览:

  这导致下面的调度会在每帧中运行。控制器从帧列表中取得当前帧的指针后,首先为那一帧中的所有的同步
(isochronous)包执行TD。这些TD的最后一个引用那一帧的中断传输的QH。然后主控器将从那个QH下行到各个中断传输的QH。完成那一队列

后,中断传输的QH会将控制器指向到所有控制传输的QH。它将执行在那儿等待调度的所有子队列,然后是在大块QH中排队的所有传输。为了方便处理已完成或
失败的传输,硬件会在每帧末尾产生不同类型的中断。在传输的最后一个TD中,HC驱动程序设置
Interrupt-On-Completion位来标记传输完成时的一个中断。如果TD达到了其最大错误数,就标记错误中断。如果在TD中设置短包侦测

位,且传输了小于所设置的包长度(的包),就会标记此中断以通知控制器驱动程序传输已完成。找出哪个传输已完成或产生错误是主控器驱动程序的任务。当中断
服务例程被调用时,它将定位所有已完成的传输并调用它们的回调。

  更详尽的描述请看 UHCI specification.

OHCI

  对OHCI主控器进行编程要容易得多。控制器假设有一组端点(endpoint)可用,并知道帧中不同传输类型的调度优先级和排序。主控器使用
的主要数据结构是端点描述符(ED),它上面连接着一个传输描述符(TD)的队列。
ED包含端点所允许的最大的包大小,控制器硬件完成包的分割。每次传输后都会更新指向数据缓冲区的指针,当起始和终止指针相等时,TD就退归到完成队列
(done-queue)。四种类型的端点各有其自己的队列。控制和大块(bulk)端点分别在它们自己的队列排队。中断ED在树中排队,在树中的深度定
义了它们运行的频度。

  帧列表 中断 同步(isochronous) 控制大块(bulk)

  主控器在每帧中运行的调度看起来如下。控制器首先运行非周期性控制和大块队列,最长可到HC驱动程序设置的一个时间限制。然后以帧编号低5位作

为中断ED树上深度为0的那一层中的索引,运行那个帧编号的中断传输。在这个树的末尾,同步ED被连接,并随后被遍历。同步TD包含了传输应当运行其中的

第一个帧的帧编号。所有周期性的传输运行过以后,控制和大块队列再次被遍历。中断服务例程会被周期性地调用,来处理完成的队列,为每个传输调用回调,并重
新调度中断和同步端点。

  更详尽的描述请看 OHCI specification。服务层,即中间层,提供了以可控的方式对设备进行访问,并维护着由不同驱动程序和服务层所使用的资源。此层处理下面几方面:

设备配置信息

与设备进行通信的管道

探测和连接设备,以及从设备分离(detach)。

时间: 2024-10-07 00:46:30

ehci符合USB2.0,uhci,ohci,的相关文章

第三十二篇:Windbg中USB2.0调试环境的搭建

2011年的时候,为了开发USB Mass storage -- UASP (USB attached SCSI Protocol)的设备驱动程序,从米国买了两个USB2.0的调试小设备(如下图,每个似乎80美刀,贼贵的东西). 主要是用来替代串口115200波特率的响应速度慢,以便解决调试效率的问题. 当时,根据WINDBG的HELP文档,而且也GOOGLE了一些网上的相关参考内容,硬是没有把USB2.0的调试环境搭建起来. 后来有一段时间,朋友要开发驱动程序,他原来一直用一台配有PCI转13

从驱动层将USB3.0转换为USB2.0

最近有个需求是把USB3.0强制转换成USB2.0,也就是让操作系统把硬件上的3.0识别成2.0 .从网上找到了如下内容,顿时心里暖暖的,特拿来分享一下. 1. Linux下的操作,其中 设备号为 USB3.0 总线设备的设备号,可以通过 lspci -nn | grep xHCI 查出来 It's possible. It involves changing configuration registers in the xHCI controller, so it's obviously ch

独家全功能USB2.0开发板,最强CY7C68013A-128核心板,超强资料不断提供更新服务

       学习USB开发再也不用买书啦,也不用花费重金去上培训班啦,IFLabs开创USB学习开发新模式,你所需要的知识.技术.范例.代码等等统统都在这里.IFLabs打造全网最丰富.最权威的USB开发平台和资料. 热卖的IFLabs精品USB2.0核心板套件再升级,全网独家推出最强.最全功能的Cypress USB 2.0 CY7C68013A-128AXC核心板开发板,全网最全配件和全网最全开发资料.只需这一次投入,即可实现USB接口开发的从入门到精通!并且有长期的全网最全开发手册更新支

USB2.0学习笔记连载(三):通用USB驱动程序解析

对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔者这样喜欢做硬件的研发对软件不是很感冒的孩纸,怎么快速上手开发出USB驱动.其实很多USB芯片公司已经给很多用户提供了开发包,譬如笔者使用的Cypress公司提供的开发包可以满足广大用户的要求,这一点还是值的称道的,关于后续怎么使用这些开发包进行USB2.0驱动的开发,笔者会在后续的博客中一一写出.

基于icamera usb2.0的视频采集系统之mt9m001c12stc测评

基于usb2.0的视频采集系统之mt9m001c12stc测评 因为该sensor不带isp,所以不支持白平衡,默认图像彩色颜色会和实际偏离,演示如下 颜色偏绿,所以降低该通道的增益,或者提供其他通道增益即可改善 具体寄存器含义和值范围,可以查阅手册 再适当增加曝光时间,亮度增加, 其他类似 参考datasheet调整即可

USB2.0学习笔记连载(六):USB2.0硬件设计需要注意事项

笔者在设计USB2.0时找到了一个官方给的硬件设计正确设计指南,其中有些内容还挺nice的.不单单只是USB的设计,其中有些思想可以应用到其他的场合中. 对于USB2.0而言,全速状态下可以达到480Mbps,带宽相比USB1.0提高了不少.USB2.0的供电大功率供电可以达到500mA,实际上加上USB自身消耗,也就是在450~480mA左右. 1.USB供电 对于外部器件的供电选择,可以使用USB进行供电,也可以自供电.关于USB集线器的介绍参看另外一篇关于USB集线器的介绍. USB进行供

USB2.0 速度识别--区分低速-高速-全速

USB2.0是向下兼容USB1.X的,即USB2.0支持高速,全速,低速的USB设备 (HIGH-SPEED,FULL-SPEED,LOW-SPEED),而USB1.X不支持高速设备. 因此如果高速设备接在USB1.X的hub上,也只能工作在全速状态. 因此对速度的识别是很重要的,否则没办法以想要的速度通信. ************************************************************************************** 全速和低速区分

USB2.0速度识别

我们知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度类型的设备,而USB1.x的hub不能支持高速设备(High Speed Device).因此,如果高速设备挂到USB1.x的hub上,那该设备只能工作在全速模式下.不管是hub还是设备(device),对于速度的区分是非常重要的,否则,后续的通信根本无法进行. 全速和低速识别 根据规范,全速(Full Speed)和低速(Low Speed)很好区分,因为在设备端有一个1.5k的上拉电阻,当设备插入hub或上电(固定

这就是全网最专业的USB2.0核心板,USB2.0 FX2LP开发板,使用CY7C68013A

铺天盖地的USB开发板.USB核心板那款最适合您?IFLabs组织专业团队.不惜成本.耗费大量时间精力打造的精品USB核心板是您最佳的选择,优化的核心板结构.全网最全的开发手册.全面的配件,一套在手即可开展USB接口的开发.只需这一次投入,即可实现USB接口开发的从入门到精通! 史无前例的专业.可靠.全面.豪华,绝不是其他低价产品所能比的.无论你是初学者,还是具有USB开发基础的工程师都值得拥有. IFLabs USB2.0 FX2LP核心板开发板详情:http://item.taobao.co