去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性。USB驱动非常庞大,多个软件层次相互交错,以及各种协议,USB系统对于一般人很难理解,我对其也只是理解一个大概,下面,我对USB驱动架构的认识做一个总结。

USB系统可以分为两个系统:(1)主机系统HOST;(2)设备系统(Device)。

USB主机系统Host
USB主机系统中,USB主机控制器是一块核心的处理芯片,主机控制器通过根集线器(Root Hub)与外部USB从机设备相连。USB主机控制器包含硬件、软件、固件等部分。

USB设备系统Device
USB设备按功能可分为两部分:集线器Hub、功能部件。如下图所示,主机通过根集线器连接到各种外围设备(集线器、功能部件)。

USB驱动架构
下图所示是典型的USB驱动架构。

USB core
USB Core包含Host Core Driver、Hub Driver,简称USBD module,独立于硬件的协议栈,支持USB Host协议、USB Hub功能。

HCD(Host Controller Driver)
硬件之上运行的是HCD,USB HCD包含三种USB接口规范:

(1)UHCI:通用主机控制接口,USB1.0/1.1;

(2)OHCI:开放主机控制接口,USB1.0/1.1;

(3)EHCI:增强主机控制接口,USB2.0;

HCD的内部结构如下图所示:

其中,HCD包含了Platform Device Driver、Host Controller Driver、Root Hub Driver。

USB Core和HCD构成了USB驱动的核心部分,在上层就是用各种USB设备的厂商提供相应的驱动程序。

以如下一个带OTG技术的WindowsCE USB驱动架构为例,可以将USB驱动从上到下分为3层:

(1)应用层:Client(USB Device Driver);

(2)总线层:USBD;

(3)硬件层:USB HCD;

USB Host的应用协议支持4种应用:RNDIS、Print、Mass Storage、HID;其中HID(Human Interface Device)是一种通信协议。

USB OTG控制器的上层是USB OTG控制器的驱动,USB OTG Core Driver是协议层(总线层),如果做Host,它会使用USB Host协议栈;如果做Device,它会使用USB Device协议栈。

USB设备工作流程
当设备功能驱动希望向某个管道发出读写请求时,首先构造请求(USB Request Block,URB)发给USB总线驱动(USBD中的Hub Driver),USB总线驱动解释该请求,并转换请求发往USB主机控制器端口驱动(usbport.sys,应该属于HCD),进而通过小端口驱动(usbohci.sys等,应该属于USB HCD)与设备进行通信。具体如下图所示:

参考文献
http://blog.csdn.net/arnoldlu/article/details/25386603

http://blog.csdn.net/myarrow/article/details/8500155

http://blog.csdn.net/nanjianhui/article/details/4438599

http://jazka.blog.51cto.com/809003/737486

http://blog.csdn.net/henry000/article/details/7183423

http://bbs.csdn.net/topics/310195515

http://blog.csdn.net/LoongEmbedded/article/details/7519808
---------------------
作者:BaoChuquan
来源:CSDN
原文:https://blog.csdn.net/u014276460/article/details/47292427
版权声明:本文为博主原创文章,转载请附上博文链接!

浅谈USB驱动架构 转载的更多相关文章

  1. 浅谈C++三层架构

    浅谈C++三层架构 三层架构并不是MVC,MVC是一个很早就有的经典的程序设计模式,M-V-C分为三层,M(Model)-V(View)-C(Control). web开发中的三层架构是指:数据访问层 ...

  2. 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招

    朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...

  3. 浅谈Oracle事务【转载竹沥半夏】

    浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...

  4. 《浅谈磁盘控制器驱动》,磁盘控制器驱动答疑解惑![2012.1.29完结]by skyfree

    <浅谈磁盘控制器驱动>,磁盘控制器驱动答疑解惑![2012.1.29完结]  https://www.itiankong.net/thread-178655-1-1.html Skyfre ...

  5. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  6. [原创] 浅谈ETL系统架构如何测试?

    [原创] 浅谈ETL系统架构如何测试? 来新公司已入职3个月时间,由于公司所处于互联网基金行业,基金天然固有特点,基金业务复杂,基金数据信息众多,基金经理众多等,所以大家可想一下,基民要想赚钱真不容易 ...

  7. I 2 C、 SPI、 USB驱动架构

    根据图12.4, Linux倾向于将主机端的驱动与外设端的驱动分离, 而通过一个核心层将某种总线的协议进行抽象, 外设端的驱动调用核心层API间接过渡到对主机驱动传输函数的调用. 对于I 2 C. S ...

  8. 浅谈微服务架构与服务治理的Eureka和Dubbo

    前言 本来计划周五+周末三天自驾游,谁知人算不如天算,周六恰逢台风来袭,湖州附近的景点全部关停,不得已只能周五玩完之后,于周六踩着台风的边缘逃回上海.周末过得如此艰难,这次就聊点务虚的话题,一是浅谈微 ...

  9. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

随机推荐

  1. Linux内核笔记:epoll实现原理(一)

    一.说明 针对的内核版本为4.4.10. 本文只是我自己看源码的简单笔记,如果想了解epoll的实现,强烈推荐下面的文章: The Implementation of epoll(1) The Imp ...

  2. tp 5.0 mysql 事物

    mysql  默认 MyISAM存储引擎,不支持事物处理,InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多 ...

  3. php 识别二维码(转载)

    近段需要写一个通过PHP来识别二维码的功能,在网上查了很久才解决问题.以此来记录下来解决问题的方法. 最开始找的方法是一个叫 php-zbarcode 的扩展,自己照着网上的安装步骤安装了 Image ...

  4. jquery弹窗插件layer:layer.layui.com

    这两天在做抽奖转盘功能,浏览器自带的alert弹出框太low,本人又基本不会前端, 于是借鉴前人用fancybox插件做的效果 结果没看懂其写法(http://www.0101shop.com/goo ...

  5. ol图层支持的数据源

    ol.source.BingMaps,必应地图的数据: ol.source.Cluster,聚族矢量数据: ol.source.ImageCanvas,数据来源是一个canvas元素,其中数据是图片: ...

  6. 电子产品使用感受之——为什么我那么喜欢2015年的11.6寸MacBook Air?

    2018年Mac笔记本产品线得到了一次更新,Mac book Pro, MacBook Air更新后的Mac 产品线变得更加让人摸不着头脑,价格昂贵不说,产品分类细化到如此程度,让一个选择困难症的消费 ...

  7. box-sizing (摘录)

    //http://www.jianshu.com/p/e2eb0d8c9de6 box-sizing其它的值 content-box 描述:在宽度和高度之外绘制元素的内边距和边框. border-bo ...

  8. 实验八 Web基础 SQL注入原理

    实验八 Web基础 实验要求 (1)Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2)Web前端javascipt ...

  9. Nginx(三)-正向代理与反向代理

    原文:正向代理与反向代理的区别 正向代理中,proxy和client同属一个LAN,对server透明: 反向代理中,proxy和server同属一个LAN,对client透明. 实际上proxy在两 ...

  10. mysql自动更新时间

    ALTER TABLE sys_user MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDAT ...