The maximal supported bandwidth for synchronous APIs (and single thread Software)

but significantly depends on host computer, since only Bulk (secure) transfer is supported.

The maximal supported bandwidth for asynchronous use of CyAPI.lib or CyUSB.dll (and multiple threads) is less dependent on host computer:

  • is 41-42 MB/s for TX and 32-36 MB/s for RX.

Using libusb(x) API instead of Trenz Electronic or Cypress APIs, similar values (and similar distinction between synchronous/single thread and asynchronous/multiple thread) should be expected.

To put the bytes-per-packet numbers into perspective, the maximum theoretical high-speed bandwidth over USB 2.0 (from the specification) is 13 Bulk packets ( of size equal to 512 bytes) per microframe. This represents a maximum bandwidth of: 13 * 512 / 125μs =

  • 53.248 MB/sec [theoretical max] (13 packets per microframe, 512 bytes per packet, 125μs permicroframe).

 

There are several reasons why your device will never be able to use all of this bandwidth.
  1. First of all, multiple TE USB FX2 modules USB ports shared with a single host controller. =>  USB bus is shared among several USB devices; the throughput in this case is subdivided between multiple USB ports. Even if the TE USB FX2 modules are plugged into different USB ports on the host computer, you are probably sharing the same host controller as all of the other devices on the bus, so your device is sharing the USB bus bandwidth with all of the other devices. For example single USB host and two TE USB FX2 module (aka 2 USB device):  (53.248 MB/sec)/2 = 26.624 MB/s.
  2. FX2 microcontroller's FIFO interface with FPGA; with the current configuration, this interface can transfer up to 48 MB/s burst rate.
  3. Even if the configuration of FX2 microcontroller is changed to support an higher throughput (TE USB FX2 module limit avoided), the theoretical limit (53.248 MB/sec) is not achievable with some current host controllers (that reside in the host computer), which can
    • receive 10 bulk packets/microframe (40.96 MB/s) or
    • send 8 bulk packets/microframe (32.768 MB/s).
The user can measure the maximum throughput achievable with user's host controller using Cypress Streamer application which is also included in SuiteUSB3.x.x at C:\Cypress\Cypress Suite USB 3.x.x\CyAPI\example Streamer. The firmware to be downloaded into FX2 is in the location C:\Cypress\Cypress Suite USB 3.x.x\Firmware\CYStream FW. See the Knownledge Base Article Streaming Throughput of an FX2LP Device (link).
  • No labels