AN76348 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Author: Rama Sai Krishna V Associated Project: No Associated Part Family: CY7C6801XA, CYUSB301X Software Version: None Related Application Notes: For a complete list of the application notes, click here. With the release of the USB 3.0 specification, USB controller chips required rearchitecting to handle the ten-fold increase in USB bandwidth over the USB 2.0 specification. Cypress offers USB controllers for applications based on ® USB 2.0 (EZ-USB FX2LP™) and USB 3.0 (EZ-USB FX3™).This application note describes the implementation differences between the two controllers. Example applications highlight those differences at the architectural, hardware, and firmware framework levels. While this application note emphasizes the new FX3 features, it provides links to FX2LP background materials. For the complete list of SuperSpeed code examples, visit http://www.cypress.com/?rID=101781 and for the complete list of Hi-Speed code examples, visit http://www.cypress.com/?rID=101782. Contents Introduction Introduction .......................................................................1 Architectural Differences ...................................................2 Serial Interfaces ................................................................ 2 GPIF Versus GPIF II .........................................................3 Hardware Differences........................................................3 Power Supply Configurations and Decoupling Capacitance...............................................3 Booting Options ............................................................4 Crystal/Clock ................................................................ 5 Software Differences .........................................................5 Development Tools ......................................................5 USB Host-Side Applications .........................................5 Programmer’s View of FX3 ...............................................5 FX2LP and FX3 Firmware Framework Differences ...........7 FX2LP Firmware Framework ........................................7 Bulkloop Example on FX2LP ........................................7 FX3 Firmware Framework ............................................8 Bulkloop Example on FX3 ............................................9 Slave FIFO Interfaces of FX2LP and FX3 ....................... 13 Flag Usage ................................................................. 14 UVC Camera Designs Based on FX2LP and FX3 .......... 14 Image Sensor Interface .............................................. 14 Implementation With FX2LP ....................................... 15 Implementation with FX3 ............................................ 16 2 Use of an I C Module in FX2LP and FX3 ................... 16 Debug FX2LP and FX3 Firmware Using UART .......... 16 Worldwide Sales and Design Support ............................. 19 Cypress EZ-USB FX3 is a USB 3.0 peripheral controller with highly integrated and flexible features that add USB 3.0 functionality to any system. www.cypress.com FX3 has a fully configurable, parallel general programmable interface called GPIF II, which can connect to an external processor, ASIC, or FPGA. The GPIF II is an enhanced version of the GPIF in FX2LP, Cypress’s flagship USB 2.0 product. GPIF II provides glueless connectivity to popular interfaces such as asynchronous SRAM, asynchronous and synchronous address data multiplexed interface, and others. To accommodate the USB 3.0 SuperSpeed signaling rates, FX3 offers architectural enhancements over FX2LP such as a RISC processor and DMA system. This application note explains the architectural differences and introduces the FX3 RTOS-based firmware frameworks. EZ-USB FX2LP-based designs are not directly portable to FX3 due to the architectural differences. This application note uses a simple LED blinking example to introduce the FX3 firmware frameworks. It then uses a simple example, bulkloop, to explain the differences in the firmware frameworks and to provide guidelines on how an FX2LP application can be modified to work on FX3. The bulkloop example loops data over two USB BULK endpoints under the control of a Windows based application. Note This application note is intended for users who have experience working with the FX2LP device. The following application notes can help you get started working with FX2LP or FX3: Document No. 001-76348 Rev. *C 1 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications AN65209 – Getting Started with FX2LP™ gives you background information about USB 2.0 along with the hardware, firmware, and software aspects of working with the FX2LP. AN75705 – Getting Started with EZ-USB® FX3™ contains background information about USB 3.0 and comparisons with USB 2.0. It details the hardware, firmware, and software aspects of working with the FX3. Feature FX2LP FX3 Serial interfaces supported I2C, UART I2C, UART, I2S, SPI Flexible programmable interfaces GPIF, 48 MHz, 8 – and 16-bit interface GPIF II, 100 MHz, 8-, 16-, and 32-bit interface USB USB 2.0 device USB 3.0 device (includes USB 2.0 device support), USB 2.0 OTG Speeds supported High Speed, Full Speed SuperSpeed, High Speed, Full Speed GPIOs Up to 40 Up to 60 JTAG debugger Not available Supported Support for battery charging spec 1.1 No Yes Architectural Differences Figure 1 and Figure 2 show the FX2LP and FX3 block diagrams, respectively. Table 1 summarizes the feature differences. Figure 1. FX2LP Block Diagram 56-pin QFN (8 x 8 mm) 100-pin TQFP (14 x 20 x 1.4 mm) Package options 128-pin TQFP (14 x 20 x 1.4 mm) 121-ball FBGA (10 x 10 x 1.2 mm) 56-pin VFBGA (5 x 5 x 1.0 mm) 56-pin SSOP Serial Interfaces Figure 2. FX3 Block Diagram Table 2 lists the details on the serial interfaces supported by FX2LP and FX3. Table 2. Serial Interfaces Supported by FX2LP and FX3 Serial Interface FX2LP I2C Master only at 100 and 400 kHz Master only at 100 kHz, 400 kHz and 1 MHz UART Baud rates from 2.4 Kbps to 230.4 Kbps Range of baud rates from 300 bps to 4608 Kbps I2S Not supported I2S master as transmitter only; sampling frequencies supported by the I2S interface are 32 kHz, 44.1 kHz, and 48 kHz SPI Not supported; SPI master interface can be implemented by bit-banging GPIOs SPI master; maximum frequency of operation is 33 MHz Table 1. Feature Differences Between FX2LP and FX3 Feature FX2LP FX3 Core 8051 ARM926EJ-S CPU speed 48 MHz 200 MHz RAM 16 KB 512 KB Endpoints 7 32 www.cypress.com FX3 Document No. 001-76348 Rev. *C 2 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications GPIF Versus GPIF II Hardware Differences FX3 offers a high-performance general programmable interface, GPIF II. This interface enables functionality similar to but more advanced than the FX2LP’s GPIF and Slave FIFO interfaces. The GPIF II is a programmable state machine that enables a flexible interface that functions either as a master or a slave in industry-standard or proprietary interfaces. Both parallel and serial interfaces can be implemented with GPIF II. The features of the GPIF II are as follows: Functions as master or slave. Enables interface frequencies up to 100 MHz Provides 256 firmware programmable states. Supports 8-bit, 16-bit, 24–bit, and 32-bit parallel data bus. Supports 14 configurable control pins when a 32-bit data bus is used. All control pins can be either input/output or bidirectional. Supports 16 configurable control pins when a 16-bit or 8-bit data bus is used. All control pins can be either input/output or bidirectional. Table 3 lists the main difference between the FX2LP GPIF interface and the FX3 GPIF II interface. Table 3. Differences Between GPIF and GPIF II The following application notes describes the hardware design guidelines for FX2LP and FX3, including the recommended pad sizes. Hardware design guidelines for FX2LP: AN15456 – ® Guide to Successful EZ-USB FX2LP™ Hardware Design Hardware design guidelines for FX3: AN70707 – EZ-USB® FX3™/FX3S™ Hardware Design Guidelines and Schematic Checklist Power Supply Configurations and Decoupling Capacitance FX2LP requires a supply voltage of 3.3 V. FX3 requires multiple power supplies for its various internal blocks. Table 4 shows the different power domains and the voltage settings on each of these domains for FX3. Table 4. FX3 Power Domains Parameter Description Min (V) Max (V) Typical (V) VDD Core voltage supply 1.15 1.25 1.2 AVDD Analog voltage supply 1.15 1.25 1.2 VIO1 GPIF II I/O power domain 1.7 3.6 1.8, 2.5, and 3.3 VIO2 IO2 power domain 1.7 3.6 1.8, 2.5, and 3.3 VIO3 IO3 power domain 1.7 3.6 1.8, 2.5, and 3.3 Feature GPIF GPIF II Interface clock 48 MHz 100 MHz Data bus width 8-bit and 16-bit 8-bit, 16-bit, 24-bit, and 32-bit VIO4 UART/SPI/I2S power domain 1.7 3.6 1.8, 2.5, and 3.3 Address lines 9 32 when data bus is 8-bit VIO5 I2C and JTAG supply domain 1.15 3.6 Control/status lines CTL[5:0] and RDY[5:0] 14 when 32-bit data bus is used 1.2, 1.8, 2.5, and 3.3 VBATT USB voltage supply 3.2 6 3.7 16 when 16- or 8-bit data bus is used VBUS USB voltage supply 4.1 6 5 Clock voltage supply 1.7 3.6 1.8, 3.3 Number of states 8 (including IDLE) 256 CVDDQ Software tool GPIF designer GPIF II designer U3TXVDDQ USB 3.0 1.2-V supply 1.15 1.25 1.2 U3RXVDDQ USB 3.0 1.2-V supply 1.15 1.25 1.2 www.cypress.com Document No. 001-76348 Rev. *C 3 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Table 5. shows the I/O voltage comparison for FX2LP and FX3. Booting Options 2 Table 5. I/O Voltage Comparison Par ame ter VIH Descript ion Min (V) FX2 LP Input HIGH voltage 2 FX3 0.625 x VCC Max (V) Conditions FX2 LP FX3 5.25 VCC + 0.3 VCC – 0.4 FX2L P – VCC + 0.3 FX3 Boot from USB 2.0 V ≤ VCC ≤ 3.6 V* Boot from SPI (SPI devices supported are M25P16 (16 Mb), M25P80 (8 Mb), M25P40 (4 Mb), and their equivalents Boot from GPIF II Async ADMUX mode 1.7 V ≤ VCC ≤ 2.0 V* VIL Input LOW voltage –0.5 –0.3 0.8 0.25 x VCC – – VOH Output HIGH voltage 2.4 0.9 x VCC – – IOUT = 4 mA IOH (max) = Output LOW voltage – VOL – 0.4 0.1 x VCC FX2LP boots from USB or from an I C EEPROM. FX3 can load boot images from various sources, selected by the configuration of the PMODE pins. The boot options for FX3 are: IOUT = – 0.4mA 2 Boot from I C (ATMEL and Microchip EEPROMs are supported) Boot from GPIF II Sync ADMUX mode Boot from GPIF II Async SRAM mode See AN50963 for more details on FX2LP boot options and AN76405 for more details on FX3 boot options. –100 μA Table 7 shows the levels of the PMODE[2:0] signals required for the different booting options. IOH (min) = Table 7. PMODE Signals Setting 100 μA PMODE[2:0] *Except the USB port; VCC is the corresponding I/O voltage supply. Refer to the FX2LP and FX3 datasheets for more details on I/O voltages. FX2LP designs require 0.1-μF ceramic decoupling capacitors on the device power pins. Table 6 shows FX3 power supply decoupling recommendations. Boot From F00 Sync ADMUX (16-bit) F01 Async ADMUX (16-bit) F11 USB boot F0F Async SRAM (16-bit) F1F I2C, on Failure, USB boot 1FF I2C only 0F1 SPI, on Failure, USB boot Table 6. Power Domain Decoupling Requirements Cap Value (µF) 0.01, 0.1, 22 Number of Caps Pin Name 4 of 0.01 µF, 3 of 0.1 µF, 1 of 22 µF VDD 0.1, 2.2 1 of each AVDD 0.1, 22 1 of each U3TXVDDQ 0.1, 22 1 of each U3RXVDDQ 0.1, 0.01 1 of each CVDDQ 0.1, 0.01 1 of each per supply VIO1-5 0.1 1 VBUS www.cypress.com F = Float. The PMODE pin floats by leaving it unconnected. 2 If an external EEPROM is used on the I C bus for firmware image booting, then the SCL and SDA lines should be pulled high using 2 kΩ to VIO5 of FX3. Cypress recommends adding pull-up and pull-down options on the PMODE [2:0] signals and loading the combination needed for the preferred booting option. Adding the options gives the flexibility to debug the system during early development. Document No. 001-76348 Rev. *C 4 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Crystal/Clock FX2LP and FX3 support an external clock input along with the crystal input. FX2LP has a CLKOUT pin that can supply a 12-, 24-, or 48-MHz clock. FX3 does not have the ability to provide a system clock to the external world. This system clock is different from the interface clock provided by GPIF or GPIF II. Table 8 lists the details of the clock or crystal inputs that these two devices accept. Table 8. Clock/Crystal Supported by FX2LP and FX3 FX2LP FX3 External clock 24 MHz 19.2, 26, 38.4, and 52 MHz Crystal 24 MHz 19.2 MHz Available Not available Streamer: The streamer application for FX3 is similar to the one in FX2LP. Using this application, you measure the throughput numbers for the ISO and BULK streams. Bulkloop: The FX3 SDK includes a bulkloop application to test the bulkloop example. The application gives you the option to send different types of data to run this bulkloop test. You can find all these applications in the following path once you install the FX3 SDK in the default location: C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\ Table 10 lists the differences in the software resources available for FX2LP and FX3. Table 10. Software Resources for FX2LP and FX3 CLKOUT Three Frequency Select pins FSLC[2:0] determine FX3 clocking. These pins should be tied to ground or CVDDQ through weak pull-up resistors (10 kΩ). Table 9 shows the values of FSLC[2:0] for different clocking options. Table 9. Frequency Select Configuration Crystal/Clock Software Tools FX2LP FX3 Compiler Keil C51 C Compiler ARM GCC C Compiler Assembler Keil A51 Assembler ARM GCC Assembler IDE Keil Eclipse-based IDE Driver † CyUSB3.sys or CyUSB3.sys CyUSB.sys Applications Control Center Control Center Tool to develop GPIF interface GPIF Designer GPIF II Designer* FSLC[2] FSLC[1] FSLC[0] 0 0 0 19.2-MHz crystal 1 0 0 19.2-MHz input clock 1 0 1 26-MHz input clock † CyUSB3.sys is recommended for new designs. Cypress recommends that you migrate existing designs to use CyUSB3.sys. Cypress no longer supports CyUSB.sys. 1 1 0 38.4-MHz input clock * FX3 GPIF II Designer is not compatible with FX2LP. 1 1 1 52-MHz input clock Software Differences Programmer’s View of FX3 The FX3 comes with the easy-to-use EZ-USB tools, giving you a complete solution for fast application development (see Figure 3). Use the FX3 device to: Development Tools The FX2LP firmware framework used in the FX2LP Development Kit (DVK) uses the Keil µVision2 IDE and a firmware framework based on an event loop. Configure and manage USB functionality, such as charger detection, USB device/host detection, and endpoint configuration FX3 development tools include an Eclipse-based IDE and an RTOS called “ThreadX.” The IDE includes a compiler, linker, assembler, and JTAG debugger. You can download the free FX3 Software Development Kit (SDK). Connect to different master and slave peripherals on the GPIF interface Connect to serial peripherals (UART, SPI, GPIO, I C, 2 I S) Set up, control, and monitor data flows between the peripherals (USB, GPIF, and serial peripherals) Perform necessary operations, such as data inspection, data modification, addition/deletion of packet header and footer information. USB Host-Side Applications Control Center: Cypress includes a PC-based Control Center application in the FX3 SDK. You can use this application to program both FX2LP and FX3, either to download code into RAM or to program an external boot EEPROM. www.cypress.com 2 Document No. 001-76348 Rev. *C 5 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Two other important entities are external to the FX3: GPIF II master/slave USB host/device When the FX3 is connected to a USB host, it functions as a USB device. The FX3 enumerates as a SuperSpeed, high-speed, or full-speed USB peripheral corresponding to the host type. When a USB device is connected, the FX3 plays the role of the corresponding high-speed, full-speed, or low-speed USB host. GPIF II is a fully configurable interface and can use any application-specific protocol. You can connect any processor, ASIC, DSP, or FPGA to the FX3. The FX3 bootloader or firmware configures GPIF II to support the corresponding interface. Figure 3. Programming View of FX3 www.cypress.com Document No. 001-76348 Rev. *C 6 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications FX2LP and FX3 Firmware Framework Differences FX2LP Firmware Framework FX2LP code development uses a Cypress firmware framework that implements a control loop and low-level routines to handle USB events. Cypress firmware examples are framework based, so the best way to start is to use one of the examples as a reference and make the necessary modifications. These examples are available when you install the FX2LP DVK. You can understand the differences in the firmware framework for FX2LP and FX3 by studying the bulkloop example. Bulkloop Example on FX2LP The bulkloop example is in the directory Cypress\USB\Examples\FX2LP\Bulkloop after you install the FX2LP DVK. If you look at the FX2LP firmware framework, you can see the following files, which interact as shown in Figure 4. fw.c: This is the main framework source file. It contains main(), the task dispatcher, and the SETUP command handler. For most firmware projects, there is no need to modify this file. Four dispatcher functions are called in main(): TD_Init(), TD_Poll(), TD_Suspend(), and TD_Resume(). TD_Init() is called once during the initialization of the framework. TD_Poll() is called repeatedly during device operation. TD_Poll() contains the logic that implements your peripheral function. bulkloop.c: This source file contains initialization and task dispatch function definitions that are called from fw.c. This is where you customize the frameworks for your specific device, in this case, bulkloop transfers. dscr.a51: This is the assembly file that contains your device’s custom descriptors. USBJmpTb.OBJ: This object code contains the ISR jump table for USB and GPIF interrupts. www.cypress.com F X 2 L P F i r m w a r e AP I L i b r a r y EZUSB.LIB: The EZ-USB library is an 8051 .LIB file that implements functions that are common to many firmware projects. Typically, there is no reason to modify these functions, so they are provided in library form. However, the kit includes the library source code if you need to modify a function or if you simply want to know how something is done. The TD_Poll() function in bulkloop.c implements the bulkloop application code. Bulkloop is a simple application that can be tested using the USB Control Center included in the FX2LP DVK. Using the USB Control Center, you download the bulkloop code (a .hex file) into FX2LP RAM. Refer to AN50963 for the details on different ways of downloading code into FX2LP. Then you can test the application using Control Center to send and receive BULK transfers over FX2LP BULK endpoints. Data sent to EP2-OUT loops back over EP6-IN, and data sent to EP4-OUT loops back over EP8-IN. Figure 4. Structure of an FX2LP Application fw.c bulkloop.c main() { TD_init(); Enable Interrupts while(1) { if(GotSUD) TD_Poll(); }} TD_Init() {….} TD_Poll() {....} BOOL DR_SetConfiguration(void) BOOL DR_GetConfiguration(void) BOOL DR_Set_Interface(void) BOOL DR_Get_Interface(void) Handle EP0 GET_DESCRIPTOR dscr.a51 void ISR_EP2inout(void) void ISR_EP6inout(void) void ISR_Sof(void) Descriptors Document No. 001-76348 Rev. *C 7 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications FX3 Firmware Framework FX3 firmware uses a different approach than the single event loop of FX2LP firmware. Instead, the FX3 development tools use an RTOS, ThreadX, to launch and run concurrent application threads. Before comparing the bulkloop example with the FX2LP implementation, a simple example that reads a push button and blinks an LED illustrates the basic structure of the FX3 application code. Figure 5 shows this structure. Figure 5. Structure of an FX3 Application CyFxApplicationDefine Create 2 threads GpioInputThread_Entry GpioOutputThread_Entry Wait for Input Event Print message CyFxGpioIntrCb Input: post Event CyFxDebugInit CyFxGpioInit Sleep 1 sec LED ON Sleep 1 sec LED OFF Interrupt This simple application is provided in the FX3 DVK download under the title “First FX3 App.” The FX3 DVK User Guide describes the code and shows different ways to download and debug FX3 code: Download and run code Part of the GPIO initialization is to cause an interrupt on any change of the push button state. A state change calls the CyFxGpioIntrCb ISR. Serial debug messages cannot be printed from the GPIO callback as it runs in the interrupt context. All interrupts compete for CPU attention, and there may be more important tasks at hand. ThreadX handles this by providing a messaging system whereby the ISR posts a message for another noninterrupt function to execute. The Input thread is the recipient of the message to print a debug message. It runs a continuous loop that checks for the message posted by the ISR and prints the debug message over the serial port. You can build powerful and flexible applications using FX3 firmware examples and API libraries provided with the FX3 SDK installation. The firmware (or application) framework contains the startup and initialization code. The firmware library contains the individual drivers for the USB, GPIF II, and serial interface blocks. The framework does the following: Defines the program entry point Performs the stack setup Performs kernel initialization Provides placeholders for application thread startup code F i r m w a r e AP I L i b r a r y The FX3 API library provides a comprehensive set of APIs to control and communicate with the FX3 hardware. These APIs provide a complete programmatic view of the FX3 hardware. cyfxapi.a, cyu3lpp.a, cyu3threadx.a The FX3 SDK includes a full-fledged API library. This API library is similar to EZUSB.LIB in the FX2LP toolset. You need to manually link these libraries to your project. The API library and the corresponding header files provide all the APIs required for programming the different blocks of FX3. The APIs provide for the following: Download and run code with serial debug Download and debug over JTAG The CyFxApplicationDefine function creates two threads. Threads run concurrently on a time-shared basis as the application executes. This example creates two threads, one for output (the LED) and the other for input (the push button). Programming each of the individual blocks of the FX3 device: GPIF II, USB, and serial interfaces Programming the DMA engine and setting up data flows between these blocks The Output thread initializes the serial debugger and creates an interrupt callback link to the function CyFxGpioIntrCb. Then it runs a continuous loop that blinks the LED. Timing is accomplished by telling the thread to sleep for a programmed number of milliseconds, 1000 ms in this example. Putting threads to sleep until work is a good way to save power and maximize CPU utilization. The overall framework for application development, including system boot and initialization, OS entry, and application initialization. ThreadX OS calls as required by the application www.cypress.com Power management features Logging capability for debug support Document No. 001-76348 Rev. *C 8 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Embedded Real-Time OS Because the FX3 firmware framework is based on an RTOS, the drivers for various peripheral blocks in the platform are typically implemented as separate threads. Standard OS services such as semaphores, message queues, mutexes, and timers are used for interthread communication and task synchronization and are available through the library. The framework provides hooks for the application logic to configure the device behavior and to perform data transfers through it. The application logic can be implemented across multiple threads and use all the OS services that are used by the Cypress provided drivers. The embedded RTOS in the FX3 device uses the ThreadX operating system from Express Logic. The application logic makes available for use all the functionality supported by the ThreadX OS. Some constraints on their use help ensure smooth functioning of all the drivers. The ThreadX services are not directly exposed by the firmware framework. This is to ensure that the application logic is independent of the OS used and need not be changed to accommodate any future changes in the embedded OS. The OS services are made available through a set of platform-specific wrappers. Bulkloop Example on FX3 This section revisits the bulkloop application to compare FX3 development with that of FX2LP. As part of the linker options, the entry point is specified as the CyU3PFirmwareEntry() function. Note Refer to FX3APIGuide.pdf located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc to learn the definition of FX3 APIs. The firmware entry function performs these actions: Invalidates the caches (which were used by the bootloader) Initialize the memory management unit (MMU) and the caches Initializes the SYS, FIQ, IRQ, and SVC stack modes Transfers execution to the tool chain initialization (CyU3PToolChainInit()) function. Tool Chain Initialization The next step in the initialization sequence is a toolspecific initialization of the stacks and C library. Since all required stack initialization is performed by the firmware entry function, the tool chain initialization is overridden, so the stacks are not reinitialized. The tool chain initialization function is written for the GNU GCC compiler for ARM processors. You can find this part of code in cyfx_gcc_startup.S. There is no need to modify this file. In this function, only two actions are performed: When the FX3 SDK is downloaded and installed, the bulkloop example is located in the following directory: The BSS area (a part of the data segment containing statically-allocated variables) is cleared. C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\dma_examples\cyfxbulklpauto Control is transferred to the main(). The bulkloop example consists of these files: D e vi c e I n i t i a l i z a t i o n The function main() is the C programming language entry for the FX3 firmware. This function performs the following consecutive actions. cyfx_gcc_startup.S: This file contains the FX3 startup code. cyfxbulklpauto.h: This file contains the defines used in cyfxbulklpdscr.c. cyfxbulklpdscr.c: This file contains the USB descriptors. It is similar to dscr.a51 in the FX2LP toolset. cyfxtx.c: This file defines the porting required for the ThreadX RTOS. It is provided in source form and must be compiled with the application source code. cyfxbulklpauto.c: This file contains application logic of the bulkloop example. the main Firmware Entry The entry point for the FX3 firmware is the CyU3PFirmwareEntry() function. This function is defined in the FX3 API library and is not visible to the user. www.cypress.com 1. Device initialization: This is the first step in the main(). status = CyU3PDeviceInit (NULL); 2. As part of the device initialization, The CPU clock is set up. A NULL is passed as an argument for CyU3PDeviceInit() to select the default clock configuration. Device cache configuration: The second step configures the device caches. FX3 has an 8-KB data cache and an 8-KB instruction cache. Generally, the instruction cache is enabled and the data cache is disabled. Enabling the data cache is useful only when there are a large number of CPU-based memory accesses. When the data cache is enabled in simple cases, the CPU decreases performance due to a Document No. 001-76348 Rev. *C 9 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications large number of cache flushes and then cleans itself and adds complexity to the code. status = CyU3PDeviceCacheControl (CyTrue, CyFalse, CyFalse); 3. I/O matrix configuration: The third step configures the required I/Os. This includes the GPIF II and the serial 2 2 interfaces (SPI, I C, I S, GPIO, and UART). io_cfg.isDQ32Bit = CyFalse; io_cfg.useUart = CyTrue; io_cfg.useI2C = CyFalse; io_cfg.useI2S = CyFalse; io_cfg.useSpi = CyFalse; io_cfg.lppMode = CY_U3P_IO_MATRIX_LPP_UART_ONLY; /* No GPIOs are enabled. */ io_cfg.gpioSimpleEn[0] = 0; io_cfg.gpioSimpleEn[1] = 0; io_cfg.gpioComplexEn[0] = 0; io_cfg.gpioComplexEn[1] = 0; status = CyU3PDeviceConfigureIOMatrix (&io_cfg); a. GPIF II interface is not used b. GPIO, I C, I S, and SPI interfaces are not used c. Only the UART interface is used 2 The I/O matrix configuration data structure is initialized and the CyU3PDeviceConfigureIOMatrix function (in the library) is invoked. 4. The final step in the main() invokes the OS scheduler by issuing a call to the CyU3PKernelEntry() function. This function is defined in the library and is a nonreturning call. It is a wrapper to the actual ThreadX OS entry call. This function: a. Initializes the OS b. Sets up the OS timer used for scheduling Application Definition The FX3 library calls the function CyFxApplicationDefine()after the OS is invoked. In this function, you create application-specific threads. This function is similar to the TD_Init() function in FX2LP firmware, since it is called only once. In the bulkloop example, only one thread is created in the application define function. /* Allocate the memory for the threads */ ptr = CyU3PMemAlloc (CY_FX_BULKLP_THREAD_STACK); www.cypress.com "21:Bulk_loop_AUTO", /* Thread ID and Thread name */ BulkLpAppThread_Entry, /* Bulk loop App Thread Entry function */ 0, /* No input parameter to thread */ ptr, /* Pointer to the allocated thread stack */ CY_FX_BULKLP_THREAD_STACK, /* Bulk loop App Thread stack size */ CY_FX_BULKLP_THREAD_PRIORITY, /* Bulk loop App Thread priority */ In this bulkloop example: 2 /* Create the thread for the application */ retThrdCreate = CyU3PThreadCreate (&BulkLpAppThread, /* Bulk loop App Thread structure */ CY_FX_BULKLP_THREAD_PRIORITY, /* Bulk loop App Thread priority */ CYU3P_NO_TIME_SLICE, /* No time slice for the application thread */ CYU3P_AUTO_START /* Start the Thread immediately */ ); Note that more threads (as required by the user application) can be created in the application define function. All other FX3 specific programming must be done only in the user threads. Application Code In the bulkloop example, one Auto DMA channel is created after setting up the Producer (OUT) and Consumer (IN) endpoints. This DMA channel connects the two sockets of the USB port. Two endpoints, 1 IN and 1 OUT, are configured as bulk endpoints. The endpoint maxPacketSize is updated based on the speed. CyU3PUSBSpeed_t usbSpeed = CyU3PUsbGetSpeed(); /* First identify the usb speed. Once that is identified, create a DMA channel and start the transfer on this. */ Document No. 001-76348 Rev. *C 10 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications /* Based on the Bus Speed configure the endpoint packet size */ switch (usbSpeed) { case CY_U3P_FULL_SPEED: size = 64; break; Application Thread The Application entry point for the bulkloop example is the BulkLpAppThread_Entry () function. This function is similar to TD_Poll () in the FX2LP firmware, where you write the application logic. /* Entry function for the BulkLpAppThread. */ void BulkLpAppThread_Entry (uint32_t input) { /* Initialize the debug module */ CyFxBulkLpApplnDebugInit(); case CY_U3P_HIGH_SPEED: size = 512; break; case CY_U3P_SUPER_SPEED: size = 1024; break; } CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg)); epCfg.enable = CyTrue; epCfg.epType = CY_U3P_USB_EP_BULK; epCfg.burstLen = 1; epCfg.streams = 0; epCfg.pcktSize = size; /* Producer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(CY_FX_EP_PRODUCER, &epCfg); /* Consumer endpoint configuration */ apiRetStatus = CyU3PSetEpConfig(CY_FX_EP_CONSUMER, &epCfg); /* Create a DMA Auto Channel between two sockets of the U port. * DMA size is set based on the USB speed. */ dmaCfg.size = size; dmaCfg.count = CY_FX_BULKLP_DMA_BUF_COUNT; dmaCfg.prodSckId = CY_FX_EP_PRODUCER_SOCKET; dmaCfg.consSckId = CY_FX_EP_CONSUMER_SOCKET; dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE; dmaCfg.notification = 0; dmaCfg.cb = NULL; dmaCfg.prodHeader = 0; dmaCfg.prodFooter = 0; dmaCfg.consHeader = 0; dmaCfg.prodAvailCount = 0; apiRetStatus = CyU3PDmaChannelCreate (&glChHandleBulkLp, CY_U3P_DMA_TYPE_AUTO, &dmaCfg); www.cypress.com /* Initialize the bulk loop application */ CyFxBulkLpApplnInit(); for (;;) { CyU3PThreadSleep (1000); } } The main actions performed in this thread are the following: 1. Initialize the debug mechanism. 2. Initialize the main bulkloop application. The following sections explain these steps. Debug Initialization The debug module uses the FX3 UART to output debug messages. The UART must be configured before the debug mechanism is initialized. This is done by invoking the UART init function. /* Initialize the UART for printing debug messages */ apiRetStatus = CyU3PUartInit(); The next step is to configure the UART. The UART data structure is first filled in and then passed to the UART configuration function. /* Set UART Configuration */ uartConfig.baudRate = CY_U3P_UART_BAUDRATE_115200; uartConfig.stopBit = CY_U3P_UART_ONE_STOP_BIT; uartConfig.parity = CY_U3P_UART_NO_PARITY; uartConfig.txEnable = CyTrue; uartConfig.rxEnable = CyFalse; uartConfig.flowCtrl = CyFalse; uartConfig.isDma = CyTrue; apiRetStatus = CyU3PUartSetConfig (&uartConfig, NULL); The UART transfer size is set to maximum so debug messages are not size-limited. Document No. 001-76348 Rev. *C 11 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications /* Set the UART transfer */ apiRetStatus = CyU3PUartTxSetBlockXfer (0xFFFFFFFF); Finally, the debug module is initialized. The two main parameters are as follows: The destination for debug prints, which is the UART socket The verbosity of the debug that is set to level 8, so all debug prints that are below this level (0 to 7) will be printed /* Initialize the Debug application */ apiRetStatus = CyU3PDebugInit (CY_U3P_LPP_SOCKET_UART_CONS, 8); Application Initialization The application initialization consists of these steps. USB Initialization 1. The USB stack in the FX3 library is initialized. The initialization is done by invoking the USB Start function. /* Start the USB functionality */ apiRetStatus = CyU3PUsbStart(); 2. The next step is to register for callbacks. In this example, callbacks are registered for USB setup requests and USB events. CyU3PUsbRegisterSetupCallback(CyFxBul kLpApplnUSBSetupCB, CyTrue); /* Setup the callback to handle the USB events. */ CyU3PUsbRegisterEventCallback(CyFxBul kLpApplnUSBEventCB); The callback functions and the callback handling are described in the later sections: USB Setup Callback and USB Event Callback. 3. The USB descriptors are set by invoking the USB Set Descriptor call for each descriptor. /* Set the USB Enumeration descriptors */ /* Device Descriptor */ apiRetStatus = CyU3PUsbSetDesc(CY_U3P_USB_SET_HS_DEV ICE_DESCR, NULL, (uint8_t *)CyFxUSB20DeviceDscr); The previous code snippet is for setting the Device Descriptor. The other descriptors set in the example are Device Qualifier, Other Speed, Configuration, BOS (for SuperSpeed), and String Descriptors. www.cypress.com 4. The FX3 USB pins are connected to the bus. The FX3 USB device is visible to the host only after calling the CyU3PConnectState API. Therefore, it is important to complete all USB setup before connecting the USB pins. /* Connect the USB Pins */ /* Enable Super Speed operation */ apiRetStatus = CyU3PConnectState(CyTrue, CyTrue); USB Setup Callback USB Standard requests are handled by the firmware library, and the vendor- and class-specific requests need to be serviced by the application. Since bulkloop implements no vendor- or class-specific requests, the callback simply returns CyFalse. /* Callback to handle the USB setup requests. */ CyBool_t CyFxBulkLpApplnUSBSetupCB ( uint32_t setupdat0, /* SETUP Data 0 */ uint32_t setupdat1 /* SETUP Data 1 */ ) { /* Only class, vendor and unknown requests are received by this function. These are not handled in this application. Hence return CyFalse. */ return CyFalse; } U S B E ve n t C a l l b a c k The USB events of interest are Set Configuration, Reset, and Disconnect. The bulkloop application starts on receiving a SETCONF event and stops with a USB reset or USB disconnect. /* This is the callback function to handle the USB events. */ void CyFxBulkLpApplnUSBEventCB ( CyU3PUsbEventType_t evtype, /* Event type */ uint16_t evdata /* Event data */ ) { switch (evtype) { case CY_U3P_USB_EVENT_SETCONF: /* Stop the application before restarting. */ if (glIsApplnActive) Document No. 001-76348 Rev. *C 12 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications { CyFxBulkLpApplnStop (); } /* Start the loop back function. */ CyFxBulkLpApplnStart (); break; case CY_U3P_USB_EVENT_RESET: case CY_U3P_USB_EVENT_DISCONNECT: /* Stop the loop back function. */ if (glIsApplnActive) { CyFxBulkLpApplnStop (); } break; default: break; } } AN61345 – Describes the FX2LP Synchronous Slave FIFO interface. A sample design demonstrates an FPGA interface. AN65974 – Describes the FX3 Synchronous Slave FIFO interface. A design example demonstrates an FPGA interface. Table 11 lists the differences in synchronous Slave FIFO interface signals available for FX2LP and FX3. Table 11. Synchronous Slave FIFO Interface Signals Signal Name FX2LP FX3 SLCS# SLCS# The chip select signal for the Slave FIFO interface, which needs to be asserted to perform any access to the Slave FIFO interface. SLWR# SLWR# The write strobe for the Slave FIFO interface. It must be asserted for performing write transfers to the Slave FIFO. SLRD# SLRD# SLOE# SLOE# The read strobe for the Slave FIFO interface. It must be asserted for performing read transfers from the Slave FIFO. The output enable signal. It causes the data bus of the Slave FIFO interface to be driven by FX2LP or FX3. It must be asserted for performing read transfers from the Slave FIFO. PKTEND# PKTEND# The PKTEND# signal is asserted to write a short packet or a zerolength packet to the Slave FIFO FIFOADR[1:0] A[1:0] 2-bit address lines to select one of the four (EP2, EP4, EP6, EP8) endpoints in FX2LP. For FX3, these two bit address lines are used to address four sockets.* FD[15:0] DQ[31:0] Data bus of the Slave FIFO interface. Data bus width supported by FX2LP is 8-bit or 16bit. Data bus width supported by FX3 is 8-bit or 16-bit, or 24-bit or 32-bit. IFCLK PCLK The Slave FIFO interface clock. The maximum FX2LP frequency is 48 MHz. The maximum FX3 frequency is 100 MHz. DMA Setup The DMA channel transfer is enabled using the following piece of code. /* Set DMA Channel transfer size */ apiRetStatus = CyU3PDmaChannelSetXfer (&glChHandleBulkLp, CY_FX_BULKLP_DMA_TX_SIZE); Refer to AN75705 to learn the steps for importing and building an FX3 firmware project. You can download and test the code by loading the code image USBBulkLoopAuto.img into FX3 using the USB Control Center. Refer to AN75705 for the steps. For more details on the FX3 SDK, see the documents available in the path C:\Program Files (x86)\Cypress\EZUSB FX3 SDK\1.3\doc. (1.3 in this path is the version of the SDK, which may change in future). Slave FIFO Interfaces of FX2LP and FX3 This section explains the differences between the synchronous Slave FIFO interfaces in FX2LP and FX3. The synchronous Slave FIFO interface is suitable for applications in which an external processor or device needs to perform data read/write accesses to FX2LP or FX3 internal FIFO buffers. Register accesses are not done over the Slave FIFO interface. The following two application notes provide details on the FX2LP and FX3 Slave FIFO interfaces. www.cypress.com Signal Description *Refer to AN75705 and AN65974 for more details on FX3 sockets. Document No. 001-76348 Rev. *C 13 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Flag Usage The external processor monitors the FLAG signals for flow control. Four flags (Flag A, Flag B, Flag C, Flag D) report the status of the FX2LP FIFOs. The FLAGA, FLAGB, and FLAGC pins can operate in either of two modes: Indexed (selected by pins) or Fixed, as selected by the PINFLAGSAB and PINFLAGSCD registers. The FLAGD pin operates in Fixed mode only. The FLAG-FLAGC pins can be configured independently; Some pins can be in Fixed mode while others are in Indexed mode. Flag pins configured for Indexed mode report the status of the FIFO currently selected by the FIFOADR[1:0] pins. Refer to the ® “Slave FIFOs” chapter of the EZ-USB Technical Reference Manual. The FX3 Slave FIFO interface is more flexible than the FX2LP Slave FIFO interface. The FX3 Slave FIFO interface is developed by configuring GPIF II to act as a slave and with the help of a state diagram. Cypress provides a library of common GPIF II interfaces, including synchronous and asynchronous FIFOs. It can be customized by using a graphical entry tool called GPIF II Designer, if needed. In the standard implementation, two flags are configured to show empty/full/partial status for a dedicated thread or the current thread being addressed. Refer to AN65974 for more details. More flags can be added if needed. UVC Camera Designs Based on FX2LP and FX3 This section compares FX2LP and FX3 designs for a UVC (USB video class) camera. UVC is a USB standard class that allows a video streaming device to be connected to a USB host to stream video. A typical application is a webcam, which can be installed and used without a custom driver. Image Sensor Interface The various signals associated with image transfer are as follows. These are unidirectional signals from the image sensor to the FX3 interface. FV: Frame Valid (indicates the start and stop of a frame) LV: Line Valid (indicates start and stop of a line) PCLK: Pixel Clock (the data output of the image sensor is synchronized with the pixel clock) Data: 8- to 32-bit data lines of image data Figure 6 shows a timing diagram of the FV, LV, PCLK and data signals. The FV signal is asserted to indicate the start of a frame. Then the image data is transferred line by line. The LV signal asserts during each line transfer while the image sensor provides data. Image sensors transfer with bus widths of 8 bits to 32 bits. Figure 6. Image Sensor Interface Timing Diagram Active Frame Vertical Blanking FV Line 1 Line 2 Line R-1 Line R LV Zoomed in Active Line Horizontal Blanking LV PCLK DATA www.cypress.com D0 D1 D2 Dc Document No. 001-76348 Rev. *C 14 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Figure 7 shows a system-level diagram of a USB camera. Figure 8. UVC Camera Design Using FX2LP Figure 7. USB Camera Block Diagram 2 Image sensors typically use an I C interface to allow a 2 controller to configure the image sensor registers. The I C 2 block of FX2LP or FX3 can act as an I C master to configure the image sensor with the correct parameters. Implementation with FX2LP An image sensor can connect to FX2LP using two interfaces: the Slave FIFO or GPIF. The FX2LP FIFO operates as a slave, and its GPIF operates as a master. The simplest image sensor interface uses the FX2LP Slave FIFO. The block diagram in Figure 8 shows how to connect an image sensor to FX2LP. FX2LP provides a master clock (CLKOUT pin) to the image sensor that eliminates the requirement for an extra crystal if the image sensor can use a 12-, 24-, or 48-MHz clock. The FX2LP is configured in synchronous Slave FIFO mode. The FX2LP supplies a 12-MHz clock to the image sensor. The image sensor is configured using the FX2LP 2 I C module. Once the image sensor is configured, it outputs image data using a 6-MHz Pixel Clock (PCLK). The Frame Valid signal connects to the FX2LP SLCS# pin, and the Line Valid signal connects to the FX2LP SLWR# pin of the Slave FIFO interface. The FX2LP firmware adds the required UVC header to each video frame. A standard host application such as AMCap or VLC Media Player communicates through the UVC driver to configure the image sensor over a video control interface and to receive video data over the video streaming interface. www.cypress.com Document No. 001-76348 Rev. *C 15 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Implementation with FX3 FX2LP contains separate interfaces for master or slave operation, whereas FX3 contains a unified GPIF II that can act as either master or slave. The image sensor interface is created using GPIF II Designer. This tool accepts state machine entry to create code that is included into an FX3 Eclipse project. Figure 9 shows the system level block diagram of UVC camera design using FX3. Figure 9. UVC Camera Implementation Using FX3 USB Host FX3 USB Host Controller USB3 o Co GPIO Reset# ro nt l Firmware USB EP0 I2C Master 2 The image sensor is configured using the FX3 I C module. The FX3 DMA channel streams data from the image sensor to internal buffers, where the ARM MCU adds a UVC header to the image data. This video data is then sent to the video streaming endpoint. AN75779 includes more details on designing GPIF II state machine and application firmware. The FX3 design can also operate in USB 2.0 mode. The application detects the connection speed and reduces video bandwidth if operating at high speed. Even though FX3 is a SuperSpeed device, there are advantages to using an FX3 design for USB 2.0 highspeed operation: The image sensor interface can operate with 24-bit or 32-bit image sensors. FX2LP maximum bus width is 16 bits. The UVC header can be added to every frame of data more efficiently using the ARM processor. FX3 can also act as a SPI master if the image sensor needs to be configured over the SPI interface. The FX2LP GPIF interface clock is limited to 48 MHz, whereas the GPIF II clock runs up to 100 MHz. The FX2LP maximum endpoint memory is 4 KB, while FX3 can use 512-KB program memory for endpoints. Use of an I2C Module in FX2LP and FX3 2 Image sensor registers are configured through the I C 2 interface. FX2LP and FX3 both have an I C module, which can act as master. Standard API functions are provided to 2 perform read and write operations over the I C interface. www.cypress.com Line Valid Data bus Vi d UVC Driver de Vi Application (AMCap) Image Sensor Frame Valid GPIF II eo Da ta USB Video DMA Data Bulk IN EP Data Channel PCLK I2C control The EZUSB_WriteI2C() and EZUSB_ReadI2C() functions are used to write and read image sensor 2 registers using the FX2LP I C module. These two functions are part of EZUSB.LIB. The CyU3PI2cTransmitBytes() and CyU3PI2cReceiveBytes() functions are used to write 2 and read image sensor registers using the FX3 I C module. These two functions are part of the cyu3lpp.a library. Refer to the project attached to the application note AN75779 for more details. Debug FX2LP and FX3 Firmware Using UART Serial port debugging makes it possible to print debug messages and the real-time values of variables to a standard terminal program such as TeraTerm or HyperTerminal. In the UVC camera application, register 2 values can be verified by reading them back over the I C interface and printing them on a terminal program. AN58009 discusses the code to add debugging to an FX2LP firmware project. Com port settings are 38400 baud, no parity, one stop bit (38400, N, 8, 1). Refer to AN58009 for more details. To enable this debug feature on FX3, initialize and configure the UART as described in the Debug Initialization section. The com port settings needed are 115200 baud, no parity, one stop bit (115200, N, 8, 1). Refer to the project attached to the application note AN75779 for more details. Document No. 001-76348 Rev. *C 16 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Available Collateral About the Author F X 2 L P D e ve l o p m e n t K i t CY3684 EZ-USB FX2LP Development Kit F X 3 D e ve l o p m e n t K i t ® CYUSB3KIT-001 EZ-USB FX3™ Development Kit Name: Rama Sai Krishna V Title: Applications Engineer Staff Background: Rama Sai Krishna holds an M.Tech in Systems and Control Engg. from IIT Bombay. He is currently working on Cypress USB peripherals. ® CYUSB3KIT-003 EZ-USB FX3™ SuperSpeed Explorer Kit FX2LP Datasheet CY7C68013A, CY7C68014A, CY7C68015A, CY7C68016A: EZ-USB® FX2LP™ USB Microcontroller High-Speed USB Peripheral Controller FX3 Datasheet CYUSB301X FX3 SDK EZ-USB FX3 Software Development Kit FX2LP GPIF Designer GPIF Designer FX3 GPIF II Designer GPIF™ II Designer Application Notes AN75705 – Getting Started with EZ-USB FX3™ AN65974 – Designing with the EZ-USB® FX3 Slave FIFO Interface AN63787– EZ-USB® FX2LP™ GPIF and Slave FIFO Configuration Examples Using an 8-Bit Asynchronous Interface AN70707 – EZ-USB FX3™/FX3S™ Hardware Design Guidelines and Schematic Checklist AN15456 – Guide to Successful EZ-USB FX2LP™ Hardware Design AN76405 – EZ-USB® FX3 Boot Options Visit www.cypress.com to download the latest version of the product collateral ® AN65209 – Getting Started with FX2LP™ ® AN68829 – Slave FIFO Interface for EZ-USB FX3™: 5-Bit Address Mode ® ® AN50963 – EZ-USB® FX1™/FX2LP™ Boot Options AN75779 – How to Implement an Image Sensor with EZ-USB® FX3™ in a USB Video Class (UVC) Framework www.cypress.com Document No. 001-76348 Rev. *C 17 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications Document History ® Document Title: Differences in Implementation of EZ-USB FX2LP™ and EZ-USB FX3™ Applications - AN76348 Document Number: 001-76348 Revision ECN Orig. of Change Submission Date Description of Change ** 3565979 RSKV 03/30/2012 New application note *A 3943464 RSKV 03/26/2013 Updated Document Title to read as “Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3 Applications - AN76348” Updated Architectural Differences (Added Figure 1 and Figure 2, updated Table 1) Updated GPIF Versus GPIF II (Added Table 3) Updated Hardware Differences (Added references to hardware guidelines application notes, added reference to FX3 and FX2LP boot options application notes, updated Crystal/Clock (Updated Table 8. ), updated Power Supply Configurations and Decoupling Capacitance (Added Table 5. , updated Table 6. )) Updated Software Differences (Updated USB Host-Side Applications (Added Table 10). Added Slave FIFO Interfaces of FX2LP and FX3 Added UVC Camera Designs Based on FX2LP and FX3 *B 4383784 RSKV 05/19/2014 Updated the “FX3 Firmware Framework” section Modified the abstract Restructured the “Hardware Differences” section Updated the paths related to the FX3 SDK *C 4651404 GAYA 02/05/2015 Updated Table 8 and Table 10 Updated list of FX3 Development Kit under Available Collateral Updated template Sunset review www.cypress.com Document No. 001-76348 Rev. *C 18 Differences in Implementation of EZ-USB® FX2LP™ and EZ-USB FX3™ Applications 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 cypress.com/go/plc 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 PSoC is a registered trademark and PSoC Creator is a trademark 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 Fax Website : 408-943-2600 : 408-943-4730 : www.cypress.com © Cypress Semiconductor Corporation, 2012-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-76348 Rev. *C 19