USB驱动编程培训_第1页
USB驱动编程培训_第2页
USB驱动编程培训_第3页
USB驱动编程培训_第4页
USB驱动编程培训_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、USB驱动编程2022/9/41简介 USB编码以及总线数据结构USB数据流模型USB的PNP管理USB的电源管理USB数据包与应用程序2022/9/42USB编码以及总线数据结构USB编码USB总线数据结构包传输事务帧结构2022/9/43USB编码USB接口针脚结构:同步时钟+数据:采用了NRZI(Non Return to Zero Invert)反向非归零编码;既能保证数据传送的完整,也不需要独立的时钟信号2022/9/44包(Package)包的格式:令牌包,数据包,握手包2022/9/45用7个0和1个1作为同步序列USB传输事务(Transaction)2022/9/46每个传输

2、事务由三个包组成。帧结构(Frame)每个帧内数据由传输事务组合组成2022/9/47USB总线数据结构由于有许多设备都接到了USB上,因此每1ms产生的传输帧是混合的。其中中断传输(Interrupt)和同步传输(Isochronous)对时间要求高,因此占用了约90的总带宽,控制传输(Control)占用了约10的带宽,而批量传输(Bulk)则使用剩下的可用带宽2022/9/48USB数据流模型USB协议简介USB外设与总线数据流模型模型整体框架参与通信抽象对象实际数据流向驱动程序与系统内核之间的关系USB驱动例程中的一些回调接口2022/9/49USB协议简介USB协议:USB采用轮询的

3、广播机制传输数据,即“令牌包,数据包,握手包”;根据包标识符PID字段,用于识别数据包类型;字段-包-传输事务-帧;不同传输模式是通过相应的传输事务序列下实现的。2022/9/410USB外设与总线2022/9/411PC机上USB接口设备的连接拓扑结构数据流模型USB必须分层理解:用户应用程序;IO管理器层;驱动程序;硬件抽象层(HAL);硬件外设2022/9/412模型整体框架客户软件:对设备功能进行操作软件,它是针对 物理设备功能开发的。USB系统:它包括操作系统对USB支持,USB控制器总线驱动,既占硬件也占软件,好比一个翻译。USB设备驱动:客户端软件与USB系统的之间的接口。USB

4、控制器将IRP译码成USB协议数据传输到USB总线上;2022/9/413参与通信的抽象对象通道(pipe):就是主机与设备之间传输的数据的模型共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)2022/9/414参与通信的抽象对象逻辑设备(device):驱动程序对应硬件实际功能暴露给操作系统内核接口的抽象对象;每个设备都有一个默认的控制端点。配置(Configuration):用于设置一些结构来设定设备功能接口。接口(Interface):逻辑设备中功能相近相同的一些端点的集合。端点(EndPonit):位于USB设备或主机上的一个数

5、据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)2022/9/415实际数据流如右图所示: 客户软件通过USB设备驱动(USBD)发送IRQ请求请求传送数据; 主机控制器驱动(HCD)将接收IRQ请求解析成USB传输和传输事务。主机控制器将这些USB传输和传输事务打包成USB协议数据包通过USB总线传输给USB设备交互2022/9/416驱动程序与操作系统之间的关系USB总线的设备也属于即插即用设备,由上一小节可知,USB驱动程序主要还是通过IRP包进行数据交换,操作系统主要就是通过PNP管理器与IO管理器

