hobber
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2004-12-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1331回复:1

USB设备插入后,USB驱动出现了问题,好多!

楼主#
更多 发布于:2003-07-25 09:03
我是菜鸟,进行LINUX下的USB驱动程序开发
嵌入式系统:LINUX2-4-18内核
USB芯片:PHILIPS:ISP116A
写好了HCD后,加载运行,从DMESG信息来看的一切正常:
一 。当我把一个鼠标设备插入USB口时,出现了如下错误提示:
hub.c: port 1 connection change
hub.c: port 1, portstatus 15, change 301, 12 Mb/s
USB HC dev alloc 1152 bytes
hub.c: port 1, portstatus 303, change 10, 1.5 Mb/s
hub.c: USB new device connect on bus1/1, assigned device number 12
-----------------------------------------------------------------------------------------
错:usb.c: USB device not accepting new address=12  (error=-110)
-----------------------------------------------------------------------------------------
USB HC dev free
经过检查:发现是usb_new_device()[枚举设备过程]中:为设备指定总线地址usb_set_address()时发生的控制传输过程出现出错。
问题是:这个过程在HCD加载时对ROOT HUB运行过一次,一切正常。现在对鼠标设备运行却出错。怎么解释啊?
二.后来发现了如下错误:
hub.c: USB new device connect on bus1/1, assigned device number 39
-------------------------------------------------------------------
错:usb.c: USB device descriptor short read (expected 8, got 0)
-------------------------------------------------------------------
USB HC dev free
我以为问题出现在鼠标设备的枚举时端点的最大传输包大小问题。
因此我打印出了root hub的各描述符:
第一次读取:
USB ROOT HUB device infomation:
  Length              = 18
  DescriptorType      = 01
  USB version         = 1.10
  Vendor:Product      = 0000:0000
  MaxPacketSize0      = 8
  NumConfigurations   = 1
  Device version      = 0.00
  Device Class:SubClass:Protocol = 09:00:00
    Hub device class

 wTotalLength        = 0022
  bNumInterfaces      =   01
  bConfigurationValue =   01
  iConfiguration      =   04
  bmAttributes        =   a0
  MaxPower            =  100mA

  Interface: 0
  Alternate Setting:  0
    bLength             =    9
    bDescriptorType     =   04
    bInterfaceNumber    =   00
    bAlternateSetting   =   00
    bNumEndpoints       =   01
    bInterface Class:SubClass:Protocol =   03:01:02
    iInterface          =   00
    Endpoint:
      bLength             =    7
      bDescriptorType     =   05
      bEndpointAddress    =   81 (in)
      bmAttributes        =   03 (Interrupt)
      wMaxPacketSize      = 0004
      bInterval           =   0a
由于系统问题,我从先烧了内核。然后对ISP116X芯片第二次读取ROOT HUB描述符
show root hub  infomations:
  Length              = 18
  DescriptorType      = 01
  USB version         = 1.10
  Vendor:Product      = 0000:0000
  MaxPacketSize0      = 8
  NumConfigurations   = 1
  Device version      = 0.00
  Device Class:SubClass:Protocol = 09:00:00
    Hub device class
Configuration:
  bLength             =    9
  bDescriptorType     =   02
  wTotalLength        = 0019
  bNumInterfaces      =   01
  bConfigurationValue =   01
  iConfiguration      =   00
  bmAttributes        =   40
  MaxPower            =    0mA

  Interface: 0
  Alternate Setting:  0
    bLength             =    9
    bDescriptorType     =   04
    bInterfaceNumber    =   00
    bAlternateSetting   =   00
    bNumEndpoints       =   01
    bInterface Class:SubClass:Protocol =   09:00:00
    iInterface          =   00
    Endpoint:
      bLength             =    7
      bDescriptorType     =   05
      bEndpointAddress    =   81 (in)
      bmAttributes        =   03 (Interrupt)
      wMaxPacketSize      = 0002
      bInterval           =   ff
问题:1)ROOT HUB的描述符不是由硬件决定的吗?为什么两次对同一个芯片读取ROOT HUB的描述符结果会不同呢?
设备描述符:Device Class:SubClass:Protocol
配置描述符:MaxPower
端点描述符:wMaxPacketSize和bInterval

2)在ISP1161A的芯片资料上没有对描述符的说明,我要到哪儿可以找到它,这样就可以去判断所读的描述符是否正确了。
                
                              郁闷了很久,希望大虾帮帮,谢谢!


[编辑 -  7/25/03 by  hobber]
在鞋上钉平头钉的工人
hooking_1980
驱动牛犊
驱动牛犊
  • 注册日期2003-08-04
  • 最后登录2003-12-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-04 11:14
在Philips提供的两个文档里都有说明啊
ISP1161A1上有说明啊,另外ISP1161A1的编程说明上也有说明.

请教一下,你做板子时,那个电流保护电路部分中,有个电压切换的芯片PHP109,我现在买不到,不知有没有什么容易买到的?
我现在用的MOSFETRds(on)为0.8欧姆.可能电流不够.
可不可以建议点别的容易买到的.
ddhooking@163.com
游客

返回顶部