1. 主机控制器(Host Controller)

• UHCI: Universal Host Controller Interface (通用主机控制接口, USB1.0/1.1)

• OHCI: Open Host Controller Interface (开放主机控制接口,USB1.0/1.1)

• EHCI: Enhanced Host Controller Interface (用于USB2.0高速设备的“增强主机控制接口”)

USB的拓扑结构决定了主机控制器就是最高统帅,没有主机控制器的要求设备永远不能主动发数据。所以主机控制器在USB的世界里扮演着重要的角色,它是幕后操纵者。

比如说Host发送Setup包获取设备描述符是怎么发出去的?

这个过程包含很多信息,比如:如何在D+和D-这两根线上传过去的、又传过来的。  这一切的工作都是主机控制器给我们做的。USB Host控制器的规范有很多种这里只介绍混得不错的EHCI和OHCI。这个EHCI主要针对高速的USB设备。如果要操作全速和低速可以考虑OHCI。

• 什么是USB controller?

 USB 设备和主机的接口就是host controller,一个主机可以支持多个host controller比如分别属于不同厂商的。那么USB host controller 本身是做什么的? controller(控制器):用于控制。控制什么?控制所有的USB设备的通信。

CPU把要做的事情分配给主机控制器,然后自己想干什么就干什么去,主机控制器替他去完成剩下的事情,事情办完了再通知CPU。否则让CPU去盯着每一个设备做每一件事情,那是不现实的。

控制器的主要工作是什么? 把数扔出去,把数拿回来。绝对不应该偷偷加工数据。

主机控制器控制总线上包的传输, 使用1ms或125us的帧。在每帧的开始时,主机控制器产生一个帧开始包(SOF: Start of Frame)。

SOF包用于同步帧的开始和跟踪帧的数目。包在帧中被传输,或由Host到Device(out事务),或由Device到Host(in事务)。传输总是由Host发起(轮询传输)。回此每条USB总线只能有一个Host。每个包的传输都有一个状态阶段同(同步传输除外),数据接收者可以在其中返回ACK(应答接收),NAK(重试),STALL(错误条件)或什么也没有(混乱数据阶段,设备不可用或已经断开)。

• 主机控制器Driver的工作是什么?

让主机控制器工作起来,发挥它的潜力。 让控制器发数据、收数据 。主机控制器主要包含以下几步:

  1) 按照主机控制器的要求组织结构体

2) 将结构体在合适的时间、放在合适的地方

3)  trigger

4)  等待完成信号

主机控制器Driver开发过程就是上面这几步。

2. 关键数据结构

关键数据结构关系如下图所示:

3. 系统架构

EHCI负责处理高速设备,OHCI负责处理全速/低速设备。上面这张图描述了USB控制器在route USB设备时的操作。

一个port 多个主人,OHCI的角色是companion,伴侣。地位低点。EHCI处理不了再给它处理。

关于端口逻辑这块需要特别注意,Driver设计者要注意:当前端口正在属于谁。当端口被OHCI所拥有时,你插入个高速设备怎么办?没办法!在没有插入设备时,就不应该让OHCI拥有这个端口。只有EHCI控制器才能识别出设备是全速、高速还是低速。

4. usb_submit_urb

usb_submit_urb处理流程如下图所示:

