文档章节

USB 驱动架构浅析

Baiqq
 Baiqq
发布于 2017/05/15 21:14
字数 1275
阅读 66
收藏 1

1.USB简介

    USB,即Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM等多家公司联合提出的。USB版本经历了多年的发展,现已经发展为3.1版本,成为当今PC中的标准扩展接口。当前主要采用USB2.0和USB3.0接口,USB各版本间能很好的兼容。

    USB采用四线电缆,其中两根是用来传送数据的串行通道,另两根为设备提供电源,对于任何已经成功连接且相互识别的外设,将以双方设备均能够支持的最高速率传输数据。USB总线会根据外设情况在所兼容的传输模式中自动地由高速向低速动态转换且匹配锁定在合适的速率。USB是基于令牌的总线。类似于令牌环网络或FDDI基于令牌的总线。USB主控制器广播令牌,总线上设备检测令牌中的地址是否与自身相符,通过接收或发送数据给主机来响应。USB通过支持挂起/恢复操作来管理USB总线电源。USB系统采用级联星型拓扑,该拓扑由三个基本部分组成:主机(Host),集线器(Hub)和功能设备。

2.驱动架构

2.1 驱动架构

    USB是一种主从结构的系统。主机叫做Host,从机叫做Device;一般情况下,PC作为USB host端,手机等数码设备作为USB device,OTG(On the Go)则使设备即可以是USB device也可以是USB host;通常,作为USB device的设备被称为Gadget。

    所有支持USB通讯的设备端都有USB device程序,通常称它们为USB固件。在一些功能简单的设备里,用一些专用的可编程USB控制器就可以完成USB device功能。而在一些运行了操作系统的复杂的嵌入式系统中,要完成USB device程序,就会要求你不仅熟悉USB device控制器的操作,还要熟悉操作系统的驱动架构。

    USB驱动架构如图 2-1所示。

图 2-1 USB主机端和设备端驱动架构

2.1.1 主机端

    在主机端,有USB HCD和USBD两个接口层。

    USB HCD的全称为主机控制器驱动(Host Controller Driver),它是对主机控制器硬件的一个抽象,提供与USB系统软件之间的软件接口。

    从客户软件的角度看,USBD控制所有的USB设备,因此客户软件对设备的控制和所要发送的数据只要交给USBD就可以了。USBD为客户软件提供命令机制和管道机制。客户软件通过命令机制可以访问所有设备的0号端点且与默认管道通信,从而实现对设备的配置和其他一些基本的控制工作。管道机制允许客户和设备实现特定的通信功能。该默认管道描述了一条USBD和USB设备间通信的逻辑通道。

主机端各层有以下功能:

1)检测连接和移去的USB设备。

2)管理主机和USB设备间的数据流。

3)连接USB状态和活动统计。

4)控制主控制器和USB设备间的电气接口,包括能量供应。

2.1.2 设备端

    在设备端,Gadget API定义了一个通用的Gadget Driver的接口,Gadget Driver通过Gadget API与底层USB Device Controller Driver通信。其中Gadget API层屏蔽了底层硬件的不同,使Gadget Driver注重功能的实现,尽量与硬件无关。

2.2 USB主机端驱动架构

    USB主机端驱动架构如图 2-2所示。

图 2-2 USB主机端驱动架构

    USB核心(USBD)是整个USB驱动的核心部分,从图 22可知,一方面USBD对从USB主机控制器接收到的数据进行处理,并传递给上层的设备端驱动软件;同时也接收来自上层的非USB格式数据流,进行相应的数据处理后传递给USB主机控制器驱动。

2.3 设备控制器驱动架构

    设备端控制器基本架构如图 2-3所示。

图 2-3 设备端控制器基本架构

    USB设备控制器驱动主要实现Gadget API定义的函数和中断服务函数,可按功能划分为:API函数实现模块和中断处理模块。

    API函数主要实现Gadget API定义的函数功能,如结构体usb_ep_ops和usb_gadget_ops中的函数、usb_gadget_register_driver函数。这些函数提供给Gadget Driver调用。

    中断处理模块主要处理设备控制器产生的各种中断,包括端点中断、复位、挂起等中断。

3.参考资料

© 著作权归作者所有

共有 人打赏支持
Baiqq
粉丝 2
博文 16
码字总数 24269
作品 0
合肥
私信 提问
USB 驱动架构浅析

1.USB简介 USB,即Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特...

炉yu
2017/05/15
0
0
USB 驱动架构浅析

1.USB简介 USB,即Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特...

炉yu
2017/05/15
0
0
浅谈WINCE USB驱动架构

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

WXXGoodJob
09/04
0
0
Asyncdb(一):写一个纯函数式的Mysql异步驱动

本文由 GodPan 发表在 ScalaCool 团队博客。 之前的 Akka系列博客 接下去可能并不会经常更新了,但是后续看到一些好的点或者大家对哪些还是比较感兴趣还会继续写几篇,这里先跟大家说明一下。...

ScalaCool
2017/10/09
0
0
java基础-反射浅析(磨砺营马剑威java)

【威哥说】本文里波波老师将带领大家一起学习一下什么是反射,文中暂且没有详细给大家介绍反射如何去获取类中的所有属性和方法,更多的是介绍什么场景下会使用到反射,使用反射有什么好处和缺...

磨砺营
2016/09/05
58
0

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配不包含

^((?!xxx).)*$

安小乐
7分钟前
1
0
python Windows tkinter应用开发3 列出目录的所有文件

在本章中,我们将编写程序来执行此操作。 1)选择文件夹。 2)在UI的标签部分打印该文件夹中的所有文件名(带文件扩展名)。 首先,修改selectFile函数以打开文件夹。主文件如下: from tki...

python测试开发人工智能安全
9分钟前
1
0
使用Laya引擎开发微信小游戏(上)

  使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏。      img      作者:马晓东,腾讯前端高级工程师。      微信小游戏的推出也快一年时间了,...

SEOwhywhy
14分钟前
1
0
react程序开发问题记录

1、webpack.config.dev.js文件的publicpath配置

teamlog
26分钟前
2
0
javascript 值转换为布尔值

任意javascript 的值都可以转换为布尔值。 特别是在 if() 等判断中使用的时候: 下面这些值会被转换为 false undefined , null , 0 , -0 , NaN , "" 空字符串 来自 JavaScript 权威指南 书籍...

之渊
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部