USB学习笔记--基本介绍

来源:互联网 发布:java json 双引号 编辑:程序博客网 时间:2024/05/18 00:10
1.1 USB的拓扑结构
USB是一种主从结构的系统,主机叫做host,从机叫做device。
通常所说的主机具有一个或者多个USB主控制器(host controller)和根集线器(root hub),主控制器主要负责数据处理,而根集线器则提供一个连接主控制器与设备之间的接口和通路。
另外,还有一种特殊的USB设备——USB集线器(USB hub),它可以对原有的USB口进行数量上的扩展,可以获得更多的USB口。
注:集线器只能扩展出更多接口的USB口,而不能扩展出更多的带宽。带宽是共享一个USB主控制器的。
USB的数据交换只能发生在主机与设备之间,主机与主机,设备与设备之间不能直接互连和交换数据。所有的数据传输都由主机主动发起,而设备只是被动的负责应答。

1.2 USB的电气特征
标准的USB连接线使用4芯电缆:5V电源线(Vbus),差分数据线负(D-),差分数据线正(D+)及地(GND),在USB_OTG中,又增加了一种MINI USB接口,使用的是5条线,比标准USB线多了一条身份识别线,USB使用差分传输模式,D-与D+为两条数据线,在低速传输模式,采用电压传输,在高速模式下,采用的电流传输。
USB使用NRZI编码方式,当数据为0时,电平翻转,数据为1时,电平不翻转,为了防止长时间电平不变化,在发送数据前要经过位填充处理,即当遇到连续6个数据1时,就强制插入一个数据0,经过位填充后的数据,由串口引擎(SIE)将数据串行化和NRZI编码后,发送到USB差分数据线上。在接收端,刚好是一个相反的过程。接收端采样数据线,有SIE将数据并行化(反串行化),然后去掉填充位,恢复出原来的数据。
USB协议规定:设备在未配置之前,可以从Vbus上最多获取100mA的电流,在配置之后,最多可从Vbus上获取500mA的电流。
USB中Vbus引脚与GND引脚比D-与D+引脚长,这是为支持热插拔而专门设计的,当USB插入时,先接通Vbus和GND,而后接通D-和D+,拔出时,先断开数据,再拔掉电源,避免有数据无电源。
USB规定,Vbus为红色,D-为白色,D+为绿色,GND为黑色。

