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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
! m* t9 I3 t2 E5 \* d6 L% c! ]hub 2-0:1.0: over-current condition on port 17 P- V  [, \% @* q  E! t- ~
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)
# N& P6 U" E. J9 o' t1 C我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
% O" r9 S8 Y2 {  I1 Y; k9 {3 K随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
% T7 S. T& r5 \7 u' J5 Z- l发现,在da8xx_musb_interrupt函数中,有如下代码:. L, T% |, S, E8 S
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
4 O8 i9 A+ D! L                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);& D' Z7 b' q  i# |
                void __iomem *mregs = musb->mregs;
; \* b; q4 o5 d: A7 l: N: y/ y                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);5 f+ q+ D  S  ^
                int err;7 V. i5 M" ~+ H
$ Y4 A- C. K4 |
                err = is_host_enabled(musb) && (musb->int_usb &
0 B! Q( U! G9 y+ G4 L; ?# W                                                MUSB_INTR_VBUSERROR);! n# U2 Q! E, b$ h
                if (err) {
2 @; `! m" S, l4 b2 z! I                        /*
$ _3 s6 L) O1 T9 A5 _4 T                         * The Mentor core doesn't debounce VBUS as needed1 G0 M$ E# }* T) N
                         * 。。。
) t  F$ j9 I6 ~' ], x* _                         */
8 |0 i; Y0 B9 q! |- P; ?9 i4 K                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;4 }/ Z$ r$ r! u5 y" F
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;0 y2 L! q( v; _' t& |2 \6 p0 R
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
: o( `$ J0 Y0 s                        WARNING("VBUS error workaround (delay coming)\n");
" c% {2 z" q) R3 z                }- q4 l) S  L$ L' L; @

0 z$ u" ^# t3 G( X5 p  l5 q1 _一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
2 e: C2 H7 z+ I1 m  j! ]5 N+ U- G$ x9 p( N跳入如下分支:* U. K# R1 m/ }8 Y( v
devctl = musb_readb(mregs, MUSB_DEVCTL);
: a; m$ w# k( C. ^4 k( _6 G。。。$ s6 J1 _+ }# b9 ]3 i2 I  ~9 q
case OTG_STATE_A_WAIT_VFALL:
2 Z; O# x/ J! w3 Z  ~8 z                /*  L& ]7 M& }( n9 N8 r! s+ T  q# X
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3& K, f, y% O! t3 Y$ |) [
                 * RTL seems to mis-handle session "start" otherwise (or in
' w/ G# R; ~% P' J/ C' f: y, C; w                 * our case "recover"), in routine "VBUS was valid by the time7 n! d2 u$ P5 l
                 * VBUSERR got reported during enumeration" cases.
1 U- k6 y; D- O7 f9 i* ~  Q                 */; U1 }; v. w* ^( o( B+ A5 e$ p0 w
                if (devctl & MUSB_DEVCTL_VBUS) {
3 R1 a! _: B2 J; Y- O                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);% G0 [/ K- F( M7 [; @
                        break;! v1 F! B2 b* D3 h# d9 N
                }' s. n5 u) W/ t7 ]
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;( k4 X7 p; f% u  o6 W
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,/ P2 u  W* @! q* J! i
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);8 N+ C" B$ [8 B5 x
                break;
' u5 Z0 q/ r* j% x
: D2 `! E  x( `4 F其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
7 e  w" D7 R! @6 N. z8 o  n不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
6 }+ c$ S0 t: w3 r8 B% K- {- E8 w        不知道亲们有没有遇到类似的情况,是怎么解决的?( d) B4 w% t  f% y1 D+ W  O

本帖子中包含更多资源

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

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-6-17 23:21 , Processed in 0.038132 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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