USB 驱动架构浅析

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.参考资料

时间: 2024-10-10 06:03:51

USB 驱动架构浅析的相关文章

USB设备驱动架构

1  USB设备驱动架构 这里说的USB设备驱动指的是从主机角度来看,怎样访问被插入的USB设备,而不是指USB设备内部本身运行的固件程序.Linux内核中实现了几类通用的USB设备驱动,主要包括下面几类: (1)音频设备类  (2)通信设备类  (3)HID(人机接口)设备类  (4)显示设备类  (5)海量存储设备类  (6)电源设备类  (7)打印设备类 一般的通用Linux设备(如U盘.USB鼠标.USB键盘等)都不需要工程师再编写驱动,而工程师需要编写的是特定厂商.特定芯片的驱动,而且

Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析

回顾一下USB的相关知识   USB(Universal Serial Bus)总线又叫通用串行外部总线,它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量的USB接口.它最大的特点就是方便通用.支持热插拔并且可以在一个接口上插上多个设备.当设备用电量小的时候,它还可以充当电源.它的众多优点使得它得到了广泛的应用. 在PC机器内部有个USB中央控制器,这个中央控制器负责管理插到USB接口上的设备.当主机要向设备发送或接受数据时,都是向USB中央控制器发

Linux USB驱动程序设计

1. USB发展史 USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯. USB是在1994年底由英特尔.康柏.IBM.Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,成为当今个人电脑和大量智能设备的必配接口之一. ?USB 1.0出现在1996年的,速度只有1.5Mb/s1998年升级为USB 1.1,速度也提升到12Mb/s,称之为"full speed" ?USB 2.0规范

Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信.例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇.可随时监

Camera服务之--架构浅析

Camera服务之--架构浅析 分类: Camera 分析2011-12-22 11:17 7685人阅读 评论(3) 收藏 举报 android硬件驱动框架jnilinux内核平台 一.应用层 Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个Camera 应用APK 包.代码在/android/packages/apps/Camera 下.主要对 android.hardware.Camera(在Framework中) 类的调用,并且实现Camera 应用的业

7 Linux usb驱动框架分析

现象:将USB设备接入PC,PC右下角上会弹出"发现xx新设备",例如"发现andriod phone"若PC上没有安装该设备的驱动程序,则会弹出对话框提示"安装驱动程序". 问1:没有安装设备的驱动程序之前,为什么PC还能发现andriod phone设备呢? 答1:windows系统中已经安装了USB的"总线驱动程序",是"总线驱动程序"发现了新的设备,而提示我们安装的是"设备驱动程序&quo

大中型网站技术架构浅析 - 实时通信

本文所讲述的『实时通信』主要围绕浏览s器端和服务器端之间的实时通信.大中型网站技术架构浅析 系列之一. 实时通信主要分3大类: 1. Pull技术,轮询(Polling) 客户端定时轮询请求,服务器端立刻返回. 优点:短链接,服务器处理方便,支持跨域. 缺点:有一定延迟 微博未读微博数和未读消息(评论,@)就是用polling实现的. 应用场景:对实时性要求不高的应用,如新微博提示,评论提示,回复提示等. 2. Push,反向Ajax(Reverse Ajax)或者叫Comet. 实现方式主要有

AM335x(TQ335x)学习笔记——USB驱动移植

对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. 配置内核支持USB 默认的配置项没有配置USB相关的选项,但是DTS已经配置好了,我们不需要对DTS作任何修改,详细的内核配置项如下: Device Drivers ---> [*] USB support ---> [*] OTG support <*> EHCI HCD (USB

关于FL2440开发板USB驱动安装 成功用于WIN7 64位

前几天,在飞凌淘宝官店购置了一块FL2440开发板进行学习,购置时没有留意FL2440的USB驱动不支持win7 64位. 在到货后进行测试才发现其USB驱动不支持win7驱动,为了能使用这个DNW,我在VirtualBox下安装了xp虚拟机,但是在安装驱动时无法从虚拟机中加载设置进行驱动安装. 我便上网寻找支持64位USB下载驱动,发现网上有一个驱动可安装USB驱动"Supervivi USB Transfer Tool" 在按照安装驱动教程使用成功安装驱动,使用了这个驱动后便能在V