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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
7 o* z5 w* d7 H& ~& Jhub 2-0:1.0: over-current condition on port 11 x! z) x8 G9 F- w% ]8 V
da8xx_musb_interrupt 538: VBUS error workaround (delay coming), {% D: U1 n9 }. }
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会/ A+ n5 x+ B& j3 [. ?
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,( H* w. f5 Z# u
发现,在da8xx_musb_interrupt函数中,有如下代码:8 b# z; Z5 s+ b; ?4 q
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {, U6 R: V2 n; g( X4 m
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
9 |' R+ g) R' w% c' k                void __iomem *mregs = musb->mregs;8 ^$ X: L# W$ ?# \9 E
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);1 c' i. [1 g  w7 z, ^
                int err;
) N6 K9 i$ z! P6 k) i$ R
0 D* X& F8 [. Z0 w                err = is_host_enabled(musb) && (musb->int_usb &
4 p6 g+ I1 \! I. \, v                                                MUSB_INTR_VBUSERROR);3 c3 a0 M3 u* W( x
                if (err) {
! J' d% @+ T) U0 b8 v% o                        /*
, R8 M) m( a9 q' V, j5 z3 G' T                         * The Mentor core doesn't debounce VBUS as needed
. t+ k: M4 Z7 {, S* K' C% i1 x8 v  _. w                         * 。。。; ^: X. A( R; m
                         */' I7 x, V! h1 {& X5 [0 q4 S
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;- `# v" i1 k( t$ J7 q& q
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;, r) \0 j& P: C; U: e
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);& d7 U# E8 |% p% Y) p
                        WARNING("VBUS error workaround (delay coming)\n");/ [$ Y- t  _* T- U
                }& y3 `+ ?% c1 Z0 H) }$ f

8 q& L0 g3 c8 a1 ~一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,' n* r' j7 l' F, p% i/ s* Z6 j
跳入如下分支:* Q1 B" i% |7 d2 g0 Z+ D
devctl = musb_readb(mregs, MUSB_DEVCTL);$ v$ I% C2 @* X
。。。$ ^3 K% m. I9 v
case OTG_STATE_A_WAIT_VFALL:
& y8 Z7 s( ^8 v' j                /*
% e2 a+ K' w: x: p, [* k) K- R                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3- q, x- u1 z' z! Z6 c" N+ y
                 * RTL seems to mis-handle session "start" otherwise (or in
: X$ y% j4 C$ v. Y0 ~% \+ f" c$ ^                 * our case "recover"), in routine "VBUS was valid by the time
0 K# C/ H8 S" l# M& s5 R. F) d                 * VBUSERR got reported during enumeration" cases.
, f3 |- C) W3 n8 h. I# m( k2 M1 t                 */
: t( D5 ~3 W& c. X2 Y: N                if (devctl & MUSB_DEVCTL_VBUS) {
- ?$ M. P" d/ F5 T' e5 ~                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
: S. U) }- V/ p3 L5 B& k5 {                        break;% Z( h) u! \! H) Y' ~2 p
                }
& S' c0 J  {. ~9 z                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
, a* }8 z0 K! y% {0 b                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,/ J4 q6 @1 ~) Q6 n# ~. Y: S0 a  y# M
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
& l' G) ]' V; W, z% s                break;
) C( @; w* S2 ?2 s# w5 X3 {
/ l5 @  @* F8 r9 U6 ~1 u其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
6 j/ ~; y) F6 y/ T# G不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
% R- f, w6 x) F) ^& i        不知道亲们有没有遇到类似的情况,是怎么解决的?
, a* L/ V: x* U+ d1 L1 Y; ^  z

本帖子中包含更多资源

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

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-6-17 21:33 , Processed in 0.038008 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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