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)。

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

  1. USB2.0主机控制器 UPD720114 简单详解

    UPD720114 是符合 USB 2.0规格的集线器控制器,适用于“符合生态原则的解决方案”.这种小型封装的控制器集成了核心逻辑电路的2.5 V 内部电压调整器.终端电阻器,减少了所需要的外部组件的 ...

  2. 达尔稳usb转RJ45的接口转换器(usb2.0接口)在ubuntu16.04中驱动(r8152)编译安装与使用

    淘宝买了usb转RJ45的接口转换器:https://detail.tmall.com/item.htm?id=524808012954&ali_refid=a3_430582_1006:11 ...

  3. usb2.0 协议分析

    转:https://blog.csdn.net/u011594613/article/details/48291307 一.USB硬件介绍1.1.概述 一条USB传输线分别由地线.电源线.D+和D-四 ...

  4. USB2.0/YTPE-C音频芯片DP108T集成晶振替代DP108 CM108

    DP108T是一种高集成度的USB/YTPE-C音频芯片.嵌入了所有必要的模拟模块,包括双DAC 和音频驱动.麦克风增益器 .PLL.稳压器和 USB 收发器.此外,音频音量可以很容易地通过专门的 H ...

  5. BL8810|USB2.0高速闪存读卡器|BL8810芯片

    BL8810是由台湾旺玖半导体推出的一款USB2.0 SD/MMC闪存读卡器单芯片.支持USB2.0高速传输,并符合通用串行总线规范.该芯片集成了一个高速的8051微处理器和一个最好的数据引擎,它的引 ...

  6. BL8810|USB2.0高速闪存读卡器芯片|BL8810规格书

    1.说明 BL8810是一款USB 2.0读卡器控制器,采用高度集成的单芯片解决方案,旨在提供USB2.0和SD.SDHC.mini SD.Micro SD(T-Flash)接口规范之间的高速数据传输 ...

  7. Virtualbox安装USB2.0/3.0

    系统:Ubuntu16.04 软件:Virtualbox5.1 1.打开Virtualbox,不启动虚拟系统. 2.点击设置->USB->启动usb2.0. 3.若发现不能启用,则到官网下 ...

  8. 【转载】USB2.0接口差分信号线设计

    引 言 通用串行总线(Universal Serial Bus)从诞生发展到今天,USB协议已从1.1过渡到2.0,作为其重要指标的设备传输速度,从1.5 Mbps:的低速和12 Mbps的全速,提高 ...

  9. USB2.0协议笔记

    1.概述     USB(Universal Serial Bus)具有传输速率快,可热插拔等显著特点,应用已经十分广泛,目前的相当多的设备已经支持最新的USB3.0协议.理论上USB1.1的传输速度 ...

随机推荐

  1. Configuration所有配置简介

    // 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率                // .memoryCacheExtraOptions(480, 800) // 硬盘缓存的 ...

  2. Android FastJson解析

    1.导包 compile 'com.alibaba:fastjson:1.2.21' public static final Object parse(String text); // 把JSON文本 ...

  3. Oracle MERGE INTO的使用方法

    非常多时候我们会出现例如以下情境,假设一条数据在表中已经存在,对其做update,假设不存在,将新的数据插入.假设不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否 ...

  4. [Javascript] Log Levels and Semantic Methods

    Go beyond console.log by learning about log levels, filtering log output and structuring your output ...

  5. [Angular 2] Controlling how Styles are Shared with View Encapsulation

    Style and View Encapsulation is best understood by seeing how each option (Emulated, Native, and Non ...

  6. Codeforces 526D - Om Nom and Necklace 【KMP】

    ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1 ...

  7. python与数值计算环境搭建

    数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linu ...

  8. Android 连接 SQL Server (jtds方式)——上

    本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...

  9. 1247 排排站 USACO(查分+hash)

    /* 暴力查分 n*n */ #include<cstdio> #include<cstring> #include<iostream> #define maxn ...

  10. 使用EF 的简单的增删改查

    using DAL; using Model; using System; using System.Collections.Generic; using System.Linq; using Sys ...