下面测试了iPhone和U盘插入/拔出时D+和D-上的波形。黄色为D+,绿色为D-。
iPhone插入的波形iPhone插入—整体波形
d58a439e23269155d496d2e8b3346924.png

  • 1 处的波形只有iPhone插入连接CarPlay或者是Android手机插入连接Carlife才会有,还不知道这里的波形是怎么产生的。

  • 2 处的波形是枚举阶段速度的判定,即握手检测阶段。

  • 3 处的波形与2 处的类似,像是Host再做一次reset。

  • 4 处的波形是连接CarPlay做RoleSwitch,车机变成USB Device,iPhone变成USB Host,iPhone枚举车机的波形,等同于2的阶段,也是握手检测阶段。

  • 4 处之后是正常的通信阶段,差不多是400mv。


iPhone插入—1 处的波形
2d58102771db5c362df18c6bf4b0b050.png
这是1处波形放大之后的图,红色左边的都是属于1处的波形。总共包含三部分:
(a):D+和D-同时拉高为600mv左右;
(b):D+和D-同时拉低到0V,之后D-拉高到600mv;
(c):D-拉低到0V,直到第2处波形。
从USB协议分析仪(Total Phase Data)截取到的数据对应如下:
4b6eaf77b23a4f793e68e22c38fa1f13.png
从抓取到的数据来看有个Chirp K信号,说明(b)中的D-为高肯定是对应于这里的Chirp K信号。

iPhone插入—2 处的波形
684cd95ea8d7ce087c533a301fc690e3.png
与之对应的USB协议分析如下:
38ea02655ef597fcf04ceb460a4cd948.png
下面来仔细分析2 处波形的具体细节。
(a):这一个波形对应于USB协议的低速/全速设备的判定阶段,通过D+和D-上面的电压进行判定。iPhone属于高速的USB设备,因此D+上会有一个1.5k的上拉电阻,因此可以看到D+上有一个3.3V左右的电压。在(a)和 (b) 之间有一小段的低电平,这就是SE0状态,Host发送设备复位操作,设备复位操作是hub通过驱动数据线到复位状态SE0(Single-ended 0,即D+和D-全为低电平),并持续至少10ms。
相关的USB 协议内容在第7章规定:
21333b4d3b14e0df43527d9a4710d25b.png
92877d152f4cf2899398fbe4b3f87374.png
(b):D+为0v,D-为800mv左右,此时是Chirp K状态,由USB设备产生,只有高速设备才会去产生一个Chirp K信号。USB设备看到Host发送的复位操作,通过内部的电流源向D-线持续灌大小为17.78mA电流。因此我们可以看到D-为800mv左右。
(c):USB Host上的hub检测到高速USB设备产生Chirp K信号,hub会开始回复一连串的KJKJKJ……序列,如图中的c和d的波形。设备检测到6个hub发出的Chirp 信号后(3对KJ序列,此时的KJ序列还维持在800mv左右),它必须在500us内切换到高速模式。
(d):USB设备切换至高速模式,hub发送出来的KJKJKJ……序列幅值降到了原先的一半,400mv。
(b) ~ d) 的内容可以参照USB协议的:7.1.7.5 章节中的High-speed Detection Handshake。或者也可以参照我之前的文章:
USB 全速/高速设备识别信号分析
USB 2.0 协议中文注解
USB 2.0 协议中J、K、SE0状态的定义

iPhone插入—3 处的波形
4eb6b946d3ccd77027515eabe303a25e.jpeg
a8fa54fbc0de53c5a2c1454218e4fbfa.png
3处的波形如果展开来看,同样是Host发送reset信号,设备产生Chirp K信号,Hub回应KJKJKJ序列进行握手的信号。至于为什么还多出一次reset,可以参照下面文章的说明:http://blog.csdn.net/luckywang1103/article/details/40263285
3处和4处之间就是车机(USB Host)与iPhone(USB Device)的获取设备描述符以及数据通信阶段,此时车机会去枚举(此时只包括识别高速设备之后的枚举动作)iPhone。并判断这台iPhone是否支持CarPlay,如果支持,那么需要进行RoleSwitch,所以才会有4的波形,否则不会有的
e84c2cc058793008ec48d927e97b6a5c.png

iPhone插入—4 处的波形
这个只有在插入iPhone连接CarPlay才会出现这个波形,这里是由于做了RoleSwitch,iPhone做Host,车机做Device,iPhone枚举车机时候产生的波形。这里的波形与第2处类似。这中间USB会断开一次并重连。
6491368c54032c655a9e82b5b3be094b.png

iPhone拔掉的波形
a7ba740272be00286003de17ebfe933c.jpeg
这个是iPhone拔掉时候的波形,在拔掉之前,车机是作为Device,iPhone是作为Host。
(a):D+和D-有数据在通信中;
(b):3ms左右的idle 状态;
(c):在设备开始进入idle状态后,必须在3.125ms(TWTREV)内还原至全速配置。依靠断开termination resistors并重新连接D+上的上拉电阻来完成切换至全速配置。在恢复到全速下,设备必须在TWTRSTHS(100us~875us)时间内采样总线上的状态。如果是Full-Speed J(D+为“1”,D-为“0”)的状态,那么设备继续进入Suspend的动作。(SE0的状态标记hub发送reset,设备将进入“High-speed Detection Handshake”,在7.1.7.5节中定义)。在USB设备控制器上,如果检测到持续3ms的Suspend状态,那么会产生中断报告断开。
之后车机由USB Device模式切换至USB Host模式,Full-Speed J的状态清除,D+和D-的信号都为0V。
这一部分的内容在USB 协议的7.1.7.6 Suspending章节进行的规定,或者可以参照这篇文章:USB 挂起和唤醒

U盘插入
U盘插入车机中播放音乐,此时车机做为USB Host,U盘作为USB Device,车机枚举U盘。
c039a9516cf3b57194a4f63551e1c0f9.jpeg
跟iPhone插入的波形比对,发现这里少了1处和4处的波形。少了4处是因为U盘插入不用做RoleSwitch,所以不用再次枚举。至于为什么少了1处的波形,还不知道原因。

U盘拔掉
b5950e9e6087247c6e9ea8daa76dfc04.jpeg
这里的 (a) 还在通信中,(b) 处表示处于idle状态。与iPhone拔掉的差异是这里少了 (c) 的波形。