现在的位置: 首页 > 综合 > 正文

EZ-USB FX2LP CY7C68013A 控制传输/自定义命令(上位机编程)

2018年02月09日 ⁄ 综合 ⁄ 共 1838字 ⁄ 字号 评论关闭

                                           EZ-USB FX2LP CY7C68013A  控制传输/自定义命令(上位机编程)

       每一个USB device至少有一个控制端点——endpoint zero。当一个CCyUSBDevice实例成功执行了它的open()函数,一个名为ControlEndPt的CCyControlEndPoint实例也被创建。通常情况下,我们会用这个ControlEndPt来完成我们的控制端点数据传输。

      CCyControlEndPoint是CCyUSBEndPoint抽象类的一个子类。

      不同于bulk,isoc,和interrupt传输,控制传输需要如下留个参数:

  • Target:其有效参数成员为:TGT_DEVICE, TGT_INTFC, TGT_ENDPT 和TGT_OTHER。一般不必关注,固定为:TGT-DEVICE。
  • ReqType:其有效参数成员为:REQ_STD,REQ_CLASS和REQ_VENDOR。当传输自定义请求时,应该用REQ_VENDOR。
  • Direction:其有效参数成员有:DIR_TO_DEVICE(表明传输方向为:主机到usb设备(out))和DIR_FROM_DEVICE(表示传输方向为:usb设备到主机(in))
  •  ReqCode: 八位二进制码值,不同的码值表示USB芯片应该执行的特定功能和命令。详见EZ_USB_TRM-Chapter 2 Endpoint Zero,Page2-6,Table 2-2. How the Firmware Handles USB Device Requests (RENUM=1)

       表中,bRequest即为ReqCode。自定义请求码值是除0x00-0x0c和0Xa0-0xaf以外的其他值。

  • Value:其值由ReqCode决定(详见:EZ_USB_TRM-Chapter 2 Endpoint Zero),这里的设定值将传给setupdat的【2:3】位。
  • Index:其值有ReqCode决定(详见:EZ_USB_TRM-Chapter 2 Endpoint Zero),这里的设定值将传给setupdat的【4:5】位。

       基本上,要对USB芯片(固件)进行自定义命令(vendor)传输,通常都是用控制传输进行的。使用控制传输in或者out方式都可以实现对固件的自定义命令传输。我们一般采用out方式实现自定义命令的传输。

       控制传输的函数有:异步传输函数begindataxfer()和同步传输函数xferdata()以及Write()函数(out传输)和Read()函数(in传输)。控制传输请尽量用同步传输函数xferdata()而不是异步传输函数begindataxfer()。

       综上所述,EZ-USB FX2(68013a)的控制传输/自定义命令传输的上位机编程函数模式如下:

UsbReq(UCHAR Req, LONG len, PUCHAR buf)

{

       ept->Target=TGT_DEVICE;

       ept->ReqType=REQ_VENDOR;

       ept->Direction=DIR_TO_DEVICE;

       ept->ReqCode=Req;

       ept->Value=0;

       ept->Index=0;

       ept->XferData(buf,len);

}

注:此函数是用来往USB设备发送设备请求的,Req是设备请求类型(命令代码),len表示长度,buf为实际的数据,实际使用的时候需要申请buf空间,并且设置好各数据内容。如下:

PUCHAR buf=new UCHAR[buflen];
ZeroMemory(buf,buflen);            //用0填充buf区,填充大小(buflen字节)
long  len=buflen;                

ept->XferData(buf, len);

       另外,当调用read()和write()函数发送控制命令时,read()和write()函数首先将Direction参数设置为DIR_FROM_DEVICE或DIR_TO_DEVICE,然后调用XferData()函数。这样,我们就不用自己设置Direction属性了。这样代码看起来会更简洁,运行更高效。

抱歉!评论已关闭.