之前在一家公司工作的时候,因为经常跟USB设备打交道,所以看了一些USB2.0的知识,后面入职新公司,需要做分享,就把这部分整理了一下。USB2.0协议已经很成熟了,相关的知识和设备也很多,但要研究透彻就需要时间加经验了,因为很多的知识不遇到你是不会想着去查协议的。
1.USB系统
USB3.0 | USB2.0 | |||
速度模式 | Super Speed | 高速 | 全速 | 低速 |
最大传输速率 | 5.0Gbps | 480Mbps | 12Mbps | 1.5Mbps |
线缆最大长度 | NA | 5米 | ||
编码方式 | 8B/10B | NRZI | ||
传输模式 | 全双工 | 半双工 | ||
线缆信号个数 | 6个(TX+、TX-、RX+、RX-、D+、D-) | 2个(D+、D-) |
USB3.0 | USB2.0 | |||
速度模式 | Super Speed | 高速 | 全速 | 低速 |
最大传输速率 | 5.0Gbps | 480Mbps | 12Mbps | 1.5Mbps |
线缆最大长度 | NA | 5米 | ||
编码方式 | 8B/10B | NRZI | ||
传输模式 | 全双工 | 半双工 | ||
线缆信号个数 | 6个(TX+、TX-、RX+、RX-、D+、D-) | 2个(D+、D-) |
3.USB握手过程
如何判断设备特性?
总体枚举过程:插入设备—检查D+/D—发送JK序列—枚举成功
实际枚举过程:
•HUB会把有设备插入的事件给到HOST,接着HOST给HUB发送get port state指令,要求获取更多信息
•4.确认是设备是FS/LS
•HUB通过检测D±的电压来确认,HS是以FS的硬件状态来响应的
•5.HUB复位设备
•HOST向HUB发送set port feature请求,此时D±将被拉低,设备处于复位状态
•6.HOST获悉设备是否支持HS
•JK序列:J序列在D+,K序列在D-
•复位期间,支持HS的设备会发送K序列,HUB响应J序列,此时可以观察到KJKJ样式,同时设备移除上拉电阻,进入HS
•没有KJ序列,设备进入FS
•7.HOST与设备之间建立通信通道
•HOST发送get port state让设备移除复位状态,进入default status,
•此时设备以地址00H与主机通信
•如果一次不够( get port state ),就多来几次
•8.HOST发送get descriptor了解default pipe的最大信息包尺寸
•在host和设备的endpoint之间的连接叫作pipe,而设备的endpoint叫做default pipe
•9.HOST给设备指定一个地址
•HOST发送set address给设备一个唯一地址进行通信,设备进入address status
•10.HOST了解设备信息
•HOST发送get descriptor获取设备信息,信息包括PID、VID这些
•除了基本信息,HOST还会请求其他额外信息,如果设备不支持这个请求,就返回STALL信号
•STALL:USB设备在接收到HOST发送的无法支持的请求时,会发送这个信号回去
•11.HOST加载驱动程序,驱动程序选择合适配置给到设备,设备进入配置状态,开始工作
•例如Windows会使用inf文件来确认最佳配置
4.USB传输模式
中断传输:响应中断信号,不需要高速率,例如键盘鼠标,只需要低速设备就行;
实时传输:对实时性要求高的,例如音频;
bulk传输:大量、完整的数据传输,例如视频、压缩包,大家可以观察一下,如果你传输一个安装包,速度会很快,但如果传输大量txt文件,速度会变慢;
控制传输:起控制作用。
目前就先分享这些啦。