6、与以及部分内核对USB驱动程序的中断,内存资源进行管理;2022/9/417操作系统用户模式IO管理器即插即用PNP管理器操作系统内核USB驱动程序硬件抽象层USB硬件设备USB驱动程序一些例程函数接口在USB驱动程序入口例程DriverEntry中,DRVER_OBJECT对象专门在majorFuction数组预留以下接口处理相对应的IRP:IRP_MJ_CREATE 以文件形式打开设备准备读写,调用其做准备;IRP_MJ_CLOSE 当前用户关闭文件(closeHandle)时,调用它清扫系统;IRP_MJ_PNP 处理即插即用的操作IRP_MJ_READ 处理读文件操作(Read Fil

7、e)IRP_MJ_WRITE 处理写文件操作(Write File)IRP_MJ_DEVICE_CONTROL 处理来之硬件对操作系统的IO控制码。2022/9/418IRP_MJ_CREAT以文件形式打开设备,检查设备状态,是否正常工作;取消设备挂起,打开管道,并将此管道与文件的变量相关联;OpenHandleCount内核对象计数加一;这是creafile相关联的;2022/9/419IRP_MJ_READ和IRP_MJ_WRITE单独一个例程完成他们:初始化URB,并判断通道工作方式,并从文件中获取管道信息。检查IRP的MDL(a memory descriptor list),根据读写

8、变量设置URB标志位。根据MDL开辟内存,上层用户模式数据映像,构造URB请求;2022/9/420PNP即插即用管理器PNP管理器概述以及相关组件即插即用IRPPNP管理器在USB驱动程序的操作2022/9/421PNP管理器概述什么是PNP管理器呢?PNP plug and play 即插即用设备管理,其主要有以下四个作用:操作系统能检测新设备插入,也能检测得到设备的拔出;如果总线接口允许,设备可以实现热插拔,并保证操作系统正常工作;设备允许软件配置。操作系统应该知道哪些是正确的驱动程序,并智能地加载。2022/9/422PNP即插即用管理器相关组件2022/9/423即插即用管理程序(用

9、户模式)用户模式内核模式注册表 IO管理器执行体即插即用管理程序电源管理程序设备wdm驱动程序总线驱动程序硬件抽象层HAL即插即用IRP即插即用IRP(IRP_MJ_PNP):由即插即用管理器发送给设备驱动程序的;在驱动对象的主功能函数内有一个回调派遣函数用于处理PNP的IRP包;不用的IRP代表不同的功能,如下表所示:2022/9/4242022/9/425子功能代码描述IRP_MN_START_DEVICE配置并初始化设备IRP_MN_QUERY_REMOVE_DEVICE设备可以被安全的删除IRP_MN_REMOVE_DEVICE关闭并删除设备IRP_MN_CANCEL_REMOVE_D

10、EVICE忽略以前的QIERY_REMOVEIRP_MN_STOP_DEVICE关闭设备IRP_MN_QUERY_STOP_DEVICE询问设备可以关闭了吗IRP_MN_CANCEL_STOP_DEVICE忽略以前的QUERY_STOPIRP_MN_DEVICE_RELATIONS给出指定特征的设备列表IRP_MN_QUERY_INTERFACE获得调用函数接口地址IRP_MN_CAPABILITIES取得设备能力IRP_MN_QUERY_RESOURCES取得引导配置IRP_MN_QUERY_RESOURCES_REQUIREMENTS取IO资源需求IRP_MN_QUERY_DEVICE_T

11、EXT获得描述信息或位置串IRP_MN_QUERY_PNP_DEIVCE_STATE获取设备状态IRP_MN_QUERY_BUS_INFORMATION*获取父总线类型IRP_MN_SUPPRISE_REMOVE通知设备意外被删除PNP管理器对USB总线的管理2022/9/426 USB驱动程序在完成即插即拔PNP整过所操作数据结构:URP(USB Requst Package)USB请求包,这个数据结构也是通过操作IRP的内核函数传送直总线驱动层上。通过操作URP进行对USB设备热插拔的枚举,配置和删除。通过对URP的PNP管理操作我们可以得到来自硬件数据描述,如:设备描述符,配置描述符,接

