找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 357|回复: 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 编辑
7 c" d& o5 g( _5 f
; y. k4 H- k7 |6 L1 @4 O求教:安卓手机USB设备插入识别过程?/ W9 d+ v9 [4 F. h
: f5 O% {! o: C6 J1 F6 R; r' U/ v. ?
目前做了一个安卓手机的USB设备,前提条件如下:
5 y; I8 z- H+ Y+ ~
  • 手机支持OTG功能,且已经打开
  • 设备端从手机MicroUSB口取电,因此设备端ID直接接地
  • 设备端D- 引脚通过1.5K电阻上拉至1脚 5V VUSB" k# ~1 M* B0 x( _. n* K
求教各位熟悉USB设备开发的大侠,USB设备插入手机后的识别过程是什么顺序?$ f; A# }1 N0 [1 W! A7 G
8 t6 |3 w0 l5 ^

; ]6 n- Q8 ?  b* I# n5 M4 @目前已知的资料:: y7 R9 B: E6 {
USB设备插入后 因为ID为地,故USB设备工作在Host 模式,手机通过检测ID脚电平输出5V电压至USB设备
" A, s: q0 q* o. w# VUSB设备上电后通过1.5k上拉电阻与手机内置的15k下拉电阻分压使得VD-=3.5V,手机检测到D-电平变化 从而认为USB设备为低速设备。
) z2 ^% U& ^1 _, g# Y7 d
4 p5 ^3 P. S! U# q/ w4 G, r参考资料1:搭个简单电路验证USB主机是如何检测USB设备的插入和拨出动作的
- G5 h  w# w) h* R4 v! N% K) {" s参考资料2:USB OTG插入检测识别0 _3 k8 p  g; \1 q4 _. c  k+ x
参考资料3USB设备的插入检测机制3 E$ D# v. R' ~/ C9 m
7 F3 S$ _) B) U/ w5 q

. n0 u/ s5 w2 I/ ~& l" r# ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

0

主题

34

帖子

411

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
411
推荐
发表于 2018-5-29 22:28 | 只看该作者
lukeluck 发表于 2018-5-29 18:08- @$ U5 [/ F- j8 i' ?  r
我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V0 S( Z% z( _" e7 ]
USB的插入检测机制:USB端口的D+和D-均用一个15k的电 ...

/ N0 l8 t# q! K8 O" KUSB2.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来进行设备识别的)。3 R( E0 m* ]& T  _) j
附上一些资料,感兴趣可以自己多看看
# M9 g+ p" e( R6 J2 Y  r" S2 y' m# T9 y' w$ j. q) f# Y& O4 c2 ?
( }/ s1 E1 r/ m4 H( P' |! L
0 u4 K) V$ s* D) e

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

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
推荐
 楼主| 发表于 2018-5-29 08:41 | 只看该作者
本帖最后由 lukeluck 于 2018-5-29 08:43 编辑 9 ?- Z5 F5 g; @! l9 h: Z# l
ABCDJ 发表于 2018-5-28 22:28+ T  P# h/ E2 x8 ~
插入时,通过ID确认是host还是device;
9 T2 ^' A4 o& H5 O+ q# j然后通过D+/D-上的1.5K上拉电阻,确认是有device挂上设备,并确认 ...
& D% L1 \4 g+ n/ M- l9 v' l( M2 q
那看来这个过程还挺复杂的,现在我的做法是:
1 M: \( }4 W5 X1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。
- }4 g$ n1 p  C0 z5 m2 设备测D-通过1.5K上拉电阻上拉至5V,目的仅是告诉手机这是一个低速设备
; a- U3 [: G8 c5 j+ d3 我的最终目的并不需要建立设备与手机的USB通信,仅仅是想知道当设备插入时候有个状态变化(手机上有一个APP,设备插入后这个APP里有一个标志位置位)
% t0 r) j6 f. H# B: P' B, j# l4 R' t4 B5 Y" D( k
按照我的理解,当手机上插入设备时,ID脚已经会产生一个下降沿(此后保持低电平),另外D-脚会产生一个上升沿(手机内部D-脚通过15k电阻下拉,此后保持高电平),那么这两个信号已经可以让手机发现有个设备插入了,至于是什么设备后面通过通信获知(我们的情形不需要到这一步,仅仅是发现设备插入就可以了)
0 q5 i) s3 ?# V- v  T请问大侠能否实现呢?感谢!% I+ R' ]7 a6 }, g6 S9 j- I

9 T, r+ g0 A+ X. e$ _+ H6 g

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
19#
 楼主| 发表于 2018-6-1 08:58 | 只看该作者
ABCDJ 发表于 2018-5-31 20:28" O" p2 B  m% {% U) S
1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。--这个ID接地,是让手机侧的U ...

' L! Q: z) R6 o- o; a感谢回复,现在我已经理解清楚这个顺序了。手机确实作为Host4 F. {$ q7 Y+ B7 {8 ?; ?7 j
D-的上拉电阻确实是告诉了手机有个低速设备插入。
' |1 R* ~/ i5 ZD+/D-由于不会同手机USB通信 因此可以说我的Device不是标准的USB外设,仅仅是从手机USB供电
4 D+ W, H; a' R$ f  @& ?$ z/ {5 s现在可以确保硬件连接上是没有问题的,只是没有通信!
% `; ?  p7 j& a
& B. c, O; Z+ y8 o问题是:代码如何实现这个识别过程呢?
* S! A% ~( a. I' I附:一个参考代码 https://blog.csdn.net/chy555chy/article/details/52350810
9 D! L+ X4 ]& U目前还是没有搞定。( V7 }5 d1 ]- E3 F  [% `
我插入普通USB数据线,都可以观测到ACTION_USB_STATE =connectd 状态变化,但是连接我自己的设备却没有任何反应!# M% ]9 v" P: x: B! M

