阅读:1590回复:7
driver studio的驱动编程问题
各位大虾好!我现在用driver studio做d12的驱动编程,硬件在windriver下是好用的。
我用driver studio驱动向导生成驱动程序(具体步骤:16字节端点是中断方式,64字节端点是批处理方式。driver studio自动生成批处理方式的read和wride的程序),安装驱动后,在monitor下提示“USB Configuration OK”。但是应用程序就是不能对设备进行读写,也就是在应用程序下的得不到下面两个函数的正确返回值。 hDevice = CreateFile(\"\\\\\\\\.\\\\UsbtestDevice0\", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 函数可得到正确返回值。 不知是应用程序的readfile和wridefile用错了,还是driver studio自动生成的驱动程序不能直接用。我现在一筹莫展,烦请各位救救我,谢谢。 |
|
沙发#
发布于:2003-07-28 09:38
我明白是怎么回事了,驱动一次只能传64字节的数据包。非常感谢大家的热心帮助。
|
|
板凳#
发布于:2003-07-23 14:10
目前应用程序读写问题已解决,是readfile和writefile的参数没设好。但是又出现新问题: 上面的程序的运行过程中d12的goodlink灯工作是正常的。安装win2000ddk在win2000下,win2000版本为5.00.2195。 |
|
地板#
发布于:2003-07-23 14:07
你的固件是不是有多个endpoint,一个为缺省的控制用,一个为16字节的中断方式所用,还有一个为64字节的批处理方式使用? Device , configuration , interface,endpoint 配置信息如下,无Class , report部分: code USB_DEVICE_DESCRIPTOR DeviceDescr = { sizeof(USB_DEVICE_DESCRIPTOR), 0x01, SWAP(0x0100), 0xdc, 0, 0, EP0_PACKET_SIZE, SWAP(0x0471), SWAP(0x0888), SWAP(0x0100), 0, 0, 0, 1 }; code USB_CONFIGURATION_DESCRIPTOR ConfigDescr = { sizeof(USB_CONFIGURATION_DESCRIPTOR), 0x02, SWAP(CONFIG_DESCRIPTOR_LENGTH), 1, 1, 0, 0xa0, 0x32 }; code USB_INTERFACE_DESCRIPTOR InterfaceDescr = { sizeof(USB_INTERFACE_DESCRIPTOR), 0x04, 0, 0, 4, 0xdc, 0xa0, 0xb0, 0 }; code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05, 0x81, USB_ENDPOINT_TYPE_INTERRUPT,(值为0x03) SWAP(EP1_PACKET_SIZE), 10 }; code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05, 0x1, USB_ENDPOINT_TYPE_INTERRUPT,(值为0x03) SWAP(EP1_PACKET_SIZE), 10 }; code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05, 0x82, USB_ENDPOINT_TYPE_BULK,(值为0x02) SWAP(EP2_PACKET_SIZE), 1 }; code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05, 0x2, USB_ENDPOINT_TYPE_BULK,(值为0x02) SWAP(EP2_PACKET_SIZE), 1 }; 其中 #define CONFIG_DESCRIPTOR_LENGTH sizeof(USB_CONFIGURATION_DESCRIPTOR) \\ + sizeof(USB_INTERFACE_DESCRIPTOR) \\ + (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR)) typedef struct _USB_CONFIGURATION_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; USHORT wTotalLength; UCHAR bNumInterfaces; UCHAR bConfigurationValue; UCHAR iConfiguration; UCHAR bmAttributes; UCHAR MaxPower; } USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; typedef struct _USB_INTERFACE_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; UCHAR bInterfaceNumber; UCHAR bAlternateSetting; UCHAR bNumEndpoints; UCHAR bInterfaceClass; UCHAR bInterfaceSubClass; UCHAR bInterfaceProtocol; UCHAR iInterface; } USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; typedef struct _USB_DEVICE_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; USHORT bcdUSB; UCHAR bDeviceClass; UCHAR bDeviceSubClass; UCHAR bDeviceProtocol; UCHAR bMaxPacketSize0; USHORT idVendor; USHORT idProduct; USHORT bcdDevice; UCHAR iManufacturer; UCHAR iProduct; UCHAR iSerialNumber; UCHAR bNumConfigurations; } USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR; typedef struct _USB_ENDPOINT_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; UCHAR bEndpointAddress; UCHAR bmAttributes; USHORT wMaxPacketSize; UCHAR bInterval; } USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; |
|
地下室#
发布于:2003-07-23 12:13
目前应用程序读写问题已解决,是readfile和writefile的参数没设好。但是又出现新问题:
应用程序用以下大小的包传送时的速度数据如下(系统下用GetTickCount()函数提取时间) 64字节 ――>7Kbps 128字节 ――>14Kbps 1024字节 ――>116Kbps 4096字节 ――>474Kbps 65536字节 ――>7479Kbps 131072字节 ――>26214Kbps 我先前以为是数据就到d12没到单片机的问题,但看到最后一行数据又好象不是。也不知是应用程序的问题,还是driver studio自动生成的驱动程序不能直接用,或与固件的配合问题。希望各位大虾帮我分析分析,不胜感激。 |
|
5楼#
发布于:2003-07-23 09:49
你的固件是不是有多个endpoint,一个为缺省的控制用,一个为16字节的中断方式所用,还有一个为64字节的批处理方式使用?
你的硬件配置信息(包括Device , Class , configuration , interface,endpoint, report等)是否有问题?把它贴上来看看 |
|
|
6楼#
发布于:2003-07-23 09:10
应该是能用的,看一下附件,我把运行结果考下来了。
|
|
7楼#
发布于:2003-07-22 10:53
生成的TEST试一下能不能用
|
|
|