USB论坛
直播中

刘慧

8年用户 1868经验值
私信 关注
[问答]

cyusb3014插入usb2.0接口后,软件调用cyapi.lib中的哪些函数完成初始化、读写操作?

cyusb3014,插入usb2.0接口后,软件调用cyapi.lib中的哪些函数完成初始化、读写操作?

回帖(1)

洪茗苞

2025-6-5 17:45:52

在使用CYUSB3014(EZ-USB FX3)通过USB 2.0接口通信时,CyAPI.lib的关键函数调用流程如下:




1. 初始化与设备枚举




  • CCyUSBDevice 类初始化

    创建对象实例,自动枚举连接的USB设备:


    CCyUSBDevice *USBDevice = new CCyUSBDevice();



  • 遍历设备并匹配VID/PID

    通过设备索引、VID(0x04B4)、PID(默认0x00F3)识别FX3:


    if (USBDevice->Open(0)) { // 0表示第一个设备
      if (USBDevice->VendorID == 0x04B4 && USBDevice->ProductID == 0x00F3) {
          // 设备匹配成功
      }
    }





2. 端点配置




  • 获取Bulk端点

    根据固件配置获取IN/OUT端点(例如端点1为Bulk OUT,端点6为Bulk IN):


    CCyBulkEndPoint *BulkOutEP = USBDevice->BulkOutEndPt;
    CCyBulkEndPoint *BulkInEP  = USBDevice->BulkInEndPt;

    // 设置传输参数(USB2.0下MaxPktSize通常为512)
    BulkOutEP->SetXferSize(512);
    BulkInEP->SetTimeOut(1000);  // 超时1秒





3. 数据传输


同步传输(简单场景)




  • 写数据(Host→FX3)

    使用XferData同步发送数据:


    UCHAR buffer[512];
    LONG length = 512;
    if (BulkOutEP->XferData(buffer, length)) {
      // 发送成功
    }



  • 读数据(FX3→Host)

    同步读取数据:


    UCHAR readBuffer[512];
    LONG readLen = 512;
    if (BulkInEP->XferData(readBuffer, readLen)) {
      // 读取成功,readLen为实际接收字节数
    }



异步传输(高性能场景)




  • 启动异步传输

    使用BeginDataXfer + WaitForXfer + FinishDataXfer组合:


    UCHAR asyncBuffer[4096];
    OVERLAPPED ovl = {0};
    ovl.hEvent = CreateEvent(NULL, false, false, NULL);

    // 启动异步传输
    BulkInEP->BeginDataXfer(asyncBuffer, 4096, &ovl);

    // 等待传输完成
    if (BulkInEP->WaitForXfer(&ovl, 1000)) {
      LONG bytesRead = 4096;
      if (BulkInEP->FinishDataXfer(asyncBuffer, bytesRead, &ovl)) {
          // 处理数据
      }
    }
    CloseHandle(ovl.hEvent);





4. 资源释放



  • 关闭设备与清理  
    USBDevice->Close();
    delete USBDevice;




关键注意事项




  1. 驱动安装

    确保已安装Cypress CyUSB3.sys驱动,否则设备无法被识别。




  2. USB2.0模式限制  



    • 最大包大小(MaxPktSize)通常为512字节(高速模式)。

    • 传输速度上限约480 Mbps,实际速率受固件和主机限制。




  3. 错误处理

    检查所有API返回值,并调用GetLastError()GetError()(CyAPI内部)诊断问题。




完整示例代码可参考Cypress SDK中的CyAPITest工程。开发者需根据固件的端点配置调整代码。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分