linux usb ehci,linux USB HOST之EHCI和OHCI相关推荐

  1. usb驱动 linux,Linux usb驱动

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 初期教育应是一种娱乐,这样才更容易发现一个人天生的爱好. -- 柏拉图 深深赞同柏拉图的这个观点,人是有天性的,教育无非 ...

  2. 4g上网卡托 linux,openwrt/LEDE通过USB连接4G网卡或者手机移动网络共享上网(RNDIS)...

    本帖最后由 w1634w 于 2017-11-11 13:33 编辑 按照楼主的方法.设置步骤,最终无法实现用本人的小米note顶配版安卓手机通过USB共享网络上网,求解????????????? r ...

  3. linux 查看usb日志,Linux中显示系统中USB信息的lsusb命令

    Linux中显示系统中USB信息的lsusb命令 通用串行总线(USB)被设计成为连接计算机外设的标准,如键盘.鼠标.打印机.数码相机.便携式媒体播放器.磁盘和网络适配器等等 - 来源:Wikiped ...

  4. i.MX6ULL系统移植:Linux移植6 - Linux 内核移植

    一.测试 NXP 官方linux 1.解压 NXP 官方 Linux 内核 tar -vxif linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2.清除配置 mak ...

  5. linux usb xhci ehci,ehci是什么意思?ehci和xhci的区别有哪些?

    很多新装机的朋友可能都有遇到过,Intel六代Skylake装机平台在安装Win7系统后,容易出现USB鼠标键盘不能用的情况,而导致这种现象的原因主要是由于ehci和xhci驱动的问题,因此今天小编要 ...

  6. linux驱动编写(usb host驱动入门)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] usb协议是一个复杂的协议,目前涉及到的版本就有usb1.0, usb2.0, usb3.0.大 ...

  7. linux设备驱动之USB主机控制器驱动分析

    http://www.cnblogs.com/sdphome/archive/2011/09/29/2195791.html 一:前言 Usb是一个很复杂的系统.在usb2.0规范中,将其定义成了一个 ...

  8. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动

    这一章从主机侧角度看到的USB 主机控制器驱动和设备驱动从主机侧的角度而言,需要编写的USB 驱动程序包括主机控制器驱动和设备驱动两类,USB 主机控制器驱动程序控制插入其中的USB 设备,而USB ...

  9. linux设备驱动之USB主机控制器驱动分析 【转】

    转自:http://blog.chinaunix.net/uid-20543183-id-1930831.html ------------------------------------------ ...

  10. Linux下,查看USB设备信息

    Linux下,查看USB设备信息 首先需要将usbfs挂载一下,然后才能查看. $ mount -t usbfs none /proc/bus/usb $ cat  /proc/bus/usb/dev ...

最新文章

  1. 让你上瘾的网易云音乐推荐算法,用Word2vec就可以实现
  2. python序列类型有_Python数值类型和序列类型
  3. 写给自己看的HTML、CSS、XHTML指南 八
  4. 虚拟主机是设置在httpd-vhosts.conf还是vhosts.conf还是httpd.conf
  5. 使用Webpack的代码分离实现Vue懒加载(译文)
  6. 原子变量, 无锁定且无等待算法
  7. Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
  8. Java基础总结04-数组
  9. 中文金融领域情感词典构建
  10. JD-GUI(反编译工具)
  11. 【阿里妈妈营销科学系列】第四篇:营销渠道效果评估与归因
  12. JS定义const常量对象
  13. 华东师范大学2019年数学分析考研试题
  14. 我的第一个Python爬虫——谈心得
  15. 产品经理知识体系——职责
  16. 群晖DSM Docker下Xware迅雷远程下载教程
  17. 蚂蚁金服区块链朱永春:蚂蚁金服业务新思路,用以往通用场景结合出新的解决方案...
  18. 龙芯中科官方宣布,龙芯中科企业办公信息化平台全面完成国产化替代
  19. TEB算法1-teb原理详解
  20. 外挂、破解软件理论与实战

热门文章

  1. 海思Hi35系列术语记录
  2. odoo:onchange与constrain区别
  3. 糯米团—重制“iPhone团购信息客户端”(二)
  4. Linux(九)线程控制
  5. 计算两个日期相差多少天
  6. KSQLException: A CallableStatement was executed with nothing returned.
  7. PowerMill C#插件二次开发 截图处理
  8. vue css /deep/ 穿透
  9. 《最详细的docker+php开发环境教程》(五) 搭建开发环境概要
  10. 第39讲:MySQL常规的索引分类