"); //-->
当你的手机插入了电脑后,为什么电脑可以识别你的手机设备?你并没有做任何操作,但是电脑会弹出提示框,告诉你,手机已插入,可以进行操作了,电脑和手机之间到底交流了什么东西?
回答这个问题,很简单,当插入手机后,电脑通过数据线的电平变化,知道有一个 USB 设备已经插入了,但是这个是什么设备,电脑其实还不知道。
所以电脑开始发送复位信号给设备(只复位 USB,并不是整个手机重启),之后电脑和手机之间开始简单数据交互,了解一个 USB 设备的基本信息,之后再次复位(据说这次复位是历史遗留导致的)。
这次复位之后,电脑会了解更多 USB 设备的信息。
在设置手机的地址后,将全面了解 USB 设备信息,比如有多少个配置,多少个接口,多少个端点等信息。
如果是手机,一般会识别为 U 盘(也可能不是 U 盘,如果不是,需要专门安装驱动),这是 USB 标准协议中定义好的设备,而大多数电脑安装了U盘驱动,所以电脑可以在不安装驱动的情况下像操作 U盘一样直接操作手机。
鱼鹰并没有分析手机的通信过程,所以以上内容是鱼鹰猜测的,大体是应该类似的。
但鱼鹰熟悉 CDC 设备,即模拟串口的USB设备,而所有的 USB 设备在插入后那一段时间的行为基本是确定的,这个是 USB 标准规定的,只要是 USB 设备,都会遵循该流程,所以我们可以借此了解一下,当 CDC 设备插入之后发生了什么通信过程呢?
通过逻辑分析仪,我们可以很方便的了解USB设备插入之后的通信流程:
可以看到,当设备插入后,除了复位信号外, USB 设备一直在接收主机发送过来的帧 SOF 包(密麻麻的数据包大部分是帧首包):
这个 SOF 数据包就像人的心跳一样,维持着设备与主机的联系(每隔 1 ms 发送)。
我们再细看两个复位信号(DP 和DM 同时为低电平):
看上面第7通道(收发完成中断),可以看到在两个复位之间存在数据交互情况,通过放大可以看到发生了一次控制传输过程:
再放大看其中建立阶段的数据包:
你会看到这不就是前面所说的传输事务嘛,而前面的建立阶段、数据阶段、状态阶段组成了一次完整的控制传输。
通过一次控制传输,主机终于知道插入的家伙一点点信息了(USB版本、设备类型、生产厂商、设备版本号等)。
但这些信息还不够,所以在第二次复位后,主机开始更加全面的了解设备信息了:
通过前面的多次控制传输,主机终于了解到这个设备是什么设备了,因为 CDC 设备驱动电脑会默认安装,所以你会发现不需要安装任何驱动即可操作该 USB,即通过串口软件收发数据(所谓免驱,不是真的不需要驱动,而是电脑系统自带)。
那么这些交互的数据里面到底包含了哪些具体信息,设备要告诉主机什么信息才能让主机正确识别设备?
下节开始全面揭晓USB通信的神秘面纱!
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。