qliu169
驱动牛犊
驱动牛犊
  • 注册日期2003-08-20
  • 最后登录2004-09-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1527回复:6

各位大侠,usb bulk端口写数据时机器重启,急寻答案,20分

楼主#
更多 发布于:2003-10-15 13:27
usb外设,三个端口,控制端口0,bulk In,bulk Out。利用DriverStudio2.6 编写的驱动程序,基本为wizard自动生成的代码,控制端口0(即缺省端口)的读写操作均好用,但往bulk Out写数据时,计算机重启,偶尔也会不重启,请各位大侠赐教。
千里之行始于足下。
qliu169
驱动牛犊
驱动牛犊
  • 注册日期2003-08-20
  • 最后登录2004-09-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-17 10:45
各位大侠,有遇到过类似情况的吗,请指教。
千里之行始于足下。
wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-16 15:24
为什么固件里的中断函数会导致计算机重启动?是不是电源超负荷了?
zyz1974
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2005-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-16 14:33
和我的情况一样,你看一下是不是你的固件里的中断函数的原因,我已经解决了,是我加的一个中断函数在作怪,改了后就好了,我的
QQ 107947912
qliu169
驱动牛犊
驱动牛犊
  • 注册日期2003-08-20
  • 最后登录2004-09-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-16 14:18
在driverstudio中定义的bulk in ,out端口的包大小均为64,和外设一致,发送的包大小为31 bytes。

源代码如下:




void doWrite(int n)
{
UCHAR *buf;
ULONG nWritten;
int i;
// int j;

/////////////
//n=31;

buf = (UCHAR *) malloc(n);
if (buf == NULL)
{
printf(\"Failed to allocate buffer for write\");
Exit(1);
}

// start with the mod26 letter of the number of bytes to write
// j = (n % 26);
// load buffer with dummy data (abcdefg...)
// for (i=0; i<n; i++, j=(j + 1)%26)
// {
// buf = \'a\' + j;
// }

buf[0] = 0x55;
buf[1] = 0x53;
buf[2] = 0x42;
buf[3] = 0x43;
buf[4] = 0xc8;
buf[5] = 0xdc;
buf[6] = 0x6a;
buf[7] = 0x81;
buf[8] = 0x24;
buf[9] = 0;
buf[10] = 0;
buf[11] = 0;
buf[12] = 0x80;
buf[13] = 0;
buf[14] = 0x06;
buf[15] = 0x12;
buf[16] = 0;
buf[17] = 0;
buf[18] = 0;
buf[19] = 0x24;
buf[20] = 0;
buf[21] = 0;
buf[22] = 0;
buf[23] = 0;
buf[24] = 0;
buf[25] = 0;
buf[26] = 0;
buf[27] = 0;
buf[28] = 0;
buf[29] = 0;
buf[30] = 0;


// Write data to driver
printf(\"Writing to device - \");
WriteFile(hDevice, buf, n, &nWritten, NULL);
printf(\"%d bytes written to device (%d attempted).\\n\", nWritten, n);

// Print what was written
i = 0;
// while(i < n)
// {
// j = min((i+26),n);
for(i=0 ; i < n; i++)
{
printf(\"%x, \", buf);
}
printf(\"\\n\");
// }

free(buf);
}

千里之行始于足下。
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-10-16 10:27
usb外设,三个端口,控制端口0,bulk In,bulk Out。利用DriverStudio2.6 编写的驱动程序,基本为wizard自动生成的代码,控制端口0(即缺省端口)的读写操作均好用,但往bulk Out写数据时,计算机重启,偶尔也会不重启,请各位大侠赐教。


和我的情况几乎一样。
你看看你定义的包的大小是否吻合。

 :D
snowrain
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2005-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-16 09:39
给出源码来啊:)
给我看看:yux008@hotmail.com
游客

返回顶部