Files
2018-12-26 10:48:04 +00:00
..
2018-12-26 10:48:04 +00:00
2018-12-26 10:48:04 +00:00

USB

参考文章

USB枚举过程

图解USB枚举过程

USB2.0速度识别

描述符

设备-配置-接口-端点关系

  • 一般一个设备就一个配置,一个接口,如果设备是多功能符合设备,则有多个接口.端点一般都有好几个

传输模式

控制传输

  • 建立阶段
  • 数据阶段
  • 确认阶段

BULK传输

中断传输

同步传输

USB设备的6种状态

连接(Attached)

上电(Powered)

默认状态(Default)

地址(Address)

配置状态(Configured)

挂起状态(Suspend)

枚举

枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序

枚举过程

USB设备插入USB端口或给系统启动时设备上电

Hub监测它各个端口数据线上(D+/D-)的电压

  • 在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k的上拉电阻Rpu.当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V).hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口

Host了解连接的设备

Hub检测所插入的设备是全速还是低速设备

  • hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host

Hub复位设备

Host检测所连接的全速设备是否是支持高速模式

  • 主机不断检测设备是否有发送K信号,如果没有则为全速
  • 主机不断检测设备是否有发送K信号,如果有且HUB也是高速则HUB必须回复KJKJKJ,设备需要断开1.5K上拉电阻,连接D+/D-上的高速终端电阻,完成进入高速模式的过程

Hub建立设备和主机之间的信息通道

  • 设备和主机之间的通信通过控制传输,默认地址0,端点号0进行

主机发送Get_Descriptor请求获取默认管道的最大包长度

  • 主机此时发送的请求是默认地址0,端点0

主机给设备分配一个地址

主机获取设备的信息

  • 主机发送Get_Descriptor请求到新地址读取设备描述符

主机给设备挂载驱动(复合设备除外)

设备驱动选择一个配置

USB调试

使用USB monitor抓取USB数据