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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:" q2 R, \& h* Z
hub 2-0:1.0: over-current condition on port 1
/ j% z: u9 M1 B& f( i* d' Uda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
- p: s* g" \4 k: x( E我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会) W1 T+ d# c8 X, S" a4 b7 b8 {
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
6 P! p' D: k6 |' ?8 U发现,在da8xx_musb_interrupt函数中,有如下代码:
% D5 N$ ^6 {) a% kif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
6 |7 V  }9 }3 z! P+ F0 _% j                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
! z- a0 K2 F" i9 t4 n' h/ c" V( Z                void __iomem *mregs = musb->mregs;
6 N3 z& ~! I- f' w( J2 t7 \                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
% R  Z% f6 q9 ^$ h, ]2 X3 Q                int err;5 R! J0 G6 Y) L# n& K: r

+ w4 j2 e# c% ^: x                err = is_host_enabled(musb) && (musb->int_usb &' G7 B4 x% o- C# t" j  Y3 w( b; D
                                                MUSB_INTR_VBUSERROR);
! k8 V1 j0 X" b, r4 P2 a                if (err) {
/ L# D2 F% @! B: f4 `                        /*
- O9 Z! [1 G( r9 Z4 A$ @% z                         * The Mentor core doesn't debounce VBUS as needed
- M% G6 a% p; r' N& ^. {) V. a) e4 I6 f                         * 。。。
+ R  l9 \, V% X( b                         */0 a/ S3 a) w" V, K6 F
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
" l( b, O  ~2 n/ E                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;7 `6 Y, `' Q/ ]5 K# a5 Z, x
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);7 }1 [! A. m! P9 r2 V# @
                        WARNING("VBUS error workaround (delay coming)\n");
& L* x2 n, I% g  @                }
, b/ B+ s3 x0 O' @" x
8 n; Q# `: B+ m, c1 A6 I一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,7 d' {6 ]; S8 ^" o% y8 R/ q% X) @/ v
跳入如下分支:: U; d  J5 r0 c' ?; v
devctl = musb_readb(mregs, MUSB_DEVCTL);
) l: ?( s. S) b! Q。。。/ G) Z% r3 ^3 i9 V8 P) `
case OTG_STATE_A_WAIT_VFALL:+ L7 w4 F( ^2 j, c2 p
                /*7 k$ _4 E' B6 b% `9 Y. L: k
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.36 q: n9 b2 H0 W6 `: E
                 * RTL seems to mis-handle session "start" otherwise (or in
7 g$ o' [. ]1 Z4 n$ u1 s                 * our case "recover"), in routine "VBUS was valid by the time
) P" Q) M$ L1 s! ~                 * VBUSERR got reported during enumeration" cases.
" v, w' z8 |( u( u( ?: H                 */
+ g3 |( X7 g, p                if (devctl & MUSB_DEVCTL_VBUS) {: H* |8 Q( j/ d0 v( `
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);3 ~( O/ A& X) E3 \2 ^1 f/ Y
                        break;/ n4 e, K; v* Y
                }& s6 R& ?$ k8 X2 q2 {8 P
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
" Q: m- A* X- ?; a2 p                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,$ K0 F; _" a+ x3 m( y
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
( |" O) ^3 ]4 A                break;* q, C& f, ]6 t8 r, ?& t
' W8 N& u3 C7 o0 c5 V9 [6 K
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
* V, n1 A; t% G8 I3 E$ C不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
) U7 x& b. Z6 J  p9 J7 f# T        不知道亲们有没有遇到类似的情况,是怎么解决的?7 q" _3 |9 l3 l+ K; O/ D  m6 r

本帖子中包含更多资源

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

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 18:32 , Processed in 0.040491 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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