打印

上位机程序怎么只能写不能读

[复制链接]
1848|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
langgq|  楼主 | 2013-2-19 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在简单做了一个VC上位机程序访问驱动,获取数据。
      因为交到我这里的时候就是用的EZUSB,所以我也是用的EZUSB.SYS。不过我想应该没什么问题的。完全仿造EZMR这个工程看了一遍,写出的来得程序只能写数据而不能读数据,怪哉啊!怪哉!
    bResult = DeviceIoControl (hDevice,
       IOCTL_EZUSB_BULK_WRITE,      
       &bulkControl,
       sizeof (BULK_TRANSFER_CONTROL),
       buffer,
       length,
       (unsigned long *)&nBytes,
       NULL);
       ——————这是写的调用,完全参照control panel里的程序。
但是为什么完全仿照这个的读数据却返回不了值呢?
bResult = DeviceIoControl (hDevice,
       IOCTL_EZUSB_BULK_READ,
      &bulkControl,
       sizeof (BULK_TRANSFER_CONTROL),
       buffer,
       length,
       (unsigned long *)&nBytes,
       NULL);——————我用VC调试,看到所有的参数都与control panel一样,但是传进去都一样,为什么传出来的就是false呢?
      读与写有什么配置上的差异呢?头都快想破了都没想出来。
      另:
      因为control panel里的create File里的申明是这样的:
CreateFile(   completeDeviceName,
                               GENERIC_WRITE,
                               FILE_SHARE_WRITE,
                               NULL,
                               OPEN_EXISTING,
                               0,
                               NULL);
我看到没有GENERIC_READ,
我自己的申明如下:
WhDevice = CreateFile("[url=]\\\\.\\ezusb-0[/url]",
               GENERIC_READ|GENERIC_WRITE,
                FILE_SHARE_READ|FILE_SHARE_WRITE,
               NULL,
               OPEN_EXISTING,
               0,//FILE_ATTRIBUTE_NORMAL,
               NULL);
也读不出来啊。为什么他没有read能读出来,而我有没有read都读不出来呢?
沙发
wangzsa| | 2013-2-19 21:11 | 只看该作者
CY不是有个API手册吗,看看那个啊。

使用特权

评论回复
板凳
zhuww| | 2013-2-19 21:13 | 只看该作者
你确定固件程序已经跑通了?

使用特权

评论回复
地板
langgq|  楼主 | 2013-2-19 21:14 | 只看该作者
我用地不是CYAPI的,是ezusb的,交到我手上的就是这个,用DeviceIoControl来控制的。

使用特权

评论回复
5
zhanglli| | 2013-2-19 21:16 | 只看该作者
感觉好像是句柄的问题

使用特权

评论回复
6
lium| | 2013-2-19 21:47 | 只看该作者
全部照搬ezusb的源程序都不行?

使用特权

评论回复
7
langgq|  楼主 | 2013-2-19 21:50 | 只看该作者
感觉是句柄获取错误,因为读数据读两次就会进程死在那里。但是我怎么验证我的想法呢?

使用特权

评论回复
8
guoyt| | 2013-2-19 21:52 | 只看该作者
你应该想怎么纠正这个用法

使用特权

评论回复
9
langgq|  楼主 | 2013-2-19 21:54 | 只看该作者
我的句柄获取就是用的createfile方式,就如一楼写的,完全照搬ezusb程序啊。

使用特权

评论回复
10
hanwe| | 2013-2-19 21:56 | 只看该作者
估计是你deviceiocontrol参数里的buffer的问题。

使用特权

评论回复
11
langgq|  楼主 | 2013-2-19 21:58 | 只看该作者
嗯,设置任何一个数都读不出来,唯独设置成buffer=1024*1024;就能读出了。

使用特权

评论回复
12
yufe| | 2013-2-19 22:00 | 只看该作者
对啊,说明不是你的调用问题,而是固件问题

使用特权

评论回复
13
langgq|  楼主 | 2013-2-19 22:02 | 只看该作者
哦,我用ezusb control panel也是这样,好吧,这个皮球就算踢到固件那位同学那里了。

使用特权

评论回复
14
wangpe| | 2013-2-19 22:04 | 只看该作者
你用的上位机API也太老了,还是什么EZMR,赶快升级一下SDK吧!

使用特权

评论回复
15
langgq|  楼主 | 2013-2-19 22:06 | 只看该作者
我一开始就是用CYconsole来开发,用CYAPI来做。但是用ezusb control panel才能正确识别设备,而且能进行get pipes等操作。用新的版本就不能够,奇怪啊

使用特权

评论回复
16
wangzsa| | 2013-2-19 22:08 | 只看该作者
估计第一次做USB所以也不知道是为什么,就将就旧的开发平台做。

使用特权

评论回复
17
langgq|  楼主 | 2013-2-19 22:09 | 只看该作者
嗯,我也奇怪呢,按说旧的能识别,新的也应该能识别呢。为什么我的不能识别呢?

使用特权

评论回复
18
wangpe| | 2013-2-19 22:11 | 只看该作者
可能还是固件同学的问题吧?哈哈

使用特权

评论回复
19
langgq|  楼主 | 2013-2-19 22:16 | 只看该作者
好吧。。。汗一个,先结贴了

使用特权

评论回复
20
broaderzhang| | 2013-2-19 23:49 | 只看该作者
还在学习,这样就结贴了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

932

主题

8762

帖子

1

粉丝