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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
6 x6 B$ S! w+ G; C5 r6 I' Y4 g' J1 vhub 2-0:1.0: over-current condition on port 1$ N/ f  @& _; T5 p2 P
da8xx_musb_interrupt 538: VBUS error workaround (delay coming)0 C3 O; C* p( r& X
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
. l/ u* F8 {$ Z: p4 Y1 P5 i随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,6 v; @0 o/ m! \5 m/ b; g2 p2 T
发现,在da8xx_musb_interrupt函数中,有如下代码:
7 ]. {7 |9 r2 u* {$ m9 wif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {  B- L" E, t8 c1 A: w& B  f
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);" q# ^, n1 R& j7 m, w# q
                void __iomem *mregs = musb->mregs;
8 d$ f5 H! M3 A4 v5 y                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);6 D1 Q; Q- k4 K* G" m
                int err;
3 L5 g; ^$ {& u1 V! @/ o& L
7 z: p, [# ~: Q                err = is_host_enabled(musb) && (musb->int_usb &! W/ s5 O+ v9 l" z3 S/ ~
                                                MUSB_INTR_VBUSERROR);
4 E7 n, J  s5 f" J' n                if (err) {3 Y8 I. _$ [# J3 \3 @) a! z
                        /*
1 r. p+ |- ]' ^! b5 P                         * The Mentor core doesn't debounce VBUS as needed
% E, m5 E- l! s' _                         * 。。。
# a" D; C* S7 D, C                         */# Z3 q, s$ a! E2 T! V% S* Z
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;" u! Y- A4 L3 t0 z) U$ A9 C
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;0 q, h+ `) T+ t2 H; I. b' F: |2 t
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);4 w1 N# e- [( n" p. @9 f
                        WARNING("VBUS error workaround (delay coming)\n");  K. R3 t' C, r) ^3 \
                }- ~6 i+ M, x: n) W9 C9 r
! w7 h. ?9 y' c) O$ ]; a
一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,
: y% p" f, @1 k; i* G5 [% U跳入如下分支:
: a; \) x8 R5 a' S% C6 ldevctl = musb_readb(mregs, MUSB_DEVCTL);0 U+ Z9 u1 ]: N5 `
。。。
% T* z: h( x6 f5 fcase OTG_STATE_A_WAIT_VFALL:
* a7 r! M$ O( D: I$ j                /*& @- i7 a3 S/ \# o& ^
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
/ a6 Q8 n3 D# B3 P9 \  x                 * RTL seems to mis-handle session "start" otherwise (or in7 V1 z1 ?3 J  w* j4 E+ _
                 * our case "recover"), in routine "VBUS was valid by the time) h6 V# h! f1 R+ ~& ~, M
                 * VBUSERR got reported during enumeration" cases.
7 Z" s8 U. f1 f                 */
! X$ l6 |9 t$ Q$ B: h                if (devctl & MUSB_DEVCTL_VBUS) {
3 f& M- l6 Z9 _' A/ |' N                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
! Y0 R  g3 i/ _                        break;
1 J  y+ w' B+ U/ F0 C8 B                }3 K2 ^$ ~" Q3 t6 d
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;% \* V& u8 `  o: g& E
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
$ S, r2 ]- Z4 F                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);$ `. X( a$ }5 j2 _% h/ \
                break;4 R3 j% @' h' L/ `6 m5 O( \+ ^8 U2 a
; G* J) H! W+ D0 ~! T( c( k
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,1 v& `9 k0 w2 j3 U) K% S
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。3 g+ ^, o5 x: z) w. y! F# P
        不知道亲们有没有遇到类似的情况,是怎么解决的?7 b& i% L* C0 s3 u1 c3 D

本帖子中包含更多资源

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

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-5-3 21:46 , Processed in 0.038558 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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