USB驱动详解.docx
- 文档编号:2225398
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:29
- 大小:38.24KB
USB驱动详解.docx
《USB驱动详解.docx》由会员分享,可在线阅读,更多相关《USB驱动详解.docx(29页珍藏版)》请在冰豆网上搜索。
USB驱动详解
Linux设备驱动之usb设备驱动详解
分类:
Linux驱动程序2011-04-1715:
50 6639人阅读 评论(0) 收藏 举报
linuxinterfacedescriptorstructbufferclass
1.Linuxusb设备驱动框架
USB是通用串行总线的总称,Linux内核几乎支持所有的usb设备,包括键盘,鼠标,打印机,modem,扫描仪。
Linux的usb驱动分为主机驱动与gadget驱动。
前者是设备连接到计算机上,通过主机驱动扫描usb设备,控制所连接的设备。
而gadget驱动一般用于嵌入式设备,gadget驱动用于控制嵌入式设备。
Linux的usb驱动两种类型图如下:
左侧是usb的主机驱动,右侧是gadget驱动。
下面着重介绍一下usb的主机驱动:
(1)usb主机控制器-直接与硬件设备交互。
(2)usbcore-向usb设备驱动提供API以及usb主机控制器驱动的程序。
使用usbcore所提供的函数,宏来完成数据处理的功能。
(3)usb设备驱动,即usb接口驱动,一般所说的usb驱动指的是usb接口驱动
2.usb系统的组成部分
usb系统一般由三个部分组成,主机,一个或多个usbhub,以及与之些hub连接的usb设备。
(1)主机
在任何的usb系统中仅有一个主机,主机系统中的usb接口即上图中的主机控制器,主机控制器可由硬件,软件或固件组成。
主机主要负责:
a.检测usb设备的连接与拆除
b.管理主机与usb设备之间的控制流
c.管理主机与usb设备之间的数据流
d.收集状态和活动的统计
e.为连接的usb设备提供电源
(2)usb设备
所有的usb设备都是通过地址来存取的,这个地址在连接或枚举时分配。
usb设备对usb系统来说是端点的集合,一组端点实现一个接口。
设备端点是usb设备中唯一可寻址的部分。
它是主机与设备之间通信流的结束点。
一系列的相互独立的端点构成了usb逻辑设备。
每个端点支持流进设备或者是流出设备。
主机与设备端点上的usb数据传输是通过管道的方式。
(3)hub
所有的usbdevice都连接在hub端口上。
3.usb传输模式
(1)控制传输模式(Control)
控制传输模式支持双向传输,用来处理从usb主机端口到usb设备端口的数据传输,用于控制指令,设备状态查询以及确认命令。
(2)等时传输方式(lsochronous )
等时传输是一种周期性的连续性的意向传输模式,通常用于对时间有着密切关系的信息的传输,对准确性要求不高,但对时间要求极为敏感的设备,如视频,音频的传输。
(3)中断传输模式(Interrupt)
中断传输模式用于非周期性的,自然发生的,数据量小的传输,数据传输的方向是从设备到主机。
如usb键盘和鼠标
(4)批量传输模式(bulk)
批量传输模式是一种单向的,用于大量数据传输的模式,该方式用来传输正确无误的数据。
通常打印机,扫描仪,数码相机以这种方式与主机连接
4.usb设备组成
(1)一个usb设备由可以有一个或多个配置
(2)一个配置通常可以有一个或多个接口
(3)一个接口通常可以有一个或多个端点
通常所尽的usb设备驱动是指接口驱动,即一个接口对应一个驱动。
所以Linuxusb设备有四大描述符,分别为设备描述符,配置描述符,接口描述符,端点描述符。
下面看一个这几个描述符的相关数据结构:
structusb_device_descriptor
{
_u8bLength; //此描述符的字节数
_u8 bDescriptorType;//描述符的种类为设备
_u16bcdUSB; //此设备与描述符兼容的usb设备说明版本号(BCD码)
_u8 bDeviceClass;//设备类码
_u8 bDeviceSubClass;//设备子类码
_u8 bDeviceProtocol;//协议码
_u8 bMaxPacketSize0;//端点0的最大包大小
_u16idVendor;//厂商标志
_u16 idProduct;//产品标志
_u16bcdDevice;//设备发行号
_u8 iManufacturer;//描述厂商的字串索引
_u8 iProduct;//描述产品信息的字串索引
_u8 iSerialNumber;//描述设备序列号信息的字串索引
_u8 bNumConfigurations;//此设备支持的配置数
}_attribute_((packed));
设备类码的典型值如下:
#defineUSB_CLASS_PER_INTERFACE0
#defineUSB_CLAS_AUDIO 1 //声音设备
#defineUSB_CLASS_COMM2 // 调制解调器,网卡,ISDN连接
#defineUSB_CLASS_HID 3 //HID设备,如鼠标,键盘
#defineUSB_CLASS_PHYSICAL5//物理设备
#defineUSB_CLASS_STILL_IMAGE6//静止图像捕捉设备
#defineUSB_CLASS_PRINTER7//打印机
#defineUSB_CLASS_MASS_STORAGE//8批量存储设备
#defineUSB_CLASS_HUB9 //USBHUBS
#defineUSB_CLASS_CSCID 0x0B //智能卡
#defineUSB_CLASS_VIDEO0X0E//视频设备,如网络摄像头
#defineUSB_CLASS_VENDOR_SPEC0xFF//厂商自定义的设备
structusb_config_descriptor{
_u8bLength;//此描述符的字节数
_u8bDescriptorType;//配置描述符类型
_u16wTotalLength;//此配置信息的总长(包括配置,接口,端点和设备类型及厂商定义的描述符)
_u8bNumInterfaces;//此配置所支持的接口数
_u8bConfigurationValue;//在setConfiguration()请求中用作参数来选定此配置
_u8iConfiguration;//描述此配置的字串描述符索引
_u8bmAttributes;//电源配置特性
_u8bMaxpowe;r//此配置下的总线电源耗电量
}_attribute_((packed));
配置描述符给出了usb设备配置信息,以及此配置下的接口数。
每个接口可能的独立操作。
structusb_interface_descriptor{
_u8bLength;//此描述符的字节数
_u8bDescriptorType;//接口描述符类
_u8bInterfacNumber;//接口号,当前配置所支持的接口数组索引,从0开始
_u8bNumEndpoints;//此接口用的端点数量,如果是0,说明此接口只有缺省控制通道
_u8bAlernateSetting;//可选设备的索引值
_u8bInterfaceClass;//类值,0值作为将来保留使用如果是0FFH,此接口由厂商说明
_u8bInterfaceSubClass;//子类码
_u8bInterfaceProtocol;//协议码
_u8iInterface;//描述此接口的字串描述符索引
}_attribute_((packed));
structusb_endpoint_descriptor{
_u8bLength;//此描述符的字节数
_u8bDescriptorType;//端点描述符类
_u8bEndpointAddress;此描述符所描述的端点的地址
_u8bmAtrributes;//所指定的端点的特性,如果是00=控制传送,01=等时传送,10=批传送,11=中断传送
_u8wMaxPacketSize;//当前配置下端点能够发送与接收的最大数据包大小
_u8bInterval;//轮询数据传送端点的时间间隙
_u8bRefresh
_u8bSynchAddress
}_attribute_((packed));
以上给出了usb中的设备描述符,配置描述符,接口描述符和端点描述符。
5.usb设备驱动的几个重要的数据结构
usb_driver,usb_device,usb_bus.
/**
788*stru ct usb_driver -identifies U SBinterfacedriverto u sbcore
789*@name:
Thedrivernameshou ldbe u niqu eamong U SBdrivers,
790* andshou ldnormallybethesameasthemodu lename.
791*@probe:
Calledtoseeifthedriveriswillingtomanageaparticu lar
792* interfaceonadevice. Ifitis,proberetu rnszeroand u ses
793* u sb_set_intfdata()toassociatedriver-specificdatawiththe
794* interface. Itmayalso u se u sb_set_interface()tospecifythe
795* appropriatealtsetting. If u nwillingtomanagetheinterface,
796* retu rn-ENODEV,ifgenu ineIOerrorsoccu red,anappropriate
797* negativeerrnovalu e.
798*@disconnect:
Calledwhentheinterfaceisnolongeraccessible, u su ally
799* becau seitsdevicehasbeen(orisbeing)disconnectedorthe
800* drivermodu leisbeing u nloaded.
801*@u nlocked_ioctl:
U sedfordriversthatwanttotalkto u serspacethrou gh
802* the"u sbfs"filesystem. Thisletsdevicesprovidewaysto
803* exposeinformationto
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- USB 驱动 详解