kuku_malu
驱动牛犊
驱动牛犊
  • 注册日期2005-03-30
  • 最后登录2008-03-10
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2187回复:8

关于EZ-USB通用驱动程序的问题

楼主#
更多 发布于:2005-06-09 11:45
如果使用EZ-USB的通用驱动程序ezusb.sys,如何编写应用程序呢?
我知道用CreateFile、DeviceIoControl等,但如何控制数据读写的端口呢?比如从EP0读设备状态,从EP2读BULK方式的数据。
哎,实在是太菜了。在这里先谢谢各位了。

最新喜欢:

spry97spry97
kuku_malu
驱动牛犊
驱动牛犊
  • 注册日期2005-03-30
  • 最后登录2008-03-10
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-09 15:33
 ;)呵呵,我知道了,哎,这个论坛就是好啊
sun3h
驱动牛犊
驱动牛犊
  • 注册日期2005-06-14
  • 最后登录2005-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-14 02:12
我晕,楼上的大虾,你怎么就自己就明白了,是自己想通还是有人秘密的告诉你啊,能不能也透露一点给小弟啊??如果可以请发到sun3h@163.com其他哪位也想明白的话我帮你转发,如何???
coolcat0710
驱动牛犊
驱动牛犊
  • 注册日期2005-06-12
  • 最后登录2005-06-28
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-16 17:06
能否给我也发一份阿,我也很想弄清楚这个问题,多谢多谢啊!我的邮箱:coolcat0710@163.com
likangmao
驱动牛犊
驱动牛犊
  • 注册日期2004-12-17
  • 最后登录2005-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-17 16:39
帮帮忙!也转发给我一份吧!谢谢
likangmao@yahoo.com.cn
scsi
驱动中牛
驱动中牛
  • 注册日期2002-03-22
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望116点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-17 17:50
BULK_TRANSFER_CONTROL bulkControl;
WORD  outPacketSize, inPacketSize;
UCHAR outBuffer[64], inBuffer[64];
bulkControl.pipeNum=2;
outPacketSize=4;
if( ! DeviceIoControl (hDeviceHandle,
                     IOCTL_EZUSB_BULK_WRITE,
                     &bulkControl,
                     sizeof(BULK_TRANSFER_CONTROL),
                     &outBuffer[0],
                     outPacketSize,
                     &nBytes,
                     NULL) )
fulminate
驱动小牛
驱动小牛
  • 注册日期2002-05-16
  • 最后登录2006-11-27
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-18 23:13
不要发邮件嘛,就在这里写出来多好,可以让大家也共享嘛
==========腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库==========
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-06-20 10:45
搜啊,论坛有搜索功能!
干吗不用????
应用程序的源代码cy已经提供了
叫EzMr,我说的是2。0的控制程序,1。1有类似的
去参考源代码写自己的代码
kuku_malu
驱动牛犊
驱动牛犊
  • 注册日期2005-03-30
  • 最后登录2008-03-10
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-06-23 15:41
不好意思,各位,最近太忙了,今天刚有时间整理一下,只是我的个人经验,不全面,可能还有理解上的错误,权作抛砖引玉了。
===========================================
现在回过头来看,发现挺简单的,为了让更多与我同样曾经困惑过的人都清楚,在这里总结一下吧:
1)样例程序可以参考\Cypress\USB\Examples\EzUsb\bulktest、Cypress\USB\Examples\EzUsb,最好再

看看Cypress\USB\Util中的程序。
2)对EP0的控制需用到VENDOR_REQUEST_IN结构,我的程序是这样写的:
VENDOR_REQUEST_IN       myRequest, myRequest2;
....
if (OpenDriver(&hDevice,sDriverName))
{
myRequest.bRequest = bRequest;//是控制命令代码,可以由参数传入,如0XB2,0XA0等
myRequest.wValue = 0x7F92;
myRequest.wIndex = 0x00;
myRequest.wLength = 0x01;
myRequest.bData = 0;
myRequest.direction = 1;//0x00; //0:代表传输方向是向主机传送
                     //1:代表传输方向是向设备传送

bResult = DeviceIoControl (hDevice,
  IOCTL_Ezusb_VENDOR_REQUEST,
  &myRequest,
  sizeof(VENDOR_REQUEST_IN),
  &myRequest2,//NULL, 因为固件设计了一个返回值,所以定义了一个myRequest2,在它的bRequest字段

里存放返回值,这与固件的设计有关,如果没有返回值,用NULL就可以,当然下一个参数也就可以是0了
  sizeof(VENDOR_REQUEST_IN),//0,
  &nBytes,
  NULL);
3)如果要从EP0端口返回多个数据(小于16BYTE),程序如下:
VENDOR_OR_CLASS_REQUEST_CONTROL myRequest; //必须用这个结构,EZMr中就是这样用的
.....
myRequest.request = 0xB3;
myRequest.value = 0x7F92;
myRequest.index = 0x00;
myRequest.direction = 1;//0:代表传输方向是向主机传送
                     //1:代表传输方向是向设备传送
myRequest.requestType=2; // 1:class, 2:vendor
myRequest.recepient=0; // 0:device, 1:interface, 2:endpoint, 3:other
......
bResult = DeviceIoControl (hDevice,
   IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
   &myRequest,
   sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
   buf,//返回的数据在这里
   5,//返回数据的字节数
   &nBytes,
   NULL);
4)从端口EPn用Bulk传输,程序如下:(以下是读数据的程序,因为我的项目只要求读,其实写数据好像

差不多)
BULK_TRANSFER_CONTROL btc;
......
bResult = DeviceIoControl (hDevice,
       IOCTL_EZUSB_BULK_READ,
       &btc,
       sizeof(BULK_TRANSFER_CONTROL),
       m_temp,
       512,//通用驱动定义的包最大为512
       (unsigned long *)&nBytes,//
       NULL);
游客

返回顶部