AN70983 Designing a Bulk Transfer Host Application for EZ-USB FX2LP™/FX3™.pdf

AN70983
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Author: Gayathri Vasudevan
Associated Part Family: CY7C6801XA, CYUSB3014
Associated Code Examples: None
Related Resources: For a complete list, click here.
To get the latest version of this application note, or the associated project file, please visit
http://www.cypress.com/AN70983
b
Cypress provides software development tools for the host PC in the form of a Visual Studio .NET library. This library
simplifies USB coding at the Windows level. This application note introduces the .NET class library and shows how to
create a Windows example to send and retrieve data using a “bulkloop” firmware example running on an FX2LP or FX3
Development Kit (DVK).
Contents
Introduction .......................................................................1
Functional Overview ..........................................................2
Application Note Folder Layout .........................................3
Development Boards ....................................................3
Download Firmware into Development Board Using
USB Control Center......................................................4
Application Overview .........................................................6
Features .......................................................................6
Operating Instructions ..................................................7
Using the Cypress .NET Library ........................................8
Adding a Reference to CyUSB.dll ................................8
Source Code Overview.................................................9
Asynchronous Communication ................................... 10
Firmware ......................................................................... 11
FX2LP Bulkloop Firmware .......................................... 11
FX3 Bulkloop Firmware .............................................. 13
Troubleshooting .............................................................. 15
System Requirements ..................................................... 15
Hardware .................................................................... 15
Development Software ............................................... 15
Related Resources.......................................................... 15
Summary ......................................................................... 15
Glossary .......................................................................... 16
Appendix: Windows Install of FX2LP/FX3 DVK Driver .... 17
Document History............................................................ 19
Worldwide Sales and Design Support ............................. 20
Products .......................................................................... 20
®
PSoC Solutions ............................................................. 20
Introduction
This application note demonstrates how to use the Cypress library for Microsoft .NET languages to implement host PC
applications to communicate with Cypress’s FX2LP and FX3 devices. Using this library, a Visual C#, Visual Basic, or Visual
C++ program can communicate with an FX2LP or FX3-based device at a high level of abstraction. For example, the
USBDeviceList and CyUSBDevice classes (explained in the Source Code Overview section) expose devices and endpoints as
simple class members. Communicating with USB devices using this high-level model is a great improvement over multiple
low-level Win32 API calls. For example, you can program a complete USB device tree display with only 15 lines of C# code.
A Visual Studio solution along with this application note provides example projects in Visual C#, Visual Basic, and Visual C++
languages. The host projects are built and tested using Microsoft Visual Studio Express 2012. The host application writes to
the BULK IN and BULK OUT endpoints of FX2LP or FX3. The library classes communicate with the provided Cypress USB
driver CyUsb3.sys to access these devices and endpoints.
To exercise the Windows Visual Studio code, an example firmware called “bulkloop” is provided for FX2LP and FX3 evaluation
boards along with this application note. This firmware accepts host PC data and sends the same data back to the PC on
command.
www.cypress.com
Document No. 001-70983 Rev. *D
1
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
This application note gives an overview of the Windows and device sides of the USB connection. It explains the software
layout for the example code associated with this application note and provides details to prepare the FX2LP and FX3
evaluation boards as test targets. The application note also demonstrates how to test drive the pre-compiled Windows code.
This allows you to run the Windows application without Visual Studio.
Functional Overview
Figure 1. System Block Diagram
PC
: CyUSB.dll
Cypress Application Library
Cypress Driver: CYUSB3.sys
or
FX2 LP DVK
(bulkloop.hex)
FX 3 DVK
(USBBulkLoopAuto.img)
Note FX3 DVK shown in Figure 1 is only representative. CYUSB3KIT-001/CYUSB3KIT-003 can be used.
In Figure 1, the host PC connects to one of two Cypress target boards with a USB cable. The FX2LP or FX3 evaluation board
is loaded with firmware that accepts BULK data on Endpoint 2-OUT and copies it for PC retrieval to the Endpoint 6-IN buffer.
The firmware file name is shown at the bottom of each board in Figure 1.
Note USB direction is host-centric; therefore, OUT is PC to device and IN is device to PC.
The host application sends data to EP2-OUT by making library calls to CyUSB.dll, which in turn communicates with the
Cypress USB driver CYUSB3.sys. When the host issues an IN request to EP6, the BULK data travels back in reverse through
CyUsb3.sys and the CyUsb.dll library call, and finally reaches the host application for display. Bulk data sent and received is
displayed in a PC text box, along with the number of transferred bytes. This data flow is depicted in Figure 2.
The Microsoft Visual Studio solution contains projects for Visual C# (shown in Figure 1 as Bulkloop_VCS), Visual Basic, and
Visual C++. They produce identical results.
www.cypress.com
Document No. 001-70983 Rev. *D
2
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Figure 2. Bulkloop Data Flow
PC
Bulkloop.VCS
Bulkloop.VB
Bulkloop.VCPP
CyUSB.dll
CYUSB3.sys
FX2LP or
FX3 Board
EP2-OUT
EP6-IN
Application Note Folder Layout
Figure 3. Application Note Folder Layout
Cypress provides suites of software tools to develop firmware and .NET-based applications to talk to the FX2LP and FX3
devices. For convenience, the files used in this application note are supplied in the accompanying zip file. To download the full
tool suites, visit the Cypress website.
Figure 3 shows the application note folder layout.

