关于USB的问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:" m  a& @0 {# X) Y; d
hub 2-0:1.0: over-current condition on port 1
  e! b3 x7 J" g% S9 Yda8xx_musb_interrupt 538: VBUS error workaround (delay coming)
% A5 p9 q& d/ b( y我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会( E$ \. ]* F9 t( ]
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
1 Z8 |/ _  y* M$ s$ N: |发现,在da8xx_musb_interrupt函数中,有如下代码:4 z9 \7 r8 x5 D
if (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {$ A- m, Z1 q5 L+ ^) e& T- Z
                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);" y* ?& |% g: W$ r1 I" n; z( w
                void __iomem *mregs = musb->mregs;
' K$ V. J! i5 `1 z0 `                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);  v, Q6 D" \! U: i3 Y' k
                int err;. C  y5 C1 S2 g# B+ D; E9 b

# p$ n: D1 F+ l                err = is_host_enabled(musb) && (musb->int_usb &2 Z1 _; n( _. n  c
                                                MUSB_INTR_VBUSERROR);
9 [" g5 `( [! k& h% g: `                if (err) {
( j% }9 l- `$ F2 P6 |                        /*5 U+ _: l0 E1 U* e! f5 n
                         * The Mentor core doesn't debounce VBUS as needed
" `: s- G7 W4 D0 @# N                         * 。。。- o9 J$ o" Z# F: h# a: [  V) H+ T
                         */
4 m4 W* h* T* e/ C                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;, \# ~/ z2 S: `2 ~7 y1 G1 o) O
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
  a2 h# a3 \0 y# [                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
1 ]9 u# M* Q' ?% s6 J                        WARNING("VBUS error workaround (delay coming)\n");
# o5 P/ N" u/ t9 h/ }, D0 c' \                }0 M2 K0 n# K3 `" v4 K

4 z6 u& @* j  E" I; M3 t- [- y5 e# k一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,( C" \5 ~  ?4 v5 Q2 X5 V+ @: w: i* _
跳入如下分支:
' e. [- v5 I- F0 J- |% edevctl = musb_readb(mregs, MUSB_DEVCTL);
/ D2 _' o8 B, W0 ]) `" |' t。。。
* u* @( S0 J3 ncase OTG_STATE_A_WAIT_VFALL:* g. _; u" {- q9 x6 t
                /*
) Z3 r" e7 u0 ^, s" z9 i7 n0 a" _                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.38 t8 G* J3 S  v
                 * RTL seems to mis-handle session "start" otherwise (or in
0 a0 f" C7 Y0 c% E* I& O* I* ^                 * our case "recover"), in routine "VBUS was valid by the time
5 N' P9 j8 E: f5 n' `                 * VBUSERR got reported during enumeration" cases.
. i; I  q# K, x5 J; m3 r: U$ Y                 */8 Q8 @6 D& M5 y: f9 f4 C. W
                if (devctl & MUSB_DEVCTL_VBUS) {
, T, J' z/ r9 b                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);- q% {  v0 c1 h5 D- a  e; G
                        break;
$ m7 a; W% R! z                }
- j# [+ S8 J3 P) P8 \2 g' v                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
8 q+ y1 ^4 Q" y: e2 ~                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
+ |" `- Q9 H! h9 h                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);0 E& {" |7 T+ s! P# b! j2 V
                break;. `$ u$ u$ d5 H- ]  H7 J8 E  o# E
6 _2 ~6 T5 T' @& c0 t/ _! j2 J; E
其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,
4 P6 R% t  q0 M# G8 g+ e- ~$ e不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。0 d# X' S% s% u1 Q9 q
        不知道亲们有没有遇到类似的情况,是怎么解决的?
' R$ m2 P6 j$ H5 X- K7 P9 A4 m

本帖子中包含更多资源

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

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

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-12-1 22:01:12 | 只看该作者
如果4块正常的话,那驱动应该是没问题的,多半是硬件的问题
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-31 19:16 , Processed in 0.043181 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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