首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Linux的USB从设备驱动研究 01

基于Linux的USB从设备驱动研究 01

 0 引言
  USB是英文Universal Serial Bus的缩写,意为通用串行总线。USB是一种快速、双向、同步、低成本、动态可连接的串行接口。USB现在已经广泛应用到各种设备上,尤其是手持设备,几乎都采用了USB接口。现在,USB即可用来与其他设备连接后高速地传递数据,又可用来充电,使手持设备可以发挥U盘、MODEM、无线网卡等作用。
  事实上,USB只是主机和外围设备之间的连接。如何来促使这种连接发挥作用,就需要驱动程序。驱动程序主要解决硬件“需要提供什么功能”以及“如何使用这些功能”。在Linux系统中,USB设备可以作为主机使用,也可作为从设备使用。对应的USB驱动程序有两种主要的类型:宿主系统上的驱动程序和设备上的驱动程序。从宿主的观点来看(例如普通的左桌面计算机),宿主系统的USB驱动程序控制插入其中的USB设备,而USB设备的驱动程序则控制该设备如何作为一个USB设备和主机通信。
  1 USB设备基础
  USB设备的构成包括配置接口和端点,以及USB驱动程序如何绑定到USB接口上。端点是USB通信最基本的形式,USB端点只能是往一个方向传送数据,即从主机到设备(称为输出端点)或者从设备到主机(称为输入端点),故可以看作是单向管道。USB有四种不同的类型,分别对应不同的传输类型:控制、中断、批量、等时。其次接口,USB端点被绑定即为接口。USB的一个接口只处理一种USB逻辑连接;一个USB设备可以有多个接口,不同的接口可以代表不同的功能,因此,功能不同的USB接口需要不同的驱动程序。另外就是配置,USB接口本身被绑定为配置。一个USB设备可以有多个配置,而且可以在配置之间切换以改变设备的状态;一个时刻只能激活一个配置,怛一个配置通常具有一个或者更多的接口。
  USB设备可由许多不同的逻辑单元组成,实际上,也就是这三种逻辑单元组合而成的。Linux内核中的USB代码一般要用URB (usbrequst block)与USB设备通信。URB用struct urb结构体描述,它能以一种异步的方式往/从特定的USB端点发送/接收数据。USB设备驱动程序可能会为单个端点分配许多的URB,也可能对许多不同的端点重用单个URB,这取决于驱动的需要。当USB驱动程序只发送或接收一些简单的USB数据时,可以使用两个很简单的接口函数:usb_bulk_msg、usb_control_msg。
  2 USB设备驱动程序的结构
  图1所示是Linux环境下USB驱动的总体结构。从图l中可以看到:在主机侧层次结构中,实现USB驱动有两类方式:USB主机控制器驱动和USB设备驱动;USB主机控制驱动主要控制插入其中的USB设备,主机控制器可以分为三类,分别对应于三种USB主控制器;USB设备驱动则用于控制USB设备如何与主机通信;USB核心负责USB驱动管理和协议处理的主要工作。

  USB核心向上可为设备驱动提供编程接口,向下可为USB主机控制器驱动提供编程接口;它可以通过全局变量维护整个系统的USB设备信息,从而完成设备的热插拔控制和总线数据传输控制等驱动。
返回列表