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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
8 \6 e; D  T1 X  ]hub 2-0:1.0: over-current condition on port 1
/ ]- \- I2 b, d" ^- oda8xx_musb_interrupt 538: VBUS error workaround (delay coming)& ?# j/ p  C, k6 q, L% Q- ]
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
/ I* j' W7 ?" D! z# w, v随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
) k' u/ h6 b, j% x4 G9 N发现,在da8xx_musb_interrupt函数中,有如下代码:
. K- O) b. w9 l# y; }if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {1 M: m( M' \- Y: X8 g9 \. G
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);5 d% o. s. l; R
                void __iomem *mregs = musb->mregs;
5 C0 m/ m" }" }  j- Q6 Z                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);( {" Y! [; v( R
                int err;* S7 d; a" [: n* `; M
1 p( I( Z# a& a. T5 H
                err = is_host_enabled(musb) && (musb->int_usb &
1 x: c/ [5 M5 u! _                                                MUSB_INTR_VBUSERROR);* H. D2 q( B  Y! m
                if (err) {
* Q% g0 ~& w+ B8 f                        /*
( v, `! x/ n5 m4 d9 _                         * The Mentor core doesn't debounce VBUS as needed
' D) z! }( G/ c' k1 |1 e1 l4 i                         * 。。。
! |( Y5 e% q! C* N7 E                         */
# [6 x: y2 F4 A. p( I" S/ H                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
1 ?! r: S, X' Q& I& S$ \                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
9 t; }- R( K- ?/ R                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);* U' l( O# }; {5 x
                        WARNING("VBUS error workaround (delay coming)\n");! N" s9 o2 e; g( k  }; n
                }
4 ?$ u7 T) J9 i8 K" S5 q# Q" b! o4 O- X( X9 Z0 r' ]3 l
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,) w6 @, {. U' ^- B  i6 \$ X
跳入如下分支:
- k% `1 w: r' E( x  Idevctl = musb_readb(mregs, MUSB_DEVCTL);
4 }' L" [, n7 i$ U。。。
: q8 k2 `4 r" v! Mcase OTG_STATE_A_WAIT_VFALL:
3 C, @/ n+ ^/ c5 a# e6 ^6 ~                /*
1 r) @2 J- u8 U" @& G. l                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3) k5 G% \$ J0 `
                 * RTL seems to mis-handle session "start" otherwise (or in9 W# U: g7 d! T0 [$ |3 }
                 * our case "recover"), in routine "VBUS was valid by the time( h* V0 M2 n  n: K
                 * VBUSERR got reported during enumeration" cases." e8 ?  a  k$ f$ q! ~/ H+ B, p
                 */
1 a" f% n0 B9 v) `1 y( _7 }                if (devctl & MUSB_DEVCTL_VBUS) {
+ f( F' |. p; N                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
4 w! @  a% w. X( U                        break;
$ w, U4 ~# u: q. S$ G: D                }* w/ @0 U+ o1 L" ~; Z
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;: ?5 x$ a$ c+ ]. {- z& R
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,! V: Y9 i" q$ ~2 x
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);% Y5 U7 T/ k1 X, j
                break;+ @3 {8 l8 U3 q( c
" N8 Z3 s* H4 j! _0 G) _
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,) j8 z6 E3 F, B. L7 u
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。, f+ e6 w" V; l( H* z
        不知道亲们有没有遇到类似的情况,是怎么解决的?: F0 Y# R4 @* h: h' y6 [" x4 }

本帖子中包含更多资源

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

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

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-19 07:47 , Processed in 0.047165 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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