jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1590回复:7

driver studio的驱动编程问题

楼主#
更多 发布于:2003-07-22 10:48
各位大虾好!我现在用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自动生成的驱动程序不能直接用。我现在一筹莫展,烦请各位救救我,谢谢。
jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-28 09:38
我明白是怎么回事了,驱动一次只能传64字节的数据包。非常感谢大家的热心帮助。
jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-23 14:10
目前应用程序读写问题已解决,是readfile和writefile的参数没设好。但是又出现新问题:

应用程序用以下大小的包传送时的速度数据如下(系统下用GetTickCount()函数提取时间)
64字节 ――>7Kbps
128字节 ――>14Kbps
1024字节 ――>116Kbps
4096字节 ――>474Kbps
65536字节 ――>7479Kbps
131072字节 ――>26214Kbps

我先前以为是数据就到d12没到单片机的问题,但看到最后一行数据又好象不是。也不知是应用程序的问题,还是driver studio自动生成的驱动程序不能直接用,或与固件的配合问题。希望各位大虾帮我分析分析,不胜感激。


上面的程序的运行过程中d12的goodlink灯工作是正常的。安装win2000ddk在win2000下,win2000版本为5.00.2195。
jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-23 14:07
你的固件是不是有多个endpoint,一个为缺省的控制用,一个为16字节的中断方式所用,还有一个为64字节的批处理方式使用?
你的硬件配置信息(包括Device , Class , configuration , interface,endpoint, report等)是否有问题?把它贴上来看看


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;

jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-23 12:13
目前应用程序读写问题已解决,是readfile和writefile的参数没设好。但是又出现新问题:

应用程序用以下大小的包传送时的速度数据如下(系统下用GetTickCount()函数提取时间)
64字节 ――>7Kbps
128字节 ――>14Kbps
1024字节 ――>116Kbps
4096字节 ――>474Kbps
65536字节 ――>7479Kbps
131072字节 ――>26214Kbps

我先前以为是数据就到d12没到单片机的问题,但看到最后一行数据又好象不是。也不知是应用程序的问题,还是driver studio自动生成的驱动程序不能直接用,或与固件的配合问题。希望各位大虾帮我分析分析,不胜感激。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-23 09:49
你的固件是不是有多个endpoint,一个为缺省的控制用,一个为16字节的中断方式所用,还有一个为64字节的批处理方式使用?
你的硬件配置信息(包括Device , Class , configuration , interface,endpoint, report等)是否有问题?把它贴上来看看
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
jiangjingrun
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-23 09:10
应该是能用的,看一下附件,我把运行结果考下来了。
acx
acx
驱动小牛
驱动小牛
  • 注册日期2001-04-28
  • 最后登录2012-05-07
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望57点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-22 10:53
生成的TEST试一下能不能用
很想你,身不由己……
游客

返回顶部