Bulkloop_Solution: This is a Microsoft .NET solution, which implements the bulkloop tester in three languages - Visual
Basic, Visual C#, and Visual C++.

Drivers: When you plug in an FX2LP or FX3 development board for the first time, Windows asks for the location of a
suitable driver. This folder contains drivers for Windows XP (“wxp”), Windows Vista (“wlh”), and Windows 7 (“win7”). Vista
and Windows 7 drivers are provided for 32-bit systems (“x86”) and 64-bit systems (“x64”). The driver is called cyusb3.sys
and works for both FX3 and FX2LP.
Note ezusb.sys and cyusb.sys are the legacy drivers distributed by Cypress for FX2LP family of devices. We do not
recommend ezusb.sys or cyusb.sys for new designs. For more details on migrating to cyusb3.sys, refer to Migration of an
®
EZ-USB FX2LP™ Driver from CyUSB.sys to CyUSB3.sys.

Firmware: This folder contains BULK loopback firmware for the FX2LP and FX3 boards. The source code is included so
you can study, modify, and compile the code after downloading the full development suites.

USB Control Center: This Visual C# application, taken from the EZ-USB FX3 Software Development Kit (SDK),
downloads FX2LP and FX3 firmware into the respective development boards. Preparing the USB Target
Development Boards
The FX2LP development board is included in the FX2LP Development Kit. The FX3 board is included in the FX3 Development
Kit (CYUSB3KIT-001 or CYUSB3KIT-003). Before running the Windows code, a development board must be prepared to
execute the loopback function shown on the right in Figure 3. The companion .zip file to this application note contains two
firmware directories, one for Cypress FX2LP (Bulkloop_FX2LP) and the other for Cypress FX3 (Bulkloop_FX3).
Before loading the loopback firmware, verify that the jumpers and switches are set according to Table 1 for the FX2LP board
and Table 2/Table 3 for the FX3 board.
www.cypress.com
Document No. 001-70983 Rev. *D
3
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Table 1. FX2LP Evaluation Board Settings
Jumper/Switch
Purpose
Setting
JP1, JP10
3.3 V to EZ-USB chip
IN,IN
JP2
Vbus powered
IN
JP3
Activates 4 LEDS
IN(x4)
JP5
3.3 V current monitor
IN
JP6, JP7
FX2LP memory map
(int + ext RAM)
OUT, OUT
JP8
Secondary wakeup
x
SW1
Small/Large EEPROM
x
SW2
EEPROM enable
OFF (No EEPROM)
Table 2. FX3 Evaluation Board (CYUSB3KIT-001) Settings
Jumper/Switch
Purpose
Setting
PMODE switch
Select USB download
1,2: OFF(down),3,4: x
J96,J97
Select USB download
Upper two pins (2-3)
J98
Select USB download
Unconnected
J53
Vbus powered
IN
Table 3. FX3 Evaluation Board (CYUSB3KIT-003 Settings)
Jumper/Switch
Purpose
Setting
J3
Development board is powered from USB 3.0 VBUS
Short
J4
Select USB download
Short
J5
Deselect external SRAM
Open
When the boards are configured as shown in the tables, FX2LP and FX3 use internal logic to enumerate as a USB loader
device, ready to download user firmware over USB.
Download Firmware into Development Board Using USB Control Center
Double-clicking the CyControl.exe file in the USB Control Center folder brings up the USB Control Center console. Figure 4
shows how the FX2LP or FX3 boards appear in the left panel device list.
FX3 board appears as “Cypress USB Bootloader” (FX2LP board as “FX2LP Default Device: NO EEPROM”) if the CyUSB3.inf
file provided in the attachment is used.
Figure 4. USB Control Center Device List
If you do not see anything in the left panel, the development board may be configured incorrectly or the Windows driver may
not be installed. Refer to the Appendix for details.
www.cypress.com
Document No. 001-70983 Rev. *D
4
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Note Some versions of the USB Control Center may list all connected USB devices in the left panel. To simplify the display,
click the Device Class Selection tab and deselect all but the Devices served by the CyUSB.sys drive… checkbox.
To download the bulkloop firmware into a development board, select the board you are using (Figure 4). Click the Program
item, select either the FX2 or FX3 item, and select RAM to download the firmware into the on-chip program memory. Then
navigate to the respective file as follows:
FX2: Firmware\Bulkloop_Fx2LP\bulkloop.hex
FX3: Firmware\Bulkloop_FX3\USBBulkLoopAuto\Debug\ USBBulkLoopAuto.img
Double-click the file to load the firmware. The USB loader device is replaced by the USB loopback device shown in Figure 5.
Figure 5. Bulkloop Device
This is EZ-USB ReNumeration in action. After the bulkloop firmware loads, the development board automatically disconnects
from the USB and reconnects as the device implemented by the downloaded firmware. The FX2LP or FX3 development board
is now ready to serve as the USB loopback peripheral for the PC example code in this application note.
www.cypress.com
Document No. 001-70983 Rev. *D
5
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Application Overview
To test drive the application, double-click the executable file in the directory corresponding to your desired .NET language:



