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. Web 安全 之 OpenSSL

    什么是OpenSSL协议? SSL(Secure SocketLayer,安全套接层)协议是使用最为普遍网站加密技术,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技 ...

  2. error C2039: 'SetWindowTextA' : is not a member of 'CString'

    m_OpenPath.SetWindowText(strPath);   错误原因:在给控件关联变量m_OpenPath时,变量类型选择错误   解决办法:

  3. Linux 下hosts文件详解

    1.主机名: 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号. 公网:IP地址不方便记忆,所以又有了域名.域名只是在公网( ...

  4. [Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 3 - 再来一发

     我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 深入路径的Blend技巧课,Ay原创,自己琢磨讲解 内容已经迁 ...

  5. C++11模版元编程的应用

    1.概述 关于C++11模板元的基本用法和常用技巧,我在程序员2015年2月B<C++11模版元编程>一文(后称前文)中已经做了详细地介绍,那么C++11模版元编程用来解决什么实际问题呢, ...

  6. idea 自动根据屏幕代码换行

    勾上即可 -- 建议不开启 有些时候从其他来源网站直接copy的代码文件会出现不勾选还会出现自动换行的情况 解决方法  新建文件  代码全部选剪过去

  7. C#学习笔记(31)——委托窗体传值

    说明(2017-11-23 19:31:53): 1. 关于委托和窗体传值,一下午在网上查阅了大量资料,基本就是CSDN的论坛和博客园的文章,大家都在举例子,烧水.鸿门宴,看评论说还看到过沙漠足球的, ...

  8. 【iCore4 双核心板_ARM】例程十:RTC实时时钟实验——显示时间和日期

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate; ; ...

  9. Java 同时返回多个不同类型的方法

    Java 同时返回多个不同类型的方法 2016年12月02日 16:05:07 FXBStudy 阅读数:10045   前言:虽然对于这种需求不常用,且比较冷门,但是还是有其存在的价值,再次做一下整 ...

  10. Java知多少(35)Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...