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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:8 H$ v5 [! b6 k7 g# q5 k, A4 [
hub 2-0:1.0: over-current condition on port 1
% m* |9 e( l6 s, zda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
: h1 e8 n+ c' R3 m7 l) x我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会/ k4 I' x9 L9 f! A
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,: L7 I3 y7 T. W; E1 m
发现,在da8xx_musb_interrupt函数中,有如下代码:- k2 n. s- Y' c  C0 V% G
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {3 ]/ [: s" u& n! G8 E* ]! f
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
! X2 `; E* h: l, V! q, t3 Q5 w2 A                void __iomem *mregs = musb->mregs;
6 S+ {) m8 O2 z4 T. |% m4 o. S* D                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
! \+ A( E0 o3 ]$ ]                int err;
: h- N" i6 l& S9 }. x8 H- X
2 i6 B" w6 T8 y                err = is_host_enabled(musb) && (musb->int_usb && u2 f4 W# r8 m7 A4 l2 \: }8 m2 a
                                                MUSB_INTR_VBUSERROR);
% _: t* X5 `9 u                if (err) {5 l5 k4 m, S2 m" g1 t' s/ ?
                        /*. C/ R" r4 E! @" z! F: W
                         * The Mentor core doesn't debounce VBUS as needed
, q6 n% G6 ^6 A, F& ]% j4 Q: H2 e                         * 。。。+ R. @" @* o8 K
                         */- z# K( n# U8 n1 t2 n
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
2 h. {4 q/ g2 m7 O% f" Q1 w7 Y                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
4 D( [' X" n/ p                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);0 Y. C( l7 q' t3 ~3 \& f6 D8 x  t
                        WARNING("VBUS error workaround (delay coming)\n");
! o. k% u* @( F, W6 B4 v                }) i2 {9 n6 n+ S4 q
9 O% \' Z8 Y$ _1 W
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,* O( |7 Z# }# D% V. D- W
跳入如下分支:
8 ?: x, b! J( Y# ldevctl = musb_readb(mregs, MUSB_DEVCTL);
. z1 x4 G& X5 s! ?7 e" u- L8 _。。。8 ^5 a+ {( }, A3 c
case OTG_STATE_A_WAIT_VFALL:
/ S+ `. }  _' b7 Z1 V                /*
: z# F) {* c4 o6 R, Q! \# l2 P7 g                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
, \0 \# v. t& `7 U, p% `& z                 * RTL seems to mis-handle session "start" otherwise (or in) V+ W3 G" A( b$ g6 u0 y
                 * our case "recover"), in routine "VBUS was valid by the time, _5 y9 u6 m& A* a5 z4 W
                 * VBUSERR got reported during enumeration" cases.
4 I. B* c6 B  ~/ Y                 */- h7 b9 o% o3 e! J6 K* l
                if (devctl & MUSB_DEVCTL_VBUS) {4 A  `5 m# {* y" M1 F8 d9 T2 c
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
  b9 K5 b. x, t- k" W1 q" j  ^0 ]                        break;6 _% p3 Z9 X4 P
                }
5 K$ [7 Y( ?! I  z" Q$ c                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
+ I1 t2 m/ y+ R% ]                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
9 t+ z/ Q% p; x* B0 {                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);; Y& p( @6 Q3 R! L. Q
                break;% B  e- @2 X+ C6 ~, @

. S1 l6 H+ j) D; f2 w3 _" V1 w3 B其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
. Q! S. o' J8 v1 E4 B1 O3 @; b不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
0 J. y7 `3 Y) |1 }+ h2 J        不知道亲们有没有遇到类似的情况,是怎么解决的?
, S! O7 r  Z9 ]: e

本帖子中包含更多资源

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

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-8-3 23:55 , Processed in 0.039259 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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