USB接口 USB作为目前功能最为强大的接口,除了支持很多外设,如键盘、鼠标等。还可以进行多种总线的转换如USB转网口、USB转CAN等,这篇文章我们就来学习一下USB接口的相关知识。 USB不同USB版本的设备,数据传输速度也会有差别,两个设备之间是如何区分高速、全速和低速的USB识别呢? 为了方便大家理解,咱们只讲逻辑给结果说事实,一些具体数值的计算小编已经贴心的帮大家省去了。 首先,全速和低速很好区分:因为在设备端有一个 1.5K 的上拉电阻,当设备插入控制器或上电时,有上拉电阻的那根数据线就会被拉高,控制器根据 D+/D-上的电平判断所挂载的是全速设备还是低速设备。全速设备D+端有1.5K上拉电阻,低速设备D-端有1.5K上拉电阻。 接下来看一下如何区分高速设备和全速设备:高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。USB2.0的控制器会把它当作一个全速设备来看待,之后控制器和设备端会通过一系列握手信号互相确认双方的身份。在这里对速度的检测是双向的,比如高速的控制器需要检测所挂上来的设备是高速、全速还是低速,高速的设备需要检测所连上的控制器是 USB2.0 的还是1.0的,如果是前者,就进行一系列动作切到高速模式工作,如果是后者,就以全速模式工作。 控制器检测到有设备插入/上电时,向主机通报,主机发送一个请求让控制器复位新插入的设备。设备复位操作是控制器通过驱动数据线到复位状态SE0(即 D+和 D-全为低电平)。 高速设备看到复位信号后,通过内部的电流源向D-线持续灌一个小电流,加上内部的等效阻抗近似于45R,所以在控制端可以看到一个约800mV的电压,这就是 Chirp K 信号(由设备发起)。 在控制器端,虽然下达了复位信号,并一直驱动着SE0,但控制器端的USB2.0 的高速接收器一直在检测设备端发起的ChirpK信号,如果没有看到ChirpK信号,就继续复位操作,直到复位结束,之后就在全速模式下操作。如果只是一个全速的控制器,不支持高速操作,那么该控制器不理会设备端发送的ChirpK信号,之后设备也不会切换到高速模式。 设备端发送的 Chirp K 信号结束后,控制器必须开始回复一连串的 KJKJKJ….序列,向设备表明这是一个USB2.0的控制器。KJ序列停止后再结束复位操作。控制器发送Chirp KJ 序列的方式和设备一样,通过电流源向差分数据线交替灌一个小电流来实现。 再回到设备端来,设备检测到控制器发出的Chirp信号后,它必须在 500us 内切换到高速模式。控制器发送出来的 Chirp KJ 序列幅值降到了原先的一半,为400mV。这是因为设备端会挂载新的终端电阻,此时等效阻抗为22.5R,正好是之前阻抗的一半。以后高速操作的信号幅值就是400mV而不像全速/低速那样的800mV。 至此,高速设备与 USB2.0控制器握手完毕,进行后续的480Mbps 高速信号通信,这就是咱们常说的USB握手协议,怎么样,是不是很有趣呢?
|