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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于USB的问题

[复制链接]

13

主题

41

帖子

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
QQ
跳转到指定楼层
楼主
发表于 2016-12-1 09:25:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     小弟最近做了5块板子,用的创龙的核心板,其中4块USB2.0 host都没有问题,只有一块老是周期性报如下错误:. N! ^8 C6 Z" @6 r+ i! f; W
hub 2-0:1.0: over-current condition on port 1
7 d4 v1 c2 s& dda8xx_musb_interrupt 538: VBUS error workaround (delay coming), e5 C/ o! G8 W- Q$ s7 p0 k
我的电路图如附件,我用示波器测量过了,开始USB0_DRVVBUS脚起始是低电平,开机瞬间,它会变成高电平,USB0_VBUS也会) M' x( ?) [* f/ m4 e
随着上升至5V,开机瞬间,USB0_VBUS并没有出现跌落至低于4.4V,从电路上没有发现问题,然后开始追踪linux3.3 USB驱动代码,
4 R4 e$ N# x) B! J3 l3 @+ N5 M, O6 `发现,在da8xx_musb_interrupt函数中,有如下代码:
# w9 d, l$ `* K* W$ N% Mif (status & (DA8XX_INTR_DRVVBUS << DA8XX_INTR_USB_SHIFT)) {
/ v3 j" Q8 a1 c4 M                int drvvbus = musb_readl(reg_base, DA8XX_USB_STAT_REG);1 |: p! g# X+ [
                void __iomem *mregs = musb->mregs;
7 o# p9 v: Y3 E7 Q                u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
/ I! p. D7 K3 i0 f5 z                int err;. c( g' G8 D, j! k9 I. t

2 U7 c" C9 r, Y0 n                err = is_host_enabled(musb) && (musb->int_usb &
' C  N5 O6 U' x- k                                                MUSB_INTR_VBUSERROR);
$ t! o# d: q" y( V5 |$ H                if (err) {
: ?/ C0 p  f% Q# F& |                        /*
/ D3 H9 J7 q& v2 e$ i4 M                         * The Mentor core doesn't debounce VBUS as needed
) L; \0 h1 n+ `                         * 。。。
; Q' K( @  e3 {% R                         */7 U8 `1 `+ m8 P/ G
                        musb->int_usb &= ~MUSB_INTR_VBUSERROR;, K) K, i9 M9 n- e9 ~9 O$ [) {
                        musb->xceiv->state = OTG_STATE_A_WAIT_VFALL;
/ L' {( y+ D, F  }" D* W/ @7 X                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);& E0 D6 z/ U9 `8 J3 ]9 W4 l
                        WARNING("VBUS error workaround (delay coming)\n");
9 W" Q  V4 J/ T# y  ]                }% K( h9 d, {$ p* d8 \" f! q

0 t6 z( c* C, I8 C! A1 ^一直发生MUSB_INTR_VBUSERROR错误,然后会启动定时器,周期调用otg_timer函数,0 r5 T) ~% `" W- g3 V( V
跳入如下分支:, k7 [' L% E  B7 o
devctl = musb_readb(mregs, MUSB_DEVCTL);2 @: f+ _5 M; U. O/ ?
。。。  Z+ d6 Z2 m. h7 j
case OTG_STATE_A_WAIT_VFALL:- @) c: {& Y; r; n4 j1 r8 P
                /*4 H) |! Q& C1 e, |
                 * Wait till VBUS falls below SessionEnd (~0.2 V); the 1.3
5 [+ ?/ o! W5 T/ w# Z& d                 * RTL seems to mis-handle session "start" otherwise (or in4 N8 Z, w4 S/ |5 ]
                 * our case "recover"), in routine "VBUS was valid by the time
7 k+ x2 W3 W. |+ Q6 a+ i                 * VBUSERR got reported during enumeration" cases.
4 Y8 @. z& B' v9 z                 */
8 x) M  i+ h  t8 j, R3 H$ D                if (devctl & MUSB_DEVCTL_VBUS) {
  F$ o# Y' P& M) N: P) v3 u9 z4 P                        mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
/ A/ ~9 K, S' P2 i" l- }! ]                        break;
! I6 T! I" [  r* Q" s9 _                }( b  E+ ]) j( s6 z0 S: T
                musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
; Z9 k1 T8 Y6 I& l! @9 l                musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,' a' @- v* d. L1 F6 h2 U. g
                            MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
/ e6 b( L: s: ~3 k, u0 G                break;, Y+ _; j  q* _8 J

" y) |' _, F3 E' |* b4 h% ~其中,devctl是设备控制寄存器,我打印了它的直,是0x80, 也就是位7是1,代表着是B device,,明明是A类,6 Q4 Q3 ^- I+ z/ c* h+ p0 n7 s8 k( Q
不知道为啥自动变成B类了。而且VBUS一直是5V,正常的啊,可是驱动也无法修复。。3 C, i' f5 A  l. T" P
        不知道亲们有没有遇到类似的情况,是怎么解决的?6 z3 \3 w8 ^$ I* Z; z

本帖子中包含更多资源

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

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-12 09:50 , Processed in 0.038246 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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