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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:: f$ N; b9 H  B8 O! z9 @5 c  l! ^/ S
hub 2-0:1.0: over-current condition on port 1/ n/ t; A- o: C% R# N, J
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)
0 k/ C  R7 A" k6 Q我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会: H; N) [" T3 ~- Q
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
) P" K/ Y& N" i& w发现,在da8xx_musb_interrupt函数中,有如下代码:
; p1 n+ i# S* Zif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {, Z  m- a8 P% u6 ]9 |" _+ V  z# U
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);: r/ P. t. v4 j, l5 [& l
                void __iomem *mregs = musb->mregs;
  S' A4 A+ r0 o                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);* b1 A2 j  E* {1 V5 z" j/ D0 x
                int err;, T& e6 y! r% `

/ M2 {- H7 M4 h  k' e5 g                err = is_host_enabled(musb) && (musb->int_usb &
3 M4 M0 r5 }3 U) o6 J2 y3 k                                                MUSB_INTR_VBUSERROR);) o  B" b! A: M
                if (err) {
, Q1 L* d" A5 ~9 {, V% }( u                        /*
: O; K8 P: x8 L: s9 N  k) ?                         * The Mentor core doesn't debounce VBUS as needed* N' O; l! w; m8 }: C, w0 K/ U
                         * 。。。$ {3 K3 [. n2 p/ S- i* Q* i
                         */* q6 M) V2 r7 W
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;$ ~: W- N$ m& z/ t9 x- Z8 A/ k
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
( U! V% a7 b) e" p9 c# G                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);- F% y7 e$ p5 u
                        WARNING("VBUS error workaround (delay coming)\n");9 x( V0 g( ?: E# n% n0 o( X$ l
                }5 k( X) n, _% a0 T
0 G2 {6 ]) m7 r+ Y: u+ @
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,2 e! ]2 n2 h# X) W
跳入如下分支:( e( I) t: Q+ p
devctl = musb_readb(mregs, MUSB_DEVCTL);
0 ?1 `( q! |8 B# n9 m$ V% z。。。% r6 @4 Y/ S# P2 l) ~/ |9 u
case OTG_STATE_A_WAIT_VFALL:% \+ p8 \* I$ b
                /*, ?) p; I5 v! h, ^
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3# k! w# E' L% Z- w% h* l5 c
                 * RTL seems to mis-handle session "start" otherwise (or in8 ~8 \: Y/ P0 t2 s. V% \* e, `
                 * our case "recover"), in routine "VBUS was valid by the time* I4 r$ ^" I' v9 d9 H7 l: r+ \
                 * VBUSERR got reported during enumeration" cases.
' s- X# S; k$ O6 I                 */5 g2 ?) {: T) C$ ^
                if (devctl & MUSB_DEVCTL_VBUS) {
, z+ h% f0 @/ k1 Q& ^                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
1 {* j6 j' O- p" Y8 F) T( g                        break;0 M" H" T# I# o4 L* [* @
                }% t$ v4 ]5 W" Y+ m, O9 Y! c3 k& L
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;0 K, x/ p0 z2 d" e( p4 u' D# _
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
7 j) b3 Q$ f7 }                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
+ V, ]% r  H9 h                break;
; E7 n% w- w2 Y9 b* H" j. @: J! ^' V: M# |
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
' ]7 r( x9 k" _不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。* |4 J4 T$ A, @" F2 \: O
        不知道亲们有没有遇到类似的情况,是怎么解决的?
5 m+ C3 ^! @9 u, P# H

本帖子中包含更多资源

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

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-11-1 13:33 , Processed in 0.047613 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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