VB_Application\Application\Bulkloop_VB.exe
VC++_Application\Application\Bulkloop_VCPP.exe
VCS_Application\Application\Bulkloop_VCS.exe
Features
Figure 6 shows the user interface of the Bulkloop application.
Figure 6. User Interface
This application user interface is designed to show the
following:

Status: Reports whether the target device is currently
connected or disconnected.

Endpoint Pair OUT/IN: Endpoint pair on the target
device, currently in use as OUT and IN endpoints for
transferring data to and from the target. This is
informational only (not user-editable), reflecting the
settings in the source code.

Data Bytes (Hex): A user-selectable data pattern
(maximum allowed length of eight nibbles or four
bytes), which will be transferred in loopback fashion
during bulk-loop operation.
www.cypress.com

Bytes Transferred OUT: The log of bytes transferred
from the host PC to the target. Each line begins with
the starting address of bytes in the line.

Bytes Transferred IN: Same as OUT, except that the
bytes transferred are IN bytes from the target to the
host PC.

Number of Bytes transferred OUT: Number of bytes
transferred from the PC to the target.

Number of Bytes transferred IN: Number of bytes
transferred from the target to the PC.


Start/Stop: Bulk-loop operation start/stop button.
DeviceTreeView: Displays all the connected devices
bound to Cyusb3.sys.
Document No. 001-70983 Rev. *D
6
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Operating Instructions
When a loopback device is detected, the Status box indicates “connected” and the left panel shows a tree indicating the
internal organization of the USB device. You can enter a byte pattern to transfer or accept the default 0x12345678 byte
pattern. Press the Start button; the loopback device sends and receives packets continuously.
Figure 7. Data Transfer from Bulkloop Application
Press Stop to terminate the transfers. The byte counters can be used to measure USB transfer bandwidth for this application
using various host controllers and PCs.
The remainder of this document describes the .NET language applications in detail.
www.cypress.com
Document No. 001-70983 Rev. *D
7
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Using the Cypress .NET Library
Adding a Reference to CyUSB.dll
CyUSB.dll is a managed Microsoft .NET class library that
provides a high-level programming interface to USB
devices. You can access its classes and methods from
any of the Microsoft Visual Studio.NET managed
languages such as Visual Basic.NET, C#, Visual J#, and
managed C++.
If you have multiple projects in the ‘build’ operation, select
the language version by right-clicking the project name
and set it as the startup project. This is a quick way to
switch between languages.
Figure 9. Add CyUSB.dll Reference to All Three
Projects
Figure 8. Application Development with CyUSB.dll
To use the Cypress library, perform these two steps:
1.
Add a library reference to CyUSB.dll in your project.
2.
Add a line in your source file to include the library in
your program.
Figure 9 shows where the library references are listed in
the Visual Basic, VC++, and VC# projects in the
Bulkloop_Exerciser solution. If expanding the reference
item does not show CyUSB, right-click the project name,
select the “reference” item, and browse to the folder
containing CyUSB.dll. The projects supplied with this
application note use the path C:\AN70983\CyUSB.dll. If
you install the application note files elsewhere, these
references need to be updated to match your file location.
All the projects in the solution compile when you click the
Build button; any error messages apply to all three
projects. You can limit error messages to the project you
are using by excluding the other two projects from the
‘build’ operation. In the Solution Explorer panel, right-click
the solution name, select Properties, and uncheck the
projects you wish to exclude from the build operation.
www.cypress.com
Depending on the language, add a reference to the code
at the top of the file according to Table 4.
Table 4. Reference Syntax for .NET Languages
Language
File
Added line
Visual Basic
form1.vb
Imports CyUSB
Visual C#
form1.cs
Using CyUSB
Visual C++
form1.h
#using "..\..\..\Application\CyUSB.dll"
(or the respective path in your
computer)
Document No. 001-70983 Rev. *D
8
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Source Code Overview
The following table explains the functionalities and important steps of the host application code.
Table 5. Code Overview
Action/Function
Object initialization
Device attach and
removal detection
RefreshDevice()
Data Transfer
Operation
Description

