标准的USB设备请求命令

合集下载

USB PROTOCOL

USB PROTOCOL

/view/192267d8ce2f0066f5332225.html/view/339c456baf1ffc4ffe47aca0.html/view/c99688630b1c59eef8c7b4b9.html/view/57dfded126fff705cc170af8.html/view/464c5885ec3a87c24028c447.htmlUSB的一些基本概念1. 管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。

任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。

2. 端点(Endpoint)是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。

设备支持端点的数量是有限制的,除默认端点外低速设备最多支持 2 组端点(2 个输入,2个输出),高速和全速设备最多支持15 组端点。

3. 接口(Interface) 。

应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。

通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。

用在一起来对设备进行控制的若干管道称为设备的接口.4. 设备和端点之间关系: 一个USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。

不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。

除端点0 外,所有的端点只支持一个方向的数据传输。

端点0 是一个特殊的端点,它支持双向的控制传输。

管道和端点关联,和关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。

5. 描述符(Descriptor) 描述设备的属性(Attributes). 它本身是一个数据结构, 第一个字节表示描述符的大小(字节数), 第二个字节表示描述符的类型(Type). 描述符的种类有:1) 设备描述符(Device), 描述一个设备的一般信息.2) 设备修饰描述符(Device_Qualifier), 描述一个高速设备在其它速度下该如何变化的信息.3) 配置描述符(Configuration), 描述一个特定的设备配置, 如接口的数目等. 一个USB设备有一个或多个配置描述符. 每个配置有一个或多个接口并且每个接口有0个或多个端点.4) 其它速度配置描述符(Other_speed_configuration), 描述高速设备在其它可能的速度下的一个配置.5) 接口描述符(Interface), 描述一种配置中的一个特定的接口.6) 端点描述符(Endpoint), 描述主机需要的去决定端点所需带宽的信息. 这个描述符只能附加在GetDescriptor()或GetDescriptor()请求中传送, 不能单独传送. 端点0没有此描述符.7) 字符串描述符(String), 第0个字符串描述符指定设备支持的语言, 其它的描述符则各包含一个UNICODE字符串. 设备描述符, 配置描述符和接口描述符可能会包含字符串描述符.6. USB设备请求(USB Device Request) 请求是从主机通过控制管道发送到设备.标准的设备请求有:1) Clear Feature2) Get Configuration3) Get Descriptor4) Get Interface5) Get Status6) Set Address7) Set Configuration8) Set Descriptor9) Set Feature10) Set Interface11) Synch FrameUSB3.0系统拓扑结构系统是最多只能有7层的树状结构最多只能支持127个设备和HubHost+RootHub永远是在第一层复合(Compound)设备一般占两层功能设备不能作为非叶节点, 只有Hub才可以USB3.0 Hub其实包含了一个USB2的Hub和一个SuperSpeed HubUSB3.0的重要特性:1. 增加了一个重要的数据传输速率2. 点对点方式传输包, 使活动链路数目达到最少3. 异步方式的通知功能, 去除了轮询方式的必要4. 基于链路级的电源管理, 这是总线结构的基础设计5. 向后兼容USB2.0, 驱动级和物理层级别上都达到了兼容的目的USB3.0与USB2.0的区别1. 数据传输速率, 3.0是SuperSpeed 5.0Gbps,2.0是1.5Mbps, 12Mbps或480Mbps2. 数据接口,3.0是全双工,独立于USB 2.0信号的四路差分信号,支持同时双向数据传输2.0是半双工,双路差分信号, 单向数据传输, 需要事先协商好总路线的传输方向3. 信号线数目, 3.0是4路SuperSpeed数据线, 2路HighSpeed数据线和2路电源及地线2.0是2路LS/FS/HS数据线, 2路电源及地线4. 总线事务协议, 3.0是主机主导的异步方式的传输流量控制, 包传输是能显式地进行路由2.0是主机主导的轮询方式的传输流量控制, 包传输是通过广播方式到所有设备5. 电源管理, 3.0是多级别的链路电源管理, 支持Idle, sleep和suspend状态2.0是在端口级进行管理, 可以在entry/exit上有两种级别的挂机状态6. 总线电源, 3.0是和USB 2.0差不多, 只是未配置的电源有50%的增幅, 已配置的电源有80%的增幅7. 主机控制器,3.0用的是xHCI,2.0则是EHCI。

USB的描述符详解总结

USB的描述符详解总结

USB的描述符与命令请求详解一、描述符1.什么是描述符所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。

2.描述符的作用描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。

3.描述符的分类描述符分为三大类:标准描述符、设备类描述符、厂商描述符。

除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。

在USB1.0中规定了5种标准的描述符:设备描述符配置描述符接口描述符端点描述符字符串描述符规定的设备类描述符有:集线器类描述符、人机接口类描述符。

下表是三种描述符的类型值:4.使用的几种类设备类DeviceClass下表是设备类值的含义。

接口类InterfaceClass下表是接口类值的含义。

类的交叉与独享在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。

而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义)【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有:02h ------------- 通信及CDC控制类;DCh ------------ 诊断设备类;EFh ------------- 混杂设备类;FFh ------------- 厂商定义的设备类。

5.标准描述符设备描述符【说明1:】当设备类型bDeviceClass = 0时,说明类型将由接口描述符中定义的为准。

【说明2:】从设备描述符表格中可知,有3个索引值:厂商信息索引、产品信息索引、设备序列号索引,这意味着,将有3个字符串描述符为其准备。

