原创 USB传输协议分析

2008-4-22 19:36 8210 4 6 分类: 通信


USB传输协议分析



关键字:



 



、数据格式【包】



总体的格式如下:



 




同步序列【SYNC



IDPID



包特定信息



CRC校验位



包结束标志【EOP




                        信息包



1.1 、同步序列【SYNC



所有的包都从同步序列(SYNC)字段开始的,它由8B组成【00000001】,他们在数据线上用NRZI码表示【由一个跳变来表示0】,所以这就提供了一个时钟来同步,信息包紧跟其后。









 



 



 



 



 



 






1.2 、信息包



信息包有:令牌包【SETUP】、数据包、握手包、专用包。



1.2.1 、令牌包【SETUP







 



 



 



                 PID




PID 类型



PID



PID[3:0]



描述



标记/令牌


Token



输出(OUT


 


输入(IN


 


帧开始(SOF


 


建立(SETUP



0001B


 


1001B


 


0101B


 


1101B



在主机到功能部件的事务中有地址+端口号


 


在功能部件到主机的事务中有地址+端口号


 


下一个1ms时间片的开始标记和帧号【同步端点用来同步它的传输】


在主机到功能部件建立一个控制管道的事务中有地址+端口号




 





地址字段【ADDR





端口字段【ENDP



 




0[开始]



D0



D1



D2



D3



D4



D5



D6



D7



D8



1




                帧字段



帧号字段是一个11位的字段,主机每过一帧就将其内容加一。帧号字段达到其最大值7FFH时归零,且它仅每个帧最初时刻在SOF标记中被发送。



 



 



1.2.2 、数据包



 





DATA如下






PID 类型



PID



PID[3:0]



描述



数据


DATA



数据0DATA0


 


数据1DATA1



0011B


 


1011B



偶数据包PID


 


奇数据包PID




 



1.2.3 、握手包



握手包仅由PID构成。






PID 类型



PID



PID[3:0]



描述



握手(Handshake



确认(ACK


 


不确认(NAK


 


停止(STALL



0010B


 


1010B


 


1110B



接收器收到无措数据包;


 


接收设备部不能接收数据,或发送设备不能发送数据【暂时的】。


端口挂起,或一个控制管道请求不被支持【永久的】。




 



1.2.4 、专用包



 




PID 类型



PID



PID[3:0]



描述



专用


Special



前同步(PRE



1100B



主机发送的前同步字。打开到低速设备的下行总线通信。




 



 



 



、事务处理



2.1 、一次事务处理的过程









 



 



 



 






2.2 、事务处理种类



事务处理包括:SETUP事务、OUT事务、IN事务。



2.2.1 IN事务



 



 





 



 



 



 



 



 



 



2.2.2 OUT事务





 



2.2.3 SETUP事务





 



 



USB传输类型



3.1
概述



USB4传输类型:批量传输(Bulk),控制传输(Control),中断传输(Interrupt)和同步传输(Isochronous)【事务是它们的基本单位】。



 



3.2批量传输【 一个或多个IN/OUT事务 构成



批量传输的特点是以错误检测和重试的方式保证主机和功能部件之间的数据的无错发送的能力。如图所示,批量传输是由标记【令牌】,数据和握手包构成的三时相的事务;在某些流控制和挂起条件下,数据时相被握手信号替换,从而产生了没有数据传输的两时相的事务。





8-9 批处理事务格式



当主机准备好了接收批量传输数据的时候,它发出输入标记。功能部件端口通过返回数据包,或者如果不能返回数据,则返回NAKSTALL握手作为应答



l  ACK:主机收到合法的的数据包;



l  NAK:功能部件暂时不能返回数据;



l  STALL:端口永久地被停止,需要USB系统软件干涉;



l  如果收到数据时主机检测到错误,它不返回握手包给功能部件。



 



当主机准备好了传送成批数据的时候,它首先发出一个后跟数据包的输出标记包。如果数据由功能部件无错地接收到,那么它将返回三个握手中的一个



l  ACK:数据包无错地接收到,通知主机可以发送下一个包;



l  NAK:数据被无错地收到,但主机应该重新发送数据因为数据功能部件处于妨碍它接受数据的暂时的条件(例如缓冲满)中;



l  STALL:端口被停止,告诉主机不要重试传输,因为功能部件上有错误条件。



l  如果接收到的数据有CRC或者位填充错,那么不返回任何握手。



 



8-10说明了时序位和数据PID在批量传输读和写中的用法。数据包同步经数据时序切换位(Sequence Toggle Bit)和DATA0/DATA1 PID的使用而达到。当端口经历配置事件(Configuration event)的时候,批量传输端口的切换时序被初始化为DATA0。端口上的数据切换不是作为短包传送或IRP撤消的直接结果而被初始化的。





8-10 批处理读和写



主机总是通过配置事件初始化总线传送的第一个事务为DATA0 PID。第二的事务使用DATA1 PID,并且,剩余的后继数据传送轮流切换。数据包发送器根据ACK的接收情况来切换而接收器根据数据包的接收(receipt)和验收(acceptance)的情况切换。



 



3.3
、控制传送



控制传送最少有2个事务阶段:设置阶段、【可选】数据阶段、状态阶段。



3.3.1
设置阶段里【由 SETUP事务 构成



SETUP事务在格式上类似于OUT,但是使用的是SETUP而不是OUTPID。设置阶段总是在SETUP事务的数据时相上使用DATA0 PID。收到SETUP的功能部件必须接受建立数据并用ACK应答,如果数据被损坏,则丢弃数据且不返回握手。 





8-11 控制SETUP事务



3.3.3
可选数据阶段【 一个以上INOUT事务 构成



它遵守和批量传送相同的协议规则。所有的数据阶段里的事务都必须有相同的方向(即全部输入或者全部输出)。在数据时相中要发送的数据的数量和其方向在设置阶段里被指定。如果数据的数量超过了先前确定的数据包大小,数据在支持最大的包大小的多个事务中被发送(输入或者输出)。任何剩下的数据都作为剩余在最后的事务中被发送。





3.3.4
状态阶段【 INOUT事务 构成



状态阶段是以相对前面的阶段的数据流方向的变化来刻划的,并且总是使用DATA1 PID。例如,如果数据阶段由输出事务构成的,状态是单一的输入事务。如果控制传送序列没有数据阶段,那么它由建立阶段和其后的由输入事务构成的状态阶段构成。图8-12说明了事务顺序,数据时序位的值和控制读写序列的数据PID类型。时序位显示在括号中。





8-12 控制读写序列



当控制端口在控制传送的数据和状态阶段中发送STALL握手的时候,必须对以后所有对此端口访问返回STALL握手,直到收到建立PID为止。端口收到建立PID之后,不应返回STALL握手。



8-5 状态阶段的响应




状态响应



控制写传送(在数据时相发送)



控制读传送(在握手时相发送)



功能部件完成



零长度的数据包



ACK握手



功能部件有一个错



STALL
握手



STALL握手



功能部件忙



NAK
握手



NAK握手




 



3.4
、中断传输【由 INOUT事务 构成】



一收到输入标记,功能部件便可返回数据,NAKSTALL。如果端口没有新的中断信息(即没有等待事务的中断)可供返回,功能部件在数据时相里返回NAK握手。如果中断端口的停止特征被设置了,功能部件将返回STALL握手。如果中断是等待事务的,功能部件象数据包那样返回中断信息。作为对数据包接收的反应,主机如果数据无错地被接受则发出ACK握手,或者如果数据包损坏则不返回握手。图8-13说明了中断事务格式。





8-13 中断事务格式



当端口为实际的中断数据使用中断传送机制的时候,必须遵循数据切换协议。这使功能部件得知主机收到了数据,并且事件条件被清除。这种“确保的”事件传送允许功能部件只发送中断信息直到它被主机接收,而不是在USB系统软件清除中断条件之前,每次数据功能部件被选中时就必须要发送中断数据。



用于切换模式时,中断端口被端口上的任何配置事件初始化为DATA0 PID,其行为和图8-10所示的批处理一样。



另外, 中断端口可被用来为某些同步功能部件传达速率反馈信息。用于这种模式时,在每个数据包被送到主机之后,都不管握手包是否存在或类型如何,数据切换位都应该改变。只有中断输入端口支持这种能力。



 



3.5
、同步传输【由 同步事务 构成】



如图8-14所示,同步(ISO)传输有标记和数据时相,而没有握手时相。主机发出输入或输出标记,后跟着端口(输入)或主机(输出)传送数据的数据时相。ISO事务不支持握手时相或重试能力。





8-14 同步事务格式



注解:设备或主机控制器都应该能接受DATA0DATA1。设备或主机控制器应该只发送DATA0



ISO事务不支持切换时序。



 



 



四、 USB请求   



4.1 概述



Usb通讯传输中 主机站主导地位,它发出usb请求 来向usb设备发布指令,而usb设备通过 描述符来说明其性质。



4.2 Setup 数据包的格式【请求数据包】 



 




  
偏移量



   



  
大小



  



 
描述



 


 


 


 


 


0



bmRequestType



1



位图



请求特征:


D7: 传输方向(数据传输阶段的方向


0=主机至设备


1=设备至主机


D6-D5:
请求类型


00=标准请求


01=类定义的一个请求


10=厂商定义的一个请求


11=保留


D4-D0:
请求的接受者


0000=设备


0001=接口


0010=端点


0011=设备的其他元素


//4..31=保留



1


 



bRequest



1




 



具体请求见下表



2



wValue



2




 



此域用来传送当前请求的参数



 


4


 


 



 


wIndex


 


 



 


2


 


 



 


索引或偏移


 



字长域.根据不同的请求含义改变.典型用于传送索引或偏移.



6



wLength



2



 



如有数据传送阶段,此为数据字节数.




 



 



 



 



 



 



bRequest(标准请求码)






Brequest



Value(十六进制)



GET_STATUS



0



CLEAR_FEATURE



1



为将来保留



2



SET_FEATURE



3



为将来保留



4



SET_ADDRESS



5



GET_DESCRIPTOR



6



SET_DESCRIPTOR



7



GET_CONFIGURATION



8



SET_CONFIGURATION



9



GET_INTERFACE



10



SET_INTERFACE



11



SYNCH_FRAME



12






 



Windex:



所指为端点:




 


   
D7



 


    D6



 


    D5



 


    D4



 


    D3



 


    D2



 


    D1



 


    D0



方向


0:出结点


1:入结点



 


           保留(0)



 


              端点号



 


    D16



 


    D15



 


    D13



 


    D12



 


    D11



 


    D10



 


    D9



 


    D8



                                       保留(0)













 



所指为接口:




 


   
D7



 


    D6



 


    D5



 


    D4



 


    D3



 


    D2



 


    D1



 


    D0



 


                                           接口号



 


    D16



 


    D15



 


    D13



 


    D12



 


    D11



 


    D10



 


    D9



 


    D8



                                       保留(0)













                        





4.3
11种标准设备请求



 




bmRequestType


 



bRequest


(请求号)



wValue


值字段内容



Windex


指针字段内容



wLength


数据长度



Data


数据字段内容



00000000B


00000001B


00000010B



CLEAR_FEATURE


清除特性



特性选择符




接口号


端点号







10000000B



GET_CONFIGURATION


获取配置









配置值



10000000B



GET_DESCRIPTOR


(设备或配置描述符)



描述符种类(设备或配置描述符)和索引



零或语言标志



描述表长



描述表



10000001B



GET_INTERFACE





接口号





可选设置



10000000B


10000001B


10000010B



GET_STATUS




 




接口号


端点号





设备,


接口 ,


端点状态



00000000B



SET_ADDRESS



设备地址









00000000B



SET_CONFIGURATION



配置值









00000000B



SET_DESCRIPTOR



描述表种类和索引



零或语言标志



描述表长



描述表



00000000B


00000001B


00000010B



SET_FEATURE


特性



特性选择符




接口号


端点号







00000001B



SET_INTERFACE



可选设置



接口号







100000010B



SYNCH_FRAME


同步帧





端点号





幀号




 



3.1SetAddress:



目的:为USB设备设定一个地址【主机指定的】,以便与USB设备的通信地址



请求号【bRequest】:05h



数据源:无



数据长度【wLength】:0



值字段内容【wValue】:新设备地:1--127                                                     



指针字段内容【Windex】:无



支持状态:默认、地址



出错表现:未指定





在设置地址请求中,器件立包的内中得到新的地址。请注意,此设置地址请求不数据阶段,因此MCU 需要向主机一个零度的数据包作为答阶段。



 



3.2 GetDescriport()



目的:主机请求一个特定的描述符【设备、接口、配置、端点



请求号:06h



数据源:设备



数据长度:返回特定的描述符的字节的长度。1)长度:描述符>端点数据长度,设备发送字节最大为数据长度;2)长度:描述符<端点数据长度,设备发送描述符,当设备发送小于包最大值的数据包,主机就可以检测到描述符的结束。



值字段内容:对于高位字节为描述符类型,低位字节为描述符值。



指针字段内容:1)对于请求字符串描述符:语言ID2)请求其他描述符:0



数据字段内容:请求的描述符



支持的状态:默认、地址、配置。



出错动作:设备没收到、不支持的请求,返回STALL



 



3.3 SetDescriport()



 



3.4GetConfiguration



目的:主机请求目前设备的配置的值【配置号】



请求号:08h



数据源:设备



数据长度:配置值



值字段的内容:0



指针字段内容:0



数据字段内容:1



支持的状态:地址(返回0)、配置



出错动作:未指定





置请求中,MCU 必须返回当前的值。首先,MCU 将确是否已配置好。如器件尚未配置,将向主机返回一个0以告知主机设备尚未配置;果已配返回1



 



3.5 SetConfiguration



目的:引导设备使用主机所选择的配置



请求号:09h



数据源:无



数据长度:无



值字段的内容:低位字节指定一个配置值。若此值与该设备支持的一个配置值匹配,则设备选中该请求的配置。0值:要求设备进入地址状态并需要一个新的SetConfiguration请求来被配置。



指针字段内容:0



数据字段内容:0



支持的状态:地址、配置



出错动作:若值不等于0或一个设备支持的配置则设备返回一个STALL





对于设置置请求:MCU 将从立包中确定配值。果配值为0 MCU
必须存储区中的置标志并禁止端点;如果该值为1
MCU
需要将置标志置位,该标志一旦置位,MCU 还需要向主机发零数据包作为答阶段。



 



3.6GetInterface



目的:用于具有支持多个接口的配置之设备,主机请求当前的接口号。



请求号:0Ah



数据源:设备



数据长度:1

值字段内容:0



指针字段内容:接口



数据字段内容:当前接口号



支持状态:配置



出错动作:若接口不存在,设备返回STALL



得接口请求中,MCU 需要向主机发一个的数据包,作为评估板所持的接口。



 



3.7SetInterface



目的:用于具有支持多个接口的配置之设备,主机请求一个接口的配置。



请求号:0b



数据源:主机



数据长度:0

值字段内容:可替换的设置



指针字段内容:接口



数据字段内容:无



支持状态:配置



出错动作:若接口或设置不存在,设备返回STALL;若设备只支持一个默认接口,那他可能返回一个STALL。



对于评估板的设置接口请求,MCU 了向主机发一个零数据包,作为答阶段之外不需要事。



 



3.8SetFeature



目的:主机请求使能一个设备、接口或终端



请求号:03h



数据源:无



数据长度:无



值字段内容:要使能的特性



指针字段内容:0,接口号,端点号



数据字段内容:0



支持状态:默认情况下为未定义。当地址为0k:地址0,端点0;否则设备返回stall。对于配置则为0k



出错动作:若指定的接口或端点不存在,设备返回stall响应。



  



3.9GetFeature



 



3.10GetStatus



目的:主机请求设备、接口、端点的特性状态



请求号:00h



数据源:设备



数据长度:2



值字段内容:0



指针字段内容:设备:0;接口:接口号;端点:端点号



数据字段内容:设备、接口或端点状态



支持状态:默认情况下为未定义。当地址为0k:地址0,端点0;否则设备返回stall。对于配置则为0k



出错动作:若指定的接口或端点不存在,设备返回stall响应。



 



3.11 Synch_Frame



 



五 、USB描述符



5.1 概述



5.1.1 、端点数据传输方式   



#define  Control                      0x00



#define Isochronous(同步传输)       0x01 



#define Bulk(批量传输)              0x02



#define Interrput                     0x03



5.1.2 、描述符类型【bDescriportType




描述符类型



值(十六进制)



描述符



 


 


标准


 


 


 



01



      设备描述符



02



      配置描述符



03



     字符串描述符



04



      接口描述符



05



      终端描述符



 




21



HID描述符



29



集线器描述符



 


HID



22



报告描述符



23



物理描述符




 



【注】描述符前缀含义:b=B(8)w=字(16位);bm=位图;bcd=二进制编码的十进制;i=指针;id=标识符。



 



5.2 、标准描述符



标准描述符包括:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。



5.2.1 、设备描述符结构体



 




偏移量





大小





描述



0



bLength



1



数字



此描述表的字节数



1



bDecriptorType



1



常量



该描述符种类为设备



2



bcdUSBBCD:二进制编码的十进制)



2



BCD



此设备与描述符兼容的USB设备说明版本号(BCD 码)[1.0:0100h;1.1:0110h2.00200h]



4



bDeviceClass



1





设备类码【指定该设备是什么类型的】


如果此域的值为0则一个设置下每个接口指出它自己的类,并个接口各自独立工作。


如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了,这些接口集体的类定义。


如果此域设为FFH,则此设备的类由厂商定义。



5



bDeviceSubClass



1



子类



子类码


   这些码值的具体含义根据bDeviceClass 域来看。


   bDeviceClass 域为零,此域也须为零


bDeviceClass
域为FFH,此域的所有值保留。



6



bDevicePortocol



1



协议



协议码


   这些码的值视bDeviceClass
bDeviceSubClass
的值而定。


   如果设备支持设备基础上的类相关的协议,此码标志了设备类说明上的值。


    
如果此域的值为零,则此设备不在设备基础上支持设备类相关的协议。然而,它可能在接口基础上支持设备类相关的协议。


    如果此域的值为FFH,此设备使用厂商定义的协议。



7



bMaxPacketSize0



1



数字



端点0的最大包大小(仅8,16,32,64


为合法值)



8



idVendor



2



ID



厂商标志(由USB标准付值)



10



idProduct



2



ID



产品标志(由厂商付值)



   12



bcdDevice



        2



BCD



设备发行号(BCD 码)



   14



iManufacturer



        1



索引



描述厂商信息的字串的索引。



   15



iProduct



        1



索引



描述产品信息的字串的索引。



   16



iSerialNumber



1       



索引



描述设备序列号信息的字串的索引。



   17



bNumConfigurations



        1



数字



可能的设置数目【这个设备支持的配置】




bDeviceClass:对属于USB定义的类中的一个设备来说,它可以是这个类的名字。从1FEh之间的值是为USB定义的类而保留的。这些类,例如:集线器、打印机、通讯设备【见下表】。FFh表示这个类是给销售商指定的,并由销售商来定义。一些设备,例如HIDs,在接口描述符中指定这个类,因此对这些设备来说,这个设备描述符中这个字段是0.不是所有的设备都属于一个类的。



bDeviceClass:



#define
USB_DEVICE_CLASS_RESERVED                
0x00



#define
USB_DEVICE_CLASS_AUDIO                     0x01



#define
USB_DEVICE_CLASS_COMMUNICATIONS          
0x02



#define
USB_DEVICE_CLASS_HUMAN_INTERFACE
HID   0x03



#define
USB_DEVICE_CLASS_MONITOR                 
0x04



#define
USB_DEVICE_CLASS_PHYSICAL_INTERFACE      
0x05



#define
USB_DEVICE_CLASS_POWER                   
0x06



#define
USB_DEVICE_CLASS_PRINTER                 
0x07



#define
USB_DEVICE_CLASS_STORAGE                 
0x08



#define USB_DEVICE_CLASS_HUB                      0x09



#define USB_DEVICE_CLASS_VENDOR_SPECIFIC          0xFF



 



设备描述符包含的信息:



关于该描述符本身的信息:bLength
bDecriptorType



关于设备的信息:bcdUSBidVendoridProductbcdDeviceiManufactureriProduct



iSerialNumber【用于帮助主机确定载入那个驱动】



关于配置的信息:bNumConfigurationsbMaxPacketSize0



关于类的信息:
bDeviceClass
bDeviceSubClassbDevicePortocol



 



 



5.2.2 、配置描述符结构体【通常一个配置就足够了】



 




   偏移量



    



 大小



  



   描述



     
0



    
bLength



  
1



   数字



此描述符的字节数。



     
1



bDescriptorType



  
1



   常量



配置描述符类型



     
2



wTotalLength



  
2



   数字



此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述表)【设备返回的数据数】



     
4



bNumInterfaces



  
1



   数字



此配置所支持的接口个数(最小值为1



     
5



bCongfigurationValue



  
1



   数字



【该配置号】在SetConfiguration()和getConfiguration()请求中用作参数来选定(标示)此配置。0值的SetConfiguration()请求导致设备未进入配置状态。



     
6



iConfiguration



  
1



   索引



描述此配置的字串描述表索引(指针)



     
7



bmAttributes


如下图



  
1



位图(二进制位)



配置特性:


D7: 保留(设为一)


D6: 自给电源


D5: 远程唤醒


D4..D0:保留(设为一)


一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量,并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到。



     
8



MaxPower



  
1



   
mA



在此配置下需要的最大(总线)电流。以 2mA 为一个单位。




wTotalLength:当主机发出请求要得配置描述符时,所有相关接口与端节点的描述表都被返回,所以,wTotalLength表示配置、接口、端点描述符的总长度。



bmAttributes:




D7


1(保留)



D6


1:自供电


 


0:否(总线电源)



D5


1:支持远程唤醒


0:否



D4


0(保留)



D3


0(保留)



D2


0(保留)



D1


0(保留)



D0


0(保留)




注:远程唤醒使得一个挂起的USB设备能够告诉他的主机他需要通信,如果没有总线活动超过3msUSB设备进入挂起状态。



 



配置描述符包含的信息:



关于该描述符本身的信息:wTotalLength
bDescriptorTypebLength



关于配置的信息:bNumInterfacesbCongfigurationValueiConfiguration



关于电源的信息: bmAttributesMaxPower



 



 



5.2.3 、接口描述符结构体



 




偏移量





大小





说明



      
0



bLength



  
1



     
数字



此表的字节数



      
1



bDescriptorType



  
1



     
常量



接口描述表类



      
2



bInterfaceNumber



  
1



     
数字



【接口号】,当前配置支持的接口的数组索引(标识) [(从零开始)]



      
3



bAlternateSetting



  1



     
数字



可选设置的索引值(标识值)。用于有多个设置的接口,指定所选的设置,默认:0



      
4



bNumEndpoints



  1



     
数字



此接口用的端点数量(除了端点0),如果是零则说明此接口只用缺省控制管道。



      
5



bInterfaceClass



       
1



     



类值


  零值为将来的标准保留。


  如果此域的值设为FFH,则此接口类由厂商说明。


  所有其它的值由USB 说明保留。



      
6



bInterfaceSubClass



       
1



     
子类



子类码


   这些值的定义视bInterfaceClass域而定。


如果bInterfaceClass域的值为零则此域的值必须为零。


bInterfaceClass域不为FFH则所有值由USB 所保留。



      
7



bInterfaceProtocol



       
1



     
协议



协议码:bInterfaceClass bInterfaceSubClass
域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.


 



      
8



iInterface



       
1



      
索引



描述此接口的字串描述表的索引值。






接口描述符包含的信息:



关于该描述符本身的信息:bLengthbDescriptorType



关于接口的信息:bInterfaceNumber



bAlternateSetting



bNumEndpoints



bInterfaceClass



bInterfaceSubClass



bInterfaceProtocol



iInterface



 



 



5.2.4 、端点描述符结构体



 




偏移量





大小





说明



0



bLength



1



数字



此描述符的字节数



1



bDescriptorType



1



常量



端点描述符类



    
2



bEndpointAddress



   
1



        
端点



此描述符描述端点的地址和传输方向:


 D3-D0 : 端点号【低3,高16


 D6-D4 : 保留,为零


 D7     : 方向,如果控制端点则略。


      0:入端点


      1:出端点



    
3



bmAttributes



   
1



    
位图



此值描述的是在bConfigurationValue域所指的配置下端点的特性。


  D1-D0
:
传送类型


    
00=
控制传送


    
01=
同步传送


    
10=
批传送


    
11=
中断传送


D7-D2 :保留


 



    
4



wMaxPacketSize



   
2



    
数字



当前配置下此端点能够接收或发送的最大数据包的大小。


  对于同步传送此值用于为每幀的数据净负荷预留时间。而通道可能在实际运行时不需要预留的带宽。实际带宽可由设备通过一种非USB定义的机制汇报给主机.


  对于中断传送,批传送,控制传送.端点可能发送较小的数据包。并且在结束传送后既有可能间隙时间来重启,也有可能不需要这段时间。具体请参照第五章。


  



    
6



bInterval



   
1



    
数字



主机轮询数据传送端点的时间间隔。


   此域的值对于批传送的端点及控制传送的端点忽略。对于同步传送的端点此域必需为1(ms)。对于中断传送的端点此域值的范围x1255。(x ms




端点0不需要端点描述符,因为设备描述符中已经对其进行了说明。



描述符包含的信息:



关于该描述符本身的信息:bLengthbDescriptorType



关于该端点的信息:bEndpointAddressbmAttributeswMaxPacketSizebInterval



 



 



5.2.5 、字符串描述符



 




   偏移量



    



 大小



  



   描述



     
0



    
bLength



  
1



   数字



此描述符的字节数。



      1



bDescriptorType



   1



   常量



配置描述符类型



      2



bSTRINGwLANGID



 不确定



   字符串



一种或多种语言标识代码的Unicode字符串或一个数组




描述符包含的信息:



关于该描述符本身的信息:bLengthbDescriptorType



关于该字符串的信息:bSTRINGwLANGID



 



 



5.3 HID人机接口描述符



主机通过GET_DESCRIPTOR标准请求来获取HID接口的配置。HID的描述符包括5个标准USB描述符:设备、配置、接口、端点、字符串;3个类别特定描述符:HID、报表、实体。



一般,设备和配置描述符中没有定义HID的信息,而将HID的信息写在接口描述符中,所以,主机同过接口描述符来得知此设备是HID设备



HID固件中描述符被按照下面的顺序存储和被主机得知:配置、接口、HID、端点



 



HID类描述符




偏移量





大小





说明



0



bLength



1



数字



HID描述符长度



1



bDescriptorType



1



常量



该描述符类型【HID21h



     2



 


BcdHID



   


2



         数字



 


HID规范发布号


1.0:0100h;1.1:0110h2.00200h



     4



 


bCountryCode



   


1



     常量



 


识别本地硬件的国家代码【bcd码】



    5



 


bNumDescriptors



  


   1



     数字



 


支持的从属类的数量【从属于这个描述符的类描述符的数量】



     6



 


bDescriptorType



   


1



     数字



 


从属于这个HID描述符的一个描述符【报告或物理】的类型



7



 


WDcscriptorLength



 


2



 


数字



 


报告描述的总长度



9



Additioual
bDescriptorType
【可选】



 


2



 


数字



 


识别描述符类型的常数。对于多于一个描述符的设备是可选的



10



 


wDescriptorLength


【可选】



 


2



 


数字



描述符的总长度,对于多于一个描述符的设备是可选的,后面可以跟着其他的wDescriptorTypewDescriptorLength字段。




描述符包含的信息:



关于该描述符本身的信息:bLengthbDescriptorType



关于类的信息:BcdHID bCountryCodebNumDescriptorsbDescriptorTypeWDcscriptorLengthAdditioual bDescriptorType【可选】wDescriptorLength【可选】



 



 



 



 






PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户321549 2016-5-3 10:08

好好,非常的好啊

用户377235 2015-11-16 18:41

好,写的不错

用户1818640 2014-11-13 17:01

谢谢啦 正好用

sunxinjiang_422314417 2013-3-5 15:48

文章不错,就是不全那

用户1034237 2012-9-17 15:04

笔记2呢,期待中!谢谢作者!

用户213153 2009-8-19 10:42

好东西就要顶起来

用户1359843 2008-6-14 16:13

看看!

用户1193993 2008-6-13 16:30

是Microchip提供的资料呀,看了奥

用户384849 2008-5-4 02:23

飘过……
相关推荐阅读
用户115270 2008-10-20 20:52
ARM7控制液晶显示程序
//////////////////////////////////////////////////////////////////////////////////////  文件名 :LCDscre...
用户115270 2008-10-14 09:17
ARM7驱动步进电机的程序
/////////////////////////////////////////////////////////////////////////////////////文件名:motor.c////...
用户115270 2008-10-14 09:08
转载:C语言嵌入式系统编程修炼之道
C语言嵌入式系统编程修炼之道 C语言嵌入式系统编程修炼之道——背景篇... 1C语言嵌入式系统编程修炼之道——软件架构篇... 41.模块划分...42.多任务还是单任务...53.单任务程序典型架构...
用户115270 2008-05-04 10:23
大秦
凡我大秦大军铁骑能到达之处,皆必须予以征讨,毫不例外;凡大秦大军所到之处结为我大秦国土,其子民也皆为我大秦子民,也毫不例外。...
用户115270 2007-12-22 17:35
RFID读卡程序
RFID读卡程序关键字 :125k 、读卡程序 、RFID一、 原理1、硬件原理1.1、硬件工作原理说明 阅读器:基站 ;应答器:非接触ID卡。我们使用的MCU是at89s52(CS—Ⅲ板)。基站在上...
EE直播间
更多
我要评论
2
4
关闭 站长推荐上一条 /3 下一条