choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
阅读:2898回复:7

DeviceIoControl()读取失败,请高手指点!

楼主#
更多 发布于:2007-03-13 16:43
  我的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无法读写,还请高手指教!
SEIZE THE DAYS!
hanwindy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-26
  • 最后登录2007-04-27
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-13 20:04
我也遇到同样的问题,盼高手指点啊!!!!!!!!
a_1984
驱动牛犊
驱动牛犊
  • 注册日期2006-11-18
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-13 20:12
看看CreateFile是不是用了异步传输!
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-15 10:11
我用的是同步传输。
经高人指点,是我的MaxTransferSize设的太大了,驱动里面有对这个的限制,超过此限制就报错了!

现在又出现了新问题:运行后deviceiocontrol倒是没有抱错,但是没有返回,因为我对此函数的成功和失败都有输出显示,而此时什么显示都没有,所以可以肯定函数没有返回。
因为我是同步打开,所以一般的解释是函数在等待数据传输完成,因为我设的数值很小(1000),应该很快传完才对,可等了半天也没反应,我看了下windows任务管理器,此进程的cpu占用率为0,也就是说根本就没有数据传输,很是奇怪,原因查找中
SEIZE THE DAYS!
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-19 17:20
没人懂么
SEIZE THE DAYS!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-20 06:38
用WinDbg去调试咯,光这样说,谁知道什么原因?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-03-20 10:08
windbg还没有用,倒是用bus hound看了下,在“device”中可以找到我的设备,但是在“capture"没有捕捉到任何的数据,而用示波器测试设备的输出pin,确实有信号输出到fx2,而现在看来fx2并没有把设备输出的数据发给driver,很是怀疑firmware除了问题
SEIZE THE DAYS!
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-03-20 10:31
上面没说清楚,“capture”在我将firmware download到fx2后是有输出的,也就是说firmware初始化fx2和设备的过程还是可以捕捉的,但当我运行上位机程序读取数据时就没反应了
SEIZE THE DAYS!
游客

返回顶部