找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 378|回复: 25
打印 上一主题 下一主题

求教:安卓手机USB设备插入识别过程?

[复制链接]

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
跳转到指定楼层
1#
发表于 2018-5-28 15:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 lukeluck 于 2018-5-29 08:43 编辑
" b6 Y8 G' I( T* R4 @! |  |8 {# P( W
求教:安卓手机USB设备插入识别过程?7 [' D- M1 j. b; Y
3 C, n! R% |% B: Z1 o* j, r2 E! H4 _
目前做了一个安卓手机的USB设备,前提条件如下:
# c8 }2 Q* w, ?; B& P) g* T
  • 手机支持OTG功能,且已经打开
  • 设备端从手机MicroUSB口取电,因此设备端ID直接接地
  • 设备端D- 引脚通过1.5K电阻上拉至1脚 5V VUSB: `; w# G% @9 L7 o& L' V2 m
求教各位熟悉USB设备开发的大侠,USB设备插入手机后的识别过程是什么顺序?
& [3 ?: c2 K+ i# C  i3 I! @7 F! [: y1 m2 O( Y
* G' x' [0 r% L8 k) J& `! {
目前已知的资料:9 {% c( I% N5 `' ]; c
USB设备插入后 因为ID为地,故USB设备工作在Host 模式,手机通过检测ID脚电平输出5V电压至USB设备0 _. |1 T  W4 l9 O9 t
USB设备上电后通过1.5k上拉电阻与手机内置的15k下拉电阻分压使得VD-=3.5V,手机检测到D-电平变化 从而认为USB设备为低速设备。
1 W2 z* \& b+ o7 K; q1 Y. m6 M9 ~" Z
参考资料1:搭个简单电路验证USB主机是如何检测USB设备的插入和拨出动作的
; j1 U* t9 F4 _! I参考资料2:USB OTG插入检测识别$ q9 r0 k3 h6 a. U0 T- V
参考资料3USB设备的插入检测机制
4 M4 u3 h1 k, C% X6 C7 x
, G; p- b5 W$ c$ p, ]! u0 C1 s6 v5 c& x% v! z9 r6 u$ G! x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

0

主题

34

帖子

411

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
411
推荐
发表于 2018-5-29 22:28 | 只看该作者
lukeluck 发表于 2018-5-29 18:08
3 j6 V& X$ z  k我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V
; ]: I( C" l1 \0 E" d8 c) e8 zUSB的插入检测机制:USB端口的D+和D-均用一个15k的电 ...

" j1 v$ i1 K' Y5 ?6 Q( j; y- yUSB2.0 Spec对这部分都有详细的描述(chapter 7 electrical部分),仔细看下USB PHY的内部电路结构应该很容易搞清楚。关于USB设备检测:自动检测的,你应该不需要加其他外围器件才对,Host端和Device端的USB PHY应该有实现这部分电路。Host端的DP&DM默认都是电阻下拉到GND的,所以不加Device时DP&DM都是低电平,而Device端的DP or DM上会有一个上拉到3~3.6V电压的1.5V电阻,Low Speed是上拉在DM端,Full Speed是上拉在DP端,因此通过检测DP和DM上的电平就能判断Device设备有没有接上了(High Speed最初是以Full Speed来进行设备识别的)。2 n% x) d% Y  S9 @! c  p
附上一些资料,感兴趣可以自己多看看
* G& o& B- F% o) o, B5 B" d
9 v: q" K+ f" B- e3 |5 T% Z% V# L2 O2 k8 i0 A+ P1 M
" k9 S6 P9 I3 b

Device Cable and Resistor Connections.png (109.63 KB, 下载次数: 0)

Device Cable and Resistor Connections.png

Example High-speed Capable Transceiver Circuit.png (146.36 KB, 下载次数: 0)

Example High-speed Capable Transceiver Circuit.png

usb_20.pdf

6.04 MB, 下载次数: 0, 下载积分: 威望 -5

USB_20_System_Architecture.pdf

6.96 MB, 下载次数: 1, 下载积分: 威望 -5

点评

热心人!: 5.0
热心人!: 5
  发表于 2018-5-30 11:59
不错 正如你所说的这样,D-确实需要接上拉电阻,标准上是接1.5k上拉至3-3.6V 现在我如果接1.5k上拉只5V 则在D-管脚计算得到的电平是4.5V 估计会超出检测范围,实际测量这个电压是3.5V(估计是手机内部有钳位电路),  详情 回复 发表于 2018-5-30 09:57

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
推荐
 楼主| 发表于 2018-5-29 08:41 | 只看该作者
本帖最后由 lukeluck 于 2018-5-29 08:43 编辑 . F7 i4 ?6 T  E; A' ~4 v6 g* w1 A
ABCDJ 发表于 2018-5-28 22:28
; _7 @4 {3 v: E4 l! k$ \! s插入时,通过ID确认是host还是device;
! q3 t4 J" b$ r然后通过D+/D-上的1.5K上拉电阻,确认是有device挂上设备,并确认 ...
! D) \( _& s9 Z" g9 Y0 i* y
那看来这个过程还挺复杂的,现在我的做法是:
/ f! X3 q  q5 V/ I7 F1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。
% I* `8 L" k0 T* P9 J; j2 设备测D-通过1.5K上拉电阻上拉至5V,目的仅是告诉手机这是一个低速设备; ~% k  J3 m- [0 }* f
3 我的最终目的并不需要建立设备与手机的USB通信,仅仅是想知道当设备插入时候有个状态变化(手机上有一个APP,设备插入后这个APP里有一个标志位置位); u3 @# M7 Z: P8 c. }& e  W' b- g
7 m) v* @" v8 Z6 `
按照我的理解,当手机上插入设备时,ID脚已经会产生一个下降沿(此后保持低电平),另外D-脚会产生一个上升沿(手机内部D-脚通过15k电阻下拉,此后保持高电平),那么这两个信号已经可以让手机发现有个设备插入了,至于是什么设备后面通过通信获知(我们的情形不需要到这一步,仅仅是发现设备插入就可以了)
( X9 p! Q' u: U) Y请问大侠能否实现呢?感谢!
# }: y5 S) R2 b7 h) q' t$ T/ ^/ M: l7 Q, r- U" d

点评

1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。--这个ID接地,是让手机侧的USB工作在HOST模式,一个为是DEVICE供电,另一个是作为HOST才能去识别device; 2 设备测D-通过1.5K上拉电阻上  详情 回复 发表于 2018-5-31 20:28

1

主题

75

帖子

382

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
382
2#
发表于 2018-5-28 16:35 | 只看该作者
学习了

17

主题

273

帖子

520

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
520
3#
发表于 2018-5-28 17:07 | 只看该作者
刚好在找资料,非常感谢;

点评

额,我这是求教贴。。。  详情 回复 发表于 2018-5-28 17:16
默哀...心灵的洗礼!

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
4#
 楼主| 发表于 2018-5-28 17:16 | 只看该作者
xiáò虫 发表于 2018-5-28 17:07
3 h# e$ u& D4 Z6 G" ~" O. m刚好在找资料,非常感谢;
7 A% B- m$ A* S9 O6 E
额,我这是求教贴。。。5 @# ~/ S, `- c' X8 w  m3 x5 ~" _

0

主题

54

帖子

98

积分

二级会员(20)

Rank: 2Rank: 2

积分
98
5#
发表于 2018-5-28 22:28 | 只看该作者
插入时,通过ID确认是host还是device;
) X; Y. `5 t5 b$ v; C8 r' r( I然后通过D+/D-上的1.5K上拉电阻,确认是有device挂上设备,并确认了是低速设备还是全速/高速设备;; e. `% e4 P4 H: F
若为全速/高速设备,host需要再通过一些访问确认是否支持高速模式,支持则切换到高速模式;6 M) C' D: S) @7 y
切换后再通过一些枚举操作,识别设备的驱动,并确认是一个什么类型的设备,系统再根据设备类型进行设备挂载。

点评

那看来这个过程还挺复杂的,现在我的做法是1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。 2 设备测D-通过1.5K上拉电阻上拉至5V,目的仅是告诉手机这是一个低速设备 3 我的最终目的并  详情 回复 发表于 2018-5-29 08:41

1

主题

286

帖子

3336

积分

五级会员(50)

Rank: 5

积分
3336
7#
发表于 2018-5-29 09:34 | 只看该作者
Mark 一下。

39

主题

142

帖子

757

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
757
8#
发表于 2018-5-29 09:45 | 只看该作者
学习

50

主题

389

帖子

2360

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2360
9#
发表于 2018-5-29 17:31 | 只看该作者
学习了

50

主题

389

帖子

2360

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2360
10#
发表于 2018-5-29 17:31 | 只看该作者
MARK

0

主题

34

帖子

411

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
411
11#
发表于 2018-5-29 17:52 | 只看该作者
你的USB设备是USB2.0?你说的低速指的是什么意思?USB2.0 Spec有LS,FS和HS,不知道你说的低速全速高速分别指的那个。

点评

我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接  详情 回复 发表于 2018-5-29 18:08

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
12#
 楼主| 发表于 2018-5-29 18:08 | 只看该作者
下雨天睡觉 发表于 2018-5-29 17:52
4 H- u4 |7 q) }! H: l1 a/ w你的USB设备是USB2.0?你说的低速指的是什么意思?USB2.0 Spec有LS,FS和HS,不知道你说的低速全速高速分别 ...
7 F0 r0 \" Q* Q- Z* z' @/ G
我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V8 x6 a7 k, y$ S: K8 q7 R) {; ]2 x

USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。

注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。

在高速模式下,采用的是电流传输模式,这个时候上拉电阻需要从D+上断开。

, D% x* c' {% m- ]0 p

点评

USB2.0 Spec对这部分都有详细的描述(chapter 7 electrical部分),仔细看下USB PHY的内部电路结构应该很容易搞清楚。关于USB设备检测:自动检测的,你应该不需要加其他外围器件才对,Host端和Device端的USB PHY应该  详情 回复 发表于 2018-5-29 22:28

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
14#
 楼主| 发表于 2018-5-30 09:57 | 只看该作者
下雨天睡觉 发表于 2018-5-29 22:28
2 s/ p3 ^4 {1 j6 h, w* gUSB2.0 Spec对这部分都有详细的描述(chapter 7 electrical部分),仔细看下USB PHY的内部电路结构应该很 ...

7 E8 a: X4 B. K4 F9 F7 `; I+ `2 d, X不错  正如你所说的这样,D-确实需要接上拉电阻,标准上是接1.5k上拉至3-3.6V0 s8 }0 \& K* ?5 C% w. Q4 [& J
现在我如果接1.5k上拉只5V 则在D-管脚计算得到的电平是4.5V 估计会超出检测范围,实际测量这个电压是3.5V(估计是手机内部有钳位电路),那么如果我调整此电阻为10k,则能够在D-管脚得到3.0V的电平。2 J& C6 r5 p" ^( j8 _' j3 H
现在我的问题是 手机插入这个USB设备后检测不到。问题不只是硬件方面,还有软件方面的代码。能否帮忙提供下参考呢?7 r) n4 D1 e9 x& H9 @

点评

额,软件方面的东西我就不大了解了,不知道是不是你手机的USB Driver默认不支持USB Low Speed还是怎么回事,,,看样子你的USB设备应该是Low Speed设备,我对Low Speed的Spec还真的不是特别了解,只对USB2.0 HS稍微  详情 回复 发表于 2018-5-30 16:22

19

主题

176

帖子

2420

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2420
15#
发表于 2018-5-30 10:16 | 只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-17 23:54 , Processed in 0.096644 second(s), 47 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表