1 USB 2.0硬件链接和接口
USB2.0使用4线传输信号和电源,在每个点对点的传输过程中,信号通过D+、D-两根线进行传输。
USB系统中设备和主机的链接方式采用的是星形连接,需要注意协议规定最大支持5级HUB (HUB 会增加delay, 还会影响设备接收到SYNC长度)。如下图。
2 USB 2.0 PHY的工作模式
USB 2.0的应用广泛,设备按照速率可分为如下几类
Low-Speed mode(LS-MODE)低速传输速率1.5Mb/s
Full-Speed mode(FS-MODE)全速传输速率12Mb/s
High-Speed mode(HS-MODE)高速传输速率480Mb/s
2.1 LS/FS-MODE
LS/FS模式下,使用的是3.3V的IO,D+、D-单端摆幅0-3.3V。发射端的输出阻抗28~44Ω,如果LS/FS复用HS-driver,输出阻抗范围40.5~49.5Ω。这里说一下支持HS-MODE的PHY不一定需要支持LS-MODE但是一定需要支持FS-MODE。
在LS/FS 模式下,HOST始终有15K 下拉电阻。DEVICE在LS模式下会在DM上拉1.5K电阻。DEVICE在FS模式下会在DP上拉1.5K电阻。
2.2 HS-MODE
在支持HS-MODE的设备中,需要进行握手确认,都支持HS-MODE,才能进入HS-MODE的工作模式。握手总是紧随RESET 之后。
驱动的差分输出阻抗为90Ω±15%,单端输出阻抗45Ω±15%,单端信号摆幅400mV±10%。
HS模式下,发射端的单端输出阻抗是45Ω , 接收端同样也有匹配的终端电阻45欧姆 。因此在DP或者DM上看到的等效DC阻抗为22.5Ω。见下图。
2.3 CHIRP-MODE
首先明确一个概念,LS/FS模式没有CHIRP-MODE这个概念,LS/FS模式的进入是通过判断DM、DP线上高电平,从而判断进入不同的模式。CHIRP模式的作用是帮助支持HS-MODE的HOST和DEVICE进行协商进入HS-MODE。
CHIRP-MODE仅仅在RESET之后的握手动作中使用,CHIRP-MODE时,只打开自身的45Ω对地电阻,因此CHIRP-MODE的信号幅度是HS-MODE信号幅度的两倍。
2.4 NRZI编码和“J”“K”状态
USB采用NRZI的编码方式传送数据。在NRZI 编码中,当遇到“0” 时,信号电平发生翻转,遇到“1” 信号电平保持上一个状态不变。如下图所示
USB协议规定连续 6 个 '1' 之后自动插入一个 '0'(Bit Stuffing)(填充位,接收端会丢弃这个填充的0)。这个填充的 '0' 会在NRZI中产生一次翻转,强制接收端可以重新同步时钟。
USB 协议规定通过判断总线上D+\D-两条线上相对地的实际电平来判断状态“J”和“K”。
在LS-MODE下,D-电平> D+电平定义为状态“J”,D+电平> D-电平定义为状态“K”。
在FS-MODE下,D+电平> D-电平定义为状态“J”,D-电平> D+电平定义为状态“K”。
在HS-MODE下,D+电平> D-电平定义为状态“J”,D-电平> D+电平定义为状态“K”。
通过上面可以发现LS-MODE和FS-MODE的“J” “K”状态是相反的。为什么会这样呢?
因为LS/FS-MODE的“J”状态定义为总线空闲时的状态。
LS空闲时:D-被上拉到高电平 → 所以“D-高、D+低”被定义为“J”。
FS空闲时:D+被上拉到高电平 → 所以“D+高、D-低”被定义为“J”。
2.5 SE0信号&同步信号&EOP
USB协议中定义当D+、D-都是“0”电平时为SE0。LS/FS模式的空闲状态是“J“,HS模式的空闲状态是SE0。
在FS/LS-MODE中,用3对KJ+1对K来表示同步头(SYNC),共计8个bit,用2个bit宽度的SE0+1个bit“J”来表示EOP。对于大于2.5us的SE0被定义为RESET。对于FS模式,SE0的宽度为160ns-175ns之间, 对于LS 模式,SE0的宽度为1.25us-1.5us之间。SE0的时间长度必须小于2个LS模式的bit (<2.5us),否则会被认为是RESET。
在HS-MODE中,用15对KJ+1对K来表示同步头(SYNC),共计32bit。需要注意的是,USB 最大支持5级HUB 链接,每经过一级HUB ,是允许HUB 丢掉4个bit的SYNC头,也就是两对KJ。因此实际上最差情况下,接收端收到的最短SYNC头是5对JK加上一对K, 也就是12个bit。
HS模式的EOP和LS/FS模式不一样,它是用“011111111”表示,上文有说过NRZI的编码是“0”发生信号翻转,“1”不发生信号翻转。所以EOP的电平,取决于EOP之前数据最后一位是“J”还是“K” 如果前一次是“J”,那么EOP=KKKKKKKK. 如果前一次是“K”,那么EOP=JJJJJJJJ。
协议中规定EOP不需要大于连续6个“1”之间插入0,所以位填充错误也会被认为是EOP。如下图所示:
对于HS-MODE来说,小于3ms的SE0为IDLE 状态。大于3ms的SE0, 如果仍然为强驱动(45Ω到地),那么为RESET;大于3ms的SE0,如果为弱驱动(15K到地),那么为Suspend。
2.6 各种模式电阻的情况
如下是模式识别时,Host和Device电阻控制总结
3 HS-MODE典型接口时序
3.1 HS Suspend 检测
DEVICE在HS-MODE情况下检测到超过3ms的SE0状态后,Device马上切成FS模式,也就是撤销接收端45Ω到地电阻,并在DP上挂上1.5K上拉电阻。此时HOST发出的是弱驱动SE0,即去掉45Ω到地电阻,改成15K下拉电阻,过程如下图。
3.2 RESET检测
在LS/FS-MODE,DEVICE检测到>2.5us的SE0,就会进入RESET。如下图。
在HS-MODE情况下DEVICE检测到超过3ms 的SE0状态后,将马上切成FS模式,也就是撤销接收端45Ω到地电阻,并在DP上挂上1.5K上拉电阻。此时HOST发出的是强驱动SE0,即HOST对地45Ω还在。(本质就是判断SE0大于3ms以后是否为强驱动):
3.3 HS-MODE握手检测
支持HS-MODE的DEVICE,在下面三种情况下会进入握手过程。
1)DEVICE处在LS/FS-MODE,检测到超过2.5us的SE0,DEVICE进入RESET,开始握手过程。
2)DEVICE已经处在Suspend的模式下后(FS-J),一旦检测到SE0, 说明线上是强驱动的SE0,DEVICE进入RESET ,开始握手过程。
3)DEVICE处于HS-MODE,并且检测到大于3ms的SE0. 这个时候有可能是HOST发起的RESET进入握手,也有可能是HOST发起的Suspend 。在这种情况下DEVICE通过切到FS-MODE,判断线上的SE0是否为强驱动。如果发现是强驱动,说明这是HOST发起的RESET,开始握手过程。
上面三种情况,可以看出握手都是以线上有强驱动的SE0开始的,都是以DEVICE进入RESET为标准。
3.4 HOST或者DEVICE握手的过程
1)DEVICE(支持HS-MODE的DEVICE)在检测到HOST发起的RESET之后,会切换成CHIRP-MODE(发射或者接收都使用HS的driver 和receiver, 但是使用FS terminal电阻)。
2)DEVICE发出至少1ms长度的Chirp K。并等待HOST的回应。
3)如果HOST支持HS-MODE,在2)完成后,HOST将发出至少三对Chirp KJ对。
4)DEVICE在检测到HOST发出的三对Chirp KJ对后,进入HS-MODE,45Ω对地电阻打开。等待正常的HS 通信数据。
上面这种情况,是HOST和DEVICE都支持HS-MODE 情况下的正常回应。如果DEVICE 不支持HS-MODE,上面过程不会进入2), DEVICE在检测的RESET之后不会发出Chirp-K。如果HOST不支持HS-MODE,那么不会进入到3)。HOST不会回应DEVICE发出的Chirp-K。所以下面只给出两种情况的时序图。HS-HOST+ HS-DEVICE和FS-HOST+HS-DEVICE。
3.4.1 HS-HOST/HS-DEVICE 握手
3.4.2 FS-HOST /HS-DEVICE 握手
3.5 工作状态恢复
DEVICE在进入Suspend mode之后,可以发起恢复请求,HOST也可以主动发起恢复。下面介绍DEVICE在HS-MODE进入Suspend之后的恢复时序。
DEVICE发起的恢复:DEVICE发出一个FS-K,等待HOST 检测后并维持这个FS-K后,随后HOST会发出FS的SE0 RESET,DEVICE在检测到该SE0后,恢复HS-MODE。
HOST发起的恢复:HOST发出一个FS-K,DEVICE 在检测到有FS-J 到FS-K 的变化时,就会上电,撤销Suspend。准备等待SE0,在检测到1.33us SE0之后,恢复HS-MODE。
3.6 HS-DEVICE 的插入
DEVICE在检测的VBUS插入后,默认进入的是FS-MODE。HOST在检测到线上面由于DEVICE挂起的FS-J 后会发出FS的SE0的RESET。然后进入前面所述的握手操作。如下图所示。