Example Code

Cypress FX3 Development Board using CyUSB.DLL in Labview

Products and Environment

This section reflects the products and operating system used to create the example.

To download NI software, including the products shown below, visit ni.com/downloads.


  • Industrial Communication


  • LabVIEW

    Operating System

  • Windows

    Programming Language

  • .NET
  • LabVIEW G


This is an example of using Labview, .NET, and CyUSB.DLL to transfer data on the Cypress FX3 Development board.

The main reason I am posting it is I wasn't able to find it anywhere else, but there seem to be a lot of requests for it.

All of the attached files must be placed in a folder called Cypress in the root of the C drive.  You have to do that for the path to the firmware image file to work in the cypress VI.

If you don't want to do that put the folder somewhere else and edit the path to the firmware image.

In bulk loop mode with loopback using the Cypress USBBulkLoopAuto.img as the FX3 firmware my hardware achieves about 80 MegaBytes per second.

In Streaming mode using the Cypress USBBulkSourceSinkLED.img as the FX3 firmware my desktop gets about 200 MegaBytes per second.

Maximum transfer size is 4 MB.  You can experiment with smaller transfer sizes using the "n" control.  That is the only control.

With the FX3 plugged in run the cypress.vi.  The program will wait to sense the connection of a new FX3 Boot device.  Cause this to happen by pressing the reset button, next to the USB Port on the FX3 development board.

The new boot device will be detected and the Cypress FX3 USB BulkLoopExample device firmware will be loaded to the FX3 development board by Labview.

Let it run for as long as you want.  Press the reset button on the FX3 again to stop the program.

Since none of my attachments uploaded here is a full screenshot of Cypress VI

Second page reading from right of first page

Example code from the Example Code Exchange in the NI Community is licensed with the MIT license.


Thanks a lot for your post, I am puzzled by this question for a while time, in your block diagram i am not clear about packed VI 1(write and read) and VI 2 connected to VI ref, would you please give a little details about this two VIs? thanks a lot. 


The write/read VI is a functional global, note the uninitialized shift registers on a one execution per call while loop.  This is used to handle calls to the USBDeviceList .NET function.  If you call the function with write as the ENUM value the old list is disposed and a new one generated.  


If you call the function with the ENUM set to read you get the last .NET USBDEVICELIST reference generated.


The callback event VI sets the string to "Device Attached" when the operating system notes a CYUSB device is attached





I appreaciated your explaination, I will have a try.


Hello John,


Do you have the Labview source available somewhere? This would make the use of your design much easier.