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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
0 i; `/ `$ Y- f* q6 Fhub 2-0:1.0: over-current condition on port 1
3 ^7 [% v6 c- Z9 |# _; G! Lda8xx_musb_interrupt 538: VBUS error workaround (delay coming)2 H+ |  q) s9 j/ H
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会6 [6 j3 e- \8 ]# Y/ ~* X
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
1 ~) Q5 o' r! o; C, `发现,在da8xx_musb_interrupt函数中,有如下代码:
! K8 X7 ?0 l+ U$ m' R' Z* Kif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {5 }& W1 J7 \. m: l* g* K
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);& S/ g  o- k$ S# u- w) l
                void __iomem *mregs = musb->mregs;* P- L% A' C! `6 n6 z5 N) y9 q
                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
1 v6 O- `7 h1 b( R. G6 M                int err;$ W; C: R# i- n; B5 H0 f- x8 f5 C! e
! H2 z$ h/ m7 Z/ M( o" k
                err = is_host_enabled(musb) && (musb->int_usb &
4 l) H: A% K8 O" r) X/ u+ S; q                                                MUSB_INTR_VBUSERROR);* @! m/ g! Q4 Q) W) w
                if (err) {, o6 ]  s9 l6 w' B3 S
                        /*" \% c" J5 z- z1 U
                         * The Mentor core doesn't debounce VBUS as needed
7 z, a+ g0 K& Y) z- M                         * 。。。# d, X1 M0 I! l; Y
                         */
& ^- v" e; M) z9 s" I* @6 s( o5 [                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;% m! r# Q! {0 N( H
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;( X0 l* L+ m( Q! w3 s- D' M/ {
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
6 I, N; B1 |) E                        WARNING("VBUS error workaround (delay coming)\n");" Z6 {2 L. u* w3 a7 q
                }
3 R5 i; L8 Y/ [" u: R5 }
7 V9 O+ ~; o# ?4 |* n* I一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,8 l; t: b7 Q5 f* r' x( `
跳入如下分支:
( N8 h; I* C% u3 ?6 T2 ndevctl = musb_readb(mregs, MUSB_DEVCTL);: T3 Z1 h0 `' y1 T! o9 Q; M
。。。1 {- x- E0 r' |( B
case OTG_STATE_A_WAIT_VFALL:& g: W  O/ q  V# m5 L1 o/ b/ o/ ?7 w; V. V
                /*
6 @3 g; q+ r- i6 H- U                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3# O1 |% `6 C2 s0 R( l
                 * RTL seems to mis-handle session "start" otherwise (or in
5 \$ p& Y* k/ U* M! T! F: v6 L                 * our case "recover"), in routine "VBUS was valid by the time
; h* P% s! K# Q" t* f                 * VBUSERR got reported during enumeration" cases.
/ p' H7 p1 I) B8 m$ E                 */8 j3 ~! g" I. j% [+ I
                if (devctl & MUSB_DEVCTL_VBUS) {
/ V5 Z. |! {, W                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);9 K! }+ I) a0 X( g3 b1 Z1 E& T
                        break;5 c: f! _' L1 g" ?
                }, {3 a! [+ _- W; @& v( F0 b
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
$ T9 p# b0 Q, {) G                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
1 j( z, P; s3 |" [, ~1 D                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);' t+ X9 ?# ^) S' Y9 ]" [
                break;9 F8 Q) K5 ?+ |% G0 F1 @
% ]5 t! i) L' p; B+ Q% o* R
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,, @8 L4 A# i% _
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
6 q8 C( \6 n. \) g# K        不知道亲们有没有遇到类似的情况,是怎么解决的?( N% D0 X8 V8 u8 B. k' [( L

本帖子中包含更多资源

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

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-2 19:07 , Processed in 0.038102 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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