阅读:2898回复:7
DeviceIoControl()读取失败,请高手指点!
我的CreateFile()已经运行成功,确实打开了句柄(ezusb-0),但是当调用DeviceIoControl想从FX2读数据时失败了,我用getlasterror()查了下,错误码为87即参数错误,我的DeviceIoControl如下:
Readinsult = DeviceIoControl(hDevicehandle, IOCTL_EZUSB_BULK_READ, (PVOID)&inBulkControl, sizeof(BULK_TRANSFER_CONTROL), inBuffer, MaxTransferSize, (unsigned long *)&returnlen, NULL); 我仔细研究了这几个参数没有发现问题: hDevicehandle是createfile返回的句柄,因为createfile运行成功所以此参数没问题;IOCTL_EZUSB_BULK_READ肯定也没问题,我的firmware也是bulk传输; inBulkControl是一BULK_TRANSFER_CONTROL变量,我设inBulkControl.pipeNum = 1;因为我只用到了ep2和ep6且ep6为in端点; sizeof(BULK_TRANSFER_CONTROL)肯定也没问题; inBuffer为PUCHAR变量,用malloc分配了1310720字节的内存,且用memset初始化为0,验证过malloc分配成功; MaxTransferSize为我定义的常量1310720; returnlen为一DWORD变量,初始化为0,没什么好说的; 现在我很怀疑是否是我的firmware没写好,导致fifo无法读写,还请高手指教! |
|
|
沙发#
发布于:2007-03-13 20:04
我也遇到同样的问题,盼高手指点啊!!!!!!!!
|
|
板凳#
发布于:2007-03-13 20:12
看看CreateFile是不是用了异步传输!
|
|
地板#
发布于:2007-03-15 10:11
我用的是同步传输。
经高人指点,是我的MaxTransferSize设的太大了,驱动里面有对这个的限制,超过此限制就报错了! 现在又出现了新问题:运行后deviceiocontrol倒是没有抱错,但是没有返回,因为我对此函数的成功和失败都有输出显示,而此时什么显示都没有,所以可以肯定函数没有返回。 因为我是同步打开,所以一般的解释是函数在等待数据传输完成,因为我设的数值很小(1000),应该很快传完才对,可等了半天也没反应,我看了下windows任务管理器,此进程的cpu占用率为0,也就是说根本就没有数据传输,很是奇怪,原因查找中 |
|
|
地下室#
发布于:2007-03-19 17:20
没人懂么
|
|
|
5楼#
发布于:2007-03-20 06:38
用WinDbg去调试咯,光这样说,谁知道什么原因?
|
|
|
6楼#
发布于:2007-03-20 10:08
windbg还没有用,倒是用bus hound看了下,在“device”中可以找到我的设备,但是在“capture"没有捕捉到任何的数据,而用示波器测试设备的输出pin,确实有信号输出到fx2,而现在看来fx2并没有把设备输出的数据发给driver,很是怀疑firmware除了问题
|
|
|
7楼#
发布于:2007-03-20 10:31
上面没说清楚,“capture”在我将firmware download到fx2后是有输出的,也就是说firmware初始化fx2和设备的过程还是可以捕捉的,但当我运行上位机程序读取数据时就没反应了
|
|
|