赞
踩
Linux USB总线驱动框架分析
集线器(USB Root Hub)端两条数据线(D+D-),都接有15K的下拉电阻,当无设备接入时,集线器数据线D+D-的电压为低电平。
当设备接入时,由于设备的数据线上接有1.5K上拉电阻,使得1根数据线被拉高。集线器根据数据线被拉高得知有设备接入,并根据D+为高还是D-为高来判断所接入的设备是全速USB设备(D+为高)还是低速USB设备(D-为高)。
USB通信过程均为主从结构,USB主机发起通信请求,设备进行数据回复,USB设备不具备主动向主机通信的能力。
USB的总线驱动框架
USB Core
USB Core这个模块是纯软件部分,并不代表一个设备,是独立于硬件的协议栈,它是所有USB设备赖以生存的模块,即USB子系统的核心。代码位于kernel/drivers/usb/core目录下。
USB Core为设备驱动程序提供服务,提供一个用于访问和控制USB硬件的接口,而不用考虑系统当前使用的哪种HOST Controller。USB Core将用户的请求映射到相关的HCD,用户不能直接访问HCD。USB Core就是HCD与USB设备的桥梁。
USB的初始化函数在kernel/drivers/usb/core/usb.c中定义,主要完成bus_register(USB总线注册)、usb_major_init(注册usb主控器字符设备)、usb_register(注册usbfs驱动)、usb_hub_init(USB Hub初始化,注册hub驱动、创建内核守护线程来监测hub端口的状态变化)等工作
USB HCD(Host Controller Driver)
硬件主机控制器Host Controller之上运行的是HCD,是对主机控制器硬件的一个抽象,实现核心层与控制器之间的对话接口,USB HCD包含多种USB接口规范:
(1)UHCI:Intel提供,通用主机控制接口,USB1.0/1.1;
(2)OHCI:微软提供,开放主机控制接口,USB1.0/1.1;
(3)EHCI:增强主机控制接口,USB2.0;
USB Device Driver
USB设备是由一些配置(configuration)、接口(interface)和端点(endpoint)组成,
USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。后面单独讨论USB设备描述符。
USB传输的对象为端点(endpoint),每一个端点都有传输类型,传输方向,除了端点0外,每一个端点只支持一个方向的数据传输,端点0用于控制传输,既能输出也能输入。输入(IN)、输出(OUT) "都是" 基于USB主机的立场说的。比如鼠标的数据是从鼠标传到PC机, 对应的端点称为"输入端点"。
USB的传输类型:
a. 控制传输:可靠,时间有保证,比如:USB设备的识别过程
b. 批量传输: 可靠, 时间没有保证, 比如:U盘
c. 中断传输:可靠,实时,比如:USB鼠标
d. 实时传输:不可靠,实时,比如:USB摄像头
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。