Creates and initializes instances of the classes
USBDeviceList, CyUSBDevice, CyBulkEndPoint, and
other required variables.

“usbDevices” represents a dynamic list of USB devices
that are accessible via the class library. It populates
itself with USBDevice objects representing all USB
devices bound to Cyusb3.sys, served by the device
selector mask, “DEVICES_CYUSB”.

When the connection between the host and the target
hardware is established, the event_handler function
usbDevices_DeviceAttached() is called.

When the target device is disconnected, the
event_handler function usbDevices_DeviceRemoved()
is called.

Both of these event handlers in turn call function
RefreshDevice().

Instantiates “myDevice” with the device of interest,
based on the VID and PID of the device. The bulkloop
firmware used in this example uses the VID/PID:
0x04B4/0x00F0.

If there are multiple devices with this VID/PID,
“myDevice” will be instantiated with the handle to the
first connected device.

Enables or disables the status label and the Start/Stop
button.

If the device of interest is found, instantiates the
“BulkOutEndpt” and “BulkInEndpt” with endpoints EP2
and EP6, respectively, because the bulkloop firmware in
this example uses the same endpoints.

Clears and updates the tree view with the latest list of
devices bound to Cyusb3.sys.

StartBtn_Click() eventhandler is invoked on clicking the
Start button

This function first takes the user’s value from the ‘Data
Bytes(Hex)’ field of the application user interface,
changes the text of the button to “Stop”, and starts the
thread “tXfers” where the data communication is
actually carried out.

www.cypress.com
CyUSB.dll API

USBDeviceList represents a dynamic list of
USB devices that are accessible via the class
library. When an instance of USBDeviceList is
created, it populates itself with USBDevice
objects representing all the USB devices
served by the indicated device selector mask.
These USBDevice objects are initialized
correctly and are ready for use.

The CyUSBDevice class represents a USB
device attached to the Cyusb3.sys device
driver.

CyBulkEndPoint is a subclass of the
CyUSBEndPoint abstract class.


USBDeviceList[int VID, int PID]: This index
operator provides access to elements of the
USBDeviceList based on the VendorID and
ProductID properties of the USBDevice
objects in the list.

EndpointOf( byte addr ): Returns the
CyUSBEndPoint object whose Address
property is equal to addr. Returns null if no
endpoint with Address = addr is found.

The other parent thread only take cares of application
user interface events and other OS events.
Document No. 001-70983 Rev. *D
9
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Action/Function
Description

CyUSB.dll API
If the thread is already running, this eventhandler aborts
the thread and changes the text of the button back to
“Start”.
TransfersThread()
SetOutputData()
StatusUpdate()
XferData(ref byte[] buf, ref int len): The XferData
method sends or receives len bytes of data
from/into buf. This is the primary I/O method of the
library for transferring data. It performs
synchronous (blocking) I/O operations and does
not return until the transaction completes or the
endpoint's TimeOut has elapsed. Returns true if the
transaction successfully completes before TimeOut
has elapsed. The number of bytes actually
transferred is passed back in len.

Calls SetOutputData() to set up the data for OUT
transfers.

After the thread is started, data transfers in the OUT
and IN direction are started using the XferData() API.

It takes the user-given data in the ‘Data Bytes(Hex)’
field of the application user interface and fills the
‘outData[]’ buffer with these bytes, which are transferred
out in the OUT transfers.


This is the call back function for updating the UI and is
called from TransfersThread. This updates the
textboxes in the UI with the Bytes transferred and
number of Bytes transferred.

Asynchronous Communication
This application uses synchronous communication to move data between the host and the target. In this method, the data
transfer function ‘XferData’ does not return until the full data is transferred. In other words, the application is blocked until the
full data transfer completes. After that, the next data transfer operation starts. This method is suitable for most applications.
But with applications that need to use the full data bandwidth available for transfers, the more advanced asynchronous
communication method is used. Asynchronous transfers are more complex, suitable for advanced users. The ‘Streamer’
example that comes with the Cypress USBSuite shows how to use the asynchronous communication method.
www.cypress.com
Document No. 001-70983 Rev. *D
10
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Firmware
The firmware configures the endpoints and the interface to carry out bulk data loopback operation. Two endpoints are
configured to handle bulk transfer: the OUT endpoint and IN endpoint. Data sent from the host is stored in an OUT endpoint
buffer. This data is transferred to the IN endpoint and then sent back to the host on request.
FX2LP Bulkloop Firmware
The following code snippets explain important code functionalities of the FX2LP bulkloop firmware.
Action
Descriptor
Information
Description