12、口描述符,端点描述符。如图可见这些数据的树状结构:2022/9/4272022/9/428USB电源管理WDM电源管理模型概述基本概念电源状态和设备状态关于USB电源管理策略USB处理电源管理的基本IRP规则USB驱动应该响应的电源管理器发出IRP2022/9/429WDM电源管理模型基本概念:电源管理器:为了于减少系统不必要的功耗,基于ACPI(Advanced Configuration Power Interface)规范作为计算机全局电源策略,操作系统支持一些用户接口,用户可以通过这些接口控制最终的电源管理策略。电源管理是操作系统通过处理驱动程序来实现的。支持PNP的驱动必须支持电源管

13、理,支持电源管理的驱动程序必须支持PNP,两者是被集成而相互依赖。2022/9/430电源状态分以下六个状态: 2022/9/431系统电源状态含义SO(Working)CPU全功率运行S1(Sleeping1)CPU停止,RAM被刷新S2(Sleeping2)CPU不通电,RAM被刷新S3(Sleeping3)CPU不通电,RAM处于低速刷新模式,电源功率输出降低 S4(Hibemate)系统停止,RAM被保存到磁盘S5(Shutdown)系统停止并关闭,需要完全引导以恢复操作设备电源状态: 操作系统不直接处理设备的电源状态,而是有驱动程序专门处理。设备至少要支持D0与D3。2022/9/4

14、32设备电源状态含义D0设备全功率运行D1设备运行于低功耗模式,设备环境可能被保留D2设备运行低功率模式,设环境可能无效D3设备没有电,环境丢失关于USB电源管理策略USB电源管理策略:USB处理电源管理的基本IRP规则USB驱动应该响应的电源管理器发出IRP2022/9/433用户模式的USB数据读写与应用程序用户模式与驱动包IRP对应关系IRP_MJ_CREATE, IRP_MJ_READ, IRP_MJ_WRITE用户模式应用程序打开设备用户模式应用程序读取USB设备2022/9/434USB设备数据读写用户模式下API与驱动程序的IPR对应关系:2022/9/435用户API函数IRP

15、说明CreateFileIRP_MJ_CREATE打开设备ReadFileIRP_MJ_READ从设备获取数据WriteFileIRP_MJ_WRITE向设备发送数据CloseFileIRP_MJ_CLOSE关闭设备DevicControlIRP_MJ_DEVICE_CONTROL控制操作开打设备首先已知设备GUID通过调用SetupDiGetClassDev获得设备的信息集;在设备信息集里调用SetupDiEnumDeviceInterface识别接口信息;在接口信息中调用SetupDiGetDeviceInterfaceDetail获得设备路径名;通过设备路径CreateFile打开设备,

16、此时内核对应发出IRP_MJ_CREATE,操作系统自动访问对应驱动2022/9/436上层应用程序读写数据读写数据通过驱动对象的IRP_MJ_READ与IRP_MJ_WRITE功能例程:使用用户模式的readfile与writefile API调用驱动内核对象;建立内存映像;通过内存对齐复制实现数据交互;还是通过IRP包来获取数据2022/9/437总结简要审阅所演示的内容确定应用培训的方法请求有关培训单元的反馈2022/9/438更多信息列出其他培训单元列出书籍、文章、电子来源列出咨询服务、其他来源2022/9/439USB处理电源管理的基本IRP规则其最基本规则要遵循以下几点:同步操作必

17、须严格,PDO只能仅且有一个IRP_MN_QUERY_POWER或者IRP_MN_SET_POWER电源IRP必须一次性处理,不能产生等待事件或者是锁对象的系统例程;也是需要分层处理,并且只能用特殊对象API接受电源管理器的IRPIRP_MN_QUERY_POWER允许失败,但是IRP_MN_SET_POWER不能失败。如果是跟电源相关的IRP,不能像普通IRP一样处理,特别在传输上。2022/9/440USB驱动应该响应的电源管理器发出IRP在USB驱动中也是通过处理IRP来实现电源管理:处理电源查询IRP:IRP_MN_QUERY_POWER查询是设备电源,还是系统电源,通过调用内核函数HandleSy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论