找回密码
 注册
关于网站域名变更的通知
查看: 1472|回复: 25
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    无聊
    2020-5-6 15:53
  • 签到天数: 3 天

    [LV.2]偶尔看看I

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

    EDA365欢迎您登录!

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

    x
    本帖最后由 lukeluck 于 2018-5-29 08:43 编辑
    2 s6 Y/ l6 Q" a8 N4 ]1 }' t+ v+ U$ V, t  x- {4 C4 I5 F
    求教:安卓手机USB设备插入识别过程?0 F# ^/ a( k9 u# ]

    - c* M; }% K0 X  A2 Q% E) i6 w目前做了一个安卓手机的USB设备,前提条件如下:; ?: u3 [% ^; q6 g) o( k
    • 手机支持OTG功能,且已经打开
    • 设备端从手机MicroUSB口取电,因此设备端ID直接接地
    • 设备端D- 引脚通过1.5K电阻上拉至1脚 5V VUSB0 R1 O! \# c" V& v; B" D0 J
    求教各位熟悉USB设备开发的大侠,USB设备插入手机后的识别过程是什么顺序?  S' j; k  |3 g- b. T& S% J
    , h  I. [4 F/ F9 L1 q
    2 R- C0 \  e" ?2 X
    目前已知的资料:4 x5 Y8 J6 b( e& D! e- y
    USB设备插入后 因为ID为地,故USB设备工作在Host 模式,手机通过检测ID脚电平输出5V电压至USB设备
    & I& t* F$ A' w% q( s/ t% bUSB设备上电后通过1.5k上拉电阻与手机内置的15k下拉电阻分压使得VD-=3.5V,手机检测到D-电平变化 从而认为USB设备为低速设备。/ o) i3 h! K# n3 m/ Q+ y
    : a2 i7 c( ^( \& q
    参考资料1:搭个简单电路验证USB主机是如何检测USB设备的插入和拨出动作的
    + d3 [3 S% F, \7 ]( f/ }参考资料2:USB OTG插入检测识别/ U7 K8 Y$ ?$ l) S- @3 J
    参考资料3USB设备的插入检测机制; O; t/ {! L1 a/ `) G/ ~

    9 l- l* E. ]) A# w2 ^2 |: c' K* R9 Q
    , J' c$ g% y* [4 e& n+ L

    该用户从未签到

    推荐
    发表于 2018-5-29 22:28 | 只看该作者
    lukeluck 发表于 2018-5-29 18:08- }0 k) `* T" I8 h% Y
    我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V
    / _# r; A' l& |USB的插入检测机制:USB端口的D+和D-均用一个15k的电 ...

    3 M# T! h8 V- B" A- R" bUSB2.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来进行设备识别的)。: g4 |) s0 K2 B& c# t' b1 ~
    附上一些资料,感兴趣可以自己多看看2 J5 l  o0 c3 f- g

    : s: V, N3 K6 `# O; m# s8 P
    . c6 Z0 z3 e" E1 F; r, m
    ; R3 Y, q0 s* j5 c5 ?

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

    Device Cable and Resistor Connections.png

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

    Example High-speed Capable Transceiver Circuit.png

    usb_20.pdf

    6.04 MB, 下载次数: 1, 下载积分: 威望 -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
  • TA的每日心情
    无聊
    2020-5-6 15:53
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    推荐
     楼主| 发表于 2018-5-29 08:41 | 只看该作者
    本帖最后由 lukeluck 于 2018-5-29 08:43 编辑 6 P# j9 x) |4 q' `( s
    ABCDJ 发表于 2018-5-28 22:282 Q; p+ `  J% G9 @. B
    插入时,通过ID确认是host还是device;
    & _% ]2 X5 ?) c$ u. O" W" h然后通过D+/D-上的1.5K上拉电阻,确认是有device挂上设备,并确认 ...

    6 J% ^8 R" _- ~+ y3 z+ _$ w2 e& V那看来这个过程还挺复杂的,现在我的做法是:
    / }+ j+ m" @( l5 O% q) ^! C1 设备测ID接地,则设备作为Host工作,目的仅仅只是为了从手机的USB口取电。
    # P' P" w/ k7 u& M7 v+ M7 @2 设备测D-通过1.5K上拉电阻上拉至5V,目的仅是告诉手机这是一个低速设备
    " x( d2 j! s) u& A# u, M3 我的最终目的并不需要建立设备与手机的USB通信,仅仅是想知道当设备插入时候有个状态变化(手机上有一个APP,设备插入后这个APP里有一个标志位置位)7 Z& C3 Q3 r+ c8 I3 C

    8 }: f9 l- L: ?3 i9 P3 P按照我的理解,当手机上插入设备时,ID脚已经会产生一个下降沿(此后保持低电平),另外D-脚会产生一个上升沿(手机内部D-脚通过15k电阻下拉,此后保持高电平),那么这两个信号已经可以让手机发现有个设备插入了,至于是什么设备后面通过通信获知(我们的情形不需要到这一步,仅仅是发现设备插入就可以了)
    6 Y4 _5 c3 w0 b7 K+ {0 w8 E5 W( ~请问大侠能否实现呢?感谢!
    * r5 _3 @% y' ^' }" l& j
    8 A1 c) A( ^- F4 Q" k

    点评

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

    该用户从未签到

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

    点评

    额,我这是求教贴。。。  详情 回复 发表于 2018-5-28 17:16
  • TA的每日心情
    无聊
    2020-5-6 15:53
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    4#
     楼主| 发表于 2018-5-28 17:16 | 只看该作者
    xiáò虫 发表于 2018-5-28 17:07* D. X! h; @5 y7 f- P
    刚好在找资料,非常感谢;
      J. m; T2 f1 ^2 N: ^3 @5 n
    额,我这是求教贴。。。6 }1 y0 D  U/ X) k  p

    该用户从未签到

    5#
    发表于 2018-5-28 22:28 | 只看该作者
    插入时,通过ID确认是host还是device;
    ; u6 m; Y' b- Z& r8 A2 a然后通过D+/D-上的1.5K上拉电阻,确认是有device挂上设备,并确认了是低速设备还是全速/高速设备;: ^! @: V0 r% Q9 T2 O
    若为全速/高速设备,host需要再通过一些访问确认是否支持高速模式,支持则切换到高速模式;1 B# e; f4 a1 ]1 \
    切换后再通过一些枚举操作,识别设备的驱动,并确认是一个什么类型的设备,系统再根据设备类型进行设备挂载。

    点评

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

    该用户从未签到

    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
  • TA的每日心情
    无聊
    2020-5-6 15:53
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    12#
     楼主| 发表于 2018-5-29 18:08 | 只看该作者
    下雨天睡觉 发表于 2018-5-29 17:52
    , Q+ `" X# _3 q. D; I5 b你的USB设备是USB2.0?你说的低速指的是什么意思?USB2.0 Spec有LS,FS和HS,不知道你说的低速全速高速分别 ...
    ' |3 m+ n  j0 y- c+ g. ^$ g7 d% d" k
    我的接口是MicroUSB接口,D-通过1.5k电阻上拉至5V
    . E, ?, W( B( |9 a- N+ z  I2 i

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

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

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

    ; h6 {- ^" b( W3 Z& u1 s2 [

    点评

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

    [LV.2]偶尔看看I

    14#
     楼主| 发表于 2018-5-30 09:57 | 只看该作者
    下雨天睡觉 发表于 2018-5-29 22:28
    7 ]# N/ U9 V5 u# Z( i3 uUSB2.0 Spec对这部分都有详细的描述(chapter 7 electrical部分),仔细看下USB PHY的内部电路结构应该很 ...

    + K# v0 f0 D. U% ]. }4 |不错  正如你所说的这样,D-确实需要接上拉电阻,标准上是接1.5k上拉至3-3.6V
    - M+ o( h( e  ^% a# Z2 y9 |现在我如果接1.5k上拉只5V 则在D-管脚计算得到的电平是4.5V 估计会超出检测范围,实际测量这个电压是3.5V(估计是手机内部有钳位电路),那么如果我调整此电阻为10k,则能够在D-管脚得到3.0V的电平。
    * j6 w- e$ f% M# a2 Y+ D- Q4 r现在我的问题是 手机插入这个USB设备后检测不到。问题不只是硬件方面,还有软件方面的代码。能否帮忙提供下参考呢?
    ) c4 n5 d0 Y6 D  {- _/ h

    点评

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

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-11 13:11 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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