关于USB的问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:" A8 ]0 r1 O  G& [
hub 2-0:1.0: over-current condition on port 19 |3 w; e- `; p+ F
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)
. _; Z( e0 [4 x" d/ D! r; F我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会' x! u3 I" M& M* @) j9 q! M
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,- m7 A! k! h4 _- W
发现,在da8xx_musb_interrupt函数中,有如下代码:4 w1 ]. X4 w9 @1 [: k- F- d0 |
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
' m: x) Z/ ~& J/ P                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
5 j, V! v1 L" c* e$ Q( n; t, ]                void __iomem *mregs = musb->mregs;
( @# X+ C( R0 _; _$ S# \                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);! Y: n) I* C' _' O/ P0 m7 ~
                int err;! p" `3 T' j; H4 R0 @3 W

- |2 [/ Q! I+ C( R. w! K                err = is_host_enabled(musb) && (musb->int_usb &) y. y6 \2 y# J7 R( O0 _
                                                MUSB_INTR_VBUSERROR);( B5 r, t7 X! d- {
                if (err) {$ O  }, G8 V8 ^3 O: O, ^! U$ J9 R- g6 G
                        /*
6 J% W# C! W! k2 F5 [# @2 h                         * The Mentor core doesn't debounce VBUS as needed
2 k' V# p. E7 q7 n+ k                         * 。。。5 t3 u0 K9 H. |/ K+ O3 w2 @
                         */5 K$ Z: o" W; ]( F6 m
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;/ @3 |1 C: r: ?7 L2 L+ H
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;( a. V* Z, U* t3 g
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);! x2 U: q- X4 ^+ }2 x& r5 Q1 M
                        WARNING("VBUS error workaround (delay coming)\n");
# V( d9 j. B( b( n6 X                }
* A0 d$ l% t2 O( I0 I- I- D6 u* L1 D! {( d4 O5 P5 J8 j
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
& U  S/ ~) `- ]/ r) W1 l0 Z1 M跳入如下分支:0 F' ^: r8 C% I! H" A3 d
devctl = musb_readb(mregs, MUSB_DEVCTL);
: B0 N1 ~' v" h( Q$ t4 z6 D。。。
9 e  }+ o# _- _! j. dcase OTG_STATE_A_WAIT_VFALL:9 O! g; S: D5 w
                /*% h; M9 h: t) |
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
0 S% E) D/ V" c  o                 * RTL seems to mis-handle session "start" otherwise (or in
2 Q$ a8 I/ f7 x* l& q                 * our case "recover"), in routine "VBUS was valid by the time# B6 r6 f$ e& x( F3 B3 ?7 l
                 * VBUSERR got reported during enumeration" cases.
4 D7 D" `1 {& `; m0 u5 m                 */, M: \: g# z. ~8 }* I1 A
                if (devctl & MUSB_DEVCTL_VBUS) {
/ h/ _5 s; \1 C                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);4 f) B/ x* T' G2 z
                        break;
: Y6 |( s2 v! `  {1 c                }
6 I1 i0 o& @! Q                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;0 `) E4 C* h/ ]' ?5 g! b0 w, \
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,1 M+ w: k) l1 F+ v$ m
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
) z$ E* f" q# k( W" c8 n2 e                break;
$ G2 o3 X* ?& G$ \- u
" Z: L9 u9 j; p$ p) i, P+ |" L: u其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
" s$ R, A2 p/ x; I: v, t  J/ P9 m# w不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
2 W1 [# X# B4 b9 w- j        不知道亲们有没有遇到类似的情况,是怎么解决的?
& k$ y9 L, ?  A* |' O' x+ |% d) k

本帖子中包含更多资源

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

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

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 05:07 , Processed in 0.041522 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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