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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:: F8 L) x; @% N) s# L
hub 2-0:1.0: over-current condition on port 10 g5 R$ I: e0 O0 V6 L# F
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)8 K/ m  M4 O# b' ]7 Z; S+ x
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
0 w# F2 R6 D5 f- G& |0 T  T随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
- c4 q6 N0 I3 m2 V# G发现,在da8xx_musb_interrupt函数中,有如下代码:
: Q( i( ~8 `- ~" u' l  e% e1 Kif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
/ m  S; H3 Z# o4 `5 }; p% q                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
4 \: L0 I9 k& P+ i; z                void __iomem *mregs = musb->mregs;
1 Y( n8 E" I- J: a/ H                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);( o  e3 V& M3 R! g6 I' b
                int err;
) G9 c0 @' l" q9 z3 O. V8 f, ?+ g4 f: E! I: F( \, D; n' ~
                err = is_host_enabled(musb) && (musb->int_usb &2 ^/ t% b7 \$ B5 a9 N5 C
                                                MUSB_INTR_VBUSERROR);
/ k; M1 G  C- k                if (err) {
' i5 G/ Y) q2 F9 f( O                        /*1 j" Q1 i; P, G/ v! }7 g/ d+ L
                         * The Mentor core doesn't debounce VBUS as needed
5 `" L* J- Q% A9 T                         * 。。。* C: }+ H  Q: _& W2 N
                         */; K" n, `: Q/ c4 `
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
. g: `$ A' I; Y8 M( i                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
# N7 v1 @! ?1 L. V# m                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);+ l2 T) G6 m1 i' H$ a) R( D, X
                        WARNING("VBUS error workaround (delay coming)\n");8 B7 }: T! @9 B4 Z3 q) [4 b) Y( u
                }6 d  |: C& P# c
# w8 ?5 r# c+ ^  C8 ~2 f% M" u
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
% V0 d- F6 m8 n" J跳入如下分支:
7 u  @3 E- A- ~/ u3 Sdevctl = musb_readb(mregs, MUSB_DEVCTL);. ^6 F" E. J' e
。。。
$ N& W1 F; B8 Z' w6 E' I. _case OTG_STATE_A_WAIT_VFALL:
1 c) ^+ D3 S# C                /*2 [7 m# M  x! ^: O# U" J. x
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
7 G' t9 O+ q/ M, c+ X, l# u" B                 * RTL seems to mis-handle session "start" otherwise (or in5 I# a) C) z$ \! ^% m- z
                 * our case "recover"), in routine "VBUS was valid by the time5 F: g  O6 ?3 ]' H5 \
                 * VBUSERR got reported during enumeration" cases.4 i9 u1 m5 n$ C  G
                 */
: V6 f1 t  X( r9 S  d' P                if (devctl & MUSB_DEVCTL_VBUS) {* _- S2 x: l: r
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
8 Z* C# g. T6 k: i                        break;
' D1 ]2 ^5 h( @; e. ]8 ]                }  [( j3 t8 j4 J4 l) G
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;4 O3 v3 K2 A" D5 C
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
- C: o' G: a, W) P' L# l                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);* t: S  g+ w& `6 \( u
                break;
6 j! \- ?$ |! s, W- w
9 X8 a6 P# z, U: x& k: J! Q其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,* K! U' q2 ]. u! r
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
' m8 e, q7 a) o4 x3 c+ m( Q        不知道亲们有没有遇到类似的情况,是怎么解决的?
5 l% q/ t; h% c% S, ]5 W( N

本帖子中包含更多资源

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

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

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-12-1 22:01:12 | 只看该作者
如果4块正常的话,那驱动应该是没问题的,多半是硬件的问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 17:05 , Processed in 0.038146 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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