File Name


dscr.a51
TD_Init()
bulkloop.c
PID: 0x00F0
Device class: Vendor
Number of configurations: 1
Number of interfaces: 1
Number of endpoints: 2
Endpoints supported:
EP2 BULK OUT, 512 byte maxpacket size
EP6 BULK IN, 512 bytes maxpacket size
Different component initialization of the FX2LPbased target is done in the TD_Init() function. This
function is called from main() for initialization.

Sets the CPU clock to 48 MHz
CPUCS =((CPUCS &
~bmCLKSPD) |
bmCLKSPD1);



IFCONFIG |= 0x40;
Configures the interface of the FX2LP.
FX2LP is configured in the slave FIFO mode
Interface clock is chosen to be internal 48MHz clock.
The endpoints are configured as follows:
Initialization
Function
Name
VID: 0x04B4



Code Snippets



Endpoint 2 – OUT, Bulk, double buffered, 512 bytes
Endpoint 6 – IN, Bulk, double buffered, 512 bytes
The OUT endpoints, after configuring, need to be
armed to accept packets from the host. Because the
endpoints are double-buffered, two packets must be
skipped to arm the endpoint. Arming is essentially
freeing up the buffers and making them available to
the host to receive packets.

By writing a ‘1’ to bit 7 of the byte count register, the
packet is skipped.

Enables the AUTO pointer used for data transfer in
the TD_Poll function.
www.cypress.com
EP2CFG = 0xA2;
SYNCDELAY;
EP6CFG = 0xE2;
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
AUTOPTRSETUP |= 0x01;
Document No. 001-70983 Rev. *D
11
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Description
Code Snippets

The bulkloop implementation is carried out in the TD_Poll()
function. This function is called repeatedly when the device
is idle

Checks Endpoint 2 to see if it has data. This is done by
reading the Endpoint 2 empty bit in the endpoint status
register (EP2468STAT).

If Endpoint 2 has data (sent from the host), checks the
capability of Endpoint 6 to receive the data. This is done by
reading the endpoint 6 ‘Full’ flag indicated by a full bit in the
endpoint status register.
if(!(EP2468STAT &
bmEP6FULL))
If Endpoint 6 is not full, then the data is transferred.
}

Function
Name
File Name

