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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
" Z  P+ \' d- |# l* ~; W) Bhub 2-0:1.0: over-current condition on port 1& Y" u# {% }0 f3 W: q
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)
+ g5 D  C+ l' X我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
5 ]5 d) W8 i; m  o随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
' }7 c! U8 N0 I( w3 l4 z/ C发现,在da8xx_musb_interrupt函数中,有如下代码:* z/ @$ r7 i9 O6 ^. H2 B8 X9 U
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {& A' j; U9 S) F8 Q
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);6 W# Q. M" a# x7 M" \1 w6 x  H
                void __iomem *mregs = musb->mregs;. f8 U: _. S( C) y! O
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);" v$ {7 h3 c2 j2 c/ B" e5 q' Q
                int err;4 t+ h: U8 H1 c/ a
# d2 B- X! b! ~- B
                err = is_host_enabled(musb) && (musb->int_usb &% R# b+ q3 l3 ^3 T3 l4 \- d, N) C: p2 m" f
                                                MUSB_INTR_VBUSERROR);) {+ h! u: l: Q1 f* d' h
                if (err) {4 a3 d+ A) {+ r
                        /*
, Z+ U, s+ J- m8 }7 B                         * The Mentor core doesn't debounce VBUS as needed6 a$ R' u# J' L! d1 _7 H# L6 R
                         * 。。。
! c  M7 Q( b& a                         */) t/ ?# P# m" r- u: J9 L- h
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
$ ^1 z1 k$ f/ s  u# X                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;: n% A3 X  k& @" m
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
& V3 u- N: k- N1 E3 o: d* \) c                        WARNING("VBUS error workaround (delay coming)\n");
" ~' w7 I: o0 W                }* x& Q9 O: B5 B+ O) h# j. ]# ]6 z
# j7 Q' l) q" V" `9 q' n
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,. G- _/ j6 C, p
跳入如下分支:: |8 t, p+ w! ~# ]" I5 Y/ T! F
devctl = musb_readb(mregs, MUSB_DEVCTL);
  z8 g3 u% L$ k( K9 k7 w3 `。。。* K' O9 n' k# [. v
case OTG_STATE_A_WAIT_VFALL:% f7 M+ T0 P9 x5 I. B( b: d
                /*
. W& F% y, ]( Z3 @2 D                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
/ ~7 G* u7 K, D4 n                 * RTL seems to mis-handle session "start" otherwise (or in# S1 S7 p6 E7 ?
                 * our case "recover"), in routine "VBUS was valid by the time* k' W# d; K. K7 r* s0 H5 i
                 * VBUSERR got reported during enumeration" cases.: I, x% v- P' R$ Q, ]( b
                 */& y, }0 i  U6 `2 O7 |- L
                if (devctl & MUSB_DEVCTL_VBUS) {1 Q. q' P& a0 J/ f% g3 q" s
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);1 h0 L  f5 n) Z9 o" h! T4 _. f
                        break;9 }5 I& D6 B3 v# |& i/ n
                }
/ K/ h% b' `0 X) a* B4 Z! V                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
$ b  q/ E& }, A5 a* Q/ x$ ?                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,6 Z0 o% E3 v. o2 ^. n7 ~
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);% V+ _, g' H/ d2 r7 l, {  z5 o
                break;
4 u; a, W) s; O& y% o8 n' m8 |: K
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,; G) k9 y0 Z3 C* ^; D( B9 y/ i
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。; {" d$ ], n. O# L9 Z0 l( E
        不知道亲们有没有遇到类似的情况,是怎么解决的?
) E( B+ n8 G% m  o0 o, Z; ?% i

本帖子中包含更多资源

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 11:14 , Processed in 0.037150 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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