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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:
% ^7 x# U! F, X) Dhub 2-0:1.0: over-current condition on port 1
( z% w( p8 |* f4 Q. Oda8xx_musb_interrupt 538: VBUS error workaround (delay coming); j# i% V! ^$ w7 {1 D3 z
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
% M0 ?# o7 M8 F随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,* Z. E% d9 m5 A4 h8 K& d
发现,在da8xx_musb_interrupt函数中,有如下代码:
. c: {% k" x. N. P4 x  B* cif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
" J# d8 y5 s6 O- S                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);
8 x7 M: k, u' Q7 n6 V# G2 {0 y) d                void __iomem *mregs = musb->mregs;
7 i0 V; C' E% C$ K# z$ g2 ]/ v' J7 T                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);3 a2 h7 n" ?7 a) y  h
                int err;
, e4 O: B- A, L- g0 x8 i' z8 ^& h- h% y) G
                err = is_host_enabled(musb) && (musb->int_usb &
6 F3 t  G  ~. C! a4 [9 ~  s) a                                                MUSB_INTR_VBUSERROR);8 f9 f0 ?6 e( q2 m/ _! }
                if (err) {) G8 |( l, j+ n8 a
                        /*
  U% S' q7 f; A/ ^3 X# F; d                         * The Mentor core doesn't debounce VBUS as needed1 f- X' @) Z+ s+ }
                         * 。。。
% o4 ~% o: @5 [                         */
' {0 G3 c# z" ]  ^" v( _                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;  O  S% y+ t  Y
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;- p' P7 S4 |  ~7 ]
                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);4 e6 r- L- Z* u/ k! n0 A- H
                        WARNING("VBUS error workaround (delay coming)\n");
) Z+ u9 {/ J$ G4 Z0 l& _& y1 f                }
, K5 t9 s: o! z4 M
. \* }; ]. @8 `一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,% C) @) w7 P( Y/ o9 e7 I+ s
跳入如下分支:
# t/ b) k& U, rdevctl = musb_readb(mregs, MUSB_DEVCTL);+ x( l8 M7 ~9 P
。。。- F& [8 h: b; D& s. f4 W
case OTG_STATE_A_WAIT_VFALL:4 W# i0 O7 j3 A( V0 s' K$ n' R$ h; j
                /*
! y" B2 }+ L) ~8 b4 k/ D                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3% e3 T& x0 I7 Q
                 * RTL seems to mis-handle session "start" otherwise (or in# |( V* `2 L) u% }2 `% ^4 P
                 * our case "recover"), in routine "VBUS was valid by the time: Z2 D' J: S" F, [
                 * VBUSERR got reported during enumeration" cases./ ]% l) V% {6 I4 S0 w/ i
                 */
* u0 t! R/ T8 A7 D+ g                if (devctl & MUSB_DEVCTL_VBUS) {
+ v7 `4 Y' x% E) c, O% {) ^                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
8 ~1 b1 e/ j) N7 V3 _# v# k                        break;' G* [0 \; o! ]9 d! y3 h. X% T9 g
                }
1 E3 P7 P$ x9 h+ X3 o3 K                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
- a; V! l7 t8 Q/ U; d1 _% V3 [7 a                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,1 Z) k3 Y# L6 Q8 T6 L2 [4 j
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
+ n; ]; E9 x/ [- v' ]1 [                break;; h. p7 l2 m! r2 M( h* |2 Q

' G, C; p. U: y其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,4 Y+ l' x/ ?; v* Y- {8 a
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
* I1 T6 L2 Z- x. `, W        不知道亲们有没有遇到类似的情况,是怎么解决的?6 C) S" ]3 j, j8 ~

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-7-16 03:48 , Processed in 0.044599 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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