阅读:2049回复:10
USB主机和设备间通讯的问题,请各位大哥帮帮忙?
在下开发了USB设备端的driver,想用2000ddk下的bulkusb测试一下,VID和PID已按照bulkusb.inf中所指定的写到了device端的descriptors中,可设备插到主机上时,显示是一个unknow device,虽然指定了bulkinf,可系统却去找c:/winnt/system32/inf/usb.inf
还显示:An error occurred during the installation of the device The installation failed because a function driver was not specified for the device instance. 各位大哥能告诉小弟是哪里的错吗? 多谢了 |
|
沙发#
发布于:2002-08-19 17:40
设备描述符数据不对。
|
|
|
板凳#
发布于:2002-08-19 17:40
根本就没装上驱动程序嘛
|
|
|
地板#
发布于:2002-08-20 11:11
感谢各位大哥的帮助
能告诉小弟该如何修改吗? 是改device端呢还是host端? 下面是我得device descriptors(EP0,ep1(bulk IN),ep2(bulk out)),neng帮小弟看一下吗?多谢 desc.dev.bLength = sizeof( device_desc_t ); desc.dev.bDescriptorType = 1; desc.dev.bcdUSB = 0x100; /* 1.0 */ desc.dev.bDeviceClass = 0; /* vendor specific */ desc.dev.bDeviceSubClass = 0; desc.dev.bDeviceProtocol = 0; desc.dev.bMaxPacketSize0 = 16; /* ep0 max fifo size */ desc.dev.idVendor = 0x5e,0x04; /* vendor ID undefined */ desc.dev.idProduct = 0x0a,0x93; /* product */ desc.dev.bcdDevice = 0; /* vendor assigned device release num */ desc.dev.iManufacturer = 0; /* index of manufacturer string */ desc.dev.iProduct = 0; /* index of product description string */ desc.dev.iSerialNumber = 0; /* index of string holding product s/n */ desc.dev.bNumConfigurations = 1; desc.b.cfg.bLength = sizeof( config_desc_t ); desc.b.cfg.bDescriptorType = 2; desc.b.cfg.wTotalLength = make_word_c( sizeof(struct cdb) ); desc.b.cfg.bNumInterfaces = 1; desc.b.cfg.bConfigurationValue = 1; desc.b.cfg.iConfiguration = 0; desc.b.cfg.bmAttributes = USB_CONFIG_BUSPOWERED; desc.b.cfg.MaxPower = USB_POWER( 500 ); desc.b.intf.bLength = sizeof( intf_desc_t ); desc.b.intf.bDescriptorType = USB_DESC_INTERFACE; desc.b.intf.bInterfaceNumber = 0; /* unique intf index*/ desc.b.intf.bAlternateSetting = 0; desc.b.intf.bNumEndpoints = 2; desc.b.intf.bInterfaceClass = 0; /* vendor specific */ desc.b.intf.bInterfaceSubClass = 0; desc.b.intf.bInterfaceProtocol = 0; desc.b.intf.iInterface = 0; desc.b.ep1.bLength = sizeof( ep_desc_t ); desc.b.ep1.bDescriptorType = USB_DESC_ENDPOINT; desc.b.ep1.bEndpointAddress = USB_EP_ADDRESS( 1, USB_IN ); desc.b.ep1.bmAttributes = USB_EP_BULK; desc.b.ep1.wMaxPacketSize = make_word_c( 64 ); desc.b.ep1.bInterval = 0; desc.b.ep2.bLength = sizeof( ep_desc_t ); desc.b.ep2.bDescriptorType = USB_DESC_ENDPOINT; desc.b.ep2.bEndpointAddress = USB_EP_ADDRESS( 2, USB_OUT ); desc.b.ep2.bmAttributes = USB_EP_BULK; desc.b.ep2.wMaxPacketSize = make_word_c( 64 ); desc.b.ep2.bInterval = 0; // FIXME: Add support for all endpoint... /* set language */ /* See: http://www.usb.org/developers/data/USB_LANGIDs.pdf */ sd_zero.bDescriptorType = USB_DESC_STRING; sd_zero.bLength = sizeof( string_desc_t ); sd_zero.bString[0] = make_word_c( 0x409 ); /* American English */ usb_set_string_descriptor( 0, &sd_zero ); } |
|
地下室#
发布于:2002-08-20 11:16
设备端返回数据为0才会是Unknown USB device。
|
|
|
5楼#
发布于:2002-08-20 14:18
谢谢tigerzd
我查了一下当USB插入主机时,Device端就根本没进到我申请的中断中。 能告诉我是怎么回事吗? |
|
6楼#
发布于:2002-08-20 19:23
首先你得确定一下你的设备工作是不是正常。
还有就是所用的晶振频率对不对。 |
|
|
7楼#
发布于:2002-08-20 22:34
设备没有正常响应主机的请求,建议仔细查看你的FIRMWARE是不是有BUG
|
|
8楼#
发布于:2002-08-21 09:12
多谢各位大哥的帮助
可我没有USB分析仪,该怎么查呢? 我设备端的OS是linux,能给我的建议吗? |
|
9楼#
发布于:2002-08-21 09:41
建议你在9x下,先走通USB的配置,基本完成
80 06 00 01 00 00 40 00 00 05 XX 00 00 00 00 00 80 06 00 02 00 00 40(??FF) 00 80 06 00 03 00 00 40 00 这些命令就先可以了. 你的firmware走完了这些吗? |
|
|
10楼#
发布于:2002-08-21 13:24
用户被禁言,该主题自动屏蔽! |
|