USB相关基础知识摘抄:(参考:圈圈教你玩USB)
USB
是一种非常常用的通信串行总线,具有速度快,功耗低,能自动检测,支持即插即用的特点在现代生活中拥有很高的使用率。
速度
USB1.1支持1.5Mb/s的低速和12Mb/s的全速模式。USB2.0规定,高速模式下可达480Mbps,全速模式下可达12Mbps,而3.0的传输带宽有5Gbps。
在低速和全速模式中,采用电压传输模式,高速模式下,采用电流传输。
结构
USB是一种主从结构的系统,主机叫Host,从机叫Device。一个主机有多个USB主控制器,负责数据的处理,和多个集线器,用作连接。USB OTG中可以使一个设备在主机或者从机的模式中切换,实现设备和设备的连接。
USB集线器的每个下游端口的D+,D-上分别接了一个15k的下拉电阻到地。USB设备在D+或者D-上接了一个1.5k的上拉电阻。低速设备上拉接在D-上,全速或高速设备上拉接在D+上。
底层:
USB使用的NRZI编码,当数据为0,电平翻转,数据为1电平不翻转,为防止长时间电平不变化(不利于时钟信号的提取),在发送数据前要经过
位填充处理:当遇到6个连续的数据1时,强行插入0。
4个线:。。。。。。
USB描述符及其关系
描述符用来获得设备的功能及行为,中间记录了设备的类型,厂商的ID和产品的ID,端点情况,版本号等信息。
USB1.1协议定义的标注你描述符有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符。
有一个USB设备只有一个设备描述符,它决定了该设备有多少个配置,每个配置都有一个配置描述符。每个配置描述符又决定了有多少个接口,每个接口对应一个接口下描述符。。——端描述符。端描述符定义了端点的大小和类型等。
1>.设备描述符主要记录信息有:USB协议设备,设备类型,端点0的最大包大小,厂商ID(VID),产品ID(PID),设备版本号,厂商字符串索引,产品字符串索引,设备序列号索引,可能的配置数等。
2>.配置描述符主要记录的信息有:配置所包含的接口数,配置的编号,供电方式,是否支持远程唤醒,电流需求量等。
3>.接口描述符主要记录的信息有:接口的编号,接口的端点数,接口所使用的类,子类,协议等。
4>.端点描述符主要记录的信息有:端点号及方向,端点的传输类型,最大包长度,查询时间间隔等。
5>.字符串描述符主要是提供一些方便人们阅读的信息,不是必须的。
注:一个设备可以有多个配置,但同一时刻只能有一个配置有效,这个配置又可以有多个接口,当我们需要不同的功能时,选择不同的配置即可。可以参照教室的例子来理解这个。
USB的传输模式
控制传输是保证USB数据正确的。在设备枚举过程中都是用控制传输。控制传输分为三个过程:建立过程,可选数据过程,状态过程。
建立过程是由USB主机发起的,起始一个SETUP令牌包,后面紧跟一个DATA0数据包,接着就是数据过程。在建立过程中,指定了数据长度为0,则没有数据过程。数据过程过后就是状态过程,状态过程用来确认所有数据是否已经正确完成传输。
枚举的详细过程:
1.主机首先是对设备复位;2.主机发送获取设备描述符的标准请求;3.主机确认无误,就会返回一个0长度的确认数据包。 接下来就是设置地址阶段。3.主机再次获取设备描述和配置描述符。
USB包结构及传输过程
USB数据在发到总线上前,要先经过为填充,在经过NRZI编码。
USB总线上传输单位是以包围基本单位。一个包被分成不同的域。根据不同类型的包,所包含的域也是不一样的。但不同的包有个共同的特点,就是以同步域开始,紧接着一个包标识PID,最终以包结束符EOP来结束这个包。
同步与是用来告诉USB的串行接口引擎数据要开始传输,除此之外,同步与还可以用作同步主机端和设备的数据时钟。
包结束符EOP,对于高速设备和全速/低速设备也是不一样的,通过D+,D-电平来控制。
包描述符PID是用标识一个包的类型。一共有8位,PID0-PID3使用USB协议,PID4-PID7是PID0-PID3的取反,用来校验PID。
USB规定了4类包:令牌包,数据包,握手包,特殊包。具体对应功能如下:
令牌包:
令牌包用来启动一次USB传输。数据传输总是由主机发起的,设备只能被动的接听数据。这就需要主机发送一个令牌来通知哪个设备进行响应。
- 输出令牌包用来通知设备即将输出一个数据包
- 输入令牌包用来通知设备返回一个数据包
- 建立令牌包只能用在控制传输中,他跟输出令牌包的作用一样。不同点。。。
- 帧其实包在每帧的开始发送,以广播形式发送。
数据包
用来传输数据。有几种数据包:DATA0,DATA1,DATA2,MDATA包等,主要是在握手包出错时纠错。主机和设备都会维护自己的一个数据包类型切换机制:当数据包成功发送或接收时,数据包类型切换;当检测到对方所用的数据包类型不对时,USB系统认为发生了一个错误,并试图从错误中恢复。
数据包结构如下:
握手包
握手包用来表示传输是否被对方确认。
特殊包
特殊场合使用的包。
处理数据包:
四种传输类型:
USB事务由不同的包组织而成。
事务通常由两个或者三个包组成:令牌包,数据包和握手包。
- 令牌包用来启动一个事务,由主机发送。
- 数据包传输数据, 数据传输方向由令牌包决定。
- 握手包用来确认、
USB规定了4种传输类型:批量传输,同步传输,中断传输,控制传输。其中,批量传输,同步传输,中断传输每次传输一次数据都是一个事务。控制传输包括三个过程,建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。
批量传输:
批量传输使用批量事务传输数据。一次批量事务有三个阶段:令牌包阶段,数据包阶段和握手包阶段。批量传输分为批量读,批量写。批量传输通常用在
数据量大,对数据要求
实时性不高的场合。
批量输出事务:主机发出一个OUT令牌包,这个令牌包中包含了设备地址,端点号。然后在发送一个数据包,如果地址和端点匹配就会收下这个数据包。然后主机切换到接收模式,等待设备返回握手包。
批量输入事务:主机发送一个IN令牌包,这个令牌包中包含了设备地址,端点号。然后切换到接收数据状态,等待设备返回数据。设备返回数据或者握手包。主机接收到数据正确之后会用ACK来握手包应答设备。
中断传输
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔。主机会保证在小于这个时间间隔的范围内安排一次传输。
这里和硬件上的中断不一样,它不是由设备主动地发出一个中断请求,而是由主机保证在不大于某个时间间隔内安排一次传输。中断传输通常用在
数据量不大,但
对时间要求严格的设备中。例如HID人机接口设备等。中断传输也可以用来不断地检测某个状态,当条件满足后再使用批量传输来传送大量数据??
中断传输和批量传输的结构基本是一致的。
同步传输
同步传输用在
数据量大,对实时性要求高的场合。比如音频设备,视频设备等,这些对数据延迟很敏感。但这种方式不能保证数据100%正确。当数据错误时,不进行重传,因此也没有数据应答包。
控制传输
在设备枚举过程就是用控制传输。三个过程:建立过程,可选数据过程,状态过程。
端点类型和传输类型
传输类型与端点支持的最大包长