if(!(EP2468STAT &
bmEP2EMPTY))
{
{
}
APTR1H = MSB(

Data
Loopback

To transfer data, the data pointers are initialized to the
corresponding buffers. The first auto pointer is initialized to
the first byte of the Endpoint 2 FIFO buffer.
The second auto pointer is initialized to the first byte of the
Endpoint 6 FIFO buffer.
);
APTR1L = LSB(
&EP2FIFOBUF
);
AUTOPTRH2 = MSB(
&EP6FIFOBUF
);
AUTOPTRL2 = LSB(
);



The number of bytes to be transferred is read from the byte
count registers of Endpoint 2. The EP2BCL and EP2BCH
registers contain the number of bytes written into the FIFO
buffer by the host. These two registers give the byte count
of the data transferred to the FIFO IN and OUT transaction
as long as the data is not committed to the peripheral side.
Because auto pointers are enabled, the pointers increment
automatically and the statement EXTAUTODAT2 =
EXTAUTODAT1 transfers data from Endpoint 2 to
Endpoint 6. Each time this statement is executed, the auto
pointer is incremented. This statement is executed
repeatedly to transfer each byte from Endpoint 2 to 6.
After the data is transferred, Endpoint 2 must be re-armed
to accept a new packet from the host. Endpoint 6 is
“committed”, that is, the FIFO buffers are made available to
the host for reading data from Endpoint 6
&EP2FIFOBUF
bulkloop.c
TD_Poll()
&EP6FIFOBUF
count = (EP2BCH <<
8) + EP2BCL;
for( i = 0x0000; i <
count; i++ )
{
}
EXTAUTODAT2 =
EXTAUTODAT1;
EP6BCH = EP2BCH;
SYNCDELAY;

EP6BCL = EP2BCL;
SYNCDELAY;
EP2BCL = 0x80;
www.cypress.com
Document No. 001-70983 Rev. *D
12
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
FX3 Bulkloop Firmware
The following code snippets explain code functionalities of the FX3 bulkloop firmware.
Description
Descriptor
Information
Initialization







FX3 APIs
cyfxbulklpdscr.c
Device class: Vendor
Number of configurations: 1
Number of interfaces: 1

Number of endpoints: 2
Endpoints supported:

EP2 BULK OUT, maxpacket size of 1024 byte for
SS, 512 byte for HS

EP6 BULK IN, maxpacket size of 1024 bytes for
SS, 512 byte for HS

The RTOS kernel is invoked next from the
main(). This is a non-returning call and sets up
the Threadx kernel. This function needs to be
invoked as the last function from the main ()
function

FX3 application definition function is invoked
from the system module after the device and all
the modules are initialized. The application
threads and other required OS primitives can be
created here. At least one thread must be
CyU3PThreadCreate()
created. This function should not be explicitly
invoked.
Sets the functional mode of the 61 I/O pins
available in FX3

BulkLpAppThread_Entry is the application
thread created.

CyFxBulkLpApplnDebugInit() initializes the
debug module

CyFxBulkLpApplnInit() initializes the bulkloop
application

Starts the USB device mode driver in the USB
3.0 platform and creates the DMA channels
required for the control endpoint

Registers a USB setup request handler with the
USB driver.
www.cypress.com

PID: 0x00F0
FX3 device is initialized

File name
VID: 0x04B4



Function Name
Registers a USB event callback function with the
USB driver. CyFxBulkLpApplnUSBEventCB is
registered in this application.
Registers a USB 3.0 LPM request handler
callback.
CyU3PDeviceInit()
CyU3PDeviceConfigureI
main()
OMatrix()
CyU3PKernelEntry()
CyFxApplicationDef
ine()
cyfxbulklpauto.c



CyU3PUsbStart()

CyU3PUsbRegisterE
ventCallback()

CyU3PUsbRegisterL
PMRequestCallback
()
BulkLpAppThread_
Entry()
CyU3PUsbRegisterS
etupCallback()
Document No. 001-70983 Rev. *D
CyFxBulkLpApplnIn
it()
13
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Description

FX3 APIs
Registers USB descriptors with the USB driver.
The driver is capable of remembering one
descriptor each of the various supported types
as well as up to eight different string descriptors.
The driver only stores the descriptor pointers
that are passed into this function; it does not
make copies of the descriptors. Therefore, the
caller should not free up these descriptor buffers
while the USB driver is active.

Enable/disable the USB connection. This
function is used to enable or disable the USB
PHYs on the USB 3.0 platform and to control the
connection to the USB host in that manner.

CyFxBulkLpApplnStart () is called upon Set
Configuration event, which in turn configures
USB endpoint's properties.

Creates a DMA channel. A DMA channel
requires a producer socket, a consumer socket,
a set of buffers, and a callback function. In this
example, an auto channel is created between
EP2 as producer socket and EP6 as consumer
socket. Whenever, EP2 receives any data it will
be automatically committed to EP6.
Data
Loopback

www.cypress.com


CyU3PUsbSetDesc()

CyU3PSetEpConfig(
)

CCyU3PDmaChannelC
reate()

Function Name
File name
CyU3PConnectState
()
CyU3PDmaChannelSe
tXfer()
CyFxBulkLpApplnS
tart ()
CyFxBulkLpApplnS
tart ()
Set a transfer on the DMA channel. The function
starts a transaction the selected DMA channel.
Document No. 001-70983 Rev. *D
14
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Troubleshooting
Related Resources
1.
The host application will fail to compile and the
CyUSB.dll APIs will not be accessible if the CyUSB.dll
is not properly added and included for reference.
Follow the instructions provided in Adding a
Reference to CyUSB.dll.
2.
If any of the CyUSB APIs fail, check the return code
for the respective API. The return code values and
their meaning is documented in the CyUSB.dll
documentation located at “<InstallDirectory>\Cypress
Suite USB 3.4.x\CyUSB.NET\CyUSB.NET” after
installing SuiteUSB.
3.
4.
If the XferData/BeginDataXfer APIs fail, use the
“UsbdStatus” or “UsbdStatusString()” to get the error
code from the last call to the XferData or
BeginDataXfer APIs

UsbSuiteQuickStartGuide helps in getting started with
developing host applications in Visual C# using
CyUSB.dll; and Visual C++ using CyAPI.lib.

Programmer’s Reference C# library (CyUSB.NET.pdf)
is available with Cypress USB Suite.

More application examples are provided with the
Cypress USB Suite and FX3 SDK such as:


EZ-USB FX2LP/FX3 Developing Bulk-Loop Example
on Linux describes how you can use libusb to develop
a USB host application on a Linux-based operating
system for Cypress EZ-USB FX2LP/FX3 products.
This application note is provided only for reference.
Cypress also provides Linux SDK which can be found
at FX3 SDK web page.

EZ-USB FX2LP - Developing USB Application on
MAC OS X using LIBUSB describes how libusb-1.0
can be used to develop USB host applications (Cocoa
Application) on MAC OS X 10.6/10.7 for Cypress EZUSB FX2LP products. This application note is
provided only for reference. Cypress also provides
MAC SDK which can be found at FX3 SDK web page.

For complete list of USB SuperSpeed Code
Examples, visit http://www.cypress.com/101781 and
for complete list of USB Hi-Speed Code Examples,
visit http://www.cypress.com/101782.
System Requirements
FX2LP
An FX2LP DVK (CY3684) board is used as the
development and testing platform for this example for
FX2LP. A detailed schematic of the DVK is provided in the
hardware folder after FX2LP DVK install. More information
about the board is available in the ‘EZ-USB Advanced
Development Board’ section of the EZ-USB_Getting
Started document available with the FX2LP DVK.
FX3
An FX3 DVK (CYUSB3KIT-001 or CYUSB3KIT-003)
board can be used as the development and testing
platform for this example for FX3. A detailed schematic of
the DVK is provided in the hardware folder (after you
install the appropriate FX3 DVK).
Development Software


Control Center: User interface to communicate
with USB devices served by CyUSB3.sys.

If APIs are unable to access the device, ensure the
device handle is properly assigned
Hardware
Streamer: Can be used to test the data transfer.
Summary
This application note discusses the various aspects to
build host PC applications using the Cypress library for
Microsoft .NET languages to implement to communicate
with Cypress's FX2LP and FX3 devices.
Microsoft .NET framework 4.5
ControlCenter – Available by installing the Cypress
USB Suite.

Keil uVision 2 – The 4K-byte evaluation version is
available with the CY3684 DVK. For the full version,
contact Keil.


Eclipse IDE – Available by installing FX3 SDK.
Microsoft Visual Studio 2010 or 2012.
www.cypress.com
Document No. 001-70983 Rev. *D
15
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Glossary
Term
Meaning
Microsoft Visual Studio
Microsoft Visual Studio is an integrated development environment (IDE) from Microsoft. It is used
to develop console and graphical user interface applications along with Windows Forms or WPF
applications in both native code together with managed code for all platforms supported
by Microsoft Windows, Windows Mobile, Windows CE, .NET Framework,.NET Compact
Framework, and Microsoft Silverlight.
Microsoft Visual C#
The Microsoft version of the C# language designed for managed environments.
Microsoft Visual C++
Commercial IDE product from Microsoft for the C, C++, and C++/CLI programming languages.
Microsoft Visual Basic
Visual Basic .NET (VB.NET) is an object-oriented computer programming language that can be
viewed as an evolution of the classic Visual Basic (VB), implemented on the .NET Framework.
Visual Basic is a third-generation event-driven programming language and IDE from Microsoft for
its COM programming model
CYy3684 DVK
Cypress development kit for the EZ-USB FX2LP family. For more information, see the Cypress
website.
CYUSB3KIT – 001/ CYUSB3KIT – 003
Cypress development kit for the EZ-USB FX3. For more information, see CYUSB3KIT-001 or
(EZ-USB® FX3™ SuperSpeed Explorer
CYUSB3KIT-003.
Kit)
EZ-USB
Generic name for all Cypress high-speed USB products such as FX2LP.
FX2LP
Cypress high-speed USB controllers. For more information, see the CYUSB3KIT-001 or
CYUSB3KIT-003.
FX3
Cypress’s EZ-USB FX3 is the next-generation USB 3.0 peripheral controller, providing integrated
and flexible features. For more information, see the Cypress website.
Cypress USB Suite
Cypress USB development tools for Visual Studio. For more information, see the Cypress
website.
CyUSB.dll
Cypress library for software development using .NET technologies. For more information, see the
Programmer’s Reference C# library (CyUSB.NET.pdf) that is available with Cypress USB Suite.
Cyusb3.sys
Cypress Windows driver for USB communication. For more information, see the Cypress
CyUsb3.sys Programmers Reference.
USB Control Center
Cypress application for general-purpose USB functionality such as device identification and code
image downloads. The application is available through Cypress USB Suite.
Keil uVision
The 4K-byte evaluation version is available with the CY3684 DVK. For the full version, contact
Keil.
Eclipse IDE
As part of the development tools, the FX3 SDK provides the Eclipse IDE for C/C++ developers. It
comprises the Eclipse base platform and the CPP feature. This firmware development
environment helps you to develop, build, and debug firmware applications for FX3.
www.cypress.com
Document No. 001-70983 Rev. *D
16
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Appendix: Windows Install of FX2LP/FX3 DVK Driver
Figure 12. FX3 as WestBridge
If you have not already installed the FX2LP/FX3 DVK on a
Windows computer, you will see the following message
when you connect the DVK to the computer for the first
time.
Figure 10. Driver Software Installation
Close the message box and navigate to the Windows
Device Manager. To do this, click the Start button, rightclick Computer in the right panel, and select Properties
to bring up System Information. Click Device Manager in
the left panel. In the Device Manager, FX2LP shows up as
“Unknown Device” and FX3 as “WestBridge”.
Right-click the device (with the exclamation mark) and
select Update Driver.
Select Browse my computer for driver software.
Browse to select the driver software folder and click Next.
Figure 13. Update Driver
Figure 11. FX2LP as Unknown Device
www.cypress.com
Document No. 001-70983 Rev. *D
17
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Click the Have Disk button, browse to the location
AN70983_Project\Drivers to choose CyUSB3.inf, and click
OK.
Use
the
inf
from
the
folder
(AN70983_Project\Drivers), as shown in the following
table for the respective operating system.
Operating System
Click Next and continue to install the driver. After installing
the driver, the Device Manager window should remove the
entry with the yellow exclamation mark and show the
recognized devices, successfully bound to the driver.
Figure 15. Cypress Device after Binding Driver
Folder Path
Windows XP 32-bit
wxp\x86
Windows 7 32-bit
win7\x86
Windows 7 64-bit
win7\x64
Windows Vista 32-bit
wlh\x86
Windows Vista 64-bit
wlh\x64
Figure 14. Click Have Disk to Select CyUSB3.inf
www.cypress.com
Document No. 001-70983 Rev. *D
18
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Document History
®
Document Title: AN70983 – Designing a Bulk Transfer Host Application for EZ-USB FX2LP™/FX3™
Document Number: 001-70983
ECN
Orig. of
Change
**
3315759
SSJO/GAYA
07/15/2011
New Application Note
*A
3521406
GAYA
02/09/2012
Converted code example to application note.
*B
4023136
GAYA
06/07/2013
Updated document. Added VB and VC++ examples using CyUSB.dll, that can
communicate with FX2LP and FX3.
*C
4218438
RSKV
12/12/2013
Revision
Submission
Date
Description of Change
Restructured the Microsoft .NET code into a single solution containing three
projects, one for each language.
Major rewrite of the document.
Updated the document as per new template.
Updated Abstract.
Added hyperlink to refer the complete list of USB SuperSpeed Code Examples
and complete list of USB Hi-Speed Code Examples, in Abstract (page 1).
Added a note for FX3 DVK in Functional Overview.
Updated Figure 1. System Block Diagram.
*D
4690485
GAYA
09/16/2015
Added a note in Application Note Folder Layout.
Added Troubleshooting.
Updated FX3.
Updated Table 2 title.
Added Table 3.
Updated the Term “CYUSB3KIT-001” to “CYUSB3KIT-001/CYUSB3KIT-003 (EZUSB® FX3™ SuperSpeed Explorer Kit) and its Meaning in Glossary.
Updated Related Resources.
www.cypress.com
Document No. 001-70983 Rev. *D
19
Designing a Bulk Transfer Host Application for EZ-USB® FX2LP™/FX3™
Worldwide Sales and Design Support
Cypress maintains a worldwide network of offices, solution centers, manufacturer’s representatives, and distributors. To find
the office closest to you, visit us at Cypress Locations.
PSoC® Solutions
Products
Automotive
cypress.com/go/automotive
psoc.cypress.com/solutions
Clocks & Buffers
cypress.com/go/clocks
PSoC 1 | PSoC 3 | PSoC 4 | PSoC 5LP
Interface
cypress.com/go/interface
Lighting & Power Control
cypress.com/go/powerpsoc
Memory
cypress.com/go/memory
PSoC
cypress.com/go/psoc
Touch Sensing
cypress.com/go/touch
USB Controllers
cypress.com/go/usb
Wireless/RF
cypress.com/go/wireless
Cypress Developer Community
Community | Forums | Blogs | Video | Training
Technical Support
cypress.com/go/support
EZ-USB is a registered trademark of Cypress Semiconductor Corp. FX2LP and FX3 are trademarks of Cypress Semiconductor Corp. All other
trademarks or registered trademarks referenced herein are the property of their respective owners.
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone : 408-943-2600
Fax : 408-943-4730
Website : www.cypress.com
© Cypress Semiconductor Corporation, 2011-2015. The information contained herein is subject to change without notice. Cypress Semiconductor
Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any
license under patent or other rights. Cypress products are not warranted nor intended to be used for medical, life support, life saving, critical control or
safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its products for use as
critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The
inclusion of Cypress products in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies
Cypress against all charges.
This Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide
patent protection (United States and foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a
personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works of, and compile the Cypress Source Code and derivative
works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with a Cypress
integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source
Code except as specified above is prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the
right to make changes without further notice to the materials described herein. Cypress does not assume any liability arising out of the application or
use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-support systems where a
malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress’ product in a life-support systems
application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.
www.cypress.com
Document No. 001-70983 Rev. *D
20