[国嵌攻略][162][USB协议分析]
USB设备逻辑结构
在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点。
USB设备描述符
当我们把USB设备(例如USB鼠标)插到我们的PC时,主机能够自动识别出我们的USB设备类型。在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型、生产厂商等信息。这些固定格式的数据,我们称之为USB描述符。标准设备有5种USB描述符:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。这些描述符在USB设备内部的寄存器中,供主机来调取查看。
一个USB设备只有一个设备描述符,设备描述符的长度为18个字节。
1.重要的设备描述符有:
bDeviceClass:类型代码
bDeviceSubClass:子类型代码
idVendor:供应商ID
idProduct:产品ID
通过类型代码和子类型代码就可以确定USB设备的类型。
2.重要的配置描述符有:
bNumInterfaces:配置所支持的接口数,指该配置设备配置的接口数量,也表示该配置下接口描述符的数量。
USB数据通讯
一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。
1.传输数据通信
USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。
2.事务数据通讯
一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。
3.包数据通讯
一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。
4.域数据通讯
一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。
USB设备枚举
USB设备在正常工作以前,第一件要做的事就是枚举。枚举是让主机认得这个USB设备,并且为该设备准备资源,建立好主机和设备之间的数据传递通道。
1.获取设备描述符
2.复位
3.设置地址
4.再次获取设备描述符
5.获取配置描述符
6.获取接口、端点描述符
7.获取字符串描述符
8.选择设备配置