usb标准请求命令

usb标准请求命令

usb标准请求命令USB标准请求命令。

USB标准请求命令(Standard Request)是USB设备与主机之间进行通信的重要方式之一。

在USB通信协议中,设备可以通过发送请求命令向主机请求特定的操作,比如获取设备描述信息、设置设备参数等。

本文将对USB标准请求命令进行详细介绍,包括其格式、常见的请求类型以及具体的应用场景。

USB标准请求命令的格式。

USB标准请求命令由8个字节组成,其中包括以下几个字段:1. bmRequestType:请求类型字段,占据1个字节。

该字段包括以下几个部分:D7,数据传输方向,0表示主机到设备,1表示设备到主机。

D6~D5,请求类型,00表示标准请求,01表示类请求,10表示厂商请求。

D4~D0,接口号,用于指定设备的接口。

2. bRequest,请求码字段,占据1个字节。

该字段用于指定具体的请求操作,比如获取设备描述信息、设置设备地址等。

3. wValue,值字段,占据2个字节。

该字段用于传递请求操作的参数,具体含义由请求码决定。

4. wIndex,索引字段,占据2个字节。

该字段用于指定操作对象的索引,比如接口号、端点号等。

5. wLength,长度字段,占据2个字节。

该字段用于指定数据传输的长度。

常见的请求类型。

USB标准请求命令中,常见的请求类型包括以下几种:1. GET_DESCRIPTOR,获取设备描述信息。

设备可以通过该请求向主机获取设备的描述信息,比如设备的类别、厂商信息、产品信息等。

2. SET_ADDRESS,设置设备地址。

在设备初始化阶段,设备需要通过该请求向主机申请一个地址,以便主机能够识别该设备。

3. SET_CONFIGURATION,设置设备配置。

设备可以通过该请求通知主机其支持的配置,并请求主机进行配置。

4. GET_STATUS,获取设备状态。

设备可以通过该请求向主机获取设备的状态信息,比如连接状态、工作状态等。

5. SET_INTERFACE,设置设备接口。

USB标准请求命令

USB标准请求命令

USB标准请求命令标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成)。

标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构,由5 个字段构成(字段是标准请求命令的数据部分),结构如下(括号中的数字表示字节数,首字母bm,b,w分别表示位图、字节,双字节):bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLe ngth(2)各字段的意义如下:1、bmRequestType:D7D6D5D4D3D2D1D0D7=0主机到设备=1设备到主机;D6D5=00标准请求命令=01 类请求命令=10用户定义的命令=11保留值D4D3D2D1D0=00000 接收者为设备=00001 接收者为设备=00010 接收者为端点=00011 接收者为其他接收者=其他其他值保留2、bRequest:请求命令代码,在标准的USB命令中,每一个命令都定义了编号,编号的值就为字段的值,编号与命令名称如下(要注意这里的命令代码要与其他字段结合使用,可以说命令代码是标准请求命令代码的核心,正是因为这些命令代码而决定了11个USB标准请求命令):1.获取状态 Get Status (00H)A:[T o Device]获取设备的状态:*.位0:自供电(0表示总线供电;1表示自供电).*.位1:远程唤醒(0表示不支持远程唤醒;1表示远程唤醒).*.位2~15:保留.*.一般选择总线供电,不支持远程唤醒,所以返回数据就是0x0000.B:[To Interface]获取接口的状态:*.接口状态的16位字节全部保留,所以返回数据就是0x0000.C:[T o Endpoint]获取端点的状态:*.位0:Halt(0表示端点允许;1表示端点禁止).*.位1~15:保留(复位为0).2.清除特性 Clear Feature (01H)A:[T o Device]清除设备的远程唤醒功能,并返回一个空包.B:[To Endpoint]解禁端点.3.设置特性 Set Feature (03H)A:[T o Device]设置设备的远程唤醒功能,并返回一个空包.B:[To Endpoint]禁止端点.4.设置地址 Set Address (05H)A:设置设备地址.5.获取描述符 Get Descriptor (06H)A:[T o Device]获取设备描述符:*.描述当前USB协议的版本号.设备端点0的FIFO大小.USB设备的ID号等.B:[To Configuration]获取配置描述符:*.描述USB设备接口个数及是否有自供电能力等.C:[T o Interface]获取接口描述符:*.描述端点0以外的物理端点个数等信息.D:[To Endpoint]获取端点描述符:*.描述端点0各端点的传输类型和最大信息包大小和端点的传输方向(IN/OUT).6.设置描述符(可选,无法更新) Set Descriptor (07H)7.获取配置信息 Get Configuration (08H)8.设置配置 Set Configuration (09H)A:[T o Configuration]设置配置描述符.B:[To Interface]设置接口描述符.C:[T o Endpoint]设置端点描述符.9.获取接口信息 Get Interface (0AH)10.设置接口 Set Interface (0BH)11.SYNCH_FRAME(0CH)用于设备设置和报告一个端点的同步帧.标准的USB请求命令中的DescriptorDescriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。

USB学习

