阅读:1331回复:1
USB设备插入后,USB驱动出现了问题,好多!
我是菜鸟,进行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] |
|
|
沙发#
发布于:2003-08-04 11:14
在Philips提供的两个文档里都有说明啊
ISP1161A1上有说明啊,另外ISP1161A1的编程说明上也有说明. 请教一下,你做板子时,那个电流保护电路部分中,有个电压切换的芯片PHP109,我现在买不到,不知有没有什么容易买到的? 我现在用的MOSFETRds(on)为0.8欧姆.可能电流不够. 可不可以建议点别的容易买到的. ddhooking@163.com |
|