USB udc始终处于非活动状态

时间:2011-10-21 20:53:36

标签: embedded-linux

我遇到了USB UDC linux驱动程序的问题。我想使用g_ether和USB UDC将基于PXA320的板连接到PC。

我们的主板使用PXA320和Linux-2.6.32内核。

我在menuconfig上启用了pxa27x UDC和g_ether并成功构建了内核。

但在我运行“ifup usb0”并插入USB线后,PC检测到USB设备(因为D +上拉电阻已启用)并向设备发送“GET DESCRIPTOR”。但是USB设备(我们的电路板)没有响应。

我转储了一些寄存器值,发现UDCCR为0x1,这意味着UDC已启用但处于非活动状态。

以下是我收到的调试信息:

ifup usb0

+++ ether - init

++++ usb_composite_register

+++ usb_gadget_register_driver

+++ dplus_pullup, on = 1

++++ composite_bind

+++ pxa_ep_alloc_request

--- pxa_ep_alloc_request

+++ eth_bind

g_ether gadget: using random self ethernet address

g_ether gadget: using random host ethernet address

usb0: MAC d6:81:e9:fa:0c:66

usb0: HOST MAC 7a:58:58:9a:bb:be

+++ eth_bind - CDC Subset/SAFE

+++ eth_bind - RNDIS plus ECM-or-Subset

+++ eth_bind - manufacturer = Linux 2.6.32.9 with pxa27x_udc

adding config #2 'RNDIS'/bf0059c0

adding 'rndis'/c7fcdf00 to config 'RNDIS'/bf0059c0

++++ composite_uevent

+++ usb_interface_id

--- usb_interface_id - id = 0

+++ usb_interface_id

--- usb_interface_id - id = 1

+++ pxa_ep_alloc_request

--- pxa_ep_alloc_request

adding config #1 'CDC Subset/SAFE'/bf00594c

+++ eth_do_config

adding 'cdc_subset'/c7fcdd80 to config 'CDC Subset/SAFE'/bf00594c

++++ composite_uevent

+++ usb_interface_id

--- usb_interface_id - id = 0

g_ether gadget: Ethernet Gadget, version: Memorial Day 2008

Memorial Day 2008, version: 

g_ether gadget: g_ether ready

registered gadget driver 'g_ether'

+++ should_enable_udc

--- should_enable_udc, put_on = 1

+++ udc_enable

+++ udc_clear_mask_UDCCR - udccr = 0x0, mask = 0x1

--- udc_clear_mask_UDCCR - udccr = 0x0

clk_pxa3xx_cken_enable - clk->cken = 0x14

+++ ep0_idle

+++ set_ep0state

state=WAIT_FOR_SETUP->WAIT_FOR_SETUP, udccsr0=0x000, udcbcr=0

+++ udc_set_mask_UDCCR

+++ ep_write_UDCCSR

+++ pio_irq_enable, index = 0

--- udc_enable

UDCCR(0x0) = 0x1

UDCICR0(0x4) = 0x3

UDCICR1(0x8) = 0xb8000000

UDCISR0(0xc) = 0x0

UDCISR1(0x10) = 0x0

UDCFNR(0x14) = 0x0

UDCOTGICR(0x18) = 0x0

UP2OCR(0x20) = 0xa0

UP3OCR(0x24) = 0x0

(0x100) = 0x200

(0x200) = 0x0

(0x300) = 0x43881454

(0x400) = 0x0

ICPR = 0x0

ICPR2 = 0x0

ICIP = 0x0

ICIP2 = 0x0

ICFP = 0x0

ICFP2 = 0x0

ICMR = 0x6b24c08

ICMR2 = 0x2000

ICLR = 0x0

ICLR2 = 0x0

ICCR = 0x1

ACCR = 0x0000321f

ACSR = 0x3003321f

AICSR = 0x0

CKEN_A = 0xffbfffff

CKEN_B = 0xffffffff

从调试消息中,我可以看到UDC时钟使能(CKEN_A bit20),UDC中断使能(ICMR bit11)和UDC使能(UDCCR bit0)。但UDC处于非活动状态(UDCCR bit1)。

我已通过在主板上运行Windows CE操作系统来验证硬件,我可以通过activesync连接到PC。

我比较了CE OS和Linux OS之间的UDC寄存器。 CE版本显示UDCCR为0x3,表示UDC处于活动状态。

我不明白为什么UDC在Linux中处于非活动状态。 UDCCR中的那个位是只读的。 谁能给我一些关于如何解决这个问题的提示?

提前致谢

0 个答案:

没有答案