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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
2 V; \* o, S4 phub 2-0:1.0: over-current condition on port 1
1 B4 t* n# c  x7 sda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
5 F" s4 S) A' A, n# m我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
9 ^% z& ~$ N0 N; }& H随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,& x+ ?+ n% I. a0 W
发现,在da8xx_musb_interrupt函数中,有如下代码:
8 Z# o, H( F9 c: A# _  F5 u6 `if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
/ }% z4 b+ I! j8 Z' A+ u" g                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
" O) L# Q* b3 E                void __iomem *mregs = musb->mregs;$ n& \3 x4 S( l* _. ]3 g9 r+ \
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
5 |; E/ {1 B9 i+ a5 \5 X$ B                int err;
& C$ `0 M$ _. K5 k
% [) `4 C% ]( w5 f                err = is_host_enabled(musb) && (musb->int_usb &
5 Q8 y4 {! M$ K9 O3 U# `                                                MUSB_INTR_VBUSERROR);9 k0 H" Y" I) H( J
                if (err) {+ y* E. ?- O; p" v8 m5 b- s2 `, u" Y
                        /*
) R6 y6 m9 ^( Q6 l                         * The Mentor core doesn't debounce VBUS as needed! t' U. [$ p$ J
                         * 。。。7 h" d% H" B8 w& u8 X) u
                         */
0 z8 w2 f* ]5 t8 D                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
" N% u7 P# D+ w: G1 }( S) T                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
& P; T2 @: s8 O% ~9 \                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);! b6 v- }. |) g) E1 e/ v" ?
                        WARNING("VBUS error workaround (delay coming)\n");
+ a: b+ L  C% H4 Q% b/ b) w9 i$ w" D                }
3 [' w8 b/ v4 _7 {; P! a3 T
+ b' C3 `! Y% P一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,8 m8 a* D. d: X  o
跳入如下分支:$ l$ ^7 U! M2 O! N1 }
devctl = musb_readb(mregs, MUSB_DEVCTL);' e" W# B- v3 f
。。。; Q" e/ M2 G" s: J
case OTG_STATE_A_WAIT_VFALL:0 u+ z0 ~, k* G
                /*! I, v  m) l6 R1 ]' W) Y$ e( C
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
9 P; Y6 J# U" W* W. {- l! \/ [                 * RTL seems to mis-handle session "start" otherwise (or in
" R; I0 R: p- ]4 b. i9 g                 * our case "recover"), in routine "VBUS was valid by the time
; Q$ X' \0 @/ ?8 P1 L+ O" W                 * VBUSERR got reported during enumeration" cases.
5 g2 ]0 \0 k7 |$ h8 e: m/ T9 @                 */
) G+ G) A2 l5 f  E! S. H                if (devctl & MUSB_DEVCTL_VBUS) {
9 C6 R" Y! H8 @8 \, N                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
- {& O0 B* B0 [3 c                        break;4 W8 ^6 J2 {+ R/ b; O- l
                }1 @" [2 ^9 C6 L( b& G) h! r
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;% [  w" V8 a# F# [5 M. ]8 r$ u- N
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,$ p3 p& a9 l1 v2 Y) [) P6 N
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);  ~: O$ [! P2 f9 O( O) c
                break;
+ M' @, {$ _7 }9 r7 B3 |8 G% q) v1 S" {
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
" d' V' f# U$ y' o3 H不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。: R0 w( r" u- E7 v
        不知道亲们有没有遇到类似的情况,是怎么解决的?. g3 L9 n3 O, g& P- H( H

本帖子中包含更多资源

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

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-4-25 09:58 , Processed in 0.042301 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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