https://blog.csdn.net/qiurihuanghua/article/details/6411640

1. EHCI 1.0规范介绍

EHCI规范为USB 2.0规范定义了一个Host controller的寄存器级的接口,实际上就是系统软件和Host controller直接交互的接口。

一个USB Host系统由多个硬件和软件层构成,下图从架构概念上描述了这样一个USB Host系统:

这些硬件和软件层是:

- Client Driver Software层,这软件层在Host端执行,访问特定的USB设备。

- USB Driver (USBD),这是USB总线的系统软件层,它在相应操作系统中抽象下面提到的相应Host controller driver的具体细节。

- Host Controller Driver (xHCD),这是介于特定Host Controller硬件和USBD之间的软件层,它特定于Host Controller硬件的寄存器接口定义。

- Host Controller (xHC),这是USB 2.0的Host Controller具体硬件实现层。

- USB Device,这是实现终端用户功能的USB硬件设备,对该设备的交互访问流从应用程序,经过软件和硬件层,最后到该设备上。

一个USB 2.0的Host Controller一般包括:

一个high-speed模式的Host Controller (eHC),它实现EHCI接口,用于与high-speed模式设备通讯。

和0或者多个USB 1.1(full-speed和low-speed模式)的Companion Host Controller (cHC),用于与full-或者low-speed模式设备通讯。

当然,如果是0个,那么该Host Controller将无法支持full-和low-speed模式设备。

下图展示了这样一个USB 2.0 Host Controller:

Port Routing Logic负责将对应不同模式的Port路由相应的USB 2.0 eHC或者USB 1.1 cHC上,High-speed模式设备总是路由到eHC由其控制;而且在运行和配置阶段,eHC默认是所有root ports的Owner,eHC以及其相应的驱动初始阶段负责探测设备的连接,它在其中的每一个port寄存器上有一额外bit位,用于管理Port Routing Logic,如果连接的不是high-speed设备,eHC驱动会释放相应port的Ownership给cHC,在cHC下从初始连接检测到的那一个点上开始对该设备的枚举过程;反之,如果是high-speed设备,eHC则会继续持有该port的Ownership,而在其下完成该设备的枚举。

EHCI规范定义了3个Interface Space,如下图:

- PCI Configuration Space,如果实现包括有PCI寄存器,那它们用于系统模块的枚举和PCI功耗管理。

-  Register Space,用于具体实现相关的参数,功能,以及操作控制和状态寄存器,必须实现为I/O空间

- Schedule Interface Space,典型为Memory空间,由eHC驱动管理,用于Periodic和Asynchronous Schedules。

EHCI支持2个类别的Transfer types:Asynchronous和Periodic,其中Periodic类别包括Isochronous和Interrrupt传输类型,Asynchronous类别包括Control和Bulk传输类型。对应于这两个类别,有相应两种调度机制:

- Periodic schedule,是一个Periodic frame list,按固定周期调度,所有Isochronous和Interrupt传输都由它负责。

- Asynchronous schedule,是一个环形队列,按Round-robin调度,轮流处理,所有Control和Bulk传输都由它负责。

USB总线要求其Host controller实现Root hub,操作寄存器空间包含的端口寄存器具有用于管理USB规范内的每一个Port的最小硬件状态和控制信息。Host controller会遍历EHCI调度表,一直找到要处理的项目,然后开始处理这个USB事务,该事务会广播到所有使能的Root port,然后到达其连接的下游USB设备中。

端口寄存器为系统软件提供了USB 2.0规范要求的用于操作该端口的控制和状态信息,包括:

- 检测设备连接

- 断开设备连接

- 复位设备

- 管理端口功耗

- 端口电源管理功能

2. 寄存器接口

EHCI Host controller包括两套硬件寄存器:

- PCI Configuration Registers (仅挂在PCI总线上的设备实现该HC时),包括标准PCI配置头,电源管理,和设备相关寄存器,除此之外,在PCI Configuration Space还需要额外增加两个寄存器来支持USB,它们将在后面介绍。该空间仅用于PCI枚举来确定USB Host controller,并为其分配恰当的系统资源。

- Memory-mapped USB Host Controller Registers,这块寄存器空间映射到一个Non-cacheable memory,必须起于32-bit对齐地址。该寄存器空间又可进一步分为两套寄存器:

