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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
0 z) s, D5 Z  s1 X3 }2 }hub 2-0:1.0: over-current condition on port 1
, E* b% X) R& o+ V6 R& }da8xx_musb_interrupt 538: VBUS error workaround (delay coming)
+ |  [/ ]7 L7 ?8 w我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会( Z" ^& Z7 t8 J7 r
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
% q: y( q0 q; Z/ f4 N发现,在da8xx_musb_interrupt函数中,有如下代码:* r; S5 V+ g3 v' t) \0 |
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {4 u" ^$ V1 p) s1 Q/ T) ?. c! m- _
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);$ J8 T. B; B& |# F0 P
                void __iomem *mregs = musb->mregs;
8 ]- v6 x0 y# ^% Y- v" ~9 t$ z                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
% i- B' i1 ~3 |6 y                int err;
2 n& {* u; ?& _
6 C- f; c" ]! b) J                err = is_host_enabled(musb) && (musb->int_usb &
! _6 ]/ U) C9 b                                                MUSB_INTR_VBUSERROR);3 _7 ]1 Q1 `3 M& e; Q) h
                if (err) {
/ M% r- ], @8 K- Q: y+ b8 s9 n                        /*
3 r1 [  T# `! n% N1 x                         * The Mentor core doesn't debounce VBUS as needed
! _; v5 |3 y( e; l. O                         * 。。。
! D  ~6 T/ ]4 T) N9 |# ]6 B; A                         */4 m9 x: z5 a, U  X  }8 H! m
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
# ?0 w) Q8 ]7 _) I                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
9 }8 V/ g2 _1 x5 y0 b6 F                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
3 C2 Z6 Q, A( k3 ^6 s7 q2 ^                        WARNING("VBUS error workaround (delay coming)\n");* H4 [" s# {! t! a+ k/ S1 l& E
                }9 o8 q& w  o' w( T. G
1 h9 I0 x* f. D& h# `
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
5 b' A& h* H+ N9 _. b* v1 v. c' W跳入如下分支:' P2 {' S3 E5 A0 E  O& o
devctl = musb_readb(mregs, MUSB_DEVCTL);
4 G/ v( v$ i' X. i6 N3 T. B。。。
% k  X0 G& s3 t5 x$ a! F* Ycase OTG_STATE_A_WAIT_VFALL:6 U! ]8 A7 G- ]; {2 Q5 m
                /*$ _3 S& s2 I6 A" U6 M: E$ x, l4 R
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
1 [, V3 J% f* W  R& ?5 W6 D                 * RTL seems to mis-handle session "start" otherwise (or in. S4 F2 m/ M/ u8 t( r
                 * our case "recover"), in routine "VBUS was valid by the time6 a7 H& G( S' w  T
                 * VBUSERR got reported during enumeration" cases.1 g/ @0 R) \: k
                 */
) Y% u4 x9 h/ [1 U! S+ ?                if (devctl & MUSB_DEVCTL_VBUS) {
" w( t' O9 T. H1 v" i# s# c2 \/ O( f                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);5 p( y5 ]" \# i; q+ {9 P
                        break;
: ]+ H* x( e& L1 ^                }! L9 W" Z) g# b
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
8 y! y  G; g4 K( c$ O                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
5 q8 L0 H+ k. y% o                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);- B8 z! p" l0 s+ `* C
                break;8 q: K: z, X, l* s  S. [
' b0 H. M6 W1 F
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
& K% ~7 l, n( j& T( _8 x+ K- n不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。! ]! e( b9 Y5 h5 x' p0 D( T+ v
        不知道亲们有没有遇到类似的情况,是怎么解决的?
9 \, Z; m% r/ V+ z# c5 Y

本帖子中包含更多资源

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

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-7-6 06:35 , Processed in 0.044618 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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