新闻  |   论坛  |   博客  |   在线研讨会
当手机插入电脑后,秘密私语了什么(七)?
鱼鹰谈单片机 | 2021-02-18 11:38:33    阅读:770   发布文章

当你的手机插入了电脑后,为什么电脑可以识别你的手机设备?你并没有做任何操作,但是电脑会弹出提示框,告诉你,手机已插入,可以进行操作了,电脑和手机之间到底交流了什么东西?

回答这个问题,很简单,当插入手机后,电脑通过数据线的电平变化,知道有一个 USB 设备已经插入了,但是这个是什么设备,电脑其实还不知道。

所以电脑开始发送复位信号给设备(只复位 USB,并不是整个手机重启),之后电脑和手机之间开始简单数据交互,了解一个 USB 设备的基本信息,之后再次复位(据说这次复位是历史遗留导致的)。

这次复位之后,电脑会了解更多 USB 设备的信息。

在设置手机的地址后,将全面了解 USB 设备信息,比如有多少个配置,多少个接口,多少个端点等信息。

如果是手机,一般会识别为 U 盘(也可能不是 U 盘,如果不是,需要专门安装驱动),这是 USB 标准协议中定义好的设备,而大多数电脑安装了U盘驱动,所以电脑可以在不安装驱动的情况下像操作 U盘一样直接操作手机。

鱼鹰并没有分析手机的通信过程,所以以上内容是鱼鹰猜测的,大体是应该类似的。

但鱼鹰熟悉 CDC 设备,即模拟串口的USB设备,而所有的 USB 设备在插入后那一段时间的行为基本是确定的,这个是 USB 标准规定的,只要是 USB 设备,都会遵循该流程,所以我们可以借此了解一下,当 CDC 设备插入之后发生了什么通信过程呢?

通过逻辑分析仪,我们可以很方便的了解USB设备插入之后的通信流程:

1.png

可以看到,当设备插入后,除了复位信号外, USB 设备一直在接收主机发送过来的帧 SOF 包(密麻麻的数据包大部分是帧首包):

2.png

这个 SOF 数据包就像人的心跳一样,维持着设备与主机的联系(每隔 1 ms 发送)。

我们再细看两个复位信号(DP 和DM 同时为低电平):

3.png

看上面第7通道(收发完成中断),可以看到在两个复位之间存在数据交互情况,通过放大可以看到发生了一次控制传输过程:

4.png

再放大看其中建立阶段的数据包:

5.png

你会看到这不就是前面所说的传输事务嘛,而前面的建立阶段、数据阶段、状态阶段组成了一次完整的控制传输。

通过一次控制传输,主机终于知道插入的家伙一点点信息了(USB版本、设备类型、生产厂商、设备版本号等)。

但这些信息还不够,所以在第二次复位后,主机开始更加全面的了解设备信息了:

6.png

通过前面的多次控制传输,主机终于了解到这个设备是什么设备了,因为 CDC 设备驱动电脑会默认安装,所以你会发现不需要安装任何驱动即可操作该 USB,即通过串口软件收发数据(所谓免驱,不是真的不需要驱动,而是电脑系统自带)。

那么这些交互的数据里面到底包含了哪些具体信息,设备要告诉主机什么信息才能让主机正确识别设备?

下节开始全面揭晓USB通信的神秘面纱!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客