- 只读的Capability registers,用于规定该Host controller实现的极限,限制,功能。

- 可读/写的Operational registers,由系统软件用来控制和监控Host controller的工作状态。

EHCI规范(转)的更多相关文章

  1. USB协议规范学习(一)

    什么是USB OHCI规范? OHCI(Open HCI)是目前使用比较广泛的三种USB主机控制器规范之一.USB体系结构是由四个主要部分组成:客户软件/USB驱动,主机控制器驱动(HCD),主机控制 ...

  2. USB系列之一:列出你的USB设备

    USB现在已经成为PC机必不可少的接口之一,几乎所有的设备都可以接在USB设备上,USB键盘.鼠标.打印机.摄像头,还有常用的U盘等等,从本篇文章开始,将集中篇幅介绍一下在DOS中使用USB设备的方法 ...

  3. 通过USB 2.0电缆手动设置内核模式调试

    Windows的调试工具支持通过USB 2.0电缆进行内核调试.本文介绍如何手动设置USB 2.0调试.通过USB 2.0电缆进行调试需要以下硬件: USB 2.0调试电缆.此电缆不是标准USB 2. ...

  4. Linux usb 3. Host 详解

    文章目录 1. 简介 2. Usb Core 驱动设备模型 2.1 Usb Device Layer 2.1.1 device (struct usb_device) 2.1.2 driver (st ...

  5. ehci符合USB2.0,uhci,ohci,

    uhci   ohci   ehci他们都是主机控制器的规格,OHCI主要为非PC系统上以及带有SiShe ALi芯片组的 PC主板上的USB芯片,UHCI大多为Intel和Via主板上的USB控制器 ...

  6. linux USB HOST之EHCI和OHCI【转】

    转自:http://blog.csdn.net/ljzcom/article/details/8186914 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 2 关键数据结 ...

  7. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  8. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  9. 百度MIP页规范详解 —— canonical标签

    百度MIP的规范要求必须添加强制性标签canonical,不然MIP校验工具会报错: 强制性标签<link rel="/^(canonical)$/"> 缺失或错误 这 ...

随机推荐

  1. SQLSERVER 设置默认值

    DECLARE @test intSET @test=nullselect isnull(@test,0)

  2. 熬之滴水成石:最想深入了解的内容--windows内核机制(6)

    58 进程和线程(3) 说完进程再说说线程,线程相比于进程其实有更多可说的内容.首先实现线程调用的数据结构是个栈,该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址.线程肯定是属于某个进程,其 ...

  3. puppet应用案例

  4. 转 qInstallMsgHandler实现日志输出

    #include <QtDebug> #include <QFile> #include <QTextStream> #define _TIME_ qPrintab ...

  5. 实战c++中的vector系列--vector&lt;unique_ptr&lt;&gt;&gt;初始化(全部权转移)

    C++11为我们提供了智能指针,给我们带来了非常多便利的地方. 那么假设把unique_ptr作为vector容器的元素呢? 形式如出一辙:vector<unique_ptr<int> ...

  6. Android UI系列-----LinearLayout的综合使用

    这里将会对LinearLayout的布局方式进行一个综合的使用,通过一个例子来看看LinearLayout的嵌套布局方式,在这之前首先介绍三个属性: 1.①android:layout_weigth: ...

  7. BigDecimal四舍五入保留两位小数

    import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...

  8. 何为编码 GBK 和 UTF8编码?GBK,GB2312与区位码有何关系?

    何为GBK,何为GB2312,与区位码有何渊源? 区位码是早些年(1980)中国制定的一个编码标准,如果有玩过小霸王学习机的话,应该会记得有个叫做“区位”的输入法(没记错的话是按F4选择).就是打四个 ...

  9. RandomAccessFile类理解

    一.简述 这个是JDK上的截图,我们可以看到它的父类是Object,没有继承字节流.字符流家族中任何一个类.并且它实现了DataInput.DataOutput这两个接口,也就意味着这个类既可以读也可 ...

  10. post请求数据量过大,提交失败

    HttpRuntimeSection.MaxRequestLength 属性,请求的最大大小(以千字节为单位). 默认大小为 4096 KB (4 MB) <system.web> < ...