2 Replies Latest reply on Jun 20, 2017 11:28 PM by yyca

    自己寫的CyUSB3014通信程序在win10下運行崩潰

    1085952824_1489576

      我用VS2012編寫了一個win32控制台的小程序與CyUSB3014通信,只有控制傳輸,使用靜態鏈接庫,調用EZ-USB FX3 SDK 1.3.3裡面提供的Cypress\EZ-USB FX3 SDK\1.3\library\cpp\lib\x86\CyAPI.lib,程序在win7系統下運行正常,在win10下一運行到與控制端點通信的地方就崩潰。程式可以正常找到設備,但是一調用write API就崩潰。

         

      報錯 “程式已經停止運作”。

         

      win10下 EZ-USB FX3 SDK 1.3.3(1.2.3.10)裡面自帶的driver和官網上下的Cypress USB-Serial Driver(1.2.3.14) 都試過,現象一樣。但是Cypress 官方的USB controller就能正常工作。

         

      關鍵代碼如下:在調用CyAPI.lib提供的API Write和Read時程序崩潰。

         

          CCyUSBDevice *USBDevice = new CCyUSBDevice();
          CCyControlEndPoint *ept = USBDevice->ControlEndPt;

         

      //find out video card.
                  int devNum = USBDevice->DeviceCount();
                  int pID,vID;
                  int i = 0;
                  do
                  {
                      USBDevice->Open(i);
                      pID = USBDevice->ProductID;
                      vID = USBDevice->VendorID;
                      i++;
                  }while((i<devNum) && ((vID !=VIDEO_VID) || (pID !=VIDEO_PID)));

         

          //write to eeprom

         

         ept->Target = TGT_DEVICE;
          ept->ReqType = REQ_VENDOR;
          ept->Index = 0x0000;
          ept->Value = 0x0100;
          ept->ReqCode = 0xba;//I2C write command
          if(TRUE !=ept->Write(buf0,len))
          {
              _tprintf(_T("Write EEPROM error!\n"));
              return 0x04;//write i2c error.
          }
          Sleep(1000);
          //verify
          ept->ReqCode = 0xbb;//I2C read command
          if(TRUE !=ept->Read(buf1,len))
          {
              _tprintf(_T("\nRead EEPROM error!\n"));
              return 0x05;//read i2c error.
          }
          
          Sleep(1000);