1.3 USB插入检测机制
USB集线器的每个下游端口的D-和D+上,分别接了一个15kΩ的下拉电阻到地。当集线器的端口悬空(即没有设备插入)时,输入端就被这两个下拉电阻拉倒了低电平。而在USB设备端,在D-或者D+上接了一个1.5kΩ的上拉电阻,到3.3V电源。1.5kΩ的上拉电阻是接在D+还是D-上,由设备的速度来决定,对于全速设备和高速设备,上拉电阻是接在D+上的,而低速设备的上拉电阻则是接在D-上。即,速度快的,上拉电阻接正的,速度慢的,上拉电阻接负的。
当设备插入到集线器时,接了上拉电阻的那条数据线的电压由1.5kΩ的上拉电阻和15kΩ的下拉电阻分压决定,结果大概是3V左右。这对集线器的接收端来说,是个高电平信号,集线器检测到这个状态后,它就报告给USB主控制器(或通过它上一层的集线器报告给USB主控制器),这样就检测到设备的插入了。集线器根据检测到被拉高的数据线是D-还是D+来判断输入的是什么速度类型的设备。USB高速设备先是被识别为全速设备,然后通过集线器和设备两者的确认,再切换到高速模式。在高速模式下,是电流传输模式,这是要将D+上的上拉电阻断开。
1.4 USB的描述符
USB只是一个总线,只提供一个数据通路。一个USB设备只有一个设备描述符。
由端点构成一个接口(或接口是端点的集合),由接口又构成一个配置(或配置是接口的集合),再由配置构成一个设备(或设备是配置的集合)
1.5 USB设备枚举过程
USB主机在检测到USB设备插入后,就要对设备进行枚举了,枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而识别设备,进行通信。
USB的一种传输模式——控制传输。控制传输分为:建立过程,可选的数据过程以及状态过程。
建立过程是由USB主机发起的,它开始于一个SETUP令牌包,后面紧跟一个DATA0数据包,接着就时数据过程。如果是控制读传输,那么数据过程就是输入数据,如果是控制写过程,那么数据就是输出过程,如果在建立过程中,指定了数据长度为0,则没有数据过程,数据过程之后是状态过程。状态过程刚好与数据过程的数据传输方向相反;如果是控制读传输,则状态过程是一个输出数据包,如果是控制写过程,则状态是一个输入状态包。状态过程用来确认所有的数据是否都已经正确传输完成。
枚举的详细过程:
①USB主机检测到USB设备插入后,就会先对设备复位。USB设备在总线复位后其地址为0,这样主机就可以通过地址0和那些刚刚插入的设备通信。USB主机往地址为0的设备的端点0发送获取设备描述符的标准请求(这是一个控制传输的建立过程)。设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述符并且确认没有错误后,就会返回一个0长度的确认数据包(状态过程)给设备,从而进入到接下来的设备地址阶段。这里需要注意的是,第一次主机也是只发送一次数据输入请求,多余的数据将不会再次请求。因此,如果当设备端点0大小不足18字节时,就需要注意到这个问题。也就是说在第一次获取设备描述符时,只需要返回一次数据即可,不要再等主机继续获取剩余数据(如果还有),因为主机不会这么干,当主机成功获取到设备描述符的前8字节之后(USB协议规定端点0最大包长至少要8个字节),它就知道端点0的最大包长度了,因为端点0最大包长度刚好在设备描述符的第八字节处。
②主机对设备又一次复位。这时就进入到了设置地址阶段。USB主机往地址为0的设备的端点0发出一个设置地址的请求(控制传输的建立过程),新的设备地址包含在建立过程的数据包中,具体的地址由USB主机负责管理,主机分配一个唯一的地址给刚接入的设备。USB设备在接收到这个建立过程之后,就直接进入到状态过程,因为这个控制传输没有数据过程。设备等待主机请求状态返回(一个输入令牌包),收到输入令牌宝后,设备就返回0长度的状态数据包。如果主机确认该状态包已经正确收到,就会发送应答包ACK给设备,设备在收到这个ACK之后,就要启用新的地址了,这样设备就分配到了一个唯一的设备地址,以后主机就通过它来访问设备。
③主机再次获取设置描述符。这次跟第一次有点不一样,首先是主机不再使用地址0来访问设备,而是新的设备地址;另外,这次需要获取全部的18字节的设备描述符。如果你的端点0最大包长小于18字节,那就会有多次请求数据输入(即发送多个IN令牌包)。
④主机获取配置描述符。配置描述符总共为9字节。主机在获取到配置描述符后,根据配置描述符中所描述的配置集合总长度,获取配置集合。获取配置描述符和获取配置描述符集合的请求差不多,只是指定的长度不一样。
1.6 USB的包结构及传输过程
USB是串行总线,使用的是LSB在前的方式,即先出来的是最低位数据,接下来的是次低位,最后是最高位(MSB)。一个包又被分成很多个域,而LSB、MSB就是以域位单位来划分的。
USB总线上传输数据是以包位基本单位的,一个包被分成不同的域。不同类型的包,被分成不一样的域。它们有共同的特点,都要以同步域开始,紧跟着一个包标识符PID,最终以包结束符EOP来结束这个包。
同步域是用来告诉USB的串行接口引擎数据要开始传输了,同步域还可以用来同步主机端与设备端的数据时钟,因为同步域是以一串0开始的,而0在USB总线上就被编译为电平翻转,结果就是每个数据位都发生电平变化,这让串行接口引擎很容易就能恢复出采样时钟信号;对于全速设备和低速设备同步域使用的是0000001,对于高速设备,同步域使用的是31个0,后面跟着1个1。
包结束符EOP,对于高速设备和全速/低速设备也是不一样的。全速/低速设备的EOP是一个大约为2个数据位宽度的单端0(SE0)信号,SE0的意思就是,D+和D-同时都保持为低电平。由于USB使用的是差分数据线,通常都是一高一低的,而SE0不同,是一种都为低的特殊的状态。SE0用来表示一些特殊的意义,例如包结束、复位信号等。前面提到USB集线器对USB设备进行复位的操作,就是通过将总线设置为SE0状态大约10mS来实现的。对于高速设备的EOP,使用故意的位填充错误来表示,是由CRC校验来判断。如果CRC校验正确,则说明这个位填充错误时EOP;否则,说明传输错误。
包标识符PID是用来表示一个包的类型的,它总共有8位,其中USB协议使用的只有4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。USB协议规定了4类包:令牌包(token packet,PID1~0为01)、数据包(data packet,PID1~0为11)、握手包(handshake packet,PID1~0为10)、特殊包(special packet,PID1~0为00)。
令牌包用来启动一次USB传输。因为USB是主从结构的拓扑结构,所有数据都是由主机发起的,设备只能被动地接听数据。令牌包有4种,分别为输出(OUT),输入(IN),建立(SETUP)和帧起始(SOF)
输出包用来通知设备将要输出一个数据包。
输入包用来通知设备返回一个数据包。
数据包是用来传输数据的,具有相同的结构:一个同步域,后面跟整数字节的数据,然后是CRC16检验,最后是包结束符EOF
握手包是用来表示一个传输是否被对方确认。握手包只有同步域,PDI和EOP。
特殊包是一些特殊场合使用的包。
1.7 USB的四种传输类型
①USB事务,事务通常由两个或者三个包组成:令牌包、数据包和握手包。
②批量传输,批量传输使用批量事务传输数据。一次批量事务有三个阶段:令牌包阶段,数据包阶段和握手包阶段。批量传输通常用在数据量大,对数据的实时性要求不高的场合,例如,USB打印机,扫描仪、大容量存储设备。
③中断传输,中断传输是一种保证查询频率的传输。中断端点在端点描述符中要求报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。主要用于键盘,鼠标等设备。
④等时传输,等时传输(同步传输)用在数据量大、对实时性要求高的场合,例如,音频,视频设备。
⑤控制传输,控制传输分为三个过程:第一个过程是建立过程,第二个过程是可选的数据过程,第三个过程是状态过程。
对于控制传输的端点,低速模式最大包长固定为8个字节,高速模式最大包长固定为64字节,而全速模式可在8,16,32,64字节中选择
对于等时传输的端点,全速模式最大包长上限为1023字节,高速模式最大包长上限为1024字节,低速模式不支持等时传输
对于中断传输的端点,低速模式最大包长上限为8字节,全速模式最大包长上限为64字节,高速模式最大包长上限为1024字节
对于批量传输的端点,高速模式固定为512字节,全速模式最大包长可在8,16,32,64字节中选择,低速模式不支持批量传输。
原创粉丝点击