Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 合同模板 > USB协议详解,usb协议详解波形

USB协议详解,usb协议详解波形

收藏

本作品内容为USB协议详解,格式为 doc ,大小 857137 KB ,页数为 17页

USB协议详解


('USBHID介绍HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容。USB设备描述符-概述当插入USB设备后,主机会向设备请求各种描述符来识别设备。那什么是设备描述符呢?Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。描述符的作用就是通过命令操作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作。USB有那些标准描述符?USB有5种标准描述符:设备描述符、配置描述符、字符描述符、接口描述符、端点描述符。描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。其中可能还会有获取设备序列号,厂商字符串,产品字符串等。设备描述符struct_DEVICE_DEscriptOR_STRUCT{BYTEbLength;//设备描述符的字节数大小BYTEbDescriptorType;//描述符类型编号,为0x01WORDbcdUSB;//USB版本号BYTEbDeviceClass;//USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型,0x00不是在设备描述符中定义的,如HIDBYTEbDeviceSubClass;//usb分配的子类代码,同上,值由USB规定和分配的,HID设备此值为0BYTEbDeviceProtocl;//USB分配的设备协议代码,同上HID设备此值为0BYTEbMaxPacketSize0;//端点0的最大包的大小WORDidVendor;//厂商编号WORDidProduct;//产品编号WORDbcdDevice;//设备出厂编号BYTEiManufacturer;//描述厂商字符串的索引BYTEiProduct;//描述产品字符串的索引BYTEiSerialNumber;//描述设备序列号字符串的索引BYTEbNumConfiguration;//可能的配置数量}配置描述符struct_CONFIGURATION_DEscriptOR_STRUCT{BYTEbLength;//配置描述符的字节数大小BYTEbDescriptorType;//描述符类型编号,为0x02WORDwTotalLength;//配置所返回的所有数量的大小BYTEbNumInterface;//此配置所支持的接口数量BYTEbConfigurationVale;//Set_Configuration命令需要的参数值BYTEiConfiguration;//描述该配置的字符串的索引值BYTEbmAttribute;//供电模式的选择BYTEMaxPower;//设备从总线提取的最大电流}字符描述符struct_STRING_DEscriptOR_STRUCT{BYTEbLength;//字符串描述符的字节数大小BYTEbDescriptorType;//描述符类型编号,为0x03BYTESomeDescriptor[36];//UNICODE编码的字符串}接口描述符struct_INTERFACE_DEscriptOR_STRUCT{BYTEbLength;//接口描述符的字节数大小BYTEbDescriptorType;//描述符类型编号,为0x04BYTEbInterfaceNunber;//接口的编号BYTEbAlternateSetting;//备用的接口描述符编号BYTEbNumEndpoints;//该接口使用端点数,不包括端点0BYTEbInterfaceClass;//接口类型HID设备此值为0x03BYTEbInterfaceSubClass;//接口子类型HID设备此值为0或者1BYTEbInterfaceProtocol;//接口所遵循的协议BYTEiInterface;//描述该接口的字符串索引值}端点描述符struct_ENDPOIN_DEscriptOR_STRUCT{BYTEbLength;//端点描述符的字节数大小BYTEbDescriptorType;//描述符类型编号,为0x05BYTEbEndpointAddress;//端点地址及输入输出属性BYTEbmAttribute;//端点的传输类型属性WORDwMaxPacketSize;//端点收、发的最大包的大小BYTEbInterval;//主机查询端点的时间间隔}HID设备描述符温习了以上内容,我们再来看看HID协议与这些描述符之间的关系。当插入USB设备后,主机会向设备请求各种描述符来识别设备。为了把一个设备识别为HID类别,设备在定义描述符的时候必须遵守HID规范。从框图中,可以看出除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是HID描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个HID描述符。接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(BootDevice,一般对PC机而言才有意义,意思是BIOS启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为BootDevice。如果为0则只有在操作系统启动后才能识别并使用您的HID设备)。USBHID类描述符的结构偏移量域大小值描述0bLength1数字此描述符的长度(以字节为单位)1bDescriptorType1常量描述符种类(此处为0x21即HID类描述符)2bcdHID2数字HID规范版本号(BCD码),采用4个16进制的BCD格式编码,如版本1.0的4bCountryCode1数字硬件目的国家的识别码(BCD码)(见表3)5bNumDescritors1数字支持的附属描述符数目6bDescriptorType1常量HID相关描述符的类型0x21:HID描述符0x22:报告描述符0x23:物理描述符7wDescriptorLength2数字报告描述符总长度9bDescriptorType1常量用于识别描述符类型的常量,使用在有一个以上描述符的设备10wDescriptorLength2数字描述符总长度,使用在有一个以上描述符的设备报告描述符报告描述符比较复杂,它是以item形式排列组合而成,无固定长途,用户可以自定义长度以及每一bit的含义。item类型分三种:main,global和local,其中main类型又可分为5种tag:项目分成三种类别:主项目,全局项目,区域项目。主项目中的input,ouput,feature三个卷标用来表示报告中数据的种类,这些是报告描述符中最主要的项目,其他项目都是用来修饰这三种项目。主要项目中其他二个卷标后面再作详细的介绍。>>Input项:表示设备操作输入到主机的数据模式。这个数据格式就形成一个输入报告,虽然输入报告可以用控制型管线以getreport(input)来传输,但是通常用中断型输入管线来传输以确保在每一固定周期内都能将更新的输入报告传给主机。>>Output项:表示由主机输出到装置操作的数据格式。这个数据格式就形成一个输出报告。输出报告通常不适用轮询的方式来传送给设备,而是由应用软件依实际需求以传令方式要求送出输出报告,所以大多用控制型管线以setreport(output)指令来将报告送到设备。当然也可以选择用中断型输出管线来传送,只是通常不建议这样用。>>Feature项:表示由主机送到设备的组态所需数据的数据格式。这个数据模式就形成一个特征报告。特征报告只能用控制型管线以getreport(feature)和setreport(feature)指令分别来取得和设定设备的特征值主项目用来定义报告中数据的种类和格式,而说明主项目之意义与用途为全局项目和区域项目。顾名思义,区域性项目只能适用于列于其下的第一个主项目,不适用于其他主项目,若一个主项目之上有几个不同的卷标的区域性项目,则这些区域性项目皆适用于描述该主项目。相反,全局性项目适用于其下方的所有主项目,除非另一个相同卷标的全局性项目出现!!!Reportdescriptorsarecomposedofpiecesofinformation.EachpieceofinformationiscalledanItem.报告描述符由一些数据片组成。这些数据片被叫做Item。Allitemshaveaone-byteprefixthatcontainstheitemtag,itemtype,anditemsize.每一个Item都包含一个字节的前缀,这个前缀中包含了三个信息--itemtag,、itemtype、itemsize。Anitemmayincludeoptionalitemdata。Item可以包含一个可选的数据段。Thesizeofthedataportionofanitemisdeterminedbyitsfundamentaltype.Item的数据部分的长度取决于Item的基本类型。Therearetwobasictypesofitems:shortitemsandlongitems.Item有两种基本类型:shortitemsandlongitem。Therearethreecategoriesofshortitemtags:Main,Global,andLocal.shortitem的itemtags有三种类型:Main,Global,andLocal.Mainitems:MainitemsareusedtoeitherdefineorgroupcertaintypesofdatafieldswithinaReportdescriptor.TherearetwotypesofMainitems:dataandnon-data.Data-typeMainitemsareusedtocreateafieldwithinareportandincludeInput,Output,andFeature.Otheritemsdonotcreatefieldsandaresubsequentlyreferredtoasnon-dataMainitems.好了,到此我们应该可以对照实际应用的报告描述符,寻找其中的Mainitems了。至此我们已经可以明白报告描述符中的几个MAINItem的意义,接下来继续看GlobalItem和LocalItem.GlobalItem:Globalitemsdescriberatherthandefinedatafromacontrol.AnewMainitemassumesthecharacteristicsoftheitemstatetable.Globalitemscanchangethestatetable.AsaresultGlobalitemtagsapplytoallsubsequentlydefineditemsunlessoverriddenbyanotherGlobalitem.(原文件名:GlobalItem.jpg)至此我们已经可以明白报告描述符中的几个GlobalItem的意义LocalItem:Localitemtagsdefinecharacteristicsofcontrols.TheseitemsdonotcarryovertothenextMainitem.IfaMainitemdefinesmorethanonecontrol,itmaybeprecededbyseveralsimilarLocalitemtags.Forexample,anInputitemmayhaveseveralUsagetagsassociatedwithit,oneforeachcontrol.item的数据格式有两种,分别是短item和长item。短item格式bSize0:0个字节1:1个字节2:2个字节3:4个字节bType0:main1:global2:local3:保留bTagitem类型8:input9:outputA:collectionB:featureC:endcollection长item,其bType位值为3,bTag值为FbDataSize0:0个字节1:1个字节2:2个字节3:4个字节bLongItemTag0:main1:global2:local3:保留data数据HID设备6种特定请求HID类请求(命令)包格式偏移量域大小说明0bmRequestType1HID设备类请求特性如下:位7:0=从USBHOST到USB设备1=从USB设备到USBHOST位6~5:01=请求类型为设备类请求位4~0:0001=请求对象为接口(interface)因而,针对HID的设备类请求,仅仅10100001和00100001有效1bRequest1HID类请求(参考下表)2wValue2高字节说明描述符的类型0x21:HID描述符0x22:报告描述符0x23:物理描述符低字节为非0值时被用来选定实体描述符。4wIndex22字节数值,根据不同的bRequest有不同的意义6wLength2该请求的数据段长度HID类请求数值HID类请求描述符注释0x01GET_REPORT主机用控制传输从设备接收数据,所有HID类设备都要支持这个请求;0x02GET_IDLE主机读取设备当前的空闲速率,设备可以不支持此请求;0x03GET_PROTOCOL仅仅适应于支持启动功能的HID设备(BootDevice)0x09SET_REPORT设备用控制传输接收主机的数据,设备可以不支持此请求;0x0ASET_IDLE设置闲置状态,设备可不支持此请求;0x0BSET_PROTOCOL仅仅适应于支持启动功能的HID设备(BootDevice)GET_REPORT:主机通过控制端点获取一个Report域值bmRequestType0xA1bRequest0x01wValue高字节表示报告类型0x01:input0x02:output0x03:featureother:reserved低字节表示ReportID,如不使用设为0wIndexHID的interface索引值wLengthReport长度DataReport内容SET_REPORT:主机发送一个Report给设备,用以设置input,output或者feature域值bmRequestType0x21bRequest0x09wValue高字节表示报告类型0x01:input0x02:output0x03:featureother:reserved低字节表示ReportID,如不使用设为0wIndexHID的interface索引值wLengthReport长度DataReport内容GET_IDLE域值bmRequestType0xA1bRequest0x02wValue高字节0低字节表示ReportID,如不使用设为0wIndexHID的interface索引值wLength1Data空闲速率SET_IDLE域值bmRequestType0x21bRequest0x0AwValue新的速率低字节表示ReportID,如不使用设为0wIndexHID的interface索引值wLength0Data无GET_PROTOCOL域值bmRequestType0xA1bRequest0x03wValue0wIndexHID的interface索引值wLength1Data0=BootProtocol1=ReportProtocolSET_PROTOCOL域值bmRequestType0x21bRequest0x0BwValue0=BootProtocol1=ReportProtocolwIndexHID的interface索引值wLength0Data无学习,学习,只有不断的学习,才能让自己在人群中脱颖而出.',)


  • 编号:1700673234
  • 分类:合同模板
  • 软件: wps,office word
  • 大小:17页
  • 格式:docx
  • 风格:商务
  • PPT页数:857137 KB
  • 标签:

广告位推荐

相关合同模板更多>