7.1.5 设备速率识别
本章节只是讲了识别要依赖的phy电路,没介绍识别过程。
7.1.5.1 低速/全速设备速率识别
host或hub的下行口的D+和D-有15k下拉,而device或hub如果是低速,会在D-上有1.5k上拉,如果是全速,会在D+上有1.5k上拉。
注:上拉都是上拉到3.3V,这个电压与VBUS关联,即VBUS没了,这个电压也要下电。
7.1.5.2 高速设备速率识别
高速设备初始化时是按照全速识别的,故在D+上会有1.5k上拉电阻,这个电阻是可以断开的(低速和全速的上拉基于功耗考虑应该也可以断开的吧?)。完整识别过程见后文。
7.1.6 输入参数(Input Characteristics)
章节标题和内容似乎不太对应?
7.1.6.1 低速/全速输入参数
跳过,先看高速
7.1.6.2 高速输入参数
对收发器有三个方面的要求:(与其说是对收发器,不如说是对包含连接器、PCB甚至线缆在内的整个系统)
1.直流负载特性:45ohm到地;输出电压特性,包含对高速差分输出“1”和“0”的要求以及对chirp J和chirp K的电平要求。
2.交流负载特性,全系统的阻抗不连续要求在一定范围内,主要靠差分TDR (Time Domain Reflectometer,时域反射器) 测量来评估。TDR上升时间设置为400ps,差分终端阻抗必须为80~100ohm,直通阻抗必须为70~110ohm(前者是从连接器后一点算即不含连接器,后者是从连接器前一点算即含连接器)。
3.集总电容:跳过
7.1.7 信号电平
7.1.7.1 低速/全速信号电平
本节开篇竟然用了source和target这两个跟USB有点违和的词来指代USB的host和device。
总线上会出现的状态:differential "1"、differential "0"、SE0、SE1、data J、data K、idle、resume、SOP、EOP、disconnect、connect、reset。
7.1.7.2 高速信号电平
总线上会出现的状态:high-speed differential "1"、high-speed differential "0"、high-speed J、high-speed K、chirp J、chirp K、high-speed squelch、high-speed idle、HSSOP、HSEOP、high-speed disconnect(仅对上游设备)。
7.1.7.3 Connect and Disconnect Signaling
host或hub的面向下游端口(为了方便描述,后面把这两种都称为host)在device断开后,D+D-上的15k下拉会把电平拉低(SE0状态),这个状态超过TDDIS时间,则指示“断开”。而当D+D-之一被拉到VIH之上持续时间超过TDCNN,则指示“连接”。
考虑到存在热插拔情况,因为设备插入后,需要一定的机制保证电源稳定后启动通信,所以协议又定义了power-on和connection事件的时序,总共规定了6个时间段(delay)。
由于高速模式下没有SE0,故上述描述仅适用于低速/全速?高速的断开检测依靠disconnection envelope detector,当对端设备断开时,host发出的信号会全部反射回来,造成一定相位差的幅值翻倍,这时候disconnection envelope detector会输出高电平来指示“断开”。为了确保此检测机制生效,高速 SOF 末端的 EOP 被延长为 40 位的连续字符串,没有任何转换。
7.1.7.4 Data Signaling
7.1.7.4.1 Low-/Full-Speed Signaling
由originating port(又一个指代host的词出现了)发出一个K来表示SOP,每次发SOP的时间误差不能超过±5ns,这个K码带来的切换时SYNC域的第1个bit。
2bit SE0,后面跟1bit J码,这3bit组成了EOP,之后D+D-被释放到高阻,然后靠着上拉的1.5k指示着idle态。
7.1.7.4.2 High-speed Signaling
source发出高速K来指示SOP,这个K是SYNC的第1个symbol。
高速EOP以EOP前的最后一个symbol的翻转到反信号开始。高速的EOP有一种特殊情况SOF,是40个不翻转的信号,前面有提到是为了给予足够的时间来给disconnection envelope detector通过检测反射波来判断“断开”。
7.1.7.5 Reset Signaling
软件请求,然后host发SE0便可执行复位,复位后,device处于“default”态,而hub转到“enable”态。
高速hub和device之间的复位协议:
1.hub确认接入的设备不是低速的。
2.hub发SE0。
3.device检测SE0。
a)从suspend态被复位,高速检测握手。
b)从非suspend的full speed态复位,高速检测握手。
c)从非suspend的high speed态复位,则要先进full speed,再进行高速检测握手。
4.高速device先切到全速,然后发一段时间chirp K。
5.hub检测K的时间,如果一直没检测到,就保持SE0。
6.检测到device的K后,hub交替发出KJKJ...
7.hub发完交替KJKJ后,继续发SE0直到复位结束,然后使能高速。
8.device根据接收到得KJ状态决定是进高速还是全速。
7.1.7.6 Suspending
device检测到上游处于idle态超过3秒后,便进入suspend,suspend下要保持D+D-上上拉电阻状态。
为了使device不进入suspend,上游设备会定期发SOF。
高速device的reset和suspend一开始是无法区分的,前期都是先切到全速模式,接下来如果检测到SE0则是复位,检测到全速的J,则进suspend。
suspend分全局suspend和选择性suspend,前者是当全部设备都不需要通信时,hub通过切到idle态完成,而后者则是要挂起的设备单独发命令(SetPortFeature(PORT_SUSPEND))给hub来实现单独总线的挂起。
7.1.7.7 恢复(Resume)
如果设备处于挂起状态,则当在其面向上游的端口上收到任何非空闲信号时,将恢复其操作,主机可以随时发送恢复信号。 此外,如果 USB 系统软件已启用其远程唤醒功能,则设备可以向系统发出信号以恢复运行。
7.1.8 数据编解码
USB采用NRZI编码,信号翻转表示传输“0”,不翻转表示传输“1”
7.1.9 bit stuffing
为了避免数据包存在长“1”导致波形长期不翻转导致时钟失锁,usb采用了位填充来规避,每出现6个“1”,后面便会插入1个“0”,接收端会把这个插入的“0”丢掉。
7.1.10 sync pattern
低速/全速的sync是3对KJ加2个K,这是经过NRZI编码的,实际上对应的data是0000 0001。
高速的sync是15对KJ加2个K,即32symbol。在重复数据包时,hub最多可以从 SYNC pattern的开头丢弃 4位。 但是,集线器不得破坏 SYNC字段的任何重复bit。 因此,经过5个hub重复后,一个数据包的 SYNC字段可能短至 12bit。
7.1.11 data signaling rate
高速:480M±0.05%
全速:12M±0.25%
低速:1.5M±1.5%
7.1.12 帧间隔
帧间隔:1.000 ms ±500 ns
微帧间隔:125.0 µs ±62.5 ns
帧间隔差:小于0.5个full speed的bit时间
微帧间隔差:小于4个high speed的bit时间
7.1.13 data source signaling(数据源生成和发送的信号时序)
7.1.13.1 数据源jitter
低速和全速各有consecutive和paired两个指标,高速需要在眼图里测量
7.1.13.2 EOP宽度
低速SE0宽度:1.25us~1.5us,间隔需小于670ns
全速SE0宽度:160ns~175ns,间隔需小于82ns
hub检测到EOP后要断开连接。
在高速信令中,有意生成位填充错误以指示 EOP。非SOF情况下,是8bit,data为0111 1111,经过NRZI编码后,根据EOP前1bit是0或1,可能会是8个K或者一个J加7个K。SOF情况下,8bit变成40bit,其它一样。
7.1.15 Receiver Data Jitter
主要规定了接收器对jitter的容忍度,协议一致性测试会做。
高速模式时,在jitter满足条件时,误码率要求为10^-12
7.1.16 线缆延迟
允许的最大总单向信号传播延迟为 30 ns。电缆延迟的分配为 26 ns。