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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:& Q) X& K( F, A1 ]/ a; d* f( V  v
hub 2-0:1.0: over-current condition on port 1
' |" S0 d% g3 c$ A# lda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
# V( k+ V% e" {我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会% O: Z/ C, Y5 R8 A
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
) X+ h* E% q" f# u( o( e* r& Z发现,在da8xx_musb_interrupt函数中,有如下代码:
2 w* u% S, k! t$ [$ u4 I6 Rif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {2 s! M: Y6 i* M# b: o
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
5 J0 x) \9 u" e$ \" G4 o" h                void __iomem *mregs = musb->mregs;* E& L# f* f( C
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
+ z$ u: Q0 w; D                int err;
1 s2 l) }5 ?, q; o" V+ C
. N& }0 _! Q3 V2 v7 w                err = is_host_enabled(musb) && (musb->int_usb &- i/ A: r, [! M
                                                MUSB_INTR_VBUSERROR);3 ]3 U3 I7 W5 {& i* |3 ]5 P
                if (err) {
: N/ x. l9 R( D; ^! H8 g                        /*
! Y' W5 A( a' k9 j3 t, _# D! y7 ^; g                         * The Mentor core doesn't debounce VBUS as needed
8 S: Y# j; i* Z1 O2 h+ Z                         * 。。。
( t* q+ a, {/ f( l6 ?                         */
5 g+ u. ^% C9 T/ @. _  B( w                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
4 m- B8 L: f  z2 k; F' f                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;% j9 @+ S% n/ j5 ?4 e/ S* z8 D6 [
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
7 }7 z1 i! ~: S0 w$ C                        WARNING("VBUS error workaround (delay coming)\n");
6 C( ?( W% D$ S6 K( T                }
$ c4 {. u7 `4 q5 }$ k0 x( P0 R0 Z/ @+ {9 ?
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
( m& Z3 F9 [/ I! Q跳入如下分支:: m5 g! t: _5 U5 i2 }8 K9 p
devctl = musb_readb(mregs, MUSB_DEVCTL);
% V, Q6 P" _/ z3 `7 m1 m9 c。。。8 s/ A- @$ \; a/ o7 W
case OTG_STATE_A_WAIT_VFALL:- K2 ~/ N+ j3 `
                /** S& K3 P& W  f& s, ?9 `
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3) [8 U- S. h2 E1 ]
                 * RTL seems to mis-handle session "start" otherwise (or in9 F' v6 l4 W" k
                 * our case "recover"), in routine "VBUS was valid by the time4 ~8 V* n' o$ Y  Z% D- ^1 ^
                 * VBUSERR got reported during enumeration" cases., U+ u- T2 [* u. C
                 */
& r1 x& U" O1 M# ?# |1 r' e                if (devctl & MUSB_DEVCTL_VBUS) {
  s1 K2 w5 A* l. c: q! q! g6 ^1 |                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
$ [- ]* ~7 F( u' L' t! Q1 N6 E                        break;
4 W: d0 Z8 L9 ?3 a/ {) N& W                }- ~3 e7 O4 w% Q1 p* l
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;9 ]0 B" a. F+ s4 R
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,$ s: U% A7 s- m# o: N. G/ s
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);9 c0 h% o# Y6 m5 @
                break;' @" _9 B! P: N

- W# y. e# {( ?3 I, k8 C! E其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
) n) M" w+ v" a9 C3 f9 n& K不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
# o/ {% @: {  K: ^8 m        不知道亲们有没有遇到类似的情况,是怎么解决的?+ @& k8 p) Z' k/ K

本帖子中包含更多资源

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

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-12-17 11:59 , Processed in 0.040650 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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