USB学习
bmAttributes
1
位图
供电模式的选择
8
MaxPower
1
mA
设备从总线提取的最大电流
字段名称
说明
bLength
0x09
bDescriptorType
0x02
wTotalLength
返回的所有描述符(配置、接口和端点)的数据大小总和
bNumInterfaces
bConfigurationValue
数码相机控制器
影像设备类
USB Camera Controller
扫描仪控制器
影像设备类
视频控制器
影像设备类
USBVedio Controller
调制解调器
USB通信设备
USB Modern
USB-USB桥
通过USB实现PC互连
USB to USB bridge
字段名称
说明
bLength
0x12
bDescriptorType
U盘
Usb flash controller
ICSI, ALI,ALCOR
IDE控制器
移动硬盘
并口桥
USB转并口芯片
Usb to parallel bridge
串口桥
USB转串口芯片
Usb to serial bridge
读卡器
智能卡设备类
Usb smart card
ALI,ALCOR
音频控制器
音频设备类
设置(SETUP)
1101
启动一个方向为通过控制传输管道进行的数据传输,并且包含了设备地址和端点信号
数据包
数据0(DATA0)
0011
偶数据包

在USB中USBHOST是通过各种描述符来识别设备的

在USB中USBHOST是通过各种描述符来识别设备的

在USB中USBHOST是通过各种描述符来识别设备的USB HID报告及报告描述符简介在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接⼝描述符,端点描述符,字符串描述符,报告描述符等等。

USB报告描述符(Report Descriptor)是HID设备中的⼀个描述符,它是⽐较复杂的⼀个描述符。

USB HID设备是通过报告来给传送数据的,报告有输⼊报告和输出报告。

输⼊报告是USB设备发送给主机的,例如USB⿏标将⿏标移动和⿏标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB 设备的,例如键盘上的数字键盘锁定灯和⼤写字母锁定灯等。

报告是⼀个数据包,⾥⾯包含的是所要传送的数据。

输⼊报告是通过中断输⼊端点输⼊的,⽽输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。

⽽报告描述符,是描述⼀个报告以及报告⾥⾯的数据是⽤来⼲什么⽤的。

通过它,USB HOST可以分析出报告⾥⾯的数据所表⽰的意思。

它通过控制输⼊端点0返回,主机使⽤获取报告描述符命令来获取报告描述符,注意这个请求是发送到接⼝的,⽽不是到设备。

⼀个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前⾯,即第⼀个字节。

当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。

更详细的说明请参看USB HID协议,该协议可从下载。

USB报告描述符可以通过使⽤HID Descriptor tool来⽣成,这个⼯具可以到下载,为了⽅便⼤家,我顺便上传了⼀份。

下⾯通过由HID Descriptor tool⽣成的USB⿏标和USB键盘来说明⼀下报告描述符和报告。

code char KeyBoardReportDescriptor[63] = {//表⽰⽤途页为通⽤桌⾯设备0x05, 0x01, // USAGE_PAGE (Generic Desktop)//表⽰⽤途为键盘0x09, 0x06, // USAGE (Keyboard)//表⽰应⽤集合,必须要以END_COLLECTION来结束它,见最后的//END_COLLECTION0xa1, 0x01, // COLLECTION (Application)//表⽰⽤途页为按键0x05, 0x07, // USAGE_PAGE (Keyboard)//⽤途最⼩值,这⾥为左ctrl键0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)//⽤途最⼤值,这⾥为右GUI键,即window键0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)//逻辑最⼩值为00x15, 0x00, // LOGICAL_MINIMUM (0)//逻辑最⼤值为10x25, 0x01, // LOGICAL_MAXIMUM (1)//报告⼤⼩(即这个字段的宽度)为1bit,所以前⾯的逻辑最⼩值为0,逻辑最⼤值为10x75, 0x01, // REPORT_SIZE (1)//报告的个数为8,即总共有8个bits0x95, 0x08, // REPORT_COUNT (8)//输⼊⽤,变量,值,绝对值。

USB协议-设备识别过程

USB协议-设备识别过程

USB协议-设备识别过程USB协议一枚举过程:◆用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。

◆主机检测设备。

◆集线器使用中断通道将事件报告给主机。

◆主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。

◆集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。

◆主机发送Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口。

◆集线器对设备复位。

◆主机使用Chirp K信号来了解全速设备是否支持高速运行。

◆主机发送另一个Get_Port_Status请求,确定设备是否已经从复位状态退出。

◆设备此时处于缺省状态,且已准备好在零端点通过缺省通道响应主机控制传输。

缺省地址为00h,设备能从总线获取高达100mA的电流。

◆主机发送Get_Deor(读设备描述符)报文,以便确定最大数据包大小。

设备描述符的八个字节是bMaxPacketSize。

◆通过发送Set_Address(写地址)请求,主机分配地址,设备此时处于地址状态。

◆主机发送Get_Deor报文,以获取更多的设备信息。

主机通过发送描述符响应设备请求,随后发送全部的次级描述符。

◆主机分配并加载设备驱动程序。

◆通过发送Set_Configuration(写配置)请求,主机的设备驱动程序选择一个有效配置,设备此时处于配置状态。

◆主机为复合设备接口分配驱动程序。

◆如果集线器检测到有过流现象,或者主机要求集线器关闭电源,则USB总线切断设备供电电源。

在这种情况下,设备与主机无法通信,但设备处于连接状态。

◆如果在3毫秒内设备在总线上未见任何动作,则它将进入挂起状态,在挂起状态设备消耗的总线电能最少。

如下:1)集线器检测新设备主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。

