admin管理员组

文章数量:1531443

2024年5月22日发(作者:)

【专业技术】如何检测USB是否已经插入?

usb是我们现代生活中不可或缺的一个东西,大家平常只要使用

电脑,肯定都接触过usb吧。本篇文章对于大部分同学来说并没有实

际意义,主要面向想了解USB的一些同学,以及一些做嵌入式的同学。

首先第一个问题,当我们在电脑中插入了一个U盘,那么电脑是

怎么知道有一个U盘插入的呢?

一般usb有4根线,作为数据的D+,D-,以及供电的Vbus和

GND。我们需要知道在集线器的端口上(比如电脑的usb口)分别接

了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就

被这两个下拉电阻拉到了低电平。而在USB设备端,在D+或者D-上

接了1.5K欧姆上拉电阻。对于全速和高速设备, 上拉电阻是接在D+

上;而低速设备则是上拉电阻接在D-上。这样,当设备插入到集线器

时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线

中的一条拉高了。集线器检测到这个状态后,它就报告给USB主控制

器(或者通过它上一层的集线器报告给USB主控制器),这样就检测

到设备的插入了。USB高速设备先是被识别为全速设备,然后通过

HOST和DEVICE两者之间的确认,再切换到高速模式的。在高速模式

下,是电流传输模式,这时将D+上的上拉电阻断开。

基于以上原因,我们如果把电脑usb口的D+或者D-接到5v电源

上,那么电脑也会识别到有usb设备插入,只不过电脑识别到的是未

识别的硬件,VID,PID都是0。

现在我们会经常听到说某某手机支持OTG,可以在手机上插U盘。

那么什么是OTG呢,手机本来是作为SLAVE设备的,他怎么知道要切

换到HOST设备呢?这就引入了第二个问题:OTG设备是如何检测设

备的插入的?

支持OTG设备的usb口会多出一个引脚叫ID引脚,下面是OTG

设备对管脚的定义:

为支持OTG功能,mini/micro usb接口扩展了一个ID引脚(第

4脚)

A设备端ID脚接地,则初始状态为Host,例如PC和支持OTG

设备做主设备时

B设备端ID脚悬空,默认上拉为高电平,则初始状态为Device,

例如U盘和支持OTG设备做从设备时

1. 移动设备如需支持OTG,内部ID引脚需要默认上拉为高

2. VBUS是输入输出双向引脚。对于Device是power supply输

入脚;对于Host需要串一个5V电源输出给device。

下面分别描述OTG设备作为HOST以及device设备时插入U口

的动作。

作为从设备插入PC端口时:

1. 系统检测到VBUS上升沿触发中断,因为PC端会有一个5V从

VBUS给过来,进入中断处理函数进一步确认ID脚状态,ID脚为低则

状态错误,ID脚为高表示设备应该切换到从设备模式

2. 通知usb gadget使能vbus,按照device模式使能PHY。

gadget在probe时注册了一个SPI软中断IRQ_USB_HSOTG,用于

响应数据接收

3. 开启usb clk,使能PHY,此时外部5V电源供给系统

XuotgVBUS,gadget收到IRQ_USB_HSOTG中断要求重启OTG core

4. USB DP(高速设备为DP,低速设备为DM)上产生一个高电

平脉冲,此时PC识别到一个USB设备插入,windows会提示用户

5. 后续就是SETUP,GET DISCRIPTOR的过程

作为主设备发现设备插入时:

1. 系统检测到ID脚上下降沿触发中断(实际是插入的usb公口第

四脚直接连接到第五脚地上面),进入中断处理,切换到主设备模式

2. 关中断,使能DC5V给VBUS上电,唤醒ehci与ohci

3. usb core在内核初始化时注册了一个名为khubd的内核线程,

由khubd监控port event。(实际过程我理解是从设别由VUBS供电

后,会在DP或DM上产生一个高电平脉冲

ehci在接收到脉冲信号后识别到设备插入,仅仅是理解,这一点

未验证)

3. khubd获取port,speed后交给ehci,接下来就是usb的

SETUP,GET DISCRIPTOR过程。

以上就是usb设备插入是的一些动作,希望对学习USB的同学能

有所帮助。

本文标签: 设备插入检测中断电阻