前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【专业技术】如何检测USB是否已经插入?

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

作者头像
程序员互动联盟
发布2018-03-15 14:28:14
3.9K0
发布2018-03-15 14:28:14
举报

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的同学能有所帮助。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档