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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:7 i* j7 X, Z& w: j% l% N
hub 2-0:1.0: over-current condition on port 1
4 [7 y% C7 k9 p! n- w/ C) f7 V2 Eda8xx_musb_interrupt 538: VBUS error workaround (delay coming)1 S& J& u& @$ I6 T2 ]0 h% Y
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会
% q. j  d6 @" Z4 j; ~# e# F随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
" }' x0 H7 h8 Q) m发现,在da8xx_musb_interrupt函数中,有如下代码:+ n' i, @% ]$ A/ q5 W
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {: B" O0 i# l) ~) b) r6 a
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);/ y4 j) P) e/ s/ j* M% ~
                void __iomem *mregs = musb->mregs;
9 `, v3 l1 U" c* n9 C. J3 D                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);6 n- S3 m% o% Q3 Q: u0 [
                int err;
9 l: f# z/ n7 C5 [: w) M0 G' e
: U- m' K% X% T                err = is_host_enabled(musb) && (musb->int_usb &; M, A' `9 W" ]& O- G% d9 L
                                                MUSB_INTR_VBUSERROR);/ U7 ^2 B7 h3 m1 P! o
                if (err) {
  `+ K* l& X, ?6 ^                        /*
8 d( n7 u/ p( f* u  f4 |1 e                         * The Mentor core doesn't debounce VBUS as needed  y7 `) x% D( R% {/ J8 K' x+ X
                         * 。。。  w/ K8 c4 Y$ V+ f# G$ u
                         */
- v* \; O- h- O. x# a                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;
* y- c8 e! n4 s3 D+ D                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
9 r' D! b- N4 m2 {, H/ _. G                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
7 d5 E- k; W  |                        WARNING("VBUS error workaround (delay coming)\n");( y. f% ~9 S% C) y
                }2 U% f4 l) T* N  ~" X! f" B

+ r2 q8 G* a+ r, a一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,4 u4 B/ g* A# }) k" F  X& p
跳入如下分支:: E/ |3 u5 ?3 I3 s+ E
devctl = musb_readb(mregs, MUSB_DEVCTL);+ B: m. P8 L+ [
。。。
! F' V" z) m; g+ c" _' s' E; Rcase OTG_STATE_A_WAIT_VFALL:$ _" a8 k9 m+ n( e
                /*) y' r, S1 c5 W- m, h4 M6 z# F$ x
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
& h7 @) D# `3 E" E2 [                 * RTL seems to mis-handle session "start" otherwise (or in
* i: d; ]6 n( I' Q! M7 o                 * our case "recover"), in routine "VBUS was valid by the time9 q, W8 B% z) R- u
                 * VBUSERR got reported during enumeration" cases.2 Q1 s. a* X( S# G& t
                 */
% w, `3 c: L1 [9 @, q                if (devctl & MUSB_DEVCTL_VBUS) {
' P" u1 C4 X5 a9 j! g4 @) \5 ~                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);+ Z% L3 j( x8 n2 F- [& }2 _
                        break;
, P4 \8 G$ s7 Q! |6 H0 h" D' E                }7 V8 ?7 X( O; T9 s: |$ h5 s
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;. U) s: U. [3 Z, U/ L
                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
% D8 d0 n+ `8 n, Y                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);6 @9 F1 I/ T7 Z. \4 [3 n
                break;
. I- K) u9 O; J4 r2 ?( R0 H
. z/ j9 I1 S9 B% s! }, \2 T其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
& J3 ^2 U6 Z7 a% B" D0 b不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。
0 H) o5 ^" y" r+ [2 C8 h        不知道亲们有没有遇到类似的情况,是怎么解决的?
: W- }. R$ @5 p8 Y3 K

本帖子中包含更多资源

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

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-4 16:23 , Processed in 0.037448 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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