关于USB的问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3573|回复: 1
打印 上一主题 下一主题

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
' P1 V0 Z' J8 W5 _8 T2 F& @- E" Zhub 2-0:1.0: over-current condition on port 1
* J1 M; k2 f) f2 C9 J$ e: Bda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
- P! y, e' Q" v0 K6 [) o我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会! c8 g9 d" X+ A1 ~- C  b
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
* _0 ]4 ~2 P8 P8 Q0 u  U  i  Q发现,在da8xx_musb_interrupt函数中,有如下代码:
, f1 w. K9 q6 k  Gif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {' Z; @! O0 m# |7 T( Z* l+ U
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
. R$ ]* d; {3 q  j& B                void __iomem *mregs = musb->mregs;/ N: \) F; [1 y- @
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);( D/ Y0 I9 C( D" h
                int err;
. G6 N. a8 c/ ]$ c
; v/ ~) Q: q: W  n+ a; J9 n& m4 H6 t                err = is_host_enabled(musb) && (musb->int_usb &- i& H5 m: ?/ u( s! F
                                                MUSB_INTR_VBUSERROR);7 S! {# }" c2 @" @  @. v: X% h
                if (err) {) S* \- z' |: T3 G9 a3 Y9 g
                        /*
/ m4 g" B% L7 R) p  b2 M                         * The Mentor core doesn't debounce VBUS as needed
  l, Z( T  \0 W0 y                         * 。。。9 Y) N. n& _2 {8 K! D* R4 F3 w! v) d6 F& v
                         */
8 ~. q( o( Y( h; S                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
, f4 v5 H# b' \$ k% P* C, Y                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;; V( z( d9 H1 E- g( _' l! K- I" N
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
; l7 X' R' q1 U  g                        WARNING("VBUS error workaround (delay coming)\n");
# y* i+ I. Y! U3 J. {4 D! q                }
2 d7 {5 l! K% t9 {
& P( U4 u( e; F& z一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
9 K% w- U2 V" z' b/ `( d* W0 |/ m跳入如下分支:
5 S3 G1 W( [; N, p4 G8 cdevctl = musb_readb(mregs, MUSB_DEVCTL);1 V* e# D2 V) V( s% y3 A! _8 E5 h$ Q
。。。, B8 k6 I6 j. B8 M
case OTG_STATE_A_WAIT_VFALL:
1 i& |# Z( Q/ w                /*; w$ o* E/ f! A( [  t' p1 \/ S
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
4 y9 S7 r( l" ~3 A  |                 * RTL seems to mis-handle session "start" otherwise (or in
! D+ v' L: x2 j                 * our case "recover"), in routine "VBUS was valid by the time
! Q. l4 Q! g8 J" S, A# M0 N8 W6 V; q                 * VBUSERR got reported during enumeration" cases.
' r4 [" B9 X: F  A0 X; J) k                 */+ p% w. u8 \8 ]2 H" g3 R
                if (devctl & MUSB_DEVCTL_VBUS) {
# u9 [; c5 v( K& G, ?: F8 \                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);( i. G  ~* J  M7 }& t: r) D% C7 U9 `% T
                        break;1 J4 r, q  `) |; J0 F+ K
                }
7 f3 a8 N: f* x0 c2 Z! G6 u                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
8 C& C% M: {% }) y                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
/ |2 ~1 b1 u" q0 k  O4 Z0 x! S' h                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
' i% i" `; o$ o2 _8 D                break;3 B( D1 q: T# c( F6 r: G% c
0 n1 x; W2 y: s! l
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,/ z9 i& n0 B( m( x: d7 T$ N. f
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。3 \. g+ \, U- ^' H" t9 e4 e
        不知道亲们有没有遇到类似的情况,是怎么解决的?8 O9 X# S/ t8 ?+ q# i+ }+ L& r

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-12-1 22:01:12 | 只看该作者
如果4块正常的话,那驱动应该是没问题的,多半是硬件的问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-29 07:21 , Processed in 0.037971 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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