0

主题

54

帖子

98

积分

二级会员(20)

Rank: 2Rank: 2

积分
98
18#
发表于 2018-5-31 20:28 | 只看该作者
lukeluck 发表于 2018-5-29 08:41
' g* Y. _9 S: K! p那看来这个过程还挺复杂的,现在我的做法是:3 Z( X' n0 n2 k$ Y. X
1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从 ...

0 p6 Z) \+ s$ y: c1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。--这个ID接地,是让手机侧的USB工作在HOST模式,一个为是DEVICE供电,另一个是作为HOST才能去识别device;1 E4 m) A6 ]; L2 r8 l
2 设备测D-通过1.5K上拉电阻上拉至5V,目的仅是告诉手机这是一个低速设备。--这个电阻目的是告诉手机有设备插入了,且是一个低速设备;3 h+ w! X+ ^1 b/ _. C
3 我的最终目的并不需要建立设备与手机的USB通信,仅仅是想知道当设备插入时候有个状态变化(手机上有一个APP,设备插入后这个APP里有一个标志位置位);--这样,手机能识别到了;& n$ A4 l4 S- F9 [( _; O& J7 p# B

点评

感谢回复,现在我已经理解清楚这个顺序了。手机确实作为Host D-的上拉电阻确实是告诉了手机有个低速设备插入。 D+/D-由于不会同手机USB通信 因此可以说我的Device不是标准的USB外设,仅仅是从手机USB供电 现在可  详情 回复 发表于 2018-6-1 08:58

0

主题

34

帖子

411

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
411
17#
发表于 2018-5-30 16:22 | 只看该作者
lukeluck 发表于 2018-5-30 09:57
  C( O9 r$ f% u; m不错  正如你所说的这样,D-确实需要接上拉电阻,标准上是接1.5k上拉至3-3.6V8 w- G1 t% Y; g# c. f2 ?( c
现在我如果接1.5k上拉只5V ...
) F& T3 U5 I, E, Z6 u
额,软件方面的东西我就不大了解了,不知道是不是你手机的USB Driver默认不支持USB Low Speed还是怎么回事,,,看样子你的USB设备应该是Low Speed设备,我对Low Speed的Spec还真的不是特别了解,只对USB2.0 HS稍微了解一些。要我debug硬件的话可能会搞个Low Speed的设备接到电脑上先测下设备能正确识别时候的波形,再对比接到手机上测试一下是哪里出了问题,或者看下USB1.1的Spec了解下LS设备到地是怎么识别的。& D; U1 o* W& z/ Z1 R! s* |2 ~
: t8 W6 {/ D; B3 `$ y

1

主题

117

帖子

263

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
263
16#
发表于 2018-5-30 11:04 | 只看该作者

点评

反对!: 5.0
反对!: 5
  发表于 2018-5-30 11:58

19

主题

176

帖子

2420

积分

四级会员(40)

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

积分
2420
15#
发表于 2018-5-30 10:16 | 只看该作者
学习了

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
14#
 楼主| 发表于 2018-5-30 09:57 | 只看该作者
下雨天睡觉 发表于 2018-5-29 22:28
+ x- q7 C& v* o8 a' ?USB2.0 Spec对这部分都有详细的描述(chapter 7 electrical部分),仔细看下USB PHY的内部电路结构应该很 ...

5 j4 b) E. Q# t5 r. Q2 E6 t不错  正如你所说的这样,D-确实需要接上拉电阻,标准上是接1.5k上拉至3-3.6V3 _' k8 D3 f1 V$ i1 t
现在我如果接1.5k上拉只5V 则在D-管脚计算得到的电平是4.5V 估计会超出检测范围,实际测量这个电压是3.5V(估计是手机内部有钳位电路),那么如果我调整此电阻为10k,则能够在D-管脚得到3.0V的电平。
& v2 `6 _7 U3 L" q1 K现在我的问题是 手机插入这个USB设备后检测不到。问题不只是硬件方面,还有软件方面的代码。能否帮忙提供下参考呢?
4 Y6 t4 A* X6 }

9

主题

231

帖子

468

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
468
12#
 楼主| 发表于 2018-5-29 18:08 | 只看该作者
下雨天睡觉 发表于 2018-5-29 17:52% S% T' i# {5 ]" H$ z
你的USB设备是USB2.0?你说的低速指的是什么意思?USB2.0 Spec有LS,FS和HS,不知道你说的低速全速高速分别 ...

) \2 S9 Q' e* w  B! P" |/ ]/ g我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V7 Y- W! {. P1 q# Z: F& f

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

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

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

1 O* j+ K& e4 w' i: X

0

主题

34

帖子

411

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

50

主题

389

帖子

2360

积分

四级会员(40)

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

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

50

主题

389

帖子

2360

积分

四级会员(40)

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

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

39

主题

142

帖子

757

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

1

主题

286

帖子

3336

积分

五级会员(50)

Rank: 5

积分
3336
7#
发表于 2018-5-29 09:34 | 只看该作者
Mark 一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-19 09:20 , Processed in 0.076361 second(s), 42 queries , Gzip On.

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

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

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