(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。

基于WDM的USB设备功能驱动程序的设计与实现

基于WDM的USB设备功能驱动程序的设计与实现

基于WDM的USB设备功能驱动程序的设计与实现蔡旸【摘要】With the popularity of USB technology, more and more manufacturers design and develop their own USB devices. This paper first gives an idea of the driver, the USB communication protocol introduced, then combined with the Windows Driver Model WDM, designed USB device function driver, gives specific examples, driven by the realization of the main functions-use USB bus transfer and data collection. <br> This paper Select introducing WINDDK and VC++in DriverStudio tools to develop USB driver, which will be designed to the USB driver into USB entrance, USB initialization and USB device input/output (I/O) and other functional modules, with a clear structure, easy to transplant etc., has a good application value in the design of the USB driver. So that developers can develop simple in user mode drivers, rapid development is conducive to future external device drivers.%随着USB技术的普及,越来越多的厂商设计开发自己的USB设备。

USB枚举过程 USB Enumeration

USB枚举过程 USB Enumeration

标准usB描述符描述符(Descriptor),是一个完整的数据结构,用于描述一个USB设备的所有属性。

USB协议将这些属性信息进行分类,定义了五种标准的描述符,按照等级由高到低依次为:设备描述符、配置描述符、接口描述符和端点描述符,而字符串描述符是可选的。

每一个描述符都是由一系列的字段组成,每个字段都是一连串的二进制数,表示相应的意义。

设备描述符给出了USB设备的通用信息,包括对设备及所有设备配置起全程作用的信息。

一个USB 设备只能有一个设备描述符,但可以含有一个或多个配置。

特别指出的是,缺省控制通道的数据包的长度(即USB设备端点0的长度)在设备描述符中得以说明,其它端点是在端点描述符中定义的。

USB设备的一个配置可以包含一个或多个接口,且每个接口都可以相互独立地工作。

所有的USB设备至少要支持一个配置描述符。

如果USB设备支持多个配置,则每个配置都需要相应的配置描述符。

配置描述符给出了USB设备的属性和能力等配置信息。

接口一般都是由一系列端点所组成的集合体,用于实现某种特定的USB数据传输功能。

某些USB设备类型,如HID设备,是在接口描述符中定义的,而不是在配置描述符中。

接口描述符不可直接用SetDescriptor和GetDescriptor命令来存取,是作为配置描述符的一部分被返回。

接口描述符给出了一个特定接口的属性信息。

如果一个结构包含有备用的描述符,则可以在设备配置后加以改变。

端点描述符用于描述接口所使用的非0端点的属性,包括输入/输出方向、端点号和包的大小。

端点描述符不可直接用SetDescriptor和GetDescriptor命令来存取,是作为配置描述符的一部分被返回。

0端点无描述符。

字符串描述符是一个可选的描述符,其编号对应于前四种类型描述符中内容为索引的字段。

标准usB设备请求命令USB定义了十一种标准的设备请求命令:Getstatus,ClearFeature,SetFeature,SetAddress,GetDeseriptor,SetDeseriptor,GetConfiguration,SetConfiguration,GetInterface,SetInterface,SynchFrame。

USB接口协议

USB接口协议

USB 接口协议简介B 以及协议简介USB (Universal Serial Bus )是近年来应用在PC 领域的新型接口技术,它是由一些PC 大厂商如Microsoft 、Intel 等为了解决日益增加的PC 外设与有限的主板插槽和端口之间的矛盾而制定的一种通用串行接口。

数据通信协议部分是USB 的核心内容。

主要包括:以差模串行信号为载体传送二进制代码来传输信号;数据包作为最基本的完整信息单元,包含一系列数据信息。

数据包可以分解为更小的单元—域;以包为基础,构成USB 的三种事务。

进而,组合不同的传输类型,传输各种类型的数据,实现USB 的各种功能。

B 通信机制为了细化USB 的通信机制,USB 协议的开发者采用了分层的概念,每一层传输的数据结构对其他逻辑层是透明的,USB 设备和USB 主机通信的逻辑结构和每 层的逻辑通道。

在HSOT 端,应用软件(Client SW )不能直接访问USB 总线,而必须通过USB 系统软件和USB 主机控制器来访问USB 总线,在USB 总线上和USB 设备进行通讯。

从逻辑上可以分为功能层、设备层和总线接口层三个层次。

其中功能层完成功能级的描述、定义和行为;设备级则完成从功能级到传输级的转换,把一次功能级的行为转换为一次一次的基本传输;USB 总线接口层则处理总线上的Bit 流,完成数据传输的物理层实现和总线管理。

途中黑色箭头代表真实的数据流,灰色箭头代表逻辑上的通讯。

如图所示:主机 物理设备逻辑上的数据流实际数据流以USB摄像头设备为例,视频播放软件想通过USB总线得到USB摄像头捕捉的视频数据,这就相当于在功能层上。

应用软件是视频播放软件,功能硬件是USB摄像头。

而这些数据的读取需要USB设备层提供的服务,在这一层上,主要是USB设备的驱动调度主机控制器控制器向USB摄像头发出读请求。

每个USB设备会有多个管道,使用哪个管道,传输的大小都需要指定。

这个层次的USB 系统软件就是USB摄像头的驱动程序。

usbHid

usbHid

一、应用场合USB HID类是比较大的一个类,HID类设备属于人机交互操作的设备。

用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。

另外,使用HID设备的一个好处就是,操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。

所以很多简单的USB设备,喜欢枚举成HID设备,这样就可以不用安装驱动而直接使用。

二、USB HID类可采用的通信管道所有的HID设备通过USB的控制管道(默认管道,即端点0)和中断管道与主机通信。

控制管道主要用于以下3个方面:接收/响应USB主机的控制请示及相关的类数据在USB主机查询时传输数据(如响应Get_Report请求等)接收USB主机的数据中断管道主要用于以下两个方面:USB主机接收USB设备的异步传输数据USB主机发送有实时性要求的数据给USB设备从USB主机到USB设备的中断输出数据传输是可选的,当不支持中断输出数据传输时,USB主机通过控制管道将数据传输给USB设备。

三、与USB HID设备有关的描述符HID设备的描述符除了5个USB的标准描述符(设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符,另一篇文章:USB开发基础--USB命令(请求)和USB描述符)外,还包括3个HID设备类特定描述符:HID描述符、报告描述符、实体描述符。

除了HID的三个特定描述符组成对HID设备的解释外,5个标准描述符中与HID设备有关的部分有:设备描述符中bDeviceClass、bDeviceSubClass和bDeviceProtocol三个字段的值必须为零。

接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIOS 启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为Boot Device。

USB设备请求例程

USB设备请求例程
}
else
EZUSB_STALL_EP0();
break;
}
}
break;
case SC_SET_FEATURE:
if(DR_SetFeature())
{
#define SC_GET_INTERFACE 0X0A //3setup命令:获取接口
#define SC_SET_INTERFACE 0X0B //3setup命令:设置接口
#define SC_SYNC_FRAME 0X0C //3setup命令:同步帧
#define SC_ANCHOR_LOAD 0XA0 //3setup命令:固件装载
#define GD_EDNPOINT 0X05 //3获取描述符:端点
#define GD_DEVICE_QUALIFIER 0X06 //3获取描述符:设备限定
#define GD_OTHER_SPEED_CONFIGURATION 0X07 //3获取描述符:其他配置
#define GD_INTERFACE_POWER 0X08 //3获取描述符:接口电源
{
SUDPTRH = MSB(pDeviceQualDscr);
SUDPTRL = LSB(pDeviceDscr);
}
else
{
EZUSB_STALL_EP0();
SUDPTRH = MSB(pOtherConfigDscr);
SUDPTRL = LSB(pOtherConfigDscr);
break;
case GD_STRING:
if(dscr_ptr = (void*)EZUSB_GetStringDscr(SETUPDAT[2]))

usb识别为未知设备设备描述符请求失败的解决方法

usb识别为未知设备设备描述符请求失败的解决方法

usb识别为未知设备设备描述符请求失败的解决方法USB设备被识别为未知设备或设备描述符请求失败是一种常见的USB连接问题,它可能导致设备无法正常工作。

这种问题通常出现在Windows操作系统上,但也可能在其他操作系统上发生。

在遇到这种问题时,用户可以尝试一些解决方法来修复USB设备的识别问题。

下面我们将介绍一些常见的解决方法,希望能够帮助你解决USB设备未被识别的问题。

1.重新插拔USB设备当USB设备被识别为未知设备或设备描述符请求失败时,首先要尝试的是重新插拔USB设备。

有时由于连接问题或设备驱动程序问题,USB设备可能无法正确地被识别。

这时,将USB设备从电脑上拔下,然后再重新插上,可能会解决该问题。

在重新插拔USB设备之前,建议先关闭电脑,并点亮USB设备确保其断电状态,然后再进行插拔操作。

2.更换USB端口USB设备被识别为未知设备或设备描述符请求失败可能是由于USB 端口损坏或出现连接问题导致的。

因此,你可以尝试将USB设备插入另外一个USB端口,看看是否能够解决该问题。

如果USB设备能够在其他USB端口上正常工作,那么问题很可能是由于原来的USB端口出现了问题。

3.更新驱动程序设备描述符请求失败可能是由于设备驱动程序问题导致的。

检查你的USB设备是否配备了最新的驱动程序,如果没有,你可以尝试更新USB设备的驱动程序。

在Windows操作系统上,你可以通过设备管理器来更新设备驱动程序。

右击“此电脑”或“计算机”图标,选择“管理”,然后打开“设备管理器”,找到出现问题的USB设备,右击该设备,选择“更新驱动程序软件”,然后按照提示进行操作。

4.卸载并重新安装USB设备有时,USB设备的驱动程序可能出现问题,导致设备不能正常被识别。

你可以尝试先卸载USB设备的驱动程序,然后重新安装驱动程序来解决该问题。

在设备管理器中找到USB设备,右击该设备,选择“卸载设备”,然后重新插拔USB设备,系统会自动重新安装驱动程序。

如何使用WinUSB与USB设备(USBDevice)通信

如何使用WinUSB与USB设备(USBDevice)通信
Windows USB (WinUSB) 是 Microsoft 提供的 USB 设备的通用驱动程序。
WinUSB 体系结构由内核模式驱动程序 (Winusb.sys) 和用户模式动态链接库 (Winusb.dll) 组成。
Winusb.sys 是一种内核模式驱动程序,可在 USB 设备的内核模式设备堆栈的协议驱动程序之上 作为筛选器驱动程序或功能驱动程序进行安装。 Winusb.dll 是一种公开 WinUSB 功能的用户模式 DLL。 当 Winusb.sys 作为设备的功能驱动程序安装后,应用程序可以使用这些功能与其进行通信。
独立硬件供应商 IHV 必须使用与 USB 设备类型(而不是总线类型)相关的安装程序类。 如果要开发一个 Microsoft 还没有为其提供现有类 GUID 的设备类型,可以定义一个新的设备安装程序类。
Windows 8 中定义了一个名为 USBDevice ( ClassGuid = {88BAE032-5A81-49f0-BC3D-A4FF138216D6} ) 的新安装程序类。 如果您正在开发一个设备类型,请将您的设备与 <USBDevice> 而不是 <安装程序类 USB> 关联。 USBDevice 类支持 Windows Vista 以及更高版本的操作系统。
3. Choose to select the location of the new driver manually and browse to the folder where you downloaded the driver
制造 USB 设备的独立硬件供应商 (IHV) 必须经常为应用程序提供访问设备功能的途径。 在过去,这意味着使用 Windows 驱动程序模型 (WDM) 为设备实现一个功能驱动程序, 并将该驱动程序安装在设备栈中系统提供的协议驱动程序之上。 Windows 驱动程序基础 (WDF) 现在是 USB 驱动程序的首选模型。

USB命令及标志符解释

USB命令及标志符解释

Brequest GET_STATUS CLEAR_FEATURE
为将来保留 SET_FEATURE
为将来保留 SET_ADDRESS GET_DESCRIPTOR SET_DESCRIPTOR GET_CONFIGURATION SET_CONFIGURATION GET INTERFACE SET_INTERFACE SYNCH_FRAME
一个 GetStatus ( )的接口请求返回如图 8-5 的信息。
D7
D6
D5
D4
D3
D2
D1
D0
保留(为零)
D15
D14
D13
D12
D11
D10
D9
D8
保留(为零)
图 8-5 GetStatus()发向接口时返回信息
一个 Get Statue( )的端节点请求返回如图 8-6 所示信息。
D7
D6
接受者

设备
1
端点
0
表 8-6 标准特性选择符
9.4.1 清除特性(ClearFeature()) 这个请求是被用来清除一个指定的特性。 wValue 中的特性选择符的值必须根据接收者来设定适当的值。接收者是设
备要用设备特性选择符,是接口就必须用接口特性选择符,是端结点就要用端节 点特性描述符。
参照表 8-6 来看选择符与接收者的对应关系。 一个 ClearFeature( )请求所指的特性如果不能被清除,不存在或指的是不 存在的接口或结点号,会产生 RequestError 错误。 如果 wLength 不为 0,设备响应无定义。 缺省状态:当设备处于缺省状态时,对此请求的反应无定义。 地址状态:在设备处于地址状态时这个请求是合法的,但如果该请求指的是 接口或是非零号端结点,会引起请求错误。 配置状态:在此状态下,该请求合法。 9.4.2 取得配置(GetConfiguration()) 此请求返回当前设备配置值。 如果返回 0 值表明设备未配置。 如果 wValue, wIndex, wLength 的值与上面表中不同,设备响应无定义。 缺省状态:该请求响应无定义 地址状态:返回 0 值 配置状态:非 0 的 bConfigurationValue 值被返回 9.4.3 取得描述符

usb识别为未知设备设备描述符请求失败的解决方法

usb识别为未知设备设备描述符请求失败的解决方法

usb识别为未知设备设备描述符请求失败的解决方法USB设备通常是我们日常生活中必不可少的一部分,它们可用于连接键盘、鼠标、打印机、闪存驱动器、相机、手机等设备。

然而,有时候我们可能会遇到USB设备识别为未知设备设备描述符请求失败的情况,导致设备无法正常工作。

接下来,我们将探讨这种问题的可能原因和解决方法。

问题可能原因:1. USB接口故障:USB接口可能因为各种原因而损坏,例如连接器锈蚀、金属接点变形等。

2. USB设备故障:USB设备本身可能出现硬件故障,例如电路板损坏、内部电线短路等。

3.驱动程序问题:操作系统可能无法识别设备,可能是因为设备驱动程序损坏或不兼容。

4.系统错误:系统可能出现错误,导致USB设备无法正确识别。

解决方法:1.检查USB接口:首先,需要检查USB接口是否存在明显的物理损坏,如生锈、变形等。

可以尝试使用同一台电脑的其他USB接口,或者尝试在不同的电脑上连接设备,以确定问题是不是由USB接口引起的。

2.更换设备线:如果USB接口正常,但是设备仍然无法被识别,可以尝试更换设备线。

有时候设备线出现断路或接触不良,会导致设备无法被正确识别。

3.检查设备状态:可以尝试将USB设备连接到其他设备上,看看它是否能被正确识别。

如果其他设备也无法识别该设备,那么很可能是设备本身的问题。

可以尝试将设备送修或更换新设备。

4.卸载和重新安装驱动程序:在设备管理器中找到未知设备,右键点击选择卸载设备,然后重新启动计算机,让系统重新安装驱动程序。

如果原先驱动程序出现问题,重新安装驱动程序可能会解决无法识别设备的问题。

5.更新系统:有时候系统补丁可以修复USB设备无法被正确识别的问题。

可以尝试更新系统到最新版本,看看问题是否得到解决。

6.检查设备描述符:如果是设备描述符请求失败导致设备无法被识别,可以尝试使用USB分析仪或者USB协议分析器来检查设备描述符是否有问题。

如果设备描述符损坏,可能需要联系设备制造商获取修复方案。

关于USB的8个基础问题及答案

关于USB的8个基础问题及答案

关于USB的8个基础问题及答案关于USB的8个基础问题及答案USB的传输线结构是如何的呢?一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500MA(可以在编程中设置的,至于硬件的实现机制,就不要管它了)。

关于USB的8个基础问题及答案问题一:USB的传输线结构是如何的呢?答案一:一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500MA(可以在编程中设置的,至于硬件的实现机制,就不要管它了)。

问题二:数据是如何在USB传输线里面传送的答案二:数据在USB线里传送是由低位到高位发送的。

问题三:USB的编码方案?答案三:USB采用不归零取反来传输数据,当传输线上的差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入***作(即在数据流中每连续6个1后就插入一个0),从而强迫NRZI码发生变化。

这个了解就行了,这些是由专门硬件处理的。

问题四:USB的数据格式是怎么样的呢?答案四:和其他的一样,USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SET UP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。

下面简单介绍一下域、包、事务、传输,请注意他们之间的关系。

(一)域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种,具体分类请看问题五。

USB3.0协议规范中文解读

USB3.0协议规范中文解读

USB3.0 与USB2.0的特性比较3.2 超速结构超速总线是一个分层的通讯结构,如下图所示:协议层:协议层在主机和设备间定义了end-to-end通讯规则。

超速协议在主机和设备端点(endpoint)之间提供应用数据信息交换。

这个通讯关系叫做管道(pipe)。

它是主机导向的协议,意味着主机决定什么时候在主机和设备间进行应用数据传输。

设备可以通过一个特定端点向主机发起异步请求服务,所以它不是一个轮询协议(USB2.0为轮询协议)。

数据可以连续突发传输,提高总线效率。

对某些传输类型(块传输),协议提供流控支持。

SS设备可以异步发送,通知主机,设备的功能状态发生改变。

而不是轮询的方式。

设备端点可以通过设备异步发送的“ready”包(ERDY TP)通知主机进行数据发送与接收,主机对于“ready”通知,如果有有效的数据发送或者缓存接收数据,会添加管道。

主机发送包含主机时间戳的特殊包头(ITP)到总线上,该值可以用于保持设备和主机同步(如果需要的话)。

超速USB电源管理:链路电源管理的关键点是:·设备向主机发送异步“ready”通知·包是有路由路径的,这样就允许不参与数据通讯的链路进入或仍旧停留在低电源状态。

·如果包送到一个处于低电源状态的端口,这个端口会切换到退出低电源状态并指示这是个切换事件。

设备:·超速需要支持USB2.0对默认的控制管道的规定。

HUB设备:因为USB3.0向下兼容USB2.0,为支持USB3.0双总线结构,USB3.0 HUB在逻辑上是两个HUB的组合:一个USB2.0 HUB和一个USB3.0 HUB。

连接到上游端口的电源和地线是共享的。

集线器参与到一个端到端的协议中,所承当的工作:·路由选择输出的包到下游端口。

·输入包混合传递到上游端口·当不在低功耗状态下时,向所有下游端口广播时间戳包(ITP)·当在一个低功耗状态的端口检测到包时,集线器将目标端口转变成退出低功耗状态,通知主机和设备(带内)包遭遇到了一个在低功耗状态的端口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
–0
• wIndex:
– 值为端点号,即端点描述符中的bEndPointAddress的值
• wLength:
– 2,表示接下来端点返回的数据大小为2个字节。
字段说明
• bmRequestType:
– 仅用于主机输出给设备,而命令的接收者可以是设备、接口或端点。
• wValue:
– 该字段的内容是特性选择器,代表了一些特定的需要被清楚或禁用的特 性代码:
• wIndex:
– 参见GET_STATUS的字段说明。
• wLength:
– 值为0,因无需返回数据。
• 请求命令类型,共1个字节,每个位都有一定的意义。D7—选 择数据传输方向
– D7=0:从主机到设备;D7=1:从设备到主机。
• D7—选择数据传输方向
– D7=0:从主机到设备;D7=1:从设备到主机。
• D6D5—命令类型
– D6D5=00:标准请求命令; D6D5=01:类请求命令; D6D5=10: 用户定义命令; D6D5=11:保留。 – 本节讲述标准请求命令,故D6D5=00。
• wLength:
– 值为0,因无需返回数据。
设置地址请求SET_ADDRESS
• 该命令用于主机给设备分配地址:
字段说明
• bmRequestTy节,内容是主机分配给设备的地址。
• wIndex:
– 由于请求命令的接收者只能为设备,故此值为0。
• wLength:
– 值为1,表示设备返回的数据大小为1个字节。
设置接口请求SET_INTERFACE
字段说明
• bmRequestType:
– 固定为00000001,因此数据方向是输入OUT,即主机发送给设备, 而命令接收者为接口。
• wValue:
– 值为主机希望设定的接口描述符编号,即接口描述符中的 bAlternateSetting字段。
标准的USB设备请求命令
概述
• 在USB设备被插入主机时,主机要对该设备进行枚举,这个过 程使用的是USB4种传输方式中的控制传输。
• 控制传输是最重要和最结构最复杂的一种传输类型,其中使用 了一个8字节大小的DATA0数据包,这8个字节的数据包是主 机用来发送控制阶段中的请求命令,而这些请求命令是主机配 置USB设备的关键。
设备请求命令的格式
• 在USB1.1中,这样的命令总共有11个,它们的大小都是8个 字节,具有相同的数据格式,包含5个字段。
向谁请求 什么请求 附加参数
0
bmRequestType
1
bmRequest
2
wValue
4
wIndex
6
wLength
7
6
5
4
3
2
1
0
数据方向
命令类型
接收者类型
字段含义之bmRequestType
• wValue:
– 该命令没有启用该字段,故为0。
• wIndex:
– 该字段的值要与bmRequestType字段的内容匹配。获取设备状态时, 取00;接收者为接口时,值为接口编号;接收者为端点时,值为端点号。
• wLength:
– 相应状态信息的大小。
清除特性请求CLEAR_FEATURE
• 该命令用于清楚或禁用接收者的某些特性:
各种请求命令
请求命令名称 编号
GET_STATUS
CLEAR_FEATURE
0
1
SET_FEATURE
SET_ADDRESS GET_DESCRIPTOR SET_DESCRIPTOR GET_CONFIGURATION SET_CONFIGURATION GET_INTERFACE SET_INTERFACE
• wLength:
– 无额外数据,值为0.
获取描述符请求GET_DESCRIPTOR
• 用于主机获取设备的特定描述符。
字段说明
• bmRequestType:
– 固定为10000000,因此数据方向是输入IN,即设备发送给主机,而 命令接收者为设备。
• wValue:
– 高字节表示描述符编号,低字节表示描述符索引。
• USB为每个命令定义了编号,即此字段的值:
请求命令名称 GET_STATUS CLEAR_FEATURE SET_FEATURE SET_ADDRESS 编号 0 1 3 5
GET_DESCRIPTOR
SET_DESCRIPTOR GET_CONFIGURATION SET_CONFIGURATION GET_INTERFACE SET_INTERFACE SYNCH_FRAME
• wIndex:
– 值为接收该命令的接口编号,即接口描述符中的bInterfaceNumber 字段的值。
• wLength:
– 0,无附加数据。
同步帧请求SYNCH_FRAME
字段说明
• bmRequestType:
– 固定为10000010,因此数据方向是输入IN,而命令接收者为端点。
• wValue:
3
5 6 7 8 9 10 11
SYNCH_FRAME
12
GET_STATUS
• 该命令用于返回特定接收者的状态信息,比如端口、接口的状 态等。
字段说明
• bmRequestType:
– D7=1:表明该命令要求设备发送数据给主机;D1D0=00、01、10, 说明该命令的接收者为设备、接口或端点。 – 主机要求的是这三者的状态之一。
• wIndex:
– 该命令只能获取以下三类描述符:设备描述符、配置描述符和字符串描 述符。获取设备描述符、配置描述符时,此字段值为0;获取字符串描述 符时,此字段参阅有关专著。
• wLength:
– 该字段的值即为要求设备返回的数据大小。
设置描述符请求SET_DESCRIPTOR
• 用来修改设备中的有关描述符,或者增加新的描述符。
–0
• wIndex:
–0
• wLength:
– 表示设备返回的数据大小。
设置配置请求SET_CONFIGURATION
字段说明
• bmRequestType:
– 固定为00000000,因此数据方向是输入OUT,即主机发送给设备, 而命令接收者为设备。
• wValue:
– 值为主机要求设备采用的配置的配置值,即配置描述符中的 bConfigurationValue的值。
• D4~D0:表示该命令的接受者类型
– D4D3D2D1D0=00000:接收者为设备; D4D3D2D1D0=00001:接收者为接口; D4D3D2D1D0=00010:接收者为端点; D4D3D2D1D0=00011:其他接收者;D4D3D2D1D0的其他值 保留。
字段含义之bRequest
• wLength:
– 该字段的值即为主机发送的描述符的大小。
获取配置请求GET_CONFIGURATION
• 主机利用该命令可以获取设备当前的配置值。
字段说明
• bmRequestType:
– 固定为10000000,因此数据方向是输入IN,即设备发送给主机,而 命令接收者为设备。
• wValue:
6
7 8 9 10 11 12
字段含义之wValue
• 每一种请求命令都可以自行来定义这个字段的内容,占2个字节。
字段含义之wIndex
• 索引信息,占用2个字节。命令也可以自定义该字段的内容,但 一般该字段的内容为索引值或偏移量。
字段含义之wLength
• 传输的数据大小,共2个字节。该字段表示在控制传输的“可选 数据步骤”中要传输的数据大小。当然,数据是主机发送给设 备的,那么该字段中的值便是实际的数据大小;而当数据发送 方向是从设备到主机时,wLength的值是设备能够发送的最 大数据包的大小。当然,设备实际发送的数据可以比 wLength的值小。
设置特性请求
• 作用是主机用来启用或激活命令接收者的某些特性:
字段说明
• bmRequestType:
– 仅用于主机输出给设备,而命令的接收者可以是设备、接口或端点。
• wValue:
– 该字段的内容是特性选择器,代表了一些特定的需要被清楚或禁用的特 性代码:
• wIndex:
– 参见GET_STATUS的字段说明。
字段说明
• bmRequestType:
– 固定为00000000,因此数据方向是输入OUT,即主机发送给设备, 而命令接收者为设备。
• wValue:
– 高字节表示描述符编号,低字节表示描述符索引。
• wIndex:
– 如该命令修改或增加设备描述符和配置描述符,此字段值为0;修改字符 串描述符时,此字段参阅有关专著。
• wIndex:
–0
• wLength:
– 0,无附加数据。
获取接口请求GET_INTERFACE
字段说明
• bmRequestType:
– 固定为10000001,因此数据方向是输入IN,请求命令的接收者为接 口。
• wValue:
– 0。
• wIndex:
– 值为接收该命令的接口的编号,即接口描述符中的 bInterfaceNumber字段的值。
相关文档
最新文档