EZ USB_TRM 001 13670 USB Technical Reference Manual
User Manual:
Open the PDF directly: View PDF .
Page Count: 402
Download | |
Open PDF In Browser | View PDF |
EZ-USB® Technical Reference Manual Document # 001-13670 Rev. *F May 10, 2017 Cypress Semiconductor 198 Champion Court San Jose, CA 95134-1709 http://www.cypress.com Copyrights Copyrights © Cypress Semiconductor Corporation, 2002-2017. This document is the property of Cypress Semiconductor Corporation and its subsidiaries, including Spansion LLC ("Cypress"). This document, including any software or firmware included or referenced in this document ("Software"), is owned by Cypress under the intellectual property laws and treaties of the United States and other countries worldwide. Cypress reserves all rights under such laws and treaties and does not, except as specifically stated in this paragraph, grant any license under its patents, copyrights, trademarks, or other intellectual property rights. If the Software is not accompanied by a license agreement and you do not otherwise have a written agreement with Cypress governing the use of the Software, then Cypress hereby grants you a personal, non-exclusive, nontransferable license (without the right to sublicense) (1) under its copyright rights in the Software (a) for Software provided in source code form, to modify and reproduce the Software solely for use with Cypress hardware products, only internally within your organization, and (b) to distribute the Software in binary code form externally to end users (either directly or indirectly through resellers and distributors), solely for use on Cypress hardware product units, and (2) under those claims of Cypress's patents that are infringed by the Software (as provided by Cypress, unmodified) to make, use, distribute, and import the Software solely for use with Cypress hardware products. Any other use, reproduction, modification, translation, or compilation of the Software is prohibited. TO THE EXTENT PERMITTED BY APPLICABLE LAW, CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS DOCUMENT OR ANY SOFTWARE OR ACCOMPANYING HARDWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. To the extent permitted by applicable law, Cypress reserves the right to make changes to this document without further notice. Cypress does not assume any liability arising out of the application or use of any product or circuit described in this document. Any information provided in this document, including any sample design information or programming code, is provided only for reference purposes. It is the responsibility of the user of this document to properly design, program, and test the functionality and safety of any application made of this information and any resulting product. Cypress products are not designed, intended, or authorized for use as critical components in systems designed or intended for the operation of weapons, weapons systems, nuclear installations, life-support devices or systems, other medical devices or systems (including resuscitation equipment and surgical implants), pollution control or hazardous substances management, or other uses where the failure of the device or system could cause personal injury, death, or property damage ("Unintended Uses"). A critical component is any component of a device or system whose failure to perform can be reasonably expected to cause the failure of the device or system, or to affect its safety or effectiveness. Cypress is not liable, in whole or in part, and you shall and hereby do release Cypress from any claim, damage, or other liability arising from or related to all Unintended Uses of Cypress products. You shall indemnify and hold Cypress harmless from and against all claims, costs, damages, and other liabilities, including claims for personal injury or death, arising from or related to any Unintended Uses of Cypress products. Cypress, the Cypress logo, Spansion, the Spansion logo, and combinations thereof, WICED, PSoC, CapSense, EZ-USB, FRAM, and Traveo are trademarks or registered trademarks of Cypress in the United States and other countries. For a more complete list of Cypress trademarks, visit cypress.com. Other names and brands may be claimed as property of their respective owners. This manual is the EZ-USB® Technical Reference Manual, for EZ-USB FX2LP™, and EZ-USB FX1™. It provides information for the following chips. CY7C68013A CY7C68014A CY7C68015A CY7C68016A CY7C64713 2 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Contents Overview 1. Introducing EZ-USB® 13 2. Endpoint Zero 37 3. Enumeration and ReNumeration™ 51 4. Interrupts 59 5. Memory 71 6. Power Management 77 7. Resets 83 8. Access to Endpoint Buffers 87 9. Slave FIFOs 99 10. General Programmable Interface 121 11. CPU Introduction 169 12. Instruction Set 175 13. Input/Output 181 14. Timers/Counters and Serial Interface 193 15. Registers 211 Appendix A. Descriptors for Full-Speed Mode 367 Appendix B. Descriptors for High-Speed Mode 375 Appendix C. Device Register Summary 383 Index 395 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 3 Contents 4 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Contents 1. Introducing EZ-USB® 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 2. An Introduction to USB ...................................................................................................................13 The USB Specification....................................................................................................................14 Host is Master.................................................................................................................................14 USB Direction .................................................................................................................................14 Tokens and PIDs ............................................................................................................................14 1.5.1 Receiving Data from the Host ..........................................................................................15 1.5.2 Sending Data to the Host .................................................................................................15 USB Frames ...................................................................................................................................15 USB Transfer Types .......................................................................................................................15 1.7.1 Bulk Transfers ..................................................................................................................16 1.7.2 Interrupt Transfers............................................................................................................16 1.7.3 Isochronous Transfers......................................................................................................16 1.7.4 Control Transfers..............................................................................................................16 Enumeration ...................................................................................................................................16 1.8.1 Full Speed/High Speed Detection ....................................................................................17 The Serial Interface Engine ............................................................................................................17 ReNumeration™.............................................................................................................................18 EZ-USB Architecture ......................................................................................................................18 EZ-USB Feature Summary.............................................................................................................20 EZ-USB Integrated Microprocessor................................................................................................20 EZ-USB Block Diagram ..................................................................................................................21 Packages........................................................................................................................................22 1.15.1 56-Pin Packages ..............................................................................................................22 1.15.2 CY7C68013A/14A and CY7C68015A/16A Differences ...................................................22 1.15.3 100-Pin Package ..............................................................................................................22 1.15.4 128-Pin Package ..............................................................................................................23 1.15.5 Signals Available in the Five Packages............................................................................23 Package Diagrams .........................................................................................................................25 EZ-USB Endpoint Buffers...............................................................................................................30 External FIFO Interface ..................................................................................................................31 EZ-USB Product Family .................................................................................................................34 Document History ...........................................................................................................................35 Endpoint Zero 2.1 2.2 2.3 13 37 Introduction.....................................................................................................................................37 Control Endpoint EP0 .....................................................................................................................37 USB Requests ................................................................................................................................39 2.3.1 Get Status.........................................................................................................................40 2.3.2 Set Feature.......................................................................................................................42 2.3.3 Clear Feature ...................................................................................................................43 2.3.4 Get Descriptor ..................................................................................................................43 2.3.4.1 Get Descriptor-Device....................................................................................44 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 5 Contents 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 3. Enumeration and ReNumeration™ 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 4. 4.3 4.4 51 Introduction .................................................................................................................................... 51 EZ-USB Startup Modes.................................................................................................................. 51 The Default USB Device ................................................................................................................ 52 EEPROM Boot-load Data Formats................................................................................................. 52 3.4.1 No EEPROM or Invalid EEPROM.................................................................................... 52 3.4.2 Serial EEPROM Present, First Byte is 0xC0 ................................................................... 53 3.4.3 Serial EEPROM Present, First Byte is 0xC2.................................................................... 53 3.4.3.1 General Purpose Use of the I2CBus.............................................................. 54 EEPROM Configuration Byte ......................................................................................................... 55 The RENUM Bit.............................................................................................................................. 56 EZ-USB Response to Device Requests (RENUM = 0) .................................................................. 56 EZ-USB Vendor Request for Firmware Load ................................................................................. 56 How the Firmware ReNumerates ................................................................................................... 57 Multiple ReNumerations™ ............................................................................................................. 58 Interrupts 4.1 4.2 6 2.3.4.2 Get Descriptor-Device Qualifier ..................................................................... 45 2.3.4.3 Get Descriptor-Configuration ......................................................................... 45 2.3.4.4 Get Descriptor-String ..................................................................................... 46 2.3.4.5 Get Descriptor-Other Speed Configuration ................................................... 46 Set Descriptor .................................................................................................................. 46 2.3.5.1 Set Configuration .......................................................................................... 47 Get Configuration............................................................................................................. 47 Set Interface..................................................................................................................... 47 Get Interface .................................................................................................................... 48 Set Address ..................................................................................................................... 48 Sync Frame...................................................................................................................... 49 Firmware Load ................................................................................................................. 49 59 Introduction .................................................................................................................................... 59 SFRs .............................................................................................................................................. 59 4.2.1 803x/805x Compatibility ...................................................................................................61 Interrupt Processing ....................................................................................................................... 62 4.3.1 Interrupt Masking ............................................................................................................. 62 4.3.1.1 Interrupt Priorities........................................................................................... 62 4.3.2 Interrupt Sampling............................................................................................................ 62 4.3.3 Interrupt Latency .............................................................................................................. 63 USB-Specific Interrupts .................................................................................................................. 63 4.4.1 Resume Interrupt ............................................................................................................. 63 4.4.2 USB Interrupts ................................................................................................................. 63 4.4.2.1 SUTOK, SUDAV Interrupts ............................................................................ 66 4.4.2.2 SOF Interrupt ................................................................................................. 66 4.4.2.3 Suspend Interrupt .......................................................................................... 66 4.4.2.4 USB RESET Interrupt .................................................................................... 66 4.4.2.5 HISPEED Interrupt (FX2LP only)................................................................... 66 4.4.2.6 EP0ACK Interrupt .......................................................................................... 66 4.4.2.7 Endpoint Interrupts ........................................................................................ 66 4.4.2.8 In-Bulk-NAK (IBN) Interrupt ........................................................................... 66 4.4.2.9 EPxPING Interrupt (FX2LP only) ................................................................... 66 4.4.2.10 ERRLIMIT Interrupt........................................................................................ 67 4.4.2.11 EPxISOERR Interrupt .................................................................................... 67 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Contents 4.5 4.6 4.7 4.8 5. Memory 5.1 5.2 5.3 5.4 5.5 5.6 6. 6.3 6.4 7.4 7.5 7.6 7.7 8. 83 Introduction.....................................................................................................................................83 Hard Reset .....................................................................................................................................83 Releasing the CPU Reset...............................................................................................................84 7.3.1 RAM Download ................................................................................................................84 7.3.2 EEPROM Load.................................................................................................................84 7.3.3 External ROM...................................................................................................................84 CPU Reset Effects..........................................................................................................................84 USB Bus Reset...............................................................................................................................85 EZ-USB Disconnect........................................................................................................................85 Reset Summary .............................................................................................................................85 Access to Endpoint Buffers 8.1 8.2 8.3 8.4 8.5 8.6 77 Introduction.....................................................................................................................................77 USB Suspend .................................................................................................................................79 6.2.1 Suspend Register.............................................................................................................79 Wakeup/Resume ............................................................................................................................80 6.3.1 Wakeup Interrupt ..............................................................................................................81 USB Resume (Remote Wakeup) ...................................................................................................81 6.4.1 WU2 Pin ...........................................................................................................................81 Resets 7.1 7.2 7.3 71 Introduction.....................................................................................................................................71 Internal Data RAM ..........................................................................................................................71 5.2.1 The Lower 128 .................................................................................................................72 5.2.2 The Upper 128 .................................................................................................................72 5.2.3 Special Function Register Space......................................................................................72 External Program Memory and External Data Memory..................................................................72 5.3.1 56- and 100-Pin EZ-USB Chips .......................................................................................73 5.3.2 128-Pin EZ-USB Chip ......................................................................................................73 EZ-USB Memory Maps...................................................................................................................74 ‘Von-Neumannizing’ Off-Chip Program and Data Memory.............................................................76 On-Chip Data Memory at 0xE000-0xFFFF.....................................................................................76 Power Management 6.1 6.2 7. USB-Interrupt Autovectors..............................................................................................................67 4.5.1 USB Autovector Coding ...................................................................................................68 I²C Bus Interrupt .............................................................................................................................68 FIFO/GPIF Interrupt (INT4) ............................................................................................................69 FIFO/GPIF Interrupt Autovectors....................................................................................................69 4.8.1 FIFO/GPIF Autovector Coding .........................................................................................70 87 Introduction.....................................................................................................................................87 EZ-USB Large and Small Endpoints ..............................................................................................87 High Speed and Full Speed Differences ........................................................................................87 How the CPU Configures the Endpoints ........................................................................................88 CPU Access to EZ-USB Endpoint Data .........................................................................................89 CPU Control of EZ-USB Endpoints ................................................................................................89 8.6.1 Registers That Control EP0, EP1IN, and EP1OUT..........................................................90 8.6.1.1 EP0CS ...........................................................................................................90 8.6.1.2 EP0BCH and EP0BCL ...................................................................................90 8.6.1.3 USBIE, USBIRQ.............................................................................................91 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 7 Contents 8.7 8.8 9. 8.6.1.4 EP01STAT ..................................................................................................... 91 8.6.1.5 EP1OUTCS ................................................................................................... 91 8.6.1.6 EP1OUTBC ................................................................................................... 91 8.6.1.7 EP1INCS ....................................................................................................... 91 8.6.1.8 EP1INBC ....................................................................................................... 92 8.6.2 Registers That Control EP2, EP4, EP6, EP8 ................................................................... 92 8.6.2.1 EP2468STAT ................................................................................................. 92 8.6.2.2 EP2ISOINPKTS, EP4ISOINPKTS, EP6ISOINPKTS, EP8ISOINPKTS ......... 92 8.6.2.3 EP2CS, EP4CS, EP6CS, EP8CS.................................................................. 92 8.6.2.4 EP2BCH:L, EP4BCH:L, EP6BCH:L, EP8BCH:L ........................................... 93 8.6.3 Registers That Control All Endpoints .............................................................................. 93 8.6.3.1 IBNIE, IBNIRQ, NAKIE, NAKIRQ................................................................... 93 8.6.3.2 EPIE, EPIRQ ................................................................................................. 94 8.6.3.3 USBERRIE, USBERRIRQ, ERRCNTLIM, CLRERRCNT .............................. 94 8.6.3.4 TOGCTL ........................................................................................................ 95 The Setup Data Pointer.................................................................................................................. 95 8.7.1 Transfer Length................................................................................................................ 96 8.7.2 Accessible Memory Spaces ............................................................................................. 96 Autopointers ................................................................................................................................... 96 Slave FIFOs 9.1 9.2 9.3 9.4 10. General Programmable Interface 10.1 8 99 Introduction .................................................................................................................................... 99 Hardware........................................................................................................................................ 99 9.2.1 Slave FIFO Pins.............................................................................................................100 9.2.2 FIFO Data Bus ...............................................................................................................101 9.2.3 Interface Clock ...............................................................................................................102 9.2.4 FIFO Flag Pins (FLAGA, FLAGB, FLAGC, FLAGD) ......................................................103 9.2.5 Control Pins (SLOE, SLRD, SLWR, PKTEND, FIFOADR[1:0]) .....................................103 9.2.6 Slave FIFO Chip Select .................................................................................................104 9.2.7 Implementing Synchronous Slave FIFO Writes .............................................................105 9.2.8 Implementing Synchronous Slave FIFO Reads .............................................................107 9.2.9 Implementing Asynchronous Slave FIFO Writes ...........................................................108 9.2.10 Implementing Asynchronous Slave FIFO Reads ...........................................................109 Firmware ......................................................................................................................................110 9.3.1 Firmware FIFO Access .................................................................................................. 110 9.3.2 EPx Memories................................................................................................................ 111 9.3.3 Slave FIFO Programmable Level Flag........................................................................... 111 9.3.4 Auto-In / Auto-Out Modes .............................................................................................. 111 9.3.5 CPU Access to OUT Packets, AUTOOUT = 1 ............................................................... 112 9.3.6 CPU Access to OUT Packets, AUTOOUT = 0 ............................................................... 113 9.3.7 CPU Access to IN Packets, AUTOIN = 1 ....................................................................... 115 9.3.8 Access to IN Packets, AUTOIN=0 ................................................................................. 116 9.3.9 Auto In/Auto Out Initialization......................................................................................... 117 9.3.10 Auto Mode: Synchronous FIFO IN Data Transfers ........................................................ 118 9.3.11 Auto Mode Example: Asynchronous FIFO IN Data Transfers ....................................... 119 9.3.12 Skipping Out Packets while in AUTOOUT Mode ........................................................... 119 9.3.13 Aborting Packets in FIFO while in AUTOIN Mode .........................................................120 Switching Between Manual Out and Auto Out .............................................................................120 121 Introduction ..................................................................................................................................121 10.1.1 Typical GPIF Interface ...................................................................................................123 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Contents 10.2 10.3 10.4 10.5 10.6 Hardware ......................................................................................................................................123 10.2.1 The External GPIF Interface...........................................................................................124 10.2.2 Default GPIF Pins Configuration ....................................................................................124 10.2.3 Six Control OUT Signals ................................................................................................124 10.2.3.1 Control Output Modes ..................................................................................124 10.2.4 Six Ready IN Signals......................................................................................................124 10.2.5 Nine GPIF Address OUT Signals ...................................................................................124 10.2.6 Three GSTATE OUT Signals..........................................................................................124 10.2.7 8/16-Bit Data Path, WORDWIDE = 1 (default) and WORDWIDE = 0 ............................125 10.2.8 Byte Order for 16 Bit GPIF Transactions........................................................................125 10.2.9 Interface Clock (IFCLK)..................................................................................................125 10.2.10 Connecting GPIF Signal Pins to Hardware ....................................................................126 10.2.11 Example GPIF Hardware Interconnect...........................................................................126 Programming the GPIF Waveforms .............................................................................................127 10.3.1 The GPIF Registers........................................................................................................127 10.3.2 Programming GPIF Waveforms .....................................................................................127 10.3.2.1 The GPIF IDLE State ...................................................................................128 10.3.2.2 Defining States.............................................................................................128 10.3.3 Reexecuting a Task Within a DP State...........................................................................131 10.3.4 State Instructions............................................................................................................134 10.3.4.1 Structure of the Waveform Descriptors ........................................................136 10.3.4.2 Terminating a GPIF Transfer .......................................................................136 Firmware ......................................................................................................................................137 10.4.1 Single Read Transactions ..............................................................................................143 10.4.2 Single Write Transactions...............................................................................................147 10.4.3 FIFO Read and FIFO Write (Burst) Transactions...........................................................150 10.4.3.1 Transaction Counter.....................................................................................150 10.4.3.2 Reading the Transaction-Count Status in a DP State..................................150 10.4.4 GPIF Flag Selection .......................................................................................................150 10.4.5 GPIF Flag Stop...............................................................................................................150 10.4.5.1 Performing a FIFO Read Transaction ..........................................................151 10.4.6 Firmware Access to IN Packets, (AUTOIN=1) ...............................................................156 10.4.7 Firmware Access to IN Packets, (AUTOIN = 0) .............................................................157 10.4.7.1 Performing a FIFO-Write Transaction ..........................................................159 10.4.8 Firmware Access to OUT packets, (AUTOOUT=1)........................................................164 10.4.9 Firmware Access to OUT Packets, (AUTOOUT = 0) .....................................................165 UDMA Interface ............................................................................................................................167 ECC Generation ...........................................................................................................................167 11. CPU Introduction 11.1 11.2 11.3 11.4 11.5 11.6 169 Introduction...................................................................................................................................169 8051 Enhancements.....................................................................................................................170 Performance Overview .................................................................................................................170 Software Compatibility..................................................................................................................171 803x/805x Feature Comparison ...................................................................................................171 EZ-USB/DS80C320 Differences...................................................................................................172 11.6.1 Serial Ports.....................................................................................................................172 11.6.2 Timer 2 ...........................................................................................................................172 11.6.3 Timed Access Protection................................................................................................172 11.6.4 Watchdog Timer .............................................................................................................172 11.6.5 Power Fail Detection ......................................................................................................172 11.6.6 Port I/O ...........................................................................................................................172 11.6.7 Interrupts ........................................................................................................................172 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 9 Contents 11.7 11.8 11.9 11.10 11.11 11.12 11.13 11.14 EZ-USB Register Interface...........................................................................................................172 EZ-USB Internal RAM ..................................................................................................................172 I/O Ports .......................................................................................................................................173 Interrupts ......................................................................................................................................173 Power Control ..............................................................................................................................173 Special Function Registers ..........................................................................................................174 External Address/Data Buses ......................................................................................................174 Reset ............................................................................................................................................174 12. Instruction Set 12.1 175 Introduction ..................................................................................................................................175 12.1.1 Instruction Timing...........................................................................................................178 12.1.2 Stretch Memory Cycles ..................................................................................................178 12.1.3 Dual Data Pointers .........................................................................................................179 12.1.4 Special Function Registers ............................................................................................179 13. Input/Output 13.1 13.2 13.3 13.4 13.5 13.6 181 Introduction ..................................................................................................................................181 I/O Ports .......................................................................................................................................181 SFR Registers ..............................................................................................................................182 I/O Port Alternate Functions .........................................................................................................183 13.4.1 Port A Alternate Functions .............................................................................................185 13.4.2 Port B and Port D Alternate Functions ...........................................................................186 13.4.3 Port C Alternate Functions.............................................................................................187 13.4.4 Port E Alternate Functions .............................................................................................188 I2C Bus Controller ........................................................................................................................189 13.5.1 Interfacing to I2C Peripherals ........................................................................................189 13.5.1.1 Multiple Bus Masters....................................................................................189 13.5.2 Registers........................................................................................................................190 13.5.2.1 I2CS Register ..............................................................................................190 13.5.2.2 I2CDAT Register..........................................................................................191 13.5.2.3 I2CTL Register.............................................................................................191 13.5.3 Sending Data .................................................................................................................191 13.5.4 Receiving Data...............................................................................................................191 EEPROM Boot Loader .................................................................................................................192 14. Timers/Counters and Serial Interface 14.1 14.2 10 193 Introduction ..................................................................................................................................193 Timers/Counters...........................................................................................................................193 14.2.1 803x/805x Compatibility .................................................................................................193 14.2.2 Timers 0 and 1 ...............................................................................................................193 14.2.2.1 Mode 0, 13 Bit Timer/Counter—Timer 0 and Timer 1..................................194 14.2.2.2 Mode 1, 16 Bit Timer/Counter — Timer 0 and Timer 1................................195 14.2.2.3 Mode 2, 8 Bit Counter with Auto-Reload — Timer 0 and Timer 1................196 14.2.2.4 Mode 3, Two 8 Bit Counters — Timer 0 Only ..............................................196 14.2.3 Timer Rate Control.........................................................................................................197 14.2.4 Timer 2 ...........................................................................................................................197 14.2.4.1 Timer 2 Mode Control ..................................................................................198 14.2.5 Timer 2: The 6 Bit Timer/Counter Mode.........................................................................198 14.2.5.1 Timer 2 The 16 Bit Timer/Counter Mode with Capture ................................198 14.2.6 Timer 2: 16 Bit Timer/Counter Mode with Auto-Reload..................................................199 14.2.7 Timer 2: Baud Rate Generator Mode.............................................................................200 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Contents 14.3 Serial Interface .............................................................................................................................201 14.3.1 803x/805x Compatibility .................................................................................................202 14.3.2 High-Speed Baud Rate Generator .................................................................................202 14.3.3 Mode 0 ...........................................................................................................................202 14.3.4 Mode 1 ...........................................................................................................................205 14.3.4.1 Mode 1 Baud Rate .......................................................................................205 14.3.4.2 Mode 1 Transmit ..........................................................................................207 14.3.5 Mode 1 Receive .............................................................................................................207 14.3.6 Mode 2 ...........................................................................................................................208 14.3.6.1 Mode 2 Transmit ..........................................................................................208 14.3.6.2 Mode 2 Receive ...........................................................................................208 14.3.7 Mode 3 ...........................................................................................................................210 15. Registers 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 15.10 15.11 15.12 15.13 15.14 15.15 211 Introduction...................................................................................................................................211 15.1.1 Example Register Format...............................................................................................211 15.1.2 Other Conventions .........................................................................................................211 Special Function Registers...........................................................................................................212 About SFRs ..................................................................................................................................213 GPIF Waveform Memories ...........................................................................................................219 General Configuration Registers ..................................................................................................220 Endpoint Configuration .................................................................................................................233 15.6.11.1 IN Endpoints.................................................................................................248 15.6.11.2 OUT Endpoints.............................................................................................249 Interrupts ......................................................................................................................................256 Input/Output Registers..................................................................................................................275 ECC Control and Data Registers..................................................................................................283 15.9.1 ECC Features.................................................................................................................283 15.9.2 ECC Implementation ......................................................................................................283 15.9.3 ECC Check/Correct........................................................................................................284 UDMA CRC Registers ..................................................................................................................295 USB Control..................................................................................................................................297 Endpoints......................................................................................................................................305 General Programmable Interface .................................................................................................333 Endpoint Buffers ...........................................................................................................................359 Synchronization Delay..................................................................................................................366 Appendix A. Descriptors for Full-Speed Mode 367 Appendix B. Descriptors for High-Speed Mode 375 Appendix C. Device Register Summary 383 Index 395 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 11 Contents 12 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 1. Introducing EZ-USB® Introduction The Universal Serial Bus (USB) has gained wide acceptance as the connection method of choice for PC peripherals. Equally successful in the Windows and Macintosh worlds, USB has delivered on its promises of easy attachment, an end to configuration hassles, and true plug-and-play operation. The latest generation of the USB specification, ‘USB 2.0’, extends the original specification to include: ■ A new ‘high speed’ 480 Mbps signaling rate, a 40× improvement over the USB 1.1 full speed rate of 12 Mbps ■ Full backward and forward compatibility with USB 1.1 devices and cables ■ A new hub architecture that can provide multiple 12 Mbps downstream ports for USB 1.1 devices The Cypress Semiconductor EZ-USB® family offers single chip USB 2.0 peripherals with architecture designed to accommodate the higher data rates offered by USB 2.0. The EZ-USB FX2LP device (CY7C68013A/14A/15A/16A) supports both full and high speed modes. The EZ-USB FX1 device (CY7C64713) only supports the full speed mode. The term ‘EZ-USB’ refers generically to both EZ-USB FX2LP and EZ-USB FX1 devices. This introductory chapter begins with a brief USB tutorial to put USB and EZ-USB terminology into context. The remainder of the chapter briefly outlines the EZ-USB architecture. Note This Technical Reference Manual does not cover the CY7C646xx or AN21xx products. See the respective Technical Reference Manuals for these products for more information. 1.1 An Introduction to USB Like a well designed automobile or appliance, a USB peripheral’s outward simplicity hides internal complexity. There is a lot going on under the hood of a USB device. ■ A USB device can be plugged in anytime, even while the PC is turned on ■ When the PC detects that a USB device has been plugged in, it automatically interrogates the device to learn its capabilities and requirements. From this information, the PC automatically loads the device’s driver into the operating system. When the device is unplugged, the operating system automatically logs it off and unloads its driver. ■ USB devices do not use DIP switches, jumpers, or configuration programs. There is never an IRQ, DMA, memory, or I/O conflict with a USB device. ■ USB expansion hubs make the bus simultaneously available to dozens of devices ■ USB is fast enough for printers, hard disk drives, CD-quality audio, and scanners ■ USB supports three speeds: ❐ Low speed (1.5 Mbps), suitable for mice, keyboards and joysticks ❐ Full speed (12 Mbps), for devices such as modems, speakers and scanners ❐ High speed (480 Mbps), for devices such as hard disk drives, CD-ROMs, video cameras, and high resolution scanners EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 13 Introducing EZ-USB® The Cypress Semiconductor EZ-USB family supports the high bandwidth offered by the USB 2.0 high-speed mode. The EZ-USB chips provide a highly-integrated solution for a USB peripheral device. The EZ-USB chips offer the following features: ■ An integrated, high-performance CPU based on the industry-standard 8051 processor ■ A soft (RAM-based) architecture that allows unlimited configuration and upgrades ■ Full USB throughput. USB devices that use EZ-USB chips are not limited by number of endpoints, buffer sizes, or transfer speeds ■ Automatic handling of most of the USB protocol, which simplifies code and accelerates the USB learning curve 1.2 The USB Specification The Universal Serial Bus Specification Version 2.0 is available on the Internet from the USB Implementers Forum, Inc., at http://www.usb.org. Published in April, 2000, the USB Specification is the work of a founding committee of seven industry heavyweights: Compaq, Hewlett-Packard, Lucent, Philips, Intel, Microsoft, and NEC. This impressive list of developers secures USB’s position as the low- to high speed PC connection method of the future. A glance at the USB Specification makes it immediately apparent that USB is not nearly as simple as the older serial or parallel ports. The USB Specification uses new terms like endpoint, isochronous, and enumeration, and finds new uses for old terms like configuration, interface, and interrupt. Woven into the USB fabric is a software abstraction model that deals with things such as pipes. The USB Specification also contains information about such details as connector types and wire colors. 1.3 Host is Master This is a fundamental USB concept. There is exactly one master in a USB system: the host computer. USB devices respond to host requests. USB devices cannot send information among themselves, as they could if USB were a peer-to-peer topology. However, there is one case where a USB device can initiate signaling without prompting from the host. After being put into a low-power ‘suspend’ mode by the host, a device can signal a ‘remote wakeup’. This is the only case in which the USB device is the initiator; in all other cases, the host makes device requests and the device responds to them. There is an excellent reason for this host-centric model. The USB architects were keenly aware of cost, and the best way to make low-cost peripherals is to put most of the ‘smarts’ into the host side, the PC. If USB had been defined as peerto-peer, every USB device would have required more intelligence, raising cost. 14 1.4 USB Direction Because the host is always the bus master, it is easy to remember USB direction: OUT means from the host to the device, and IN means from the device to the host. EZ-USB nomenclature uses this naming convention. For example, an endpoint that sends data to the host is an IN endpoint. This can be confusing at first, because the EZ-USB sends data to the host by loading an IN endpoint buffer. Likewise, the EZUSB receives host data from an OUT endpoint buffer. 1.5 Tokens and PIDs In this manual, you will read statements such as: “When the host sends an IN token…,” or “The device responds with an ACK.” What do these terms mean? A USB transaction consists of data packets identified by special codes called Packet IDs or PIDs. A PID signifies what kind of packet is being transmitted. There are four PID types, shown in Table 1-1. Table 1-1. USB PIDS PID Type PID Name Token IN, OUT, SOF, SETUP Data DATA0, DATA1, DATA2, MDATA Handshake ACK, NAK, STALL, NYET Special PRE, ERR, SPLIT, PING Bold type indicates PIDs introduced with USB 2.0 Figure 1-1 illustrates a USB OUT transfer. Host traffic is shown in solid shading, while device traffic is shown crosshatched. Packet 1 is an OUT token, indicated by the OUT PID. The OUT token signifies that data from the host is about to be transmitted over the bus. Packet 2 contains data, as indicated by the DATA1 PID. Packet 3 is a handshake packet, sent by the device using the ACK (acknowledge) PID to signify to the host that the device received the data error-free. Continuing with Figure 1-1, a second transaction begins with another OUT token 4, followed by more data 5, this time using the DATA0 PID. Finally, the device again indicates success by transmitting the ACK PID in a handshake packet 6. When operating at full speed, every OUT transfer sends the OUT data, even when the device is busy and cannot accept the data. When operating at high speed, this slightly wasteful use of USB bandwidth is remedied by using the new ‘Ping’ PID. The host first sends a short PING token to an OUT endpoint, asking if there is room for OUT data in the peripheral device. Only when the PING is answered by an ACK does the host send the OUT token and data. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® Figure 1-1. USB Packets O U T A D D R E N D P C R C 5 D A T A 1 Payload Data Token Packet Data Packet 1 2 C R C 1 6 A C K H/S Pkt SETUP tokens are unique to CONTROL transfers. They preface eight bytes of data from which the peripheral decodes host Device Requests. At full speed, SOF (Start of Frame) tokens occur once per millisecond. At high speed, each frame contains eight SOF tokens, each denoting a 125-s microframe. Four handshake PIDs indicate the status of a USB transfer: ■ ACK (Acknowledge) means ‘success’; the data was received error-free. ■ NAK (Negative Acknowledge) means ‘busy, try again.’ It is tempting to assume that NAK means ‘error,’ but it does not; a USB device indicates an error by not responding. ■ A D D R STALL means that something unforeseen went wrong (probably as a result of miscommunication or lack of cooperation between the host and device software). A device sends the STALL handshake to indicate that it does not understand a device request, that something went wrong on the peripheral end, or that the host tried to access a resource that was not there. It is like HALT, but better, because USB provides a way to recover from a stall. NYET (Not Yet) has the same meaning as ACK — the data was received error-free — but also indicates that the endpoint is not yet ready to receive another OUT transfer. NYET PIDs occur only in high-speed mode. A PRE (Preamble) PID precedes a low-speed (1.5 Mbps) USB transmission. The EZ-USB family supports full-speed (12 Mbps) and high-speed (480 Mbps) USB transfers only. E N D P C R C 5 Token Packet 3 There are two DATA PIDs (DATA0 and DATA1) in Figure 1-1 because the USB architects took error correction very seriously. As mentioned previously, the ACK handshake is an indication to the host that the peripheral received data without error (the CRC portion of the packet is used to detect errors). But what if the handshake packet itself is garbled in transmission? To detect this, each side (host and device) maintains a ‘data toggle’ bit, which is toggled between data packet transfers. The state of this internal toggle bit is compared with the PID that arrives with the data, either DATA0 or DATA1. When sending data, the host or device sends alternating DATA0-DATA1 PIDs. By comparing the received Data PID with the state of its own internal toggle bit, the receiver can detect a corrupted handshake packet. ■ O U T 4 1.5.1 D A T A 0 Payload Data Data Packet 5 C R C 1 6 A C K H/S Pkt 6 Receiving Data from the Host To send data to a USB peripheral, the host issues an OUT token followed by the data. If the peripheral has space for the data and accepts it without error, it returns an ACK to the host. If it is busy, it sends a NAK. If it finds an error, it sends back nothing. For the latter two cases, the host re-sends the data at a later time. 1.5.2 Sending Data to the Host A USB device never spontaneously sends data to the host. Either EZ-USB firmware or external logic can load data into an EZ-USB endpoint buffer and ‘arm’ it for transfer at any time. However, the data is not transmitted to the host until the host issues an IN request to the EZ-USB endpoint. If the host never sends the IN token, the data remains in the EZ-USB endpoint buffer indefinitely. 1.6 USB Frames The USB host provides a time base to all USB devices by transmitting a start-of-frame (SOF) packet every millisecond. SOF packets include an 11 bit number which increments once per frame; the current frame number [0-2047] may be read from internal EZ-USB registers at any time. At high speed (480 Mbps), each one-millisecond frame is divided into eight 125-s microframes, each of which is preceded by an SOF packet. The frame number still increments only once per millisecond, so each of those SOF packets contains the same frame number. To keep track of the current microframe number [0-7], the EZ-USB FX2LP provides a readable microframe counter. The EZ-USB can generate an interrupt request whenever it receives an SOF (once every millisecond at full speed, or once every 125 s at high speed). This SOF interrupt can be used, for example, to service isochronous endpoint data. 1.7 USB Transfer Types USB defines four transfer types. These match the requirements of different data types delivered over the bus. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 15 Introducing EZ-USB® 1.7.1 Bulk Transfers Figure 1-2. Two Bulk Transfers, IN and OUT A E I D N N D D R P C R C 5 D A T A 1 C R C 1 6 Payload Data Token Packet Data Packet A E O D N U D D T R P A C K A I D N D R E N D P C R C 5 Token Packet Payload Data Data Packet H/S Pkt In full-speed mode, only one isochronous packet can be transferred per endpoint, per frame. In high-speed mode, up to three isochronous packets can be transferred per endpoint, per microframe. For more details, refer to the Isochronous Transfers discussion in Chapter 5 of the USB specification. Control Transfers S A E C E D N R T D D C U R P 5 P Token Packet A C K D A T A 0 8 bytes Setup Data Data Packet C R C 1 6 A C K SETUP Stage H/S Pkt H/S Pkt Interrupt data is like bulk data; it can have packet sizes of 1 through 64 bytes at full speed or up to 1024 bytes at highspeed. Interrupt endpoints have an associated polling interval that ensures they will be polled (receive an IN token) by the host on a regular basis. 1.7.3 Data Packet A C K Figure 1-5. A Control Transfer Figure 1-3. An Interrupt Transfer C R C 1 6 C R C 1 6 Payload Data 1.7.4 Interrupt Transfers D A T A 1 D A T A 0 Token Packet H/S Pkt Bulk data is ‘bursty,’ traveling in packets of 8, 16, 32, or 64 bytes at full speed or 512 bytes at high speed. Bulk data has guaranteed accuracy, due to an automatic retry mechanism for erroneous data. The host schedules bulk packets when there is available bus time. Bulk transfers are typically used for printer, scanner, or modem data. Bulk data has built-in flow control provided by handshake packets. 1.7.2 C R C 5 Isochronous Transfers A E I D N N D D R P C R C 5 Token Packet A E O D N U D D T R P C R C 5 Token Packet D A T A 1 Payload Data Data Packet D C A R T C A 1 1 6 Data Pkt C R C 1 6 A C K DATA Stage (optional) H/S Pkt A C K STATUS Stage H/S Pkt Figure 1-4. An Isochronous Transfer A E I D N N D D R P C R C 5 Token Packet D A T A 0 Payload Data Control transfers configure and send commands to a device. Because they are so important, they employ the most extensive USB error checking. The host reserves a portion of each USB frame for Control transfers. C R C 1 6 Data Packet Isochronous data is time-critical and used to stream data like audio and video. An isochronous packet may contain up to 1023 bytes at full speed, or up to 1024 bytes at high speed. Time of delivery is the most important requirement for isochronous data. In every USB frame, a certain amount of USB bandwidth is allocated to isochronous transfers. To lighten the overhead, isochronous transfers have no handshake (ACK/NAK/STALL/NYET), and no retries; error detection is limited to a 16 bit CRC. Isochronous transfers do not use the data-toggle mechanism. Full-speed isochronous data uses only the DATA0 PID; high-speed isochronous data uses DATA0, DATA1, DATA2 and MDATA. 16 Control transfers consist of two or three stages. The SETUP stage contains eight bytes of USB CONTROL data. An optional DATA stage contains more data, if required. The STATUS (or handshake) stage allows the device to indicate successful completion of a CONTROL operation. 1.8 Enumeration Your computer is ON. You plug in a USB device, and the Windows™ cursor switches to an hourglass and then back to a cursor. Magically, your device is connected and its Windows driver is loaded. Anyone who has installed a sound card into a PC and has had to configure countless jumpers, drivers, and I/O / Interrupt / DMA settings knows that a USB connection is miraculous. We’ve all heard about Plug and Play, but USB delivers the real thing. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® How does all this happen automatically? Inside every USB device is a table of descriptors. This table is the sum total of the device’s requirements and capabilities. When you plug into USB, the host goes through a sign on sequence: This sign-on process is called ‘Enumeration’. 1. The host sends a Get Descriptor-Device request to address zero (all USB devices must respond to address zero when first attached). The USB Specification requires that high-speed (480 Mbits/ sec) devices must also be capable of enumerating at fullspeed (12 Mbps). In fact, all high-speed devices begin the enumeration process in full-speed mode; devices switch to high-speed operation only after the host and device have agreed to operate at high speed. The high-speed negotiation process occurs during USB reset, via the ‘Chirp’ protocol described in Chapter 7 of the USB Specification. 2. The device responds to the request by sending ID data back to the host to identify itself. 3. The host sends a Set Address request, which assigns a unique address to the just-attached device so it may be distinguished from the other devices connected to the bus. 4. The host sends more Get Descriptor requests, asking for additional device information. From this, it learns everything else about the device: number of endpoints, power requirements, required bus bandwidth, what driver to load, etc. 1.9 1.8.1 Full Speed/High Speed Detection When connected to a full-speed host, the EZ-USB FX2LP enumerates as a full-speed device. When connected to a high-speed host, the EZ-USB FX2LP automatically switches to high-speed mode. The EZ-USB FX1 always enumerates as a full-speed device. Neither the EZ-USB FX2LP or the EZ-USB FX1 support the low-speed mode (1.5 Mbps). The Serial Interface Engine Figure 1-6. What the SIE Does O U T A D D R E N D P C R C 5 Token Packet D A T A 1 Payload Data Data Packet C R C 1 6 A C K H/S Pkt O U T A D D R E N D P C R C 5 D A T A 0 Token Packet Payload Data C R C 1 6 Data Packet A C K H/S Pkt Payload Data Serial Interface Engine (SIE) D+ D- Payload Data A C K USB Transceiver Every USB device has a Serial Interface Engine (SIE) which connects to the USB data lines (D+ and D-) and delivers data to and from the USB device. Figure 1-6 illustrates the SIE’s role: it decodes the packet PIDs, performs error checking on the data using the transmitted CRC bits, and delivers payload data to the USB device. Bulk transfers are ‘asynchronous’, meaning that they include a flow control mechanism using ACK and NAK handshake PIDs. The SIE indicates busy to the host by sending a NAK handshake packet. When the USB device has successfully transferred the data, it commands the SIE to send an ACK handshake packet, indicating success. If the SIE encounters an error in the data, it automatically indicates no response instead of supplying a handshake PID. This instructs the host to retransmit the data at a later time. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 17 Introducing EZ-USB® To send data to the host, the SIE accepts bytes and control signals from the USB device, formats it for USB transfer, and sends it over D+ and D-. Because USB uses a self-clocking data format (NRZI), the SIE also inserts bits at appropriate places in the bit stream to guarantee a certain number of transitions in the serial data. This is called ‘bit stuffing,’ and is handled automatically by the EZ-USB’s SIE. One of the most important features of the EZ-USB family is that its configuration is soft. Instead of requiring ROM or other fixed memory, it contains internal program/data RAM which can be loaded over the USB. This makes modifications, specification revisions, and updates a snap. The EZ-USB’s ‘smart’ SIE performs much more than the basic functions shown in Figure 1-6; it can perform a full enumeration by itself, which allows the EZ-USB to connect as a USB device and download code into its RAM while its CPU is held in reset. This added SIE functionality is also made available to the EZ-USB programmer, to make development easier and save code and processing time. 1.11 1.10 ReNumeration™ Because the EZ-USB’s configuration is ‘soft’, one chip can take on the identities of multiple distinct USB devices. When first plugged into USB, the EZ-USB enumerates automatically and downloads firmware and USB descriptor tables over the USB cable. Next, the EZ-USB enumerates again, this time as a device defined by the downloaded information. This patented two-step process, called ReNumeration™, happens instantly when the device is plugged in, with no hint that the initial download step has occurred. Alternately, EZ-USB can also load its firmware from an external EEPROM. The Enumeration and ReNumeration™ chapter on page 51 describes these processes in detail. EZ-USB Architecture Figure 1-7. EZ-USB 56-Pin Package Simplified Block Diagram D+ D- Serial Interface Engine (SIE) USB Connector OUT data IN data USB Interface Program & Data RAM CPU (Enhanced 8051) USB Transceiver Slave FIFOs GPIF 8/16 EZ-USB I/O Ports CTL RDY The EZ-USB packs all the intelligence required by a USB peripheral interface into a compact integrated circuit. As Figure 1-7 illustrates, an integrated USB transceiver connects to the USB bus pins D+ and D-. A Serial Interface Engine (SIE) decodes and encodes the serial data and performs error correction, bit stuffing, and the other signalinglevel tasks required by USB. Ultimately, the SIE transfers parallel data to and from the USB interface. logic or processors) are unified to eliminate internal data transfer times. The EZ-USB FX2LP SIE operates at full-speed (12 Mbps) and high-speed (480 Mbps) rates. The EZ-USB FX1 SIE operates at the full-speed (12 Mbps) rate only. To accommodate the increased bandwidth of USB 2.0, the EZ-USB endpoint FIFOs and slave FIFOs (which interface to external ■ It implements the high-level USB protocol by servicing host requests over the control endpoint (endpoint zero) ■ It is available for general-purpose system use 18 The CPU is an enhanced 8051 with fast execution time and added features. It uses internal RAM for program and data storage. The role of the CPU in a typical EZ-USB-based USB peripheral is two fold: The high-level USB protocol is not bandwidth-critical, so the EZ-USB’s CPU is well-suited for handling host requests over EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® the control endpoint. However, the data rates offered by USB are too high for the CPU to process the USB data directly. For this reason, the CPU is not usually in the highbandwidth data path between endpoint FIFOs and the external interface. Note Instead, the CPU simply configures the interface, then ‘gets out of the way’ while the unified EZUSB FIFOs move the data directly between the USB and the external interface. The FIFOs can be controlled by an external master, which either supplies a clock and clock-enable signals to operate synchronously, or strobe signals to operate asynchronously. Alternately, the FIFOs can be controlled by an internal EZUSB timing generator called the General Programmable Interface (GPIF). The GPIF serves as an ‘internal’ master, interfacing directly to the FIFOs and generating user-programmed control signals for the interface to external logic. Additionally, the GPIF can be made to wait for external events by sampling external signals on its RDY pins. The GPIF runs much faster than the FIFO data rate to give good programmable resolution for the timing signals. It can be clocked from either the internal EZ-USB clock or an externally supplied clock. The EZ-USB’s CPU is rich in features. Up to five I/O ports are available, as well as two USARTs, three counter/timers, and an extensive interrupt system. It runs at a clock rate of up to 48 MHz and uses four clocks per instruction cycle instead of the twelve required by a standard 8051. The EZ-USB chip family uses an enhanced SIE/USB interface which simplifies EZ-USB code by implementing much of the USB protocol. In fact, the EZ-USB can function as a full USB device even without firmware. All EZ-USB family chips operate at 3.3V. This simplifies the design of bus-powered USB devices, since the 5V power available at the USB connector (which the USB Specification allows to be as low as 4.4V) can drive a 3.3V regulator to deliver clean, isolated power to the EZ-USB chip. EZ-USB is available in a 128-pin package which brings out the 8051 address bus, data bus, and control signals to allow connection of external memory and/or memory-mapped I/O. Figure 1-8 is a block diagram for this package; The Memory chapter on page 71, gives full details of the external-memory interface. Figure 1-8. EZ-USB 128-Pin Package Simplified Block Diagram D+ D- Serial Interface Engine (SIE) USB Connector OUT data IN data USB Interface Program & Data RAM I/O Ports CPU (Enhanced 8051) USB Transceiver Data Bus Off-Chip Memory GPIF 8/16 EZ-USB Slave FIFOs Address Bus CTL EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F RDY 19 Introducing EZ-USB® 1.12 EZ-USB Feature Summary The EZ-USB chips include the following features: ■ Low power consumption enabling bus-powered designs ■ For EZ-USB FX2LP, an on-chip 480 Mbps transceiver. For EZ-USB FX1, an on-chip 12 Mbps transceiver. Both devices contain a PLL and SIE—the entire USB physical layer (PHY). ❐ Fully featured: 256 bytes of register RAM, two USARTs, three timers, two data pointers ❐ Fast: four clocks (83.3 ns at 48 MHz) per instruction cycle It is important to recognize that the EZ-USB architecture is such that the CPU sets up and controls data transfers, but it normally does not participate in high bandwidth transfers. It is not in the data path; instead, the large data FIFOs that handle endpoint data connect directly to outside interfaces. To make the interface versatile, a programmable timing generator (GPIF, General Programmable Interface) can create user-programmed waveforms for high bandwidth transfers between the internal FIFOs and external logic. ❐ SFR access to control registers (including I/O ports) that require high speed The EZ-USB chips add eight interrupt sources to the standard 8051 interrupt system: ❐ USB-vectored interrupts for low ISR latency ■ INT2: USB Interrupt ❐ Used for USB housekeeping and control, not to move high-speed data ■ INT3: I 2C Bus Interrupt ■ INT4: FIFO/GPIF Interrupt ■ INT4: External Interrupt 4 ■ INT5: External Interrupt 5 ■ INT6: External Interrupt 6 ■ USART1: USART1 Interrupt ■ WAKEUP: USB Resume Interrupt ■ Double-, triple- and quad-buffered endpoint FIFOs accommodate the 480 Mbps USB data rate ■ Built in, enhanced 8051 running at up to 48 MHz ■ ■ protocol is simplified, leaving code space and bandwidth available for the CPU’s primary duty—to help implement your device. On the device side, abundant input/output resources are available, including I/O ports, USARTs, and an I2 C bus master controller. These resources are described in the Input/Output chapter on page 181, and the Timers/Counters and Serial Interface chapter on page 193. ‘Soft’ operation—USB firmware can be downloaded over USB, eliminating the need for hard coded memory Four interface FIFOs that can be internally or externally clocked. The endpoint and interface FIFOs are unified to eliminate data transfer time between USB and external logic. ■ General Programmable Interface (GPIF), a microcoded state machine which serves as a timing master for a glueless interface to the EZ-USB FIFOs ■ ECC Generation based on the SmartMedia™ standard The EZ-USB family offers single-chip USB 2.0 peripheral solutions. Unlike designs that use an external PHY, the EZUSB integrates everything on one chip, eliminating costly high pin-count packages and the need to route high speed signals between chips. 1.13 The EZ-USB chips provide 27 individual USB-interrupt sources which share the INT2 interrupt, and 14 individual FIFO/GPIF-interrupt sources which share the INT4 interrupt. To save the code and processing time which normally would be required to identify an individual interrupt source, the EZUSB provides a second level of interrupt vectoring called Autovectoring. Each INT2 and INT4 interrupt source has its own autovector, so when an interrupt requires service, the proper ISR (interrupt service routine) is automatically invoked. The Interrupts chapter on page 59 describes the EZ-USB interrupt system. EZ-USB Integrated Microprocessor The EZ-USB’s CPU uses on-chip RAM as program and data memory. The Memory chapter on page 71, describes the various internal/external memory options. The CPU communicates with the SIE using a set of registers occupying on-chip RAM addresses 0xE500-0xE6FF. These registers are grouped and described by function in individual chapters of this reference manual and summarized in register order. See chapter “Registers” on page 211. The CPU has two duties. First, it participates in the protocol defined in the Universal Serial Bus Specification Version 2.0, Chapter 9, USB Device Framework. Thanks to the EZUSB’s ‘smart’ SIE, the firmware associated with the USB 20 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® 1.14 EZ-USB Block Diagram Figure 1-9. EZ-USB Block Diagram Ext Clock FIFOS port D SIO port B SIO 4 KB Endpoint RAM USB regs 0.5K Data RAM 16 KB Pgm/Data RAM i2c 8051 48 MHz 2 2 port A PLL 2 8 port E 24 MHz crystal PHY Interface 8 port C USB 2.0 PHY Data(8) D- Addr(16) D+ 1 GPIF 14 7 16 16 4 General Programmable Interface (e.g. ATA, EPP, etc.) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 21 Introducing EZ-USB® 1.15 Packages EZ-USB is available in five packages. Figure 1-10. 56-Pin QFN, 56-Pin VFBGA, 56-Pin SSOP, 100-Pin, and 128-Pin EZ-USB Packages 56-pin VFBGA 5x5x1 mm 56-pin QFN 8x8x1 mm 56 SSOP 18x8x2.3 mm 1.15.1 128 TQFP 14x20x1.4 mm 100 TQFP 14x20x1.4 mm 56-Pin Packages package. The CY7C68015A and CY7C68016A is only available in the 56-pin package options. Twenty-four general-purpose I/O pins (ports A, B, and D) are available. Sixteen of these I/O pins can be configured as the 16 bit data interface to the EZ-USB’s internal high-speed 16bit FIFOs, which can be used to implement low cost, highperformance interfaces such as ATAPI, UTOPIA, EPP, etc. The 56-pin packages have the following: ■ Three 8-bit I/O ports: PORTA, PORTB, and PORTD ■ I2C™ bus ■ An 8- or 16-bit General Programmable Interface (GPIF) multiplexed onto PORTB and PORTD, with five non-multiplexed control signals ■ Four 8- or 16-bit Slave FIFOs, with five non-multiplexed control signals and four or five control signals multiplexed with PORTA 1.15.2 CY7C68013A/14A and CY7C68015A/16A Differences Two additional GPIO signals are available on the CY7C68015A and CY7C68016A to provide more flexibility when neither IFCLK or CLKOUT are needed in the 56-pin 22 Table 1-2. CY7C68013A/14A and CY7C68015A/16A Pin Differences CY7C68013A/CY7C68014A CY7C68015A/CY7C68016A IFCLK PE0 CLKOUT PE1 1.15.3 100-Pin Package The 100-pin package adds functionality to the 56-pin package: ■ Two additional 8-bit I/O ports: PORTC and PORTE ■ Seven additional GPIF Control (CTL) and Ready (RDY) signals ■ Nine non-multiplexed peripheral signals (two USARTs, three timer inputs, INT4, and INT5#) ■ Eight additional control signals multiplexed onto PORTE ■ Nine GPIF address lines, multiplexed onto PORTC (eight) and PORTE (one) ■ RD# and WR# signals which may be used as read and write strobes for PORTC EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® 1.15.4 128-Pin Package The 128-pin package adds the 8051 address and data buses and control signals. The RD#, PSEN#, and WR# strobes are standard 8051 control strobes, serving as read/ write strobes for external memory attached to the 8051 address and data buses. The EZ-USB encodes the CS# and OE# signals to automatically exclude external access to memory spaces which exist on-chip, and optionally to combine off-chip data- and code-memory read accesses. The 128-pin package adds the following: ■ 16-bit 8051 address bus ■ 8-bit 8051 data bus ■ Address/data bus control signals 1.15.5 The 128-pin package adds 28 pins to the 100-pin package to bring out the full 8051 expansion memory bus. This allows for the connection of external memory for applications that run at power-on and before connection to USB. The 128-pin package also provides the foundation for the Cypress EZ-USB Development Kit boards, in which code is developed using a debug monitor that runs in external RAM. Signals Available in the Five Packages Three interface modes are available: Ports, GPIF Master, and Slave FIFO. Figure 1-11 shows a logical diagram of the signals available in the five packages. The signals on the left edge of the diagram are common to all interface modes with the noted differences between the CY7C68013A and the CY7C68015A, while the signals on the right are specific to each mode. The interface mode is software-selectable via an internal mode register. In ‘Ports’ mode, all the I/O pins are general-purpose I/O ports. ‘GPIF master’ mode uses the PORTB and PORTD pins as a 16-bit data interface to the four EZ-USB endpoint FIFOs EP2, EP4, EP6 and EP8. In this ‘master’ mode, the EZ-USB FIFOs are controlled by the internal GPIF, a programmable waveform generator that responds to FIFO status flags, drives timing signals using its CTL outputs, and waits for external conditions to be true on its RDY inputs. Note that only a subset of the GPIF signals (CTL0-2, RDY0-1) are available in the 56-pin packages, while the full set (CTL0-5, RDY0-5) is available in the 100- and 128-pin packages. In the ‘Slave FIFO’ mode, external logic or an external processor interfaces directly to the EZ-USB endpoint FIFOs. In this mode, the GPIF is not active, since external logic has direct FIFO control. Therefore, the basic FIFO signals (flags, selectors, strobes) are brought out on EZ-USB pins. The external master can be asynchronous or synchronous, and it may supply its own independent clock to the EZ-USB interface. The 100-pin package includes all the functionality of the 56pin packages, and brings out the two additional I/O ports PORTC and PORTE as well as all the USART, Timer, Interrupt, and GPIF signals. The RD# and WR# pins function as PORTC strobes in the 100-pin package, and as expansion memory strobes in the 128-pin package. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 23 Introducing EZ-USB® Figure 1-11. Signals for the Five EZ-USB Package Types Port XTALIN XTALOUT RESET# WAKEUP# SCL SDA 56 **PE0 replaces IFCLK & PE1 replaces CLKOUT on CY7C68015A/16A **PE0 **PE1 IFCLK CLKOUT DPLUS DMINUS GPIF Master PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 INT0#/PA0 INT1#/PA1 PA2 WU2/PA3 PA4 PA5 PA6 PA7 FD[15] FD[14] FD[13] FD[12] FD[11] FD[10] FD[9] FD[8] FD[7] FD[6] FD[5] FD[4] FD[3] FD[2] FD[1] FD[0] Slave FIFO FD[15] FD[14] FD[13] FD[12] FD[11] FD[10] FD[9] FD[8] FD[7] FD[6] FD[5] FD[4] FD[3] FD[2] FD[1] FD[0] RDY0 RDY1 SLRD SLWR CTL0 CTL1 CTL2 FLAGA FLAGB FLAGC INT0#/PA0 INT1#/PA1 PA2 WU2/PA3 PA4 PA5 PA6 PA7 INT0#/ PA0 INT1#/ PA1 SLOE WU2/PA3 FIFOADR0 FIFOADR1 PKTEND PA7/FLAGD/SLCS# CTL3 CTL4 CTL5 RDY2 RDY3 RDY4 RDY5 100 BKPT PORTC7/GPIFADR7 PORTC6/GPIFADR6 PORTC5/GPIFADR5 PORTC4/GPIFADR4 PORTC3/GPIFADR3 PORTC2/GPIFADR2 PORTC1/GPIFADR1 PORTC0/GPIFADR0 PE7/GPIFADR8 PE6/T2EX PE5/INT6 PE4/RxD1OUT PE3/RxD0OUT PE2/T2OUT PE1/T1OUT PE0/T0OUT RD# WR# CS# OE# PSEN# D7 D6 D5 D4 D3 D2 D1 D0 128 EA RxD0 TxD0 RxD1 TxD1 INT4 INT5# T2 T1 T0 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 ** pinout for CY7C68015A/CY7C68016A only 24 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® 1.16 Package Diagrams Figure 1-12. 128-Pin TQFP Pin Assignment 123 121 122 120 119 118 116 117 115 114 113 112 110 111 109 107 108 106 104 105 103 A8 PD 7/ F D 1 5 GND PD 6/ F D 1 4 PD 5/ F D 1 3 A7 A6 A5 GND A4 PE 7 / G P IF A D R 8 PE 6 / T 2 E X PE 5 / I N T 6 PE 4 / R X D 1 O U T PE 2 / T 2 O U T PE 3 / R X D 0 O U T PE 1 / T 1 O U T PE 0 / T 0 O U T I N T5 # PD 2/ F D 1 0 PD 3/ F D 1 1 PD 1/ F D 9 CLKOUT VCC GND 4 5 RDY0/*SLRD RDY1/*SLW R 6 7 RDY2 RDY3 RDY4 RDY5 8 9 10 11 12 13 14 A0 AVCC XTALOUT GND PA7/*FLAGD/SLCS# PA6/*PKTEND XTALIN AGND PA5/FIFOADR1 NC PA4/FIFOADR0 D7 NC NC AVCC 18 19 20 DPLUS DMINUS AGND 21 22 A11 A12 23 24 A13 A14 25 26 28 29 30 A15 VCC GND INT4 T0 T1 31 32 T2 *IFCLK 33 34 35 36 RESERVED BKPT D6 D5 PA3/*W U2 PA2/*SLOE PA1/INT1# 128-pin TQFP * denotes programmable polarity PA0/INT0# VCC GND PC7/GPIFADR7 PC6/GPIFADR6 PC5/GPIFADR5 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 PC0/GPIFADR0 72 CTL2/*FLAGC 71 CTL1/*FLAGB CTL0/*FLAGA VCC CTL4 70 69 CTL3 66 65 P B 5/ F D 5 P B 7/ F D 7 P B 6/ F D 6 GND D1 D0 D3 D2 D4 VCC 54 53 55 57 56 58 60 59 61 63 64 GND 62 49 52 48 47 T XD 1 45 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 101 76 75 74 73 P B 4/ F D 4 R XD 1 P B 3/ F D 3 44 51 50 P B 2/ F D 2 P B 1/ F D 1 R XD 0 P B 0/ F D 0 43 42 T XD 0 VCC 41 GND VCC C S# 46 WR # 40 39 OE# 102 PC4/GPIFADR4 PC3/GPIFADR3 PC2/GPIFADR2 PC1/GPIFADR1 EA SCL SDA RD# P S EN # 37 38 PD0/FD8 *W AKEUP VCC RESET# CTL5 A3 A2 A1 15 16 17 27 VC C 124 125 2 3 PD 4/ F D 1 2 126 A1 0 A9 127 128 1 68 67 25 Introducing EZ-USB® Figure 1-13. 100-Pin TQFP Pin Assignment 98 97 96 95 93 94 92 91 90 89 88 87 86 85 84 83 82 81 CLK O U T GND P D7 / FD 1 5 P D6 / FD 1 4 P D5 / FD 1 3 P D4 / FD 1 2 GND P E 6/ T 2 E X P E 5/ I N T 6 P E 4/ R X D 1 O U T P E 3/ R X D 0 O U T P E 2/ T 2 O U T P E 1/ T 1 O U T P E 0/ T 0 O U T V CC IN T 5 # P D3 / FD 1 1 P D2 / FD 1 0 P D1 / FD 9 P E 7/ G P I F A D R 8 99 VCC PD0/FD8 80 2 3 GND *W AKEUP 79 VCC 78 4 RDY1/*SLW R RESET# 77 5 RDY2 CTL5 76 6 RDY3 GND 75 7 RDY4 RDY5 PA7/*FLAGD/SLCS# 74 PA6/*PKTEND 73 AVCC PA5/FIFOADR1 72 10 XTALOUT PA4/FIFOADR0 71 11 XTALIN 12 AGND 13 8 9 RDY0/*SLRD PA3/*W U2 70 PA2/*SLOE 69 NC PA1/INT1# 68 14 NC PA0/INT0# 67 15 16 NC AVCC VCC 66 GND 65 17 18 DPLUS DMINUS PC7/GPIFADR7 64 PC6/GPIFADR6 63 19 AGND PC5/GPIFADR5 62 20 VCC PC4/GPIFADR4 61 21 GND PC3/GPIFADR3 60 22 23 INT4 T0 PC2/GPIFADR2 59 PC1/GPIFADR1 58 24 T1 PC0/GPIFADR0 57 25 T2 CTL2/*FLAGC 56 26 *IFCLK CTL1/*FLAGB 55 27 28 RESERVED CTL0/*FLAGA 54 VCC 53 29 SCL CTL4 52 30 SDA CTL3 51 100-pin TQFP * denotes programmable polarity BKPT TX D1 RX D1 PB 4 /F D 4 PB 5 /F D 5 PB 6 /F D 6 PB 7 /F D 7 G ND V CC G ND 41 42 43 44 45 46 47 48 49 50 37 RX D0 36 40 PB 3 /F D 3 35 39 PB 2 /F D 2 34 TX D0 PB 1 /F D 1 33 38 PB 0 /F D 0 32 G ND V CC 31 V CC R D# W R# 26 100 1 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® Figure 1-14. 56-Pin SSOP Pin Assignment 1 PD5/FD13 PD6/FD14 PD4/FD12 PD3/FD11 56 2 3 PD7/FD15 PD2/FD10 54 4 GND PD1/FD9 53 5 CLKOUT PD0/FD8 52 6 VCC *WAKEUP 51 7 GND VCC 50 8 RDY0/*SLRD 49 9 RDY1/*SLWR RESET# GND 10 12 XTALIN PA7/*FLAGD/SLCS# PA6/*PKTEND PA5/FIFOADR1 47 11 AVCC XTALOUT 13 AGND PA4/FIFOADR0 44 14 AVCC PA3/*WU2 43 15 DPLUS PA2/*SLOE 42 16 PA1/INT1# 41 17 DMINUS AGND 40 18 VCC PA0/INT0# VCC 19 GND 38 20 21 *IFCLK RESERVED CTL2/*FLAGC CTL1/*FLAGB 36 22 SCL CTL0/*FLAGA GND 23 SDA VCC 34 24 VCC GND 33 25 PB0/FD0 PB7/FD7 32 26 PB1/FD1 31 27 PB2/FD2 PB6/FD6 PB5/FD5 28 PB3/FD3 PB4/FD4 29 56-pin SSOP 55 48 46 45 39 37 35 30 * Programmable polarity EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 27 Introducing EZ-USB® Figure 1-15. 56-Pin QFN Pin Assignment GND VCC CLKOUT/**PE1 GND PD7/FD15 PD6/FD14 PD5/FD13 PD4/FD12 PD3/FD11 PD2/FD10 PD1/FD9 PD0/FD8 *WAKEUP VCC 56 55 54 53 52 51 50 49 48 47 46 45 44 43 RDY0/*SLRD 1 42 RESET# RDY1/*SLWR 2 41 GND AVCC 3 40 PA7/*FLAGD/SLCS# XTALOUT 4 39 PA6/*PKTEND XTALIN 5 38 PA5/FIFOADR1 AGND 6 37 PA4/FIFOADR0 AVCC 7 36 PA3/*WU2 DPLUS 8 35 PA2/*SLOE DMINUS 9 34 PA1/INT1# AGND 10 33 PA0/INT0# VCC 11 32 VCC GND 12 31 CTL2/*FLAGC *IFCLK/**PE0 13 30 CTL1/*FLAGB RESERVED 14 29 CTL0/*FLAGA 56-pin QFN 23 24 25 26 27 28 PB4/FD4 PB5/FD5 PB6/FD6 PB7/FD7 GND VCC GND PB1/FD1 22 19 PB0FD0 PB3/FD3 18 VCC 21 17 SDA PB2/FD2 16 SCL 20 15 * Programmable polarity ** CY7C68015A/16A pinout 28 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® Figure 1-16. 56-Pin VFBGA Pin Assignment 1 2 3 4 5 6 7 8 A 1A 2A 3A 4A 5A 6A 7A 8A B 1B 2B 3B 4B 5B 6B 7B 8B C 1C 2C 3C 4C 5C 6C 7C 8C D 1D 2D 7D 8D E 1E 2E 7E 8E F 1F 2F 3F 4F 5F 6F 7F 8F G 1G 2G 3G 4G 5G 6G 7G 8G H 1H 2H 3H 4H 5H 6H 7H 8H EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 29 Introducing EZ-USB® 1.17 EZ-USB Endpoint Buffers Note The eight SETUP bytes in a CONTROL transfer do not appear in the 64-byte EP0 endpoint buffer. Instead, to simplify programming, the EZ-USB automatically stores the eight SETUP bytes in a separate buffer (SETUPDAT, at 0xE6B8-0xE6BF). The USB Specification defines an endpoint as a source or sink of data. Since USB is a serial bus, a device endpoint is actually a FIFO which sequentially empties or fills with USB data bytes. The host selects a device endpoint by sending a 4-bit address and a direction bit. Therefore, USB can uniquely address 32 endpoints, IN0 through IN15 and OUT0 through OUT15. EP1IN and EP1OUT use separate 64 byte buffers. EZ-USB firmware can configure these endpoints as BULK or INTERRUPT. These endpoints, as well as EP0, are accessible only by EZ-USB firmware. This is in contrast to the large endpoint buffers EP2, EP4, EP6 and EP8, which are designed to move high bandwidth data directly on and off chip without firmware intervention. From the EZ-USB’s point of view, an endpoint is a buffer full of bytes received or held for transmission over the bus. The EZ-USB reads host data from an OUT endpoint buffer, and writes data for transmission to the host to an IN endpoint buffer. Endpoints 2, 4, 6 and 8 are the large, high bandwidth, data moving endpoints. They can be configured in various ways to suit bandwidth requirements. The shaded boxes in Figure 1-17 enclose the buffers to indicate double, triple, or quad buffering. Double buffering means that one packet of data can be filling or emptying with USB data while another packet (from the same endpoint) is being serviced by external interface logic. Triple buffering adds a third packet buffer to the pool, which can be used by either side (USB or interface) as needed. Quad buffering adds a fourth packet buffer. Multiple buffering can significantly improve USB bandwidth performance when the data supplying and consuming rates are similar, but bursty; it smooths out the bursts, reducing or eliminating the need for one side to wait for the other. EZ-USB contains three 64-byte endpoint buffers, plus 4 KB of buffer space that can be configured 12 ways, as indicated in Figure 1-17. The three 64-byte buffers are common to all configurations. The three 64-byte buffers are designated EP0, EP1IN and EP1OUT. EP0 is the default CONTROL endpoint, a bidirectional endpoint that uses a single 64-byte buffer for both IN and OUT data. EZ-USB firmware reads or fills the EP0 buffer when the (optional) data stage of a CONTROL transfer is required. Figure 1-17. EZ-USB Endpoint Buffers EP0 IN & OUT 64 64 64 64 64 64 64 64 64 64 64 64 EP1 IN 64 64 64 64 64 64 64 64 64 64 64 64 EP1 OUT 64 64 64 64 64 64 64 64 64 64 64 64 EP2 EP2 EP2 EP2 EP2 EP2 EP2 EP2 EP2 EP2 EP2 EP2 512 512 512 512 512 512 512 512 512 512 512 512 1024 1024 EP4 EP4 EP4 512 512 512 512 512 512 1024 1024 512 512 EP6 1024 1024 1024 512 512 512 EP6 EP6 EP6 EP6 EP6 512 512 512 512 512 512 EP8 30 512 512 1024 EP8 512 512 512 512 1 2 1024 3 1024 1024 1024 512 512 512 1024 512 1024 1024 1024 512 EP6 EP6 512 512 512 512 EP6 512 1024 512 EP8 512 512 512 512 4 5 1024 6 EP6 512 512 512 512 7 8 1024 9 EP8 EP8 512 512 512 512 10 11 1024 12 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® Endpoints 2, 4, 6 and 8 can be configured using the choices shown in Table 1-3. internal interface clock (IFCLK) can be supplied to the interface. Table 1-3. Endpoint 2, 4, 6, and 8 Configuration Choices The classic solution to the problem of reconciling two different and independent clocks is to use a FIFO. The EZ-USB’s FIFOs have an unusual property: They are Quantum FIFOs, which means that data is committed to the FIFOs in USBsize packets, rather than one byte at a time. This is invisible to the outside interface, since it services the FIFOs just like any ordinary FIFO (i.e., by checking full and empty flags). The only minor difference is that when an empty flag goes from 1 (empty) to 0 (not empty), the number of bytes in the FIFO jumps to a USB packet size, rather than just one byte. Characteristic Choices Direction IN, OUT Type Bulk, Interrupt, Isochronous Buffering Double, Triple, Quad When the EZ-USB operates at full speed (12 Mbps), some or all of the endpoint buffer bytes shown in Figure 1-17 may be employed, depending on endpoint type. Note Regardless of the physical buffer size, each endpoint buffer accommodates only one full-speed packet. For example, if EP2 is used as a full-speed BULK endpoint, the maximum number of bytes (maxPacketSize) it can accommodate is 64, even though the physical buffer size is 512 or 1024 bytes (it makes sense, therefore, to configure full-speed BULK endpoints as 512 bytes rather than 1024, so that fewer unused bytes are wasted). An ISOCHRONOUS full-speed endpoint, on the other hand, could fully use either a 512- or 1024-byte buffer. 1.18 External FIFO Interface EZ-USB Quantum FIFOs may be moved between data domains almost instantaneously. The Quantum nature of the FIFOs also simplifies error recovery. If endpoint data were continuously clocked into an interface FIFO, some of the packet data might have already been clocked out by the time an error is detected at the end of a USB packet. By switching FIFO data between the domains in USB-packetsize blocks, each USB packet can be error-checked (and retried, if necessary) before it’s committed to the other domain. Figure 1-18 on page 32 and Figure 1-19 on page 33 illustrate the two methods by which external logic interfaces to the endpoint FIFOs EP2, EP4, EP6 and EP8. The large data FIFOs (endpoints 2, 4, 6 and 8) in the EZ-USB are designed to move high-speed (480 Mbps) USB data on and off chip without introducing any bandwidth bottlenecks. They accomplish this goal by implementing the following features: 1. Direct interface with outside logic, with the EZ-USB’s CPU out of the data path. 2. ‘Quantum FIFO’ architecture instantaneously moves (commits) packets between the USB and the FIFOs. 3. Versatile interfaces: Slave FIFO (external master) or GPIF (internal master), synchronous or asynchronous clocking, internal or external clocks, etc. The firmware sets switches to configure the outside FIFO interface, and then generally does not participate in moving the data into and out of the FIFOs. To understand the ‘Quantum FIFO’, it is necessary to refer to two data domains, the USB domain and the Interface domain. Each domain is independent, allowing different clocks and logic to handle its data. The USB domain is serviced by the SIE, which receives and delivers FIFO data packets over the two-wire USB bus. The USB domain is clocked using a reference derived from the 24 MHz crystal attached to the EZ-USB chip. The Interface domain loads and unloads the endpoint FIFOs. An external device such as a DSP or ASIC can supply its own clock to the FIFO interface, or the EZ-USB’s EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 31 Introducing EZ-USB® Figure 1-18. EZ-USB FIFOs in Slave FIFO Mode EP8 EP6 EP4 EP2 FD[15:0] Data PKTEND (INFULL) (OUTEMPTY) FIFO SLRD SLW R PKTEND Asynchronous (PRGFLAG) IFCLK SLRD IFCLK SLW R select SLOE FIFOADR1 SLRD SLW R PKTEND Synchronous FIFOADR0 Figure 1-18 illustrates the outside-world view of the EZ-USB data FIFOs configured as Slave FIFOs. The outside logic supplies a clock, responds to the FIFO flags, and clocks FIFO data in and out using the strobe signals. Optionally, the outside logic may use the internal EZ-USB Interface Clock (IFCLK) as its reference clock. Three FIFO flags are shown in parentheses in Figure 1-18 because they actually are called FLAGA-FLAGD in the pin diagram (there are four flag pins). Using configuration bits, various FIFO flags can be assigned to these generalpurpose flag pins. The names shown in parentheses illustrate typical uses for these configurable flags. The Programmable Level Flag (PRGFLAG) can be set to any value to indicate degrees of FIFO ‘fullness’. The outside interface selects one of the four FIFOs using the FIFOADR pins, and then clocks the 16-bit FIFO data using the SLRD (Slave Read) and SLWR (Slave Write) signals. PKTEND is used to dispatch a short (less than max packet size) IN packet to USB. 32 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® Figure 1-19. EZ-USB FIFOs in GPIF Master Mode EP8 EP6 EP4 EP2 Data FD[15:0] FLAGS FIFO SLRD SLW R SLOE SLRD 6 select 6 GPIF 9 CTL RDY GPIFADR 8051 RDY 8051 INT IFCLK 30 MHz 48 MHz IFCLK External systems that connect to the EZ-USB FIFOs must provide control circuitry to select FIFOs, check flags, clock data, etc. The EZ-USB contains a sophisticated control unit (the General Programmable Interface, or GPIF) which can replace this external logic. In the GPIF Master FIFO mode, (Figure 1-19), the GPIF reads the FIFO flags, controls the FIFO strobes, and presents a user-customizable interface to the outside world. The GPIF runs at a very high speed (up to 48 MHz clock rate) so that it can develop high-resolution control waveforms. It can be clocked from one of two internal sources (30 or 48 MHz) or from an external clock. Control (CTL) signals are programmable waveform outputs, and ready (RDY) signals are input pins that can be tested for conditions that cause the GPIF to pause and resume operation, implementing ‘wait states’. GPIFADR pins present a 9-bit address to the interface that may be incremented as data is transferred. The 8051 INT signal is a ‘hook’ that can signal the EZ-USB’s CPU in the middle of a transaction; GPIF operation resumes once the CPU asserts its own 8051 RDY signal. This ‘hook’ permits great flexibility in the generation of GPIF waveforms. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 33 Introducing EZ-USB® 1.19 EZ-USB Product Family The EZ-USB family is available in various pinouts and operational modes to serve different system requirements and costs. Table 1-4. EZ-USB FX2LP Part Numbers (Full Speed and High Speed) Part Number Package RAM ISO Support I/O Bus Width Data/Address Bus Ideal for battery powered applications CY7C68014A-128AXC 128-pin TQFP – Pb-Free 16K Bytes Yes 40 16/8 Bit 8051 Address/Data Bus CY7C68014A-100AXC 100-pin TQFP – Pb-Free 16K Bytes Yes 40 – No CY7C68014A-56PVXC 56-pin SSOP – Pb-Free 16K Bytes Yes 24 – No CY7C68014A-56LFXC 56-pin QFN – Pb-Free 16K Bytes Yes 24 – No CY7C68016A-56LFXC 56-pin QFN – Pb-Free 16K Bytes Yes 26 – No 16K Bytes Yes 40 16/8 Bit 8051 Address/Data Bus Ideal for nonbattery powered applications CY7C68013A-128AXC 128-pin TQFP – Pb-Free CY7C68013A-128AXI 128-pin TQFP – Pb-Free (Industrial) 16K Bytes Yes 40 16/8 Bit 8051 Address/Data Bus CY7C68013A-100AXC 100-pin TQFP – Pb-Free 16K Bytes Yes 40 – No CY7C68013A-100AXI 100-pin TQFP – Pb-Free (Industrial) 16K Bytes Yes 40 – No CY7C68013A-56PVXC 56-pin SSOP – Pb-Free 16K Bytes Yes 24 – No CY7C68013A-56PVXI 56-pin SSOP – Pb-Free (Industrial) 16K Bytes Yes 24 – No CY7C68013A-56LFXC 56-pin QFN – Pb-Free 16K Bytes Yes 24 – No CY7C68013A-56LFXI 56-pin QFN – Pb-Free (Industrial) 16K Bytes Yes 24 – No CY7C68015A-56LFXC 56-pin QFN – Pb-Free 16K Bytes Yes 26 – No CY7C68013A-56BAXC 56 VFBGA – Pb-Free 16K Bytes Yes 24 – No ISO Support I/O Bus Width Data/Address Bus Table 1-5. EZ-USB FX1 Part Numbers (Full Speed Only) Part Number Package RAM Ideal for nonbattery powered applications CY7C64713-128AXC 128-pin TQFP – Pb-Free 16K Bytes Yes 40 16/8 Bit 8051 Address/Data Bus CY7C64713-100AXC 100-pin TQFP – Pb-Free 16K Bytes Yes 40 – No CY7C64713-56LFXC 56-pin QFN – Pb-Free 16K Bytes Yes 24 – No 34 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Introducing EZ-USB® 1.20 Document History This section is a chronicle of the EZ-USB Technical Reference Manual for the EZ-USB FX2LP and EX-USB FX1 devices. EZ-USB Technical Reference Manual History Release Date Version Originator Description of Change 01/31/2003 1.4 ARI This manual has gone through several versions and is based on the EZ-USB FX2. The most recent printing of this manual is Version 1.4. 09/11/2006 2.0 ARI The information in this manual is identical to version 1.4, but a new template was implemented as part of the new corporate standard. N/A 2.1 ARI The information in this manual is the same as the previous versions but it has a new Document History section and it has an index. This version was not released. 03/19/2007 ** ARI This manual is a new document to the Cypress Document Control (Revision **) system; it is the same as version 2.1. This document has been issued the document number 001-13670 02/21/2008 *A CMCC Delete references to CY7C64714. Remove T0OUT and T1OUT from 56-pin QFN. Add industrial part numbers to product list. Change FIFORESET procedures to NAK all while resetting FIFO to avoid potential race condition. Fix general typos and text formatting. 06/15/2009 *B DSG Updated EP2 and EP6 byte capacity in Section 15.12.4. Corrected the Notes entry for E611 to Default: BULK IN 64 in Appendix C, Pg 338. Corrected the Appendix A title in the Contents Section. Updated the USBCS (USB Control and Status) register address 7FD6 to E680 in section 6.4. Modified Fig 1037 to remove the additional AUTOIN = 1 from the diagram in Section 10.4.6. Updated Bit 1 description for INT4 in Section 15.7.12. Corrected AUTOOUT setting in point 5 of section 9.3.2. Corrected bit descriptions in section 15.12.5 through 15.12.8. Added sections 9.3.12 and 9.3.13. Reformatted to match current template. 09/08/2010 *C DSG Changed 4x to 2x in section 9.2.7. Added bit 7 functionality to section 3.5 EEPROM Configuration Byte. Changed FIFORESET = 0x86 to 0x88 in Figure 9-40. Added Contents Overview. Updated Note in section 8.4. Added Note in section 15.6.3. Updated Bit 3 AUTOIN Description in section 15.6.4. Updated Bit 2 BERR Description in Section 13.5.2.1 and 15.8.4. 02/04/2011 *D ODC Fixed Figure 10-18 04/24/2014 *E DBIR Sunset review; no content updates 05/10/2017 *F DBIR Updated logo and copyright; no content updates EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 35 Introducing EZ-USB® 36 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 2. Endpoint Zero 2.1 Introduction Endpoint zero has special significance in a USB system. It is a CONTROL endpoint, and it is required by every USB device. The USB host uses special SETUP tokens to signal transfers that deal with device control; only CONTROL endpoints accept these special tokens. The USB host sends a suite of standard device requests over endpoint zero. These standard requests are fully defined in Chapter 9 of the USB Specification. This chapter describes how the EZ-USB chip handles endpoint zero requests. The EZ-USB provides extensive hardware support for handling endpoint-zero operations; this chapter describes those operations and the EZ-USB resources that simplify the firmware which handles them. Endpoint zero is the only CONTROL endpoint supported by the EZ-USB. CONTROL endpoints are bidirectional, so the EZ-USB provides a single 64-byte buffer, EP0BUF, which firmware handles exactly like a bulk endpoint buffer for the data stages of a CONTROL transfer. A second 8-byte buffer called SETUPDAT, which is unique to endpoint zero, holds data that arrives in the SETUP stage of a CONTROL transfer. This relieves the EZ-USB firmware of the burden of tracking the three CONTROL transfer phases (SETUP, DATA, and STATUS). The EZ-USB also generates separate interrupt requests for the various transfer phases, further simplifying code. Endpoint zero is always enabled and accessible by the USB host. 2.2 Control Endpoint EP0 Endpoint zero accepts a special SETUP packet, which contains an 8-byte data structure that provides host information about the CONTROL transaction. CONTROL transfers include a final STATUS phase, constructed from standard PIDs (IN/OUT, DATA1, and ACK/NAK). Some CONTROL transactions include all required data in their 8-byte SETUP Data packet. Other CONTROL transactions require more OUT data than fit into the eight bytes, or require IN data from the device. These transactions use standard bulklike transfers to move the data. Note in Figure 2-1 on page 38 that the DATA Stage looks exactly like a bulk transfer. As with BULK endpoints, the endpoint zero byte count registers must be loaded to ACK each data transfer stage of a CONTROL transfer. The STATUS stage consists of an empty data packet with the opposite direction of the data stage, or an IN if there was no data stage. This empty data packet gives the device a chance to ACK or NAK the entire CONTROL transfer. The HSNAK bit holds off the completion of a CONTROL transfer until the device has had time to respond to a request. For example, if the host issues a Set_Interface Request, the EZ-USB firmware performs various housekeeping chores such as adjusting internal modes and re-initializing endpoints. During this time, the host issues handshake (STATUS stage) packets to which the EZ-USB automatically responds with NAKs, indicating ‘busy.’ When the firmware completes its housekeeping operations, it clears the HSNAK bit (by writing ‘1’ to it), which instructs the EZ-USB to ACK the STATUS stage, terminating the transfer. This handshake prevents the host from attempting to use an interface before it is fully configured. To perform an endpoint stall for the DATA or STATUS stage of an endpoint zero transfer (the SETUP stage can never stall), firmware must set both the STALL and HSNAK bits for endpoint zero. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 37 Endpoint Zero Figure 2-1. A USB Control Transfer (With Data Stage) SETUP Stage S A E C E D N R T D D C U R P 5 P Token Packet D A T A 0 C R C 1 6 8 bytes Setup Data Data Packet A C K H/S Pkt SUTOK Interrupt EZ-USB sets HSNAK=1 SUDAV Interrupt DATA Stage A I D N D R E N D P D A T A 1 C R C 5 Token Packet C R C 1 6 Payload Data Data Packet A I D N D R A C K E N D P C R C 5 Token Packet H/S Pkt EP0-IN Interrupt D A T A 0 Payload Data C R C 1 6 Data Packet A C K H/S Pkt EP0-IN Interrupt STATUS Stage D C S N A R Y A T C N K A 1 C 1 6 Token Packet Data Pkt H/S Pkt A E O D N U D D T R P C R C 5 D C A R A T C C A 1 K 1 6 Token Packet Data Pkt H/S Pkt A E O D N U D D T R P .... C R C 5 8051 clears HSNAK bit (writes 1 to it) or sets the STALL bit. Some CONTROL transfers do not have a DATA stage. Therefore, the code that processes the SETUP data should check the length field in the SETUP data (in the 8-byte buffer at SETUPDAT) and arm endpoint zero for the DATA phase (by loading EP0BCH:L) only if the length field is non-zero. Two interrupts provide notification that a SETUP packet has arrived, as shown in Figure 2-2. Figure 2-2. Two Interrupts Associated with EP0 CONTROL Transfers SETUP Stage S A E C E D N R T D D C U R P 5 P Token Packet SUTOK Interrupt 38 D A T A 0 8 bytes Setup Data Data Packet C R C 1 6 A C K H/S Pkt SUDAV Interrupt SETUPDAT 8 RAM bytes The EZ-USB asserts the SUTOK (Setup Token) interrupt request when it detects the SETUP token at the beginning of a CONTROL transfer. This interrupt is normally used for debug only. The EZ-USB asserts the SUDAV (Setup Data Available) interrupt request when the eight bytes of SETUP data have been received error-free and transferred to the SETUPDAT buffer. The EZ-USB automatically takes care of any retries if it finds errors in the SETUP data. These two interrupt request bits must be cleared by firmware. Firmware responds to the SUDAV interrupt request by either directly inspecting the eight bytes at SETUPDAT or by transferring them to a local buffer for further processing. Servicing the SETUP data should be a high priority, since the USB Specification stipulates that CONTROL transfers must always be accepted and never NAK’d. It is possible, therefore, that a CONTROL transfer could arrive while the firmware is still servicing a previous one. In this case, the earlier CONTROL transfer service should be aborted and the new one serviced. The SUTOK interrupt gives advance warning that a new CONTROL transfer is about to overwrite the eight SETUPDAT bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero Figure 2-3. Registers Associated with EP0 Control Transfers Registers Associated with Endpoint Zero For handling SETUP transactions Initialization Data transfer SETUPDAT USBIE T A 8 Bytes of SETUP Data D Interrupt Enable: A=EP0 ACK T=Setup Token D=Setup Data EP0BCH 15 14 13 12 11 10 9 8 EP0BCL 7 6 5 4 3 2 1 0 SUDPTRH 15 14 13 12 11 10 9 8 SUDPTRL 7 6 5 4 3 2 1 0 Interrupt Control USBIRQ T A D Interrupt Request: A=EP0 ACK T=Setup Token D=Setup Data SUDPTRCTL A A=SDP Auto If the firmware stalls endpoint zero (by setting the STALL and HSNAK bits to 1), the EZ-USB automatically clears the stall bit when the next SETUP token arrives. device requests by decoding the eight bytes contained in the SETUP packet and available at SETUPDAT. Table 2-1 defines these eight bytes. Like all EZ-USB interrupt requests, the SUTOK and SUDAV bits can be directly tested and cleared by the firmware (cleared by writing ‘1’) even if their corresponding interrupts are disabled. Figure 2-3 shows the EZ-USB registers that are associated with CONTROL transactions over EP0. Table 2-1. The Eight Bytes in a USB SETUP Packet Byte Field Meaning 0 bmRequestType Request Type, Direction, and Recipient. 1 bRequest The actual request (see Table 2-2). These registers augment those associated with normal bulk transfers, which are described in the Access to Endpoint Buffers chapter on page 87. 2 wValueL 3 wValueH 4 wIndexL Two bits in the USBIE (USB Interrupt Enable) register enable the SETUP Token (SUTOK) and SETUP Data Available interrupts. The actual interrupt-request bits are in the USBIRQ (USB Interrupt Requests) register. 5 wIndexH 6 wLengthL 7 wLengthH 16-bit value, varies according to bRequest. 16-bit field, varies according to bRequest. The EZ-USB transfers the eight SETUP bytes into eight bytes of RAM at SETUPDAT. A 16-bit pointer, SUDPTRH:L, provides hardware assistance for handling CONTROL IN transfers, in particular the ‘Get Descriptor’ requests described later in this chapter. 2.3 USB Requests The Universal Serial Bus Specification Version 2.0, Chapter 9, USB Device Framework defines a set of Standard Device Requests. When the firmware is in control of endpoint zero (RENUM=1), the EZ-USB handles only one of these requests (Set Address) automatically; it relies on the firmware to support all of the others. The firmware acts on Number of bytes to transfer if there is a data phase. The Byte column in Table 2-1 shows the byte offset from SETUPDAT. The Field column shows the different bytes in the request, where the ‘bm’ prefix means bitmap, ‘b’ means byte [8 bits, 0-255], and ‘w’ means word [16 bits, 0-65535]. Table 2-2 shows the different values defined for bRequest, and how the firmware should respond to each request. The remainder of this chapter describes each of the requests in Table 2-2 in detail. Note Table 2-2 applies when RENUM = 1, signifying that the firmware, rather than the EZ-USB hardware, handles device requests. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 39 Endpoint Zero . Table 2-2. How the Firmware Handles USB Device Requests (RENUM =1) bRequest Name EZ-USB Action Firmware Response 0x00 Get Status SUDAV Interrupt Supply RemWU, SelfPwr or Stall Bits 0x01 Clear Feature SUDAV Interrupt Clear RemWU, SelfPwr or Stall Bits 0x02 (reserved) none Stall EP0 0x03 Set Feature SUDAV Interrupt Set RemWU, SelfPwr or Stall Bits 0x04 (reserved) none Stall EP0 0x05 Set Address Update FNADDR Register none 0x06 Get Descriptor SUDAV Interrupt Supply table data over EP0-IN 0x07 Set Descriptor SUDAV Interrupt Application dependent 0x08 Get Configuration SUDAV Interrupt Send current configuration number 0x09 Set Configuration SUDAV Interrupt Change current configuration 0x0A Get Interface SUDAV Interrupt Supply alternate setting No. from RAM 0x0B Set Interface SUDAV Interrupt Change alternate setting No. 0x0C Sync Frame SUDAV Interrupt Supply a frame number over EP0-IN Vendor Requests 0xA0 (Firmware Load) Upload / Download on-chip RAM --- 0xA1 to 0xAF SUDAV Interrupt Reserved by Cypress Semiconductor All except 0xA0 SUDAV Interrupt Application dependent In the ReNumerated condition (RENUM = 1), the EZ-USB passes all USB requests except Set Address to the firmware via the SUDAV interrupt. The EZ-USB implements one vendor-specific request: ‘Firmware Load,’ 0xA0 (the bRequest value of 0xA0 is valid only if byte 0 of the request, bmRequestType, is also ‘x10xxxxx,’ indicating a vendor-specific request.) The 0xA0 firmware load request may be used even after ReNumeration, but is only valid while the 8051 is held in reset. If your application implements vendor-specific USB requests, and you do not wish to use the Firmware Load feature, be sure to refrain from using the bRequest value 0xA0 for your custom requests. The Firmware Load feature is fully described in the Enumeration and ReNumeration™ chapter on page 51. To avoid future incompatibilities, vendor requests 0xA00xAF are reserved by Cypress Semiconductor. 40 2.3.1 Get Status The USB Specification defines three USB status requests. A fourth request, to an interface, is declared in the specification as ‘reserved’. The four status requests are: ■ Remote Wakeup (Device request) ■ Self-Powered (Device request) ■ Stall (Endpoint request) ■ Interface request (reserved) The EZ-USB automatically asserts the SUDAV interrupt to tell the firmware to decode the SETUP packet and supply the appropriate status information. As Figure 2-4 illustrates, the firmware responds to the SUDAV interrupt by decoding the eight bytes the EZ-USB has copied into RAM at SETUPDAT. The firmware answers a Get Status request (bRequest = 0) by loading two bytes into the EP0BUF buffer and loading the byte count register EP0BCH:L with the value 0x0002. The EZ-USB then transmits these two bytes in response to an IN token. Finally, the firmware clears the HSNAK bit (by writing ‘1’ to it), which instructs the EZ-USB to ACK the status stage of the transfer. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero Figure 2-4. Data Flow for a Get_Status Request SETUP Stage S A E C E D N R T D D C U R P 5 P Token Packet D A T A 0 C R C 1 6 8 bytes Setup Data Data Packet A C K SETUPDAT 8 RAM bytes H/S Pkt SUTOK Interrupt SUDAV Interrupt DATA Stage A I D N D R E N D P C R C 5 Token Packet D C A R 2 T C Bytes A 1 1 6 Data Packet A C K H/S Pkt IN0BUF 64-byte Buffer STATUS Stage A E O D N U D D T R P C R C 5 Token Packet D C A R T C A 1 1 6 Data Pkt A C K IN0BC 2 H/S Pkt The following tables show the eight SETUP bytes for Get Status Requests. ered bit indicates whether or not the device is self-powered (as opposed to USB bus-powered). Table 2-3. Get Status-Device (Remote Wakeup and SelfPowered Bits) The firmware returns these two bits by loading two bytes into EP0BUF, then loading a byte count of 0x0002 into EP0BCH:L. Byte Field Value 0 bmRequestType 0x80 IN, Device 1 bRequest 0x00 ‘Get Status’ 2 wValueL 0x00 3 wValueH 0x00 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL 0x02 7 wLengthH 0x00 Meaning Firmware Response Table 2-4. Get Status-Endpoint (Stall Bits) Byte Field Value 0 bmRequestType 0x82 IN, Endpoint 1 bRequest 0x00 ‘Get Status’ Byte 0: bit 1 = Remote Wakeup 2 wValueL 0x00 Byte 1: zero 3 wValueH 0x00 4 wIndexL EP 5 wIndexH 6 7 Load two bytes into EP0BUF: Byte 0: bit 0 = Self-Powered Two bytes requested Get Status-Device queries the state of two bits, ‘Remote Wakeup’ and ‘Self-Powered’. The Remote Wakeup bit indicates whether or not the device is currently enabled to request remote wakeup (remote wakeup is explained in the Power Management chapter on page 77). The Self-Pow- Meaning Firmware Response Load two bytes into EP0BUF: 0x00-0x08: OUT0-OUT8 Byte 0: bit 0 = Stall Bit for EP(n) 0x00 0x80-0x88: IN0-IN8 Byte 1: zero wLengthL 0x02 wLengthH 0x00 Two bytes requested Each endpoint has a STALL bit in its EPxCS register. If this bit is set, any request to the endpoint returns a STALL hand- EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 41 Endpoint Zero shake rather than ACK or NAK. The Get Status-Endpoint request returns the STALL state for the endpoint indicated in byte 4 of the request. Note that bit 7 of the endpoint number EP (byte 4) specifies direction (0 = OUT, 1 = IN). Endpoint zero is a CONTROL endpoint, which by USB definition is bidirectional. Therefore, it has only one stall bit. About STALL The USB STALL handshake indicates that something unexpected has happened. For instance, if the host requests an invalid alternate setting or attempts to send data to a nonexistent endpoint, the device responds with a STALL handshake over endpoint zero instead of ACK or NAK. Stalls are defined for all endpoint types except ISOCHRONOUS, which does not employ handshakes. Every EZ-USB bulk endpoint has its own stall bit. The firmware sets the stall condition for an endpoint by setting the STALL bit in the endpoint’s EPxCS register. The host tells the firmware to set or clear the stall condition for an endpoint using the Set Feature/Stall and Clear Feature/Stall requests. The device might also set the stall condition on its own. In a routine that handles endpoint zero device requests, for example, when a request that is not defined or not supported is decoded, the firmware should stall EP0. Once the firmware stalls an endpoint, it should not remove the stall until the host issues a Clear Feature/Stall request. An exception to this rule is endpoint 0, which reports a stall condition only for the current transaction and then automatically clears the stall condition. This prevents endpoint 0, the default CONTROL endpoint, from locking out device requests. Table 2-5. Get Status-Interface Meaning Firmware Response Byte Field Value 0 bmRequestType 0x81 IN, Endpoint 1 bRequest 0x00 ‘Get Status’ 2 wValueL 0x00 3 wValueH 0x00 Load two bytes into EP0BUF: 4 wIndexL 0x00 Byte 0: zero 5 wIndexH 0x00 6 wLengthL 0x02 7 wLengthH 0x00 2.3.2 Set Feature Set Feature is used to enable remote wakeup, stall an endpoint, or put the device into a specific test mode. No data stage is required. Table 2-6. Set Feature-Device (Set Remote Wakeup Bit) Byte Field Value Meaning 0 bmRequestType 0x00 OUT, Device 1 bRequest 0x03 ‘Set Feature’ 2 wValueL 0x01 3 wValueH 0x00 Feature Selector: Remote Wakeup 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL 0x00 7 wLengthH 0x00 Firmware Response Set the Remote Wakeup Bit This Set Feature/Device request sets the remote wakeup bit. This is the same bit reported back to the host as a result of a Get Status-Device request (Table 2-3 on page 41). The host uses this bit to enable or disable remote wakeup by the device. Table 2-7. Set Feature-Device (Set TEST_MODE Feature) Byte Field Value Meaning 0 bmRequestType 0x00 OUT, Device 1 bRequest 0x03 ‘Set Feature’ 2 wValueL 0x02 3 wValueH 0x00 Feature Selector: TEST_MODE 4 wIndexL 0x00 5 wIndexH 0xnn 6 wLengthL 0x00 7 wLengthH 0x00 Firmware Response ACK handshake phase nn = specific test mode This Set Feature/Device request sets the TEST_MODE feature. This request puts the device into a specific test mode, and power to the device must be cycled in order to exit test mode. The EZ-USB SIE handles this request automatically, but the firmware is responsible for acknowledging the handshake phase. Byte 1: zero Two bytes requested Get Status/Interface is easy: the firmware returns two zero bytes through EP0BUF and clears the HSNAK bit (by writing ‘1’ to it). The requested bytes are shown as ‘Reserved (reset to zero)’ in the USB Specification. 42 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero 2.3.3 Table 2-8. Set Feature-Endpoint (Stall) Byte Field Value Meaning 0 bmRequestType 0x02 OUT, Endpoint 1 bRequest 0x03 ‘Set Feature’ 2 wValueL 0x00 3 wValueH 0x00 Feature Selector: STALL 4 wIndexL EP 5 wIndexH 0x00 6 wLengthL 0x00 7 wLengthH 0x00 0x00-0x08: OUT0-OUT8 Firmware Response Set the STALL bit for the indicated endpoint. 0x80-0x88: IN0-IN8 The firmware should respond to the Set Feature/Stall request by performing the following tasks: 1. Set the STALL bit in the indicated endpoint’s EPxCS register. 2. Reset the data toggle for the indicated endpoint. 3. Restore the stalled endpoint to its default condition, ready to send or accept data after the stall condition is removed by the host (via a Clear Feature/Stall request). For EP1 IN, for example, firmware should clear the BUSY bit in the EP1CS register; for EP1OUT, firmware should load any value into the EP1 byte-count register. 4. Clear the HSNAK bit in the EP0CS register (by writing 1 to it) to terminate the Set Feature/Stall CONTROL transfer. Step 3 is also required whenever the host sends a ‘Set Interface’ request. Data Toggles The EZ-USB automatically maintains the endpoint toggle bits to ensure data integrity for USB transfers. Firmware should directly manipulate these bits only for a very limited set of circumstances: Set Feature/Stall ■ Set Configuration ■ Set Interface Clear Feature is used to disable remote wakeup or to clear a stalled endpoint. Table 2-9. Clear Feature-Device (Clear Remote Wakeup Bit) The only Set Feature/Endpoint request presently defined in the USB Specification is to stall an endpoint. The firmware should respond to this request by setting the STALL bit in the EPxCS register for the indicated endpoint EP (byte 4 of the request). The firmware can either stall an endpoint on its own or in response to the device request. Endpoint stalls are cleared by the host Clear Feature/Stall request. ■ Clear Feature Byte Field Value Meaning 0 bmRequestType 0x00 OUT, Device 1 bRequest 0x01 ‘Clear Feature’ 2 wValueL 0x01 3 wValueH 0x00 Feature Selector: Remote Wakeup 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL 0x00 7 wLengthH 0x00 Firmware Response Clear the remote wakeup bit. Table 2-10. Clear Feature-Endpoint (Clear Stall) Byte Field Value Meaning 0 bmRequestType 0x02 OUT, Endpoint 1 bRequest 0x01 ‘Clear Feature’ 2 wValueL 0x00 3 wValueH 0x00 Feature Selector: STALL 4 wIndexL EP 5 wIndexH 0x00 6 wLengthL 0x00 7 wLengthH 0x00 0x00-0x08: OUT0-OUT8 Firmware Response Clear the STALL bit for the indicated endpoint. 0x80-0x88: IN0-IN8 If the USB device supports remote wakeup (reported in its descriptor table when the device enumerates), the Clear Feature/Remote Wakeup request disables the wakeup capability. The Clear Feature/Stall removes the stall condition from an endpoint. The firmware should respond by clearing the STALL bit in the indicated endpoint’s EPxCS register. 2.3.4 Get Descriptor During enumeration, the host queries a USB device to learn its capabilities and requirements using Get Descriptor requests. Using tables of descriptors, the device sends back (over EP0-IN) such information as what device driver to load, how many endpoints it has, its different configurations, alternate settings it may use, and informative text strings about the device. The EZ-USB provides a special Setup Data Pointer to simplify firmware service for Get_Descriptor requests. The firmware loads this 16-bit pointer with the starting address of the requested descriptor, clears the HSNAK bit (by writing ‘1’ to it), and the EZ-USB transfers the entire descriptor. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 43 Endpoint Zero Figure 2-5. Using Setup Data Pointer (SUDPTR) for Get_Descriptor Requests SETUP Stage S A E C E D N R T D D C U R P 5 P Token Packet D A T A 0 8 bytes Setup Data C R C 1 6 Data Packet A C K SETUPDAT 8 RAM bytes H/S Pkt SUDAV Interrupt DATA Stage A I D N D R E N D P C R C 5 Token Packet D A T A 1 Payload Data Data Packet C R C 1 6 A C K H/S Pkt A I D N D R E N D P D A T A 0 C R C 5 Payload Data Data Packet Token Packet EP0IN Interrupt STATUS Stage A E O D N U D D T R P C R C 5 Token Packet A C K H/S Pkt EP0IN Interrupt SUDPTRH/L D C A R A T C C A 1 K 1 6 Data Pkt H/S Pkt 64 bytes 27 bytes Figure 2-5 illustrates use of the Setup Data Pointer. This pointer is implemented as two registers, SUDPTRH and SUDPTRL. The base address of SUDPTRH:L must be word-aligned. Most Get Descriptor requests involve transferring more data than fits into one packet. In the Figure 2-5 example, the descriptor data consists of 91 bytes. The CONTROL transaction starts in the usual way, with the EZ-USB automatically transferring the eight bytes from the SETUP packet into RAM at SETUPDAT, then asserting the SUDAV interrupt request. The firmware decodes the Get Descriptor request, and responds by clearing the HSNAK bit (by writing ‘1’ to it), and then loading the SUDPTRH:L registers with the address of the requested descriptor. Loading the SUDPTRL register causes the EZ-USB to automatically respond to two IN transfers with 64 bytes and 27 bytes of data using SUDPTRH:L as a base address, and then to respond to the STATUS stage with an ACK. The usual endpoint-zero interrupts SUDAV and EP0IN remain active during this automated transfer, so firmware normally disables these interrupts because the transfer requires no firmware intervention. 44 C R C 1 6 Three types of descriptors are defined: Device, Configuration, and String. 2.3.4.1 Get Descriptor-Device Table 2-11. Get Descriptor-Device Byte Field Value Meaning 0 bmRequestType 0x80 IN, Device 1 bRequest 0x06 ‘Get Descriptor’ 2 wValueL 0x00 3 wValueH 0x01 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH Descriptor Type: Device Firmware Response Set SUDPTR H:L to start of Device Descriptor table in RAM. As illustrated in Figure 2-5 on page 44, the firmware loads the two-byte SUDPTRH:L with the starting address of the Device Descriptor table. The start address needs to be EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero word-aligned. When SUDPTRL is loaded, the EZ-USB automatically performs the following operations: 2.3.4.2 Get Descriptor-Device Qualifier 1. Reads the requested number of bytes for the transfer from bytes 6 and 7 of the SETUP packet (LenL and LenH in Table 2-11). Table 2-12. Get Descriptor-Device Qualifier Byte Field Value 2. Reads the requested descriptor’s length field to determine the actual descriptor length. 0 bmRequestType 0x80 IN, Device 1 bRequest 0x06 ‘Get Descriptor’ 3. Sends the smaller of (a) the requested number of bytes or (b) the actual number of bytes in the descriptor, over EP0BUF using the Setup Data Pointer as a data table index. This constitutes the second phase of the threephase CONTROL transfer. The EZ-USB packetizes the data into multiple data transfers as necessary. 2 wValueL 0x00 3 wValueH 0x06 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH 4. Automatically checks for errors and re-transmits data packets if necessary. 5. Responds to the third (handshake) phase of the CONTROL transfer to terminate the operation. The Setup Data Pointer can be used for any Get Descriptor request (for example, Get Descriptor-String). It can also be used for vendor-specific requests. If bytes six and seven of those requests contain the number of bytes in the transfer (see Step 1, above), the Setup Data Pointer works automatically, as it does for Get Descriptor requests; if bytes six and seven do not contain the length of the transfer, the length can be loaded explicitly (see the SDPAUTO paragraphs of section 8.7 The Setup Data Pointer on page 95). It is possible for the firmware to do manual CONTROL transfers by directly loading the EP0BUF buffer with the various packets and keeping track of which SETUP phase is in effect. This is a good USB training exercise, but not necessary due to the hardware support built into the EZ-USB for CONTROL transfers. For DATA stage transfers of fewer than 64 bytes, moving the data into the EP0BUF buffer and then loading the EP0BCH:L registers with the byte count would be equivalent to loading the Setup Data Pointer. However, this would waste bandwidth because it requires byte transfers into the EP0BUF Buffer; using the Setup Data Pointer does not. Meaning Descriptor Type: Device Qualifier Firmware Response Set SUDPTR H:L to start of the appropriate Device Qualifier Descriptor table in RAM. The Device Qualifier descriptor is used only by devices capable of high-speed (480 Mbps) operation; it describes information about the device that would change if the device were operating at the other speed (for example, if the device is currently operating at high speed, the device qualifier returns information about how it would operate at full speed and vice-versa). Device Qualifier descriptors are handled just like Device descriptors; the firmware loads the appropriate descriptor address (must be word-aligned) into SUDPTRH:L, then the EZ-USB does the rest. 2.3.4.3 Get Descriptor-Configuration Table 2-13. Get Descriptor-Configuration Byte Field Value 0 bmRequestType 0x80 IN, Device 1 bRequest 0x06 ‘Get Descriptor’ 2 wValueL CFG Configuration Number 3 wValueH 0x02 Descriptor Type: Configuration 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Meaning Firmware Response Set SUDPTR H:L to start of Configuration Descriptor table in RAM 45 Endpoint Zero 2.3.4.4 2.3.5 Get Descriptor-String Table 2-14. Get Descriptor-String Byte Field Value Meaning 0 bmRequestType 0x80 1 bRequest 0x06 2 wValueL STR String Number 3 wValueH 0x03 Descriptor Type: String 4 wIndexL 0x00 (Language ID L) 5 wIndexH 0x00 (Language ID H) 6 wLengthL LenL 7 wLengthH LenH Table 2-16. Set Descriptor-Device Firmware Response Byte Field Value IN, Device 0 bmRequestType 0x00 OUT, Device ‘Get Descriptor’ 1 bRequest 0x07 ‘Set Descriptor’ 2 wValueL 0x00 3 wValueH 0x01 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH Set SUDPTR H:L to start of String Descriptor table in RAM. Configuration and String descriptors are handled similarly to Device descriptors. The firmware reads byte 2 of the SETUP data to determine which configuration or string is being requested, then loads the corresponding descriptor address (must be word-aligned) into SUDPTRH:L. The EZ-USB does the rest. 2.3.4.5 Get Descriptor-Other Speed Configuration Table 2-15. Get Descriptor-Other Speed Configuration Byte Field Value 0 bmRequestType 0x80 IN, Device 1 bRequest 0x06 ‘Get Descriptor’ 2 wValueL CFG Other Speed Configuration Number 3 wValueH 0x07 Meaning Descriptor Type: Other Speed Configuration 4 wIndexL 0x00 (Language ID L) 5 wIndexH 0x00 (Language ID H) 6 wLengthL LenL 7 wLengthH LenH Firmware Response Meaning Descriptor Type: Device Firmware Response Read device descriptor data over EP0BUF. Table 2-17. Set Descriptor-Configuration Byte Field Value 0 bmRequestType 0x00 OUT, Device ‘Set Descriptor’ 1 bRequest 0x07 2 wValueL 0x00 3 wValueH 0x02 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH Meaning Descriptor Type: Configuration Firmware Response Read configuration descriptor data over EP0BUF. Table 2-18. Set Descriptor-String Set SUDPTR H:L to start of Other Speed Configuration Descriptor table in RAM. The Other Speed Configuration descriptor is used only by devices capable of high-speed (480 Mbps) operation; it describes the configurations of the device if it were operating at the other speed (that is, if the device is currently operating at high speed, the Other Speed Configuration returns information about full-speed configuration and vice-versa). Other Speed Configuration descriptors are handled just like Configuration descriptors; the firmware loads the appropriate descriptor address (must be word-aligned) into SUDPTRH:L, then the EZ-USB does the rest. 46 Set Descriptor Byte Field Value Meaning 0 bmRequestType 0x00 IN, Device 1 bRequest 0x07 ‘Set Descriptor’ 2 wValueL 0x00 String Number 3 wValueH 0x03 Descriptor Type: String 4 wIndexL 0x00 (Language ID L) 5 wIndexH 0x00 (Language ID H) 6 wLengthL LenL 7 wLengthH LenH Firmware Response Read string descriptor data over EP0BUF. The firmware handles Set Descriptor requests by clearing the HSNAK bit (by writing ‘1’ to it), then reading descriptor data directly from the EP0BUF buffer. The EZ-USB keeps track of the number of byes transferred from the host into EP0BUF, and compares this number with the length field in bytes six and seven. When the proper number of bytes has been transferred, the EZ-USB automatically responds to the STATUS phase, which is the third and final stage of the CONTROL transfer. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero Note The firmware controls the flow of data in the Data Stage of a Control Transfer. After the firmware processes each OUT packet, it writes any value into the endpoint’s byte count register to re-arm the endpoint. Configurations, Interfaces, and Alternate Settings A USB device has one or more configurations. Only one configuration is active at any time. 2.3.5.1 Set Configuration Table 2-19. Set Configuration Byte Field Value Meaning 0 bmRequestType 0x00 OUT, Device 1 bRequest 0x09 ‘Set Configuration’ A configuration has one or more interfaces, all of which are concurrently active. Multiple interfaces allow different hostside device drivers to be associated with different portions of a USB device. 2 wValueL CFG Configuration Number 3 wValueH 0x00 4 wIndexL 0x00 5 wIndexH 0x00 Each interface has one or more alternate settings. Each alternate setting has a collection of one or more endpoints. 6 wLengthL 0x00 7 wLengthH 0x00 This structure is a software model; the EZ-USB takes no action when these settings change. However, the firmware must re-initialize endpointsand reset the dat toggle when the host changes configurations or interfaces alternate settings. As far as the firmware is concerned, a ‘configuration’ is simply a byte variable that indicates the current setting. The host issues a ‘Set Configuration’ request to select a configuration, and a ‘Get Configuration’ request to determine the current configuration. Note After setting a configuration, the host issues Set Interface commands to set up the various interfaces contained in the configuration. Alt Setting 0 Interface 1 audio Config 2 Low Power Interface 3 data storage Interface 2 video Alt Setting 1 Alt Setting 3 ep ep Get Configuration Table 2-20. Get Configuration Device Interface 0 CDROM control Read and store CFG, change configurations in firmware. When the host issues the ‘Set Configuration’ request, the firmware saves the configuration number (byte 2, CFG, in Table 2-19), performs any internal operations necessary to support the configuration, and finally clears the HSNAK bit (by writing ‘1’ to it) to terminate the ‘Set Configuration’ CONTROL transfer. 2.3.6 Config 1 High Power Firmware Response One at a time Concurrent One at a time ep Byte Field Value Meaning 0 bmRequestType 0x80 IN, Device 0x08 ‘Get Configuration’ 1 bRequest 2 wValueL 0x00 3 wValueH 0x00 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL 1 LenL 7 wLengthH 0 LenH Firmware Response Send CFG over EP0 after reconfiguring. When the host issues the ‘Get Configuration’ request, the firmware returns the current configuration number. It loads the configuration number into EP0BUF, loads a byte count of one into EP0BCH:L, and finally clears the HSHAK bit (by writing ‘1’ to it) to terminate the ‘Set Configuration’ CONTROL transfer. 2.3.7 Set Interface This confusingly-named USB command actually sets ‘alternate settings’ for a specified interface. USB devices can have multiple concurrent interfaces. For example, a device may have an audio system that supports EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 47 Endpoint Zero different sample rates, and a graphic control panel that supports different languages. Each interface has a collection of endpoints. Except for endpoint 0, which each interface uses for device control, endpoints may not be shared between interfaces. Interfaces may report alternate settings in their descriptors. For example, the audio interface may have settings ‘0’, ‘1’, and ‘2’ for 8-kHz, 22-kHz, and 44-kHz sample rates, respectively. The panel interface may have settings ‘0’ and ‘1’ for English and Spanish, respectively. The Set/Get Interface requests select among the various alternate settings in an interface. Table 2-21. Set Interface (Actually, Set Alternate Setting #AS for Interface #IF) Byte Field Value Meaning 0 bmRequestType 0x00 OUT, Device 1 bRequest 0x0B ‘Set Interface’ 2 wValueL AS 3 wValueH 0x00 4 wIndexL IF 5 wIndexH 0x00 6 wLengthL 0x00 7 wLengthH 0x00 Alternate Setting Number Interface Number Firmware Response Read and store byte 2 (AS) for Interface #IF, change setting for Interface #IF in firmware. The firmware should respond to a Set Interface request by performing the following steps: 1. Perform the internal operation requested (such as adjusting a sampling rate). 2. Reset the data toggles for every endpoint in the interface. 3. Restore the endpoints to their default conditions, ready to send or accept data. For EP1 IN, for example, firmware should clear the BUSY bit in the EP1CS register; for EP1OUT, firmware should load any value into the EP1 byte-count register. 2.3.8 Get Interface Table 2-22. Get Interface (Actually, Get Alternate Setting #AS for interface #IF) Byte Field Value Meaning 0 bmRequestType 0x81 IN, Device 1 bRequest 0x0A ‘Get Interface’ 2 wValueL 0x00 3 wValueH 0x00 4 wIndexL IF 5 wIndexH 0x00 6 wLengthL 1 LenL 7 wLengthH 0 LenH Interface Number Firmware Response Send AS for Interface #IF over EP0. When the host issues the Get Interface request, the firmware simply returns the alternate setting for the requested interface IF and clears the HSNAK bit (by writing ‘1’ to it). 2.3.9 Set Address When a USB device is first plugged in, it responds to device address 0 until the host assigns it a unique address using the Set Address request. The EZ-USB copies this device address into the FNADDR (Function Address) register, then subsequently responds only to requests to this address. This address is in effect until the USB device is unplugged, the host issues a USB Reset, or the host powers down. The FNADDR register is read-only. Whenever the EZ-USB ReNumerates™ (see Enumeration and ReNumeration™, on page 51), it automatically resets FNADDR to zero, allowing the device to come back as new. An EZ-USB program does not need to know the device address, because the EZ-USB automatically responds only to the host-assigned FNADDR value. The device address is readable only for debug/diagnostic purposes. 4. Clear the HSNAK bit (by writing ‘1’ to it) to terminate the Set Interface CONTROL transfer. 48 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Endpoint Zero 2.3.10 Sync Frame 2.3.11 Table 2-23. Sync Frame Byte Field Value Meaning 0 bmRequestType 0x82 IN, Endpoint 1 bRequest 0x0C ‘Sync Frame’ 2 wValueL 0x00 3 wValueH 0x00 4 wIndexL EP 5 wIndexH 0x00 6 wLengthL 2 LenL 7 wLengthH 0 LenH Endpoint number Firmware Response Send a frame number over EP0 to synchronize endpoint #EP The ‘Sync Frame’ request is used to establish a marker in time so the host and USB device can synchronize multiframe transfers over isochronous endpoints. Suppose an isochronous transmission consists of a repeating sequence of five 300-byte packets transmitted from host to device over EP8-OUT. Both host and device maintain sequence counters that count repeatedly from 1 to 5 to keep track of the packets inside a transmission. To start up in sync, both host and device need to reset their counts to ‘0’ at the same time (in the same frame). To get in sync, the host issues the Sync Frame request with EP=EP8OUT (0x08). The firmware responds by loading EP0BUF with a two-byte frame count for some future time; for example, the current frame plus 20. This marks frame ‘current+20’ as the sync frame, during which both sides initialize their sequence counters to ‘0.’ The current frame count is always available in the USBFRAMEL and USBFRAMEH registers. Multiple isochronous endpoints can be synchronized in this manner; the firmware can keep a separate internal sequence count for each endpoint. About USB Frames In full-speed mode (12 Mbps), the USB host issues an SOF (Start Of Frame) packet once every millisecond. Every SOF packet contains an 11-bit (mod-2048) frame number. The firmware services all isochronous transfers at SOF time, using a single SOF interrupt request and vector. If the EZ-USB detects a missing or garbled SOF packet, it can use an internal counter to generate the SOF interrupt automatically. In high-speed mode (480 Mbps), each frame is divided into eight 125-microsecond microframes. Although the frame counter still increments only once per frame, the host issues an SOF every microframe. The host and device always synchronize on the zero-th microframe of the frame specified in the device’s response to the Sync Frame request; there is no mechanism for synchronizing on any other microframe. Firmware Load The USB endpoint-zero protocol provides a mechanism for mixing vendor-specific requests with standard device requests. Bits 6:5 of the bmRequestType field are set to 00 for a standard device request and to 10 for a vendor request. Table 2-24. Firmware Download Byte Field Value Meaning 0 bmRequestType 0x40 Vendor Request, OUT 1 bRequest 0xA0 ‘Firmware Load’ 2 wValueL Addr L Starting address 3 wValueH Addr H 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH Firmware Response None required. Number of bytes Table 2-25. Firmware Upload Byte Field Value Meaning 0 bmRequestType 0xC0 Vendor Request, IN 1 bRequest 0xA0 ‘Firmware Load’ 2 wValueL Addr L Starting address 3 wValueH Addr H 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH Firmware Response None Required. Number of Bytes The EZ-USB responds to two endpoint-zero vendor requests, RAM Download and RAM Upload. These requests are active whether RENUM=0 or RENUM=1, but can only occur while the 8051 is held in reset. RAM Uploads can only occur on word boundaries (i.e. the start address must be evenly divisible by two). The same restriction does not apply to RAM Downloads. Because bit 7 of the first byte of the SETUP packet specifies direction, only one bRequest value (0xA0) is required for the upload and download requests. These RAM load commands are available to any USB device that uses the EZUSB chip. A host loader program must write 0x01 to the CPUCS register to put the EZ-USB’s CPU into RESET, load all or part of the EZ-USB’s internal RAM with code, then reload the CPUCS register with zero to take the CPU out of RESET. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 49 Endpoint Zero 50 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 3. Enumeration and ReNumeration™ 3.1 Introduction The EZ-USB’s configuration is ‘soft’: Code and data are stored in internal RAM, which can be loaded from the host over the USB interface. EZ-USB-based USB peripherals can operate without ROM, EPROM, or FLASH memory, shortening production lead times and making firmware updates extremely simple. To support this soft configuration, the EZ-USB is capable of enumerating as a USB device without firmware. This automatically-enumerated USB device (the Default USB Device) contains a set of interfaces and endpoints and can accept firmware downloaded from the host. However, at a minimum, an I2C™ boot EEPROM is required for production (see 3.2 EZUSB Startup Modes for more details). Note For the FX2LP, two separate Default USB Devices actually exist, one for enumeration as a full-speed (12 Mbps) device, and the other for enumeration as a high-speed (480 Mbps) device. The FX2LP automatically performs the speed-detect protocol and chooses the proper Default USB Device. The two sets of Default USB Device descriptors are shown in Appendices A and B. Once the Default USB Device enumerates and the host downloads firmware and descriptor tables to the EZ-USB, it then begins executing the downloaded code, which electrically simulates a physical disconnect/connect from the USB and causes the EZ-USB to enumerate again as a second device, this time taking on the USB personality defined by the downloaded code and descriptors. This patented secondary enumeration process is called ‘ReNumeration™’. An EZ-USB register bit called RENUM controls whether device requests over endpoint zero are handled by firmware or automatically b y the Default USB Device. When RENUM = 0, the Default USB Device handles the requests automatically; when RENUM = 1, they must be handled by firmware. 3.2 EZ-USB Startup Modes When the EZ-USB comes out of reset, it can act in various ways to establish itself as a USB device. EZ-USB power-on behavior depends on several factors: 1. If no off chip memory (either on the I2C bus or on the address/data bus) is connected to the EZ-USB, it enumerates as the Default USB Device, with descriptors and VID/PID/DID supplied by hardwired internal logic (Table 3-3 on page 52). RENUM is set to ‘0’, indicating that the Default USB Device automatically handles device requests. This startup mode is not allowed for production devices, since it uses the Cypress VID, and is detailed here for completeness only. 2. If an EEPROM containing custom VID/PID/DID values is attached to the EZ-USB’s I2C bus, EZ-USB also enumerates as the Default USB Device as above, but it substitutes the VID/PID/DID values from the EEPROM for its internal values. The EEPROM must contain the value 0xC0 in its first byte to indicate this mode to EZ-USB, so this mode is called a ‘C0 Load’. As above, RENUM is automatically set to ‘0’, indicating that the Default USB Device automatically handles device requests. A 16 byte EEPROM is sufficiently large for a C0 Load. A C0 Load is often used to automate downloading firmware via USB. 3. If an EEPROM containing EZ-USB firmware is attached to the I2C bus, the firmware is automatically loaded from the EEPROM into the EZ-USB’s on chip RAM, and then the CPU is taken out of reset to execute this boot-loaded code. In this case, the VID/PID/DID values are encapsulated in the firmware; the RENUM bit is automatically set to ‘1’ to indicate that the firmware, not the Default USB Device, handles device requests. The EEPROM must contain the value 0xC2 in its first byte to indicate this mode to EZ-USB, so this mode is called a ‘C2 Load’. Note Although the EZ-USB can perform C2 Loads from EEPROMs as large as 64 KB, code can only be downloaded to the 16K of on chip RAM. Using bootloader firmware allows download to external RAM. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 51 Enumeration and ReNumeration™ 4. If a Flash, EPROM, or other memory is attached to the EZ-USB’s address/data bus (128-pin package only) and a properly formatted EEPROM meeting the requirements above is not present, and the EA pin is tied high (indicating that the EZ-USB starts code execution at 0x0000 from off-chip memory), the EZ-USB begins executing firmware from the off chip memory. In this case, the VID/PID/DID values are encapsulated in the firmware; the RENUM bit is automatically set to ‘1’ to indicate that the firmware, not internal EZ-USB logic, handles device requests. Case (2) is the most frequently used mode when soft operation is desired, since the VID/PID values from EEPROM always bind the device to the appropriate host driver while allowing EZ-USB firmware to be easily updated. In this case, the host first holds the CPU in reset, uses the EZ-USB Default USB Device to download firmware, then the host takes the CPU out of reset so that it can execute the downloaded code. Section 3.8 EZ-USB Vendor Request for Firmware Load on page 56 describes the USB ‘Vendor Request’ that the EZ-USB supports for code download and upload. Table 3-2. Default High Speed Alternate Settings Alternate Setting 0 1 2 3 ep0 64 64 64 64 ep1out 0 512 bulk 64 int 64 int ep1in 0 512 bulk 64 int 64 int ep2 0 512 bulk out (2x) 512 int out (2x) 512 iso out (2x) ep4 0 512 bulk out (2x) 512 bulk out (2x) 512 bulk out (2x) ep6 0 512 bulk in (2x) 512 int in (2x) 512 iso in (2x) ep8 0 512 bulk in (2x) 512 bulk in (2x) 512 bulk in (2x) Note: ‘0’ means ‘not implemented’, ‘2x’ means double buffered. Note Although the physical size of the EP1 endpoint buffer is 64 bytes, it is reported as a 512 byte buffer for high speed alternate setting 1. This maintains compatibility with the USB specification, which allows only 512 byte bulk endpoints. If you use this default alternate setting, do not send/receive EP1 packets larger than 64 bytes. Note The Default USB Device is fully characterized in Appendices A and B, which list the built-in EZ-USB descriptor tables for full-speed and high-speed enumeration, respectively. Studying these Appendices in conjunction with Table 3-1 and Table 3-2 is an excellent way to learn the structure of USB descriptors. 3.4 3.3 ■ No EEPROM, or EEPROM with invalid boot data ■ ‘C0’ EEPROM (load custom VID / PID / DID only) ■ ‘C2’ EEPROM (load firmware to on-chip RAM) The Default USB Device The Default USB Device consists of a single USB configuration containing one interface (interface 0) and alternate settings 0, 1, 2 and 3. The endpoints and MaxPacketSizes reported for this device are shown in Table 3-1 (full speed) and Table 3-2 (high speed). Note that alternate setting zero consumes no interrupt or isochronous bandwidth, as recommended by the USB Specification. Table 3-1. Default Full Speed Alternate Settings Alternate Setting 0 1 2 3 This section describes three EEPROM boot-load scenarios and the EEPROM data formats that support them. The three scenarios are: 3.4.1 No EEPROM or Invalid EEPROM In the simplest scenario, either no serial EEPROM is present on the ICbus or an EEPROM is present, but its first byte is neither 0xC0 nor 0xC2. In this case, descriptor data is supplied by hardwired internal EZ-USB tables. The EZ-USB enumerates as the Default USB Device, with the ID bytes shown in Table 3-3 or Table 3-4. Note Pull up resistors are required on the SCL/SDA pins even if no device is connected. The resistors are required to allow EZ-USB logic to detect the ‘No EEPROM / Invalid EEPROM’ condition. ep0 64 64 64 64 ep1out 0 64 bulk 64 int 64 int ep1in 0 64 bulk 64 int 64 int ep2 0 64 bulk out (2x) 64 int out (2x) 64 iso out (2x) ep4 0 64 bulk out (2x) 64 bulk out (2x) 64 bulk out (2x) ep6 0 64 bulk in (2x) 64 int in (2x) 64 iso in (2x) ep8 0 64 bulk in (2x) 64 bulk in (2x) 64 bulk in (2x) Note: ‘0’ means ‘not implemented’, ‘2x’ means double buffered. EEPROM Boot-load Data Formats Table 3-3. Default ID Values for EZ-USB FX2LP, No EEPROM / Invalid EEPROM Vendor ID 0x04B4 (Cypress Semiconductor) Product ID 0x8613 (EZ-USB FX2LP) Device Release 52 0xAnnn (depends on chip revision, nnn = chip revision, where first silicon = 001) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Enumeration and ReNumeration™ Table 3-4. Default ID Values for EZ-USB FX1, No EEPROM / Invalid EEPROM Vendor ID 0x04B4 (Cypress Semiconductor) Product ID 0x6473 (EZ-USB FX1) Device Release 0xAnnn (depends on chip revision, nnn = chip revision, where first silicon = 001) The USB host queries the EZ-USB Default USB Device during enumeration, reads its device descriptor, and uses the IDs in Table 3-3 or Table 3-4 to determine which software driver to load into the operating system. This is a major USB feature — drivers are dynamically matched with devices and automatically loaded when a device is plugged in. The ‘No EEPROM / Invalid EEPROM’ scenario is the simplest configuration, and also the most limiting. This configuration must only be used for code development, using Cypress software tools matched to the ID values in Table 3-3 or Table 3-4. Note No USB peripheral based on the EZ-USB FX2LP or EZ-USB FX1 may use this configuration. 3.4.2 The eighth EEPROM byte contains configuration bits that control the following: ■ I2C bus speed. Note Default is 100 kHz. ■ Disconnect state. Note Default is for EZ-USB to come out of reset connected to USB. Note Section EEPROM Configuration Byte, on page 55 contains a full description of the configuration bits. 3.4.3 If, at power-on reset, the EZ-USB detects an EEPROM connected to its I 2C with the value 0xC2 at address zero, the EZ-USB loads the EEPROM data into on-chip RAM. It also sets the RENUM bit to ‘1’, causing device requests to be handled by the firmware instead of the Default USB Device. The ‘C2 Load’ EEPROM data format is shown in Table 3-6. Table 3-6. ‘C2 Load’ Format EEPROM Address Serial EEPROM Present, First Byte is 0xC0 Table 3-5. ‘C0 Load’ Format EEPROM Address Serial EEPROM Present, First Byte is 0xC2 Contents Contents 0 0xC2 1 Vendor ID (VID) L 2 Vendor ID (VID) H 3 Product ID (PID) L 4 Product ID (PID) H 5 Device ID (DID) L 6 Device ID (DID) H 0 0xC0 7 Configuration byte 1 Vendor ID (VID) L 8 Length H 2 Vendor ID (VID) H 9 Length L 3 Product ID (PID) L 10 Start Address H 4 Product ID (PID) H 11 Start Address L 5 Device ID (DID) L --- Data Block 6 Device ID (DID) H --- 7 Configuration byte --- Length H --- Length L --- Start Address H --- Start Address L --- Data Block If, at power-on reset, the EZ-USB detects an EEPROM connected to its I 2C bus with the value 0xC0 at address 0, the EZ-USB automatically copies the Vendor ID (VID), Product ID (PID), and Device ID (DID) from the EEPROM (Table 3-5) into internal storage. The EZ-USB then supplies these EEPROM bytes to the host as part of its response to the host’s Get Descriptor-Device request (these six bytes replace only the VID / PID / DID bytes in the Default USB Device descriptor). This causes a host driver matched to the VID / PID / DID values in the EEPROM to be loaded by the host OS. After initial enumeration, that host driver holds the CPU in reset, downloads the firmware and USB descriptor data into the EZ-USB’s RAM, then releases the CPU reset. The EZUSB then ReNumerates™ as a custom device. At that point, the host may load a new driver, bound to the VID / PID / DID contained in the firmware. ----- 0x80 --- 0x01 --- 0xE6 --- 0x00 last 00000000 The first byte indicates a ‘C2 Load’, which instructs the EZUSB to copy the EEPROM data into on-chip RAM. The EZUSB reads the next six bytes (VID / PID / DID) even though they are not used by most C2 Load applications. The eighth byte (byte 7) is the configuration byte described in the previous section. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 53 Enumeration and ReNumeration™ Note Bytes 1-6 of a C2 EEPROM can be loaded with VID / PID / DID bytes if it is desired at some point to run the firmware with RENUM = 0 (i.e., EZ-USB logic handles device requests), using the EEPROM VID / PID / DID rather than the development-only VID / PID / DID values shown in Table 3-3 on page 52 or Table 3-4 on page 53. One or more data records follow, starting at EEPROM address 8. Each data record consists of a 10-bit Length field (0-1023) which indicates the number of bytes in the following data block, a 14-bit Start Address (0-0x3FFF) for the data block, and the data block itself. The last data record, which must always consist of a singlebyte load of 0x00 to the CPUCS register at 0xE600, is marked with a ‘1’ in the most-significant bit of the Length field. Only the least-significant bit (8051RES) of this byte is writable by the download; that bit is set to zero to bring the CPU out of reset. 54 Note Serial EEPROM data can be loaded only into these three on-chip RAM spaces: ■ Program/Data RAM at 0x0000-0x3FFF ■ Data RAM at 0xE000-0xE1FF ■ The CPUCS register at 0xE600 (only bit 0, 8051RES, is EEPROM loadable) 3.4.3.1 General Purpose Use of the I2CBus The EZ-USB’s I2C controller serves two purposes. First, as described in this chapter, it manages the serial EEPROM interface that operates automatically at power-on to determine the enumeration method. Second, once the CPU is up and running, firmware can access the I2C controller for general-purpose use. This makes a wide range of standard I2C peripherals available to an EZ-USB-based system. Other I2C devices can be attached to the SCL and SDA lines as long as there is no address conflict with the serial EEPROM described in this chapter. The Input/ Output chapter on page 181 describes the general-purpose nature of the I2C interface. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Enumeration and ReNumeration™ 3.5 EEPROM Configuration Byte The configuration byte is valid for both EEPROM load formats (C0 and C2) and has the following format: Figure 3-1. EEPROM Configuration Byte Configuration Bit b7 b6 b5 b4 b3 b2 b1 b0 0 DISCON 0 0 0 0 0 400KHZ Name 7 Description The config byte of the .iic file must be changed so that the FX2 will start at full speed. The uVision project file contains the following iic generation line: c:\cypress\usb\bin\hex2bix -c 0x80 -i -f 0xC2 -o bulkloop.iic bulkloop.hex This line sets bit 7 of the config byte with the “-c 0x80”. Setting bit 7 prevents the FX2 from entering high-speed mode on startup. 6 DISCON (USB Disconnect) A USB hub or host detects attachment of a full speed device by sensing a high level on the D+ wire. A USB device provides this high level using a 1500-ohm resistor between D+ and 3.3V (the D+ line is normally low, pulled down by a 15 K resistor in the hub or host). The 1500 resistor is internal to the EZ-USB. The EZ-USB accomplishes ReNumeration by selectively driving or floating the 3.3V supply to its internal 1500 resistor. When the supply is floated, the host no longer ‘sees’ the EZ-USB; it appears to have been disconnected from the USB. When the supply is then driven, the EZ-USB appears to have been newly connected to the USB. From the host’s point of view, the EZ-USB can be disconnected and reconnected to the USB, without ever physically disconnecting. The ‘connect state’ of EZ-USB is controlled by a register bit called DISCON (USBCS.3), which defaults to 0, or ‘connected’. This default may be overridden by setting the DISCON bit in the EEPROM configuration byte to 1, which allows the EZ-USB to come up ‘disconnected’. The EZ-USB core sees that this DISCON bit is set, and sets the USBCS.3 bit before the CPU is taken out of reset. The DISCON bit in the EEPROM configuration byte cannot be used to instruct the EZ-USB to connect to the USB bus. Once the CPU is running, firmware can modify this bit. 0 400KHZ (I2C bus speed) 0 1 100 kHz 400 kHz If 400KHZ = 0, the I2C bus operates at approximately 100 kHz. If 400KHZ = 1, the I2C bus operates at approximately 400 kHz. This bit is copied to I2CTL.0, whose default value is ‘0’, or 100 kHz. Once the CPU is running, firmware can modify this bit. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 55 Enumeration and ReNumeration™ 3.6 The RENUM Bit Table 3-7. How the Default USB Device Handles EP0 Requests When RENUM=0 An EZ-USB control bit called ‘RENUM’ (ReNumerated) determines whether USB device requests over endpoint zero are handled by the Default USB Device or by EZ-USB firmware. At power-on reset, the RENUM bit (USBCS.1) is zero, indicating that the Default USB Device automatically handles USB device requests. Once firmware has been downloaded to the EZ-USB and the CPU is running, it can set RENUM = 1 so that subsequent device requests are handled by the downloaded firmware and descriptor tables. The Endpoint Zero chapter on page 37 describes how the firmware handles device requests while RENUM = 1. If a 128-pin EZ-USB is using off-chip code memory at 0x0000, the EA pin is high, and there is no boot EEPROM to supply a custom Vendor ID and Product ID, the EZ-USB automatically sets the RENUM bit to ‘1’ so that device requests are always handled by the firmware and descriptor tables in the off-chip memory. The EZ-USB also sets RENUM = 1 after a ‘C2 load’ if the EA pin is low. In this case, firmware execution begins in on-chip RAM using the code loaded from the EEPROM, with the firmware handling all USB requests. Another Use for the Default USB Device The Default USB Device is established at power on to set up a USB device capable of downloading firmware into the EZ-USB’s RAM. Another useful feature of the Default USB Device is that EZ-USB code can be written to support the already-configured generic USB device. Before bringing the CPU out of reset, the EZ-USB automatically enables certain endpoints and reports them to the host via descriptors. By using the Default USB Device (for example, by keeping RENUM = 0), the firmware can, with very little code, perform meaningful USB transfers that use these preconfigured endpoints. This accelerates the USB learning curve. 3.7 EZ-USB Response to Device Requests (RENUM = 0) Table 3-7 shows how the Default USB Device responds to endpoint zero device requests when RENUM=0. Table 3-7. How the Default USB Device Handles EP0 Requests When RENUM=0 bRequest 56 Name EZ-USB Response 0x00 Get Status-Device Returns two zero bytes 0x00 Get Status-Endpoint Supplies EP Stall bit for indicated EP 0x00 Get Status-Interface Returns two zero bytes 0x01 Clear Feature-Device None 0x01 Clear Feature-Endpoint Clears Stall bit for indicated EP 0x02 (reserved) bRequest Name EZ-USB Response 0x03 Set Feature Device Sets TEST_MODE feature 0x03 Set Feature Endpoint Sets Stall bit for indicated EP 0x04 (reserved) None 0x05 Set Address Updates FNADDR register 0x06 Get Descriptor Supplies internal table 0x07 Set Descriptor None 0x08 Get Configuration Returns internal value 0x09 Set Configuration Sets internal value 0x0A Get Interface Returns internal value (0-3) 0x0B Set Interface Sets internal value (0-3) 0x0C Sync Frame None Vendor Requests 0xA0 0xA1-0xAF all other Firmware Load Upload/Download on-chip RAM Reserved Reserved by Cypress Semiconductor None A USB host enumerates by issuing Set Address, Get Descriptor, and Set Configuration (to ‘1’) requests (the Set Address and Get Descriptor requests are used only during enumeration). After enumeration, the Default USB Device responds to the following device requests from the host: ■ Set or clear an endpoint stall (Set/Clear Feature-Endpoint) ■ Read the stall status for an endpoint (Get_Status-Endpoint) ■ Set/Read an 8-bit configuration number (Set/Get Configuration) ■ Set/Read a 2-bit interface alternate setting (Set/Get Interface) ■ Download or upload EZ-USB on-chip RAM 3.8 EZ-USB Vendor Request for Firmware Load Prior to ReNumeration, the host downloads data into the EZUSB’s internal RAM. The host can access two on-chip EZUSB RAM spaces — Program / Data RAM at 0x00000x3FFF and Data RAM at 0xE000-0xE1FF — which it can download or upload only when the CPU is held in reset. The host must write to the CPUCS register to put the CPU in or out of reset. These two RAM spaces may also be bootloaded by a ‘C2’ EEPROM connected to the I2C bus. Note Off-chip RAM (on the 128-pin EZ-USB’s address/data bus) cannot be uploaded or downloaded by the host using the ‘Firmware Load’ vendor request. The USB Specification provides for ‘vendor-specific requests’ to be sent over endpoint zero. The EZ-USB uses None EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Enumeration and ReNumeration™ this feature to transfer data between the host and EZ-USB RAM. The EZ-USB automatically responds to two ‘Firmware Load’ requests, as shown in Table 3-8 and Table 3-9. Table 3-8. Firmware Download Byte Field Value Meaning 0 bmRequest 0x40 Vendor Request, OUT 1 bRequest 0xA0 ‘Firmware Load’ 2 wValueL AddrL 3 wValueH AddrH 4 wIndexL 0x00 5 wIndexH 0x00 6 wLenghtL LenL 7 wLengthH LenH EZ-USB Response Starting Address None required Number of Bytes Note These upload and download requests are always handled by the EZ-USB, regardless of the state of the RENUM bit. The upload start address must be word-aligned (that is, the start address must be evenly divisible by two). The bRequest value 0xA0 is reserved for this purpose. It should never be used for another vendor request. Cypress Semiconductor also reserves bRequest values 0xA1 through 0xAF; devices should not use these bRequest values. A host loader program must write 0x01 to the CPUCS register to put the CPU into RESET, load all or part of the EZUSB RAM with firmware, then reload the CPUCS register with ‘0’ to take the CPU out of RESET. The CPUCS register (at 0xE600) is the only EZ-USB register that can be written using the Firmware Download command. Table 3-9. Firmware Upload Byte Field Value Meaning 0 bmRequest 0xC0 Vendor Request, IN 1 bRequest 0xA0 ‘Firmware Load’ 2 wValueL AddrL 3 wValueH AddrH Starting Address (must be word-aligned) 4 wIndexL 0x00 5 wIndexH 0x00 6 wLengthL LenL 7 wLengthH LenH EZ-USB Response None required Number of Bytes 3.9 How the Firmware ReNumerates Two control bits in the USBCS (USB Control and Status) register control the ReNumeration process: DISCON and RENUM. Figure 3-2. USB Control and Status Register USBCS USB Control and Status E680 b7 b6 b5 b4 b3 b2 b1 b0 HSM 0 0 0 DISCON NOSYNSOF RENUM SIGRSUME R/W R R R R/W R/W R/W R/W 0 0 0 0 0 1 0 0 To simulate a USB disconnect, the firmware sets DISCON to ‘1’. To reconnect, the firmware clears DISCON to ‘0’. Before reconnecting, the firmware sets or clears the RENUM bit to indicate whether the firmware or the Default USB Device handles device requests over endpoint zero: if RENUM = 0, the Default USB Device handles device requests; if RENUM = 1, the firmware does. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 57 Enumeration and ReNumeration™ 3.10 Multiple ReNumerations™ EZ-USB firmware can ReNumerate anytime. One use for this capability might be to ‘fine tune’ an isochronous endpoint’s bandwidth requests by trying various descriptor values and ReNumerating. 58 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 4. Interrupts 4.1 Introduction The EZ-USB’s interrupt architecture is an enhanced and expanded version of the standard 8051’s. The EZ-USB responds to the interrupts shown in Table 4-1; interrupt sources that are not present in the standard 8051 are shown in bold type. Table 4-1. EZ-USB Interrupts EZ-USB Interrupt Source Interrupt Vector Natural Priority 1 IE0 INT0# Pin 0x0003 TF0 Timer 0 Overflow 0x000B 2 IE1 INT1# Pin 0x0013 3 TF1 Timer 1 Overflow 0x001B 4 RI_0 & TI_0 USART0 Rx & Tx 0x0023 5 TF2 Timer 2 Overflow 0x002B 6 Resume WAKEUP / WU2 Pin or USB Resume 0x0033 0 RI_1 & TI_1 USART1 Rx & Tx 0x003B 7 USBINT USB 0x0043 8 I2CINT I2C Bus 0x004B 9 IE4 GPIF / FIFOs / INT4 Pin 0x0053 10 IE5 INT5# Pin 0x005B 11 IE6 INT6 Pin 0x0063 12 The Natural Priority column in Table 4-1 shows the EZ-USB interrupt priorities. The EZ-USB can assign each interrupt to a high or low priority group; priorities are resolved within the groups using the natural priorities. 4.2 SFRs The following SFRs are associated with interrupt control: ■ IE - SFR 0xA8 (Table 4-2 on page 60) ■ IP - SFR 0xB8 (Table 4-3 on page 60) ■ EXIF - SFR 0x91 (Table 4-4 on page 60) ■ EICON - SFR 0xD8 (Table 4-5 on page 60) ■ EIE - SFR 0xE8 (Table 4-6 on page 60) ■ EIP - SFR 0xF8 (Table 4-7 on page 61) The IE and IP SFRs provide interrupt enable and priority control for the standard interrupt unit, as with the standard 8051. Additionally, these SFRs provide control bits for the Serial Port 1 interrupt. The EXIF, EICON, EIE and EIP registers provide flags, enable control, and priority control. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 59 Interrupts Table 4-2. IE Register — SFR 0xA8 Table 4-4. EXIF Register — SFR 0x91 Bit Function Bit Function IE.7 EA - Global interrupt enable. Controls masking of all interrupts except USB wakeup (resume). EA = 0 disables all interrupts except USB wakeup. When EA = 1, interrupts are enabled or masked by their individual enable bits. EXIF.7 IE5 - External Interrupt 5 flag. IE5 = 1 indicates a falling edge was detected at the INT5# pin. IE5 must be cleared by software. Setting IE5 in software generates an interrupt, if enabled. IE.6 ES1 - Enable Serial Port 1 interrupt. ES1 = 0 disables Serial Port 1 interrupts (TI_1 and RI_1). ES1 = 1 enables interrupts generated by the TI_1 or RI_1 flag. EXIF.6 IE.5 ET2 - Enable Timer 2 interrupt. ET2 = 0 disables Timer 2 interrupt (TF2). ET2=1 enables interrupts generated by the TF2 or EXF2 flag. IE4 - GPIF/FIFO/External Interrupt 4 flag. The ‘INT4’ interrupt is internally connected to the FIFO/GPIF interrupt by default; it can optionally function as External Interrupt 4 on the 100- and 128-pin EZ-USB. When configured as External Interrupt 4, IE4 indicates that a rising edge was detected at the INT4 pin. IE4 must be cleared by software. Setting IE4 in software generates an interrupt, if enabled. IE.4 ES0 - Enable Serial Port 0 interrupt. ES0 = 0 disables Serial Port 0 interrupts (TI_0 and RI_0). ES0=1 enables interrupts generated by the TI_0 or RI_0 flag. EXIF.5 I2CINT - I2C Bus Interrupt flag. I2CINT = 1 indicates an I 2C Bus interrupt. I2CINT must be cleared by software. Setting I2CINT in software generates an interrupt, if enabled. IE.3 ET1 - Enable Timer 1 interrupt. ET1 = 0 disables Timer 1 interrupt (TF1). ET1=1 enables interrupts generated by the TF1 flag. EXIF.4 USBINT - USB Interrupt flag. USBINT = 1 indicates an USB interrupt. USBINT must be cleared by software. Setting USBINT in software generates an interrupt, if enabled. IE.2 EX1 - Enable external interrupt 1. EX1 = 0 disables external interrupt 1 (IE1). EX1=1 enables interrupts generated by the INT1# pin. EXIF.3 Reserved. Read as ‘1’. EXIF.2-0 Reserved. Read as ‘0’. IE.1 ET0 - Enable Timer 0 interrupt. ET0 = 0 disables Timer 0 interrupt (TF0). ET0=1 enables interrupts generated by the TF0 flag. IE.0 EX0 - Enable external interrupt 0. EX0 = 0 disables external interrupt 0 (IE0). EX0=1 enables interrupts generated by the INT0# pin. Table 4-3. IP Register — SFR 0xB8 Bit IP.7 Reserved. Read as ‘1’. PS1 - Serial Port 1 interrupt priority control. PS1 = 0 sets Serial Port 1 interrupt (TI_1 or RI_1) to low priority. PS1 = 1 sets Serial port 1 interrupt to high priority. IP.5 PT2 - Timer 2 interrupt priority control. PT2 = 0 sets Timer 2 interrupt (TF2) to low priority. PT2 = 1 sets Timer 2 interrupt to high priority. IP.4 PS0 - Serial Port 0 interrupt priority control. PS0 = 0 sets Serial Port 0 interrupt (TI_0 or RI_0) to low priority. PS0 = 1 sets Serial Port 0 interrupt to high priority. IP.3 PT1 - Timer 1 interrupt priority control. PT1 = 0 sets Timer 1 interrupt (TF1) to low priority. PT1 = 1 sets Timer 1 interrupt to high priority. IP.2 PX1 - External interrupt 1 priority control. PX1 = 0 sets external interrupt 1 (IE1) to low priority. PT1 = 1 sets external interrupt 1 to high priority. IP.0 60 Bit Function EICON.7 SMOD1 - Serial Port 1 baud rate doubler enable. When SMOD1 = 1, the baud rate for Serial Port 1 is doubled. EICON.6 Reserved. Read as ‘1’. EICON.5 ERESI - Enable Resume interrupt. ERESI = 0 disables the Resume interrupt. ERESI = 1 enables interrupts generated by the resume event. EICON.4 RESI - Wakeup interrupt flag. RESI = 1 indicates a falseto-true transition was detected at the WAKEUP or WU2 pin, or that USB activity has resumed from the suspended state. RESI must be cleared by software before exiting the interrupt service routine, otherwise the interrupt is immediately be reasserted. Setting RESI = 1 in software generates a wakeup interrupt, if enabled. EICON.3 INT6 - External interrupt 6. When INT6 = 1, the INT6 pin has detected a low to high transition. INT6 must be cleared by software. Setting this bit in software generates an IE6 interrupt, if enabled. Function IP.6 IP.1 Table 4-5. EICON Register — SFR 0xD8 PT0 - Timer 0 interrupt priority control. PT0 = 0 sets Timer 0 interrupt (TF0) to low priority. PT0 = 1 sets Timer 0 interrupt to high priority. PX0 - External interrupt 0 priority control. PX0 = 0 sets external interrupt 0 (IE0) to low priority. PX0 = 1 sets external interrupt 0 to high priority. EICON.2-0 Reserved. Read as ‘0’. Table 4-6. EIE Register — SFR 0xE8 Bit EIE.7-5 EIE.4 Function Reserved. Read as ‘1’. EX6 - Enable external interrupt 6. EX6 = 0 disables external interrupt 6 (IE6). EX6 = 1 enables interrupts generated by the INT6 pin. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Interrupts Table 4-6. EIE Register — SFR 0xE8 Bit Function EIE.3 EX5 - Enable external interrupt 5. EX5 = 0 disables external interrupt 5 (IE5). EX5 = 1 enables interrupts generated by the INT5# pin. EIE.2 EX4 - Enable external interrupt 4. EX4 = 0 disables external interrupt 4 (IE4). EX4 = 1 enables interrupts generated by the INT4 pin or by the FIFO/GPIF Interrupt. EIE.1 EI2C - Enable I 2C bus interrupt (I2CINT). EI2C = 0 disables t h e I 2 C Bus interrupt. EI2C = 1 enables interrupts generated by the I 2C bus controller. EIE.0 EUSB - Enable USB interrupt (USBINT). EUSB = 0 disables USB interrupts. EUSB = 1 enables interrupts generated by the USB Interface. Table 4-7. EIP Register — SFR 0xF8 Bit EIP.7-5 Function Reserved. Read as ‘1’. EIP.4 PX6 - External interrupt 6 priority control. PX6 = 0 sets external interrupt 6 (IE6) to low priority. PX6 = 1 sets external interrupt 6 to high priority. EIP.3 PX5 - External interrupt 5 priority control. PX5 = 0 sets external interrupt 5 (IE5) to low priority. PX5=1 sets external interrupt 5 to high priority. EIP.2 PX4 - External interrupt 4 priority control. PX4 = 0 sets external interrupt 4 (INT4 / GPIF / FIFO) to low priority. PX4=1 sets external interrupt 4 to high priority. EIP.1 PI2C - I2CINT priority control. PI2C = 0 sets I 2C Bus interrupt to low priority. PI2C=1 sets I 2 C Bus interrupt to high priority. EIP.0 PUSB - USBINT priority control. PUSB = 0 sets USB interrupt to low priority. PUSB=1 sets USB interrupt to high priority. 4.2.1 803x/805x Compatibility The implementation of interrupts is similar to that of the Dallas Semiconductor DS80C320. Table 4-8 summarizes the differences in interrupt implementation between the Intel 8051, the Dallas Semiconductor DS80C320, and the EZ-USB. Table 4-8. Summary of Interrupt Compatibility Feature Intel Dallas Cypress 8051 DS80C320 EZ-USB Power Fail Interrupt Not implemented Internally generated Replaced with RESUME Interrupt External Interrupt 0 Implemented Implemented Implemented Timer 0 Interrupt Implemented Implemented Implemented External Interrupt 1 Implemented Implemented Implemented Implemented Timer 1 Interrupt Implemented Implemented Serial Port 0 Interrupt Implemented Implemented Implemented Timer 2 Interrupt Not implemented Implemented Implemented Serial Port 1 Interrupt Not implemented Implemented Implemented External Interrupt 2 Not implemented Implemented Replaced with autovectored USB Interrupt External Interrupt 3 Not implemented Implemented Replaced with I2C Bus Interrupt External Interrupt 4 Not implemented Implemented Replaced by autovectored FIFO/GPIF Interrupt. Can be configured as External Interrupt 4 on 100- and 128-pin EZ-USB only. External Interrupt 5 Not implemented Implemented Implemented Watchdog Timer Interrupt Not implemented Internally generated Replaced with External Interrupt 6 Real-time Clock Interrupt Not implemented Implemented Not implemented EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 61 Interrupts 4.3 Interrupt Processing When an enabled interrupt occurs, the EZ-USB completes the instruction it is currently executing, then vectors to the address of the interrupt service routine (ISR) associated with that interrupt (see Table 4-9 on page 62). The EZ-USB executes the ISR to completion unless another interrupt of higher priority occurs. Each ISR ends with a RETI (return from interrupt) instruction. After executing the RETI, the EZ-USB continues executing firmware at the instruction following the one which was executing when the interrupt occurred. Note The EZ-USB always completes the instruction in progress before servicing an interrupt. If the instruction in progress is RETI, or a write access to any of the IP, IE, EIP, or EIE SFRs, the EZ-USB completes one additional instruction before servicing the interrupt. Table 4-9. Interrupt Flags, Enables, Priority Control, and Vectors Interrupt Description Interrupt Request Flag Interrupt Enable Assigned Priority Control Natural Priority Interrupt Vector RESUME Resume interrupt EICON.4 EICON.5 Always Highest 0 (highest) 0x0033 IE0 External interrupt 0 TCON.1 IE.0 IP.0 1 0x0003 0x000B TF0 Timer 0 interrupt TCON.5 IE.1 IP.1 2 IE1 External interrupt 1 TCON.3 IE.2 IP.2 3 0x0013 TF1 Timer 1 interrupt TCON.7 IE.3 IP.3 4 0x001B TI_0 or RI_0 Serial port 0 transmit or receive interrupt SCON0.1 (TI.0) IE.4 IP.4 5 0x0023 Timer 2 interrupt T2CON.7 (TF2) IE.5 IP.5 6 0x002B IE.6 IP.6 7 0x003B 8 0x0043 TF2 or EXF2 SCON0.0 (RI_0) T2CON.6 (EXF2) TI_1 or RI_1 Serial port 1 transmit or receive interrupt SCON1.1 (TI_1) Autovectored USB interrupt EXIF.4 EIE.0 EIP.0 I2CINT I2C Bus interrupt EXIF.5 EIE.1 EIP.1 9 0x004B IE4 Autovectored FIFO / GPIF or External interrupt 4 EXIF.6 EIE.2 EIP.2 10 0x0053 USBINT SCON1.0 (RI_1) IE5 External interrupt 5 EXIF.7 EIE.3 EIP.3 11 0x005B IE6 External interrupt 6 EICON.3 EIE.4 EIP.4 12 0x0063 4.3.1 Interrupt Masking est assigned priority. All other interrupts can be assigned either high or low priority. The EA Bit in the IE SFR (IE.7) is a global enable for all interrupts except the RESUME (USB wakeup) interrupt, which is always enabled. When EA = 1, each interrupt is enabled or masked by its individual enable bit. When EA = 0, all interrupts are masked except the USB wakeup interrupt. Table 4-9 provides a summary of interrupt sources, flags, enables, and priorities. 4.3.1.1 Interrupt Priorities There are two stages of interrupt priority: assigned interrupt level and natural priority. Assigned priority is set by EZ-USB firmware; natural priority is as shown in Table 4-9, and is fixed. Note The assigned interrupt level (highest, high, or low) takes precedence over natural priority. The RESUME (USB wakeup) interrupt always has highest assigned priority and is the only interrupt that can have high- 62 In addition to an assigned priority level (high or low), each interrupt also has a natural priority, as listed in Table 4-9. ‘Simultaneous’ interrupts with the same assigned priority level (for example, both high) are resolved according to their natural priority. For example, if INT0 and INT1 are both assigned high priority and both occur simultaneously, INT0 takes precedence due to its higher natural priority. Once an interrupt is being serviced, only an interrupt of higher ‘assigned’ priority level can interrupt the service routine. That is, an ISR for a low-assigned-level interrupt can only be interrupted by a high-assigned-level interrupt. An ISR for a high-assigned-level interrupt can only be interrupted by the RESUME interrupt. 4.3.2 Interrupt Sampling The internal timers and serial ports generate interrupts by setting the interrupt flag bits shown in Table 4-9. These interrupts are sampled once per instruction cycle (that is, once every 4 CLKOUT cycles). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Interrupts INT0# and INT1# are both active low and can be programmed to be either edge-sensitive or level-sensitive, through the IT0 and IT1 bits in the TCON SFR. When ITx = 0, INTx# is level-sensitive and the EZ-USB sets the IEx flag when the INTx# pin is sampled low. When ITx = 1, INTx# is edge-sensitive and the EZ-USB sets the IEx flag when the INTx# pin is sampled high then low on consecutive samples. The remaining five interrupts (INT 4-6, USB and I2C Bus interrupts) are edge-sensitive only. INT6 and INT4 are active high and INT5# is active low. To ensure that edge-sensitive interrupts are detected, the interrupt pins should be held in each state for a minimum of one instruction cycle (4 CLKOUT cycles). Level-sensitive interrupts are not latched; their pins must remain asserted until the interrupt is serviced. 4.3.3 Interrupt Latency Interrupt response time depends on the current state of the EZ-USB. The fastest response time is five instruction cycles: one to detect the interrupt, and four to perform the LCALL to the ISR. The maximum latency is 13 instruction cycles. This 13-cycle latency occurs when the EZ-USB is currently executing a RETI instruction followed by a MUL or DIV instruction. The 13 instruction cycles in this case are: one to detect the interrupt, three to complete the RETI, five to execute the DIV or MUL, and four to execute the LCALL to the ISR. This 13-instruction-cycle latency excludes autovector latency for the USB and FIFO/GPIF interrupts (see sections 4.5 USB-Interrupt Autovectors on page 67 and 4.8 FIFO/ GPIF Interrupt Autovectors on page 69), and any instructions required to perform housekeeping, as shown in Figure 4-2 on page 65. Autovectoring adds a fixed fourinstruction cycle, so the maximum latency for an autovectored USB or FIFO/GPIF interrupt is 13 + 4 = 17 instruction cycles. 4.4 USB-Specific Interrupts 4.4.2 USB Interrupts Table 4-10 shows the 27 USB requests that share the USB Interrupt. Those marked with an asterisk are not implemented in FX1. Figure 4-1 on page 64 shows the USB Interrupt logic; the bottom IRQ, EP8ISOERR, is expanded in the diagram to show the logic which is associated with each USB interrupt request. Table 4-10. Individual USB Interrupt Sources INT2VEC Priority Value 1 00 2 04 SOF Start of Frame (or microframe) 3 08 SUTOK Setup Token Received 4 0C SUSPEND USB Suspend request 5 10 USB RESET Bus reset 6 14 HISPEED Entered high-speed operation* 7 18 EP0ACK EZ-USB ACK’d the CONTROL Handshake 8 1C reserved 9 20 EP0-IN 10 24 EP0-OUT EP0-OUT has USB data 11 28 EP1-IN EP1-IN ready to be loaded with data 12 2C EP1-OUT EP1-OUT has USB data 13 30 EP2 IN: buffer available. OUT: buffer has data 14 34 EP4 IN: buffer available. OUT: buffer has data 15 38 EP6 IN: buffer available. OUT: buffer has data 16 3C EP8 IN: buffer available. OUT: buffer has data 17 40 IBN IN-Bulk-NAK (any IN endpoint) 18 44 reserved 19 48 EP0PING 20 4C EP1PING EP1 OUT was Pinged and it NAK’d* 21 50 EP2PING EP2 OUT was Pinged and it NAK’d* Source SUDAV Notes SETUP Data Available EP0-IN ready to be loaded with data EP0 OUT was Pinged and it NAK’d* 22 54 EP4PING EP4 OUT was Pinged and it NAK’d* The EZ-USB provides 28 USB-specific interrupts. One, ‘Resume’, has its own dedicated interrupt; the other 27 share the ‘USB’ interrupt. 23 58 EP6PING EP6 OUT was Pinged and it NAK’d* 24 5C EP8PING EP8 OUT was Pinged and it NAK’d* 25 60 ERRLIMIT Bus errors exceeded the programmed limit 4.4.1 26 64 reserved 27 68 reserved 28 6C reserved 29 70 EP2ISOERR ISO EP2 OUT PID sequence error 30 74 EP4ISOERR ISO EP4 OUT PID sequence error 31 78 EP6ISOERR ISO EP6 OUT PID sequence error 32 7C EP8ISOERR ISO EP8 OUT PID sequence error Resume Interrupt After the EZ-USB has entered its idle state, it responds to an external signal on its WAKEUP/WU2 pins or resumption of USB bus activity by restarting its oscillator and resuming firmware execution. The Power Management chapter on page 77 describes suspend/resume signaling in detail, and presents an example which uses the Wakeup Interrupt. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 63 Interrupts Figure 4-1. USB Interrupts USB Interrupt 00 SUDAV 01 SOF 02 SUTOK EIE.0 "USB" Interrupt S R EXIF.4(rd) EXIF.4(0) 29 EP4ISOERR 30 EP6ISOERR USBERRIE.7 31 S EP8ISOERR USBERRIRQ.7 (1) R USBERRIRQ.7 (rd) Interrupt Request Latch INT2VEC 0 IV4 IV3 IV2 IV1 IV0 0 Referring to the logic inside the dotted lines of Figure 4-1, each USB interrupt source has an interrupt request latch. IRQ bits are set automatically by the EZ-USB; firmware clears an IRQ bit by writing a ‘1’ to it. The output of each latch is ANDed with an Interrupt Enable Bit and then ORed with all the other USB Interrupt request sources. The EZ-USB prioritizes the USB interrupts and constructs an Autovector, which appears in the INT2VEC register. The interrupt vector values IV[4:0] are shown to the left of the interrupt sources (shaded boxes in Figure 4-1); zero is the highest priority, 31 is the lowest. If two USB interrupts occur simultaneously, the prioritization affects which one is first indicated in the INT2VEC register. If Autovectoring is enabled, the INT2VEC byte replaces the contents of address 0x0045 in the EZ-USB’s program memory. This causes the EZ-USB to automatically vector to a different address for each USB interrupt source. This mechanism is explained in detail in section 4.5 USB-Inter- 64 0 rupt Autovectors on page 67. Due to the OR gate in Figure 4-1, assertion of any of the individual USB interrupt sources sets the EZ-USB’s ‘main’ USB Interrupt request bit (EXIF.4). This main USB interrupt is enabled by setting EIE.0 to ‘1’. To clear the main USB interrupt request, firmware clears the EXIF.4 bit to ‘0’. After servicing a USB interrupt, EZ-USB firmware clears the individual USB source’s IRQ bit by setting it to ‘1’. If any other USB interrupts are pending, the act of clearing the IRQ bit causes the EZ-USB to generate another pulse for the highest-priority pending interrupt. If more than one is pending, each is serviced in the priority order shown in Figure 4-1, starting with SUDAV (priority 00) as the highest priority, and ending with EP8ISOERR (priority 31) as the lowest. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Interrupts Note The main USB interrupt request is cleared by clearing the EXIF.4 bit to ‘0’; each individual USB interrupt is cleared by setting its IRQ bit to ‘1’. Note It is important in any USB Interrupt Service Routine (ISR) to clear the main USB Interrupt before clearing the individual USB interrupt request latch. This is because as soon as the individual USB interrupt is cleared, any pending USB interrupt immediately tries to generate another main USB Interrupt. If the main USB IRQ bit has not been previously cleared, the pending interrupt is lost. Figure 4-2 illustrates a typical USB ISR. Figure 4-2. The Order of Clearing Interrupt Requests is Important USB_ISR: push dps push dpl push dph push dpl1 push dph1 push acc mov a,EXIF clr acc.4 mov EXIF,a ; Note: EXIF reg is not bit-addressable mov dptr,#USBERRIRQ ; now clear the USB interrupt request mov a,#10000000b ; use EP8ISOERR as example movx @dptr,a ; ; FIRST clear the USB (INT2) interrupt request ; ; ; (service the interrupt here) ; pop acc pop dph1 pop dpl1 pop dph pop dpl pop dps ; reti The registers associated with the individual USB interrupt sources are described in the Registers chapter on page 211 and section 8.6 CPU Control of EZ-USB Endpoints on page 89. Each interrupt source has an enable (IE) and a request (IRQ) bit. Firmware sets the IE bit to ‘1’ to enable the interrupt. The EZ-USB sets an IRQ bit to ‘1’ to request an interrupt, and the firmware clears an IRQ bit by writing a ‘1’ to it. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 65 Interrupts 4.4.2.1 SUTOK, SUDAV Interrupts Power Management chapter on page 77. Figure 4-3. SUTOK and SUDAV Interrupts 4.4.2.4 The USB host signals a bus reset by driving both D+ and Dlow for at least 10 ms. When the EZ-USB detects the onset of USB bus reset, it asserts the URES Interrupt Request. SETUP Stage S A E C E D N R T D D C U R P 5 P Token Packet SUTOK Interrupt D A T A 0 8 bytes Setup Data C R C 1 6 Data Packet USB RESET Interrupt A C K 4.4.2.5 HISPEED Interrupt (FX2LP only) This interrupt is asserted when the host grants high-speed (480 Mbps) access to the FX2LP. H/S Pkt SUDAV Interrupt 4.4.2.6 SUTOK and SUDAV are supplied to the EZ-USB by CONTROL endpoint zero. The first portion of a USB CONTROL transfer is the SETUP stage shown in Figure 4-3 (a full CONTROL transfer is shown in Figure 2-1 on page 38). When the EZ-USB decodes a SETUP packet, it asserts the SUTOK (SETUP Token) Interrupt Request. After the EZUSB has received the eight bytes error-free and copied them into the eight internal registers at SETUPDAT, it asserts the SUDAV Interrupt Request. Firmware responds to the SUDAV Interrupt by reading the eight SETUP data bytes in order to decode the USB request. See chapter “Endpoint Zero” on page 37. The SUTOK Interrupt is provided to give advance warning that the eight register bytes at SETUPDAT are about to be overwritten. It is useful for debug and diagnostic purposes. EP0ACK Interrupt This interrupt is asserted when the EZ-USB has acknowledged the STATUS stage of a CONTROL transfer on endpoint 0. 4.4.2.7 Endpoint Interrupts These interrupts are asserted when an endpoint requires service. For an OUT endpoint, the interrupt request signifies that OUT data has been sent from the host, validated by the EZUSB, and is in the endpoint buffer memory. For an IN endpoint, the interrupt request signifies that the data previously loaded by the EZ-USB into the IN endpoint buffer has been read and validated by the host, making the IN endpoint buffer ready to accept new data. Table 4-11. Endpoint Interrupts 4.4.2.2 SOF Interrupt Figure 4-4. A Start Of Frame (SOF) Packet F C S R R O N C F O 5 Token Pkt When the EZ-USB receives an SOF packet, it copies the eleven-bit frame number (FRNO in Figure 4-4) into the USBFRAMEH:L registers and asserts the SOF Interrupt Request. Isochronous endpoint data may be serviced via the SOF Interrupt. EP0-IN EP0-IN ready to be loaded with data (BUSY bit 1-to-0) EP0-OUT EP0-OUT has received USB data (BUSY bit 1-to-0) EP1-IN EP1-IN ready to be loaded with data (BUSY bit 1-to-0) EP1-OUT EP1-OUT has received USB data (BUSY bit 1-to-0) EP4 EP6 EP8 4.4.2.8 IN: Buffer available (Empty Flag 1-to-0) OUT: Buffer has received USB data (Empty Flag 0-to-1) IN: Buffer available (Empty Flag 1-to-0) OUT: Buffer has received USB data (Empty Flag 0-to-1) IN: Buffer available (Empty Flag 1-to-0) OUT: Buffer has received USB data (Empty Flag 0-to-1) IN: Buffer available (Empty Flag 1-to-0) OUT: Buffer has received USB data (Empty Flag 0-to-1) In-Bulk-NAK (IBN) Interrupt When the host sends an IN token to any IN endpoint which does not have data to send, the EZ-USB automatically NAKs the IN token and asserts this interrupt. Suspend Interrupt If the EZ-USB detects a ‘suspend’ condition from the host, it asserts the SUSP (Suspend) Interrupt Request. A full description of Suspend-Resume signaling appears in the 66 Description EP2 A USB Start-of-Frame Interrupt Request is asserted when the host sends a Start of Frame (SOF) packet. SOFs occur once per millisecond in full-speed (12 Mbits/sec) mode, and once every 125 microseconds in high-speed (480 Mbits/sec) mode. 4.4.2.3 Interrupt Name 4.4.2.9 EPxPING Interrupt (FX2LP only) These interrupts are active only during high-speed (480 Mbits/sec) operation. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Interrupts High-speed USB implements a PING-NAK mechanism for OUT transfers. When the host wishes to send OUT data to an endpoint, it first sends a PING token to see if the endpoint is ready (for example, if it has an empty buffer). If a buffer is not available, the FX2LP returns a NAK handshake. PING-NAK transactions continue to occur until an OUT buffer is available, at which time the FX2LP answers a PING with an ACK handshake and the host sends the OUT data to the endpoint. As shown in Table 4-13, the jump table contains a series of jump instructions, one for each individual USB Interrupt source’s ISR. Table 4-13. A Typical USB-Interrupt Jump Table Table Offset The EPxPING interrupt is asserted when the host PINGs an endpoint and the FX2LP responds with a NAK because no endpoint buffer memory is available. 4.4.2.10 ERRLIMIT Interrupt This interrupt is asserted when the USB error-limit counter has exceeded the preset error limit threshold. See section 8.6.3.3 USBERRIE, USBERRIRQ, ERRCNTLIM, CLRERRCNT on page 94 for full details. 4.4.2.11 EPxISOERR Interrupt These interrupts are asserted when an ISO data PID is missing or arrives out of sequence, or when an ISO packet is dropped because no buffer space is available (to receive an OUT packet). 4.5 USB-Interrupt Autovectors The main USB interrupt is shared by 27 interrupt sources. To save the code and processing time which normally would be required to identify the individual USB interrupt source, the EZ-USB provides a second level of interrupt vectoring, called ‘Autovectoring.’ When a USB interrupt is asserted, the EZ-USB pushes the program counter onto its stack then jumps to address 0x0043, where it expects to find a ‘jump’ instruction to the USB Interrupt service routine. The EZ-USB jump instruction is encoded as follows: Table 4-12. EZ-USB Jump Instruction Address Op-Code Hex Value 0x0043 LJMP 0x02 0x0044 AddrH 0xHH 0x0045 AddrL 0xLL Instruction 0x00 LJMP SUDAV_ISR 0x04 LJMP SOF_ISR 0x08 LJMP SUTOK_ISR 0x0C LJMP SUSPEND_ISR 0x10 LJMP USBRESET_ISR 0x14 LJMP HISPEED_ISR 0x18 LJMP EP0ACK_ISR 0x1C LJMP SPARE_ISR 0x20 LJMP EP0IN _ISR 0x24 LJMP EP0OUT_ISR 0x28 LJMP EP1IN _ISR 0x2C LJMP EP1OUT_ISR 0x30 LJMP EP2_ISR 0x34 LJMP EP4_ISR 0x38 LJMP EP6_ISR 0x3C LJMP EP8_ISR 0x40 LJMP IBN_ISR 0x44 LJMP SPARE_ISR 0x48 LJMP EP0PING_ISR 0x4C LJMP EP1PING_ISR 0x50 LJMP EP2PING_ISR 0x54 LJMP EP4PING_ISR 0x58 LJMP EP6PING_ISR 0x5C LJMP EP8PING_ISR 0x60 LJMP ERRLIMIT_ISR 0x64 LJMP SPARE_ISR 0x68 LJMP SPARE_ISR 0x6C LJMP SPARE_ISR 0x70 LJMP EP2ISOERR_ISR 0x74 LJMP EP2ISOERR_ISR 0x78 LJMP EP2ISOERR_ISR 0x7C LJMP EP2ISOERR_ISR If Autovectoring is enabled (AV2EN=1 in the INTSETUP register), the EZ-USB substitutes its INT2VEC byte (see Table 4-10 on page 63) for the byte at address 0x0045. Therefore, if the high byte (‘page’) of a jump-table address is preloaded at location 0x0044, the automatically-inserted INT2VEC byte at 0x0045 directs the jump to the correct address out of the 27 addresses within the page. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 67 Interrupts Figure 4-5. The USB Autovector Mechanism in Action USB Interrupt Vector USB_Jmp_Table: 0x0043 0x0044 0x0045 0x0400 LJMP 04 2C EP2_ISR: Automatically copied by EZ-USB INT2VEC 4.5.1 2C 0x042C LJMP EP2_ISR 0x042D 0x042E 01 19 USB Autovector Coding 4. Write initialization code to enable the USB interrupt (INT2) and Autovectoring. To employ autovectoring for the USB interrupt: Figure 4-5 illustrates an ISR that services endpoint 2. When endpoint 2 requires service, the EZ-USB asserts the USB interrupt request, vectoring to location 0x0043. 1. Insert a jump instruction at 0x0043 to a table of jump instructions to the various USB interrupt service routines. Make sure the jump table starts on a 0x0100-byte page boundary. The jump instruction at this location, which was originally coded as ‘LJMP 0400’, becomes ‘LJMP 042C’ because the EZ-USB automatically inserts 2C, the INT2VEC value for EP2 (Table 4-13 on page 67). 2. Code the jump table with jump instructions to each individual USB interrupt service routine. This table has two important requirements, arising from the format of the INT2VEC Byte (zero-based, with the two LSBs set to ‘0’): The EZ-USB jumps to 0x042C, where it executes the jump instruction to the EP2 ISR, arbitrarily located for this example at address 0x0119. a. It must begin on a page boundary (address 0xnn00) b. The jump instructions must be four bytes apart. Once the EZ-USB vectors to 0x0043, initiation of the endpoint-specific ISR takes only eight instruction cycles. 3. The interrupt service routines can be placed anywhere in memory. 4.6 0x0119 I²C Bus Interrupt Figure 4-6. I²C Bus Interrupt Enable Bits and Registers EIE.1 DONE RD or WR I2DAT register S S R R I2C Bus Interrupt Request 68 I2C Bus Interrupt EXIF.5(rd) EXIF.5(0) I2CS 0xE678 START STOP LASTRD ID1 ID0 BERR ACK DONE I2DAT 0xE679 D7 D6 D5 D4 D3 D2 D1 D0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Interrupts The Input/Output chapter on page 181 describes the interface to the EZ-USB’s I2C Bus controller. The EZ-USB uses two registers, I2CS (Control and Status) and I2DAT (Data), to transfer data over the bus. An I2C Bus Interrupt is asserted whenever one of the following occurs: ■ The DONE bit (I2CS.0) makes a zero-to-one transition, signaling that the bus controller is ready for another command ■ The STOP bit (I2CS.6) makes a one-to-zero transition To enable the ‘Done’ interrupt source, set EIE.1 to ‘1’; to additionally enable the ‘Stop’ interrupt source, set STOPIE to ‘1’. If both interrupts are enabled, the interrupt source may be determined by checking the DONE and STOP bits in the I2CS register. To reset the Interrupt Request, write a zero to EXIF.5. Any firmware read or write to the I2DAT or I2CS register also automatically clears the Interrupt Request. Note Firmware must make sure the STOP bit is zero before writing to I2CS or I2DAT. 4.7 FIFO/GPIF Interrupt (INT4) Just as the USB Interrupt is shared among 27 individual USB-interrupt sources, the FIFO/GPIF interrupt is shared among 14 individual FIFO/GPIF sources. The FIFO/GPIF Interrupt, like the USB Interrupt, can employ autovectoring. Table 4-14 shows the priority and INT4VEC values for the 14 FIFO/GPIF interrupt sources. Table 4-14. Individual FIFO/GPIF Interrupt Sources When FIFO/GPIF interrupt sources are asserted, the EZUSB prioritizes them and constructs an Autovector, which appears in the INT4VEC register; ‘0’ is the highest priority, ‘14’ is the lowest. If two FIFO/GPIF interrupts occur simultaneously, the prioritization affects which one is first indicated in the INT4VEC register. If Autovectoring is enabled, the INT4VEC byte replaces the contents of address 0x0055 in the EZ-USB’s program memory. This causes the EZ-USB to automatically vector to a different address for each FIFO/ GPIF interrupt source. This mechanism is explained in detail in section 4.8 FIFO/GPIF Interrupt Autovectors. Note It is important in any FIFO/GPIF Interrupt Service Routine (ISR) to clear the main INT4 Interrupt before clearing the individual FIFO/GPIF interrupt request latch. This is because as soon as the individual FIFO/GPIF interrupt is cleared, any pending individual FIFO/GPIF interrupt immediately tries to generate another main INT4 Interrupt. If the main INT4 IRQ bit has not been previously cleared, the pending interrupt is lost. The registers associated with the individual FIFO/GPIF interrupt sources are described in the Registers chapter on page 211 and in section 8.6 CPU Control of EZ-USB Endpoints on page 89. Each interrupt source has an enable (IE) and a request (IRQ) bit. Firmware sets the IE bit to ‘1’ to enable the interrupt. The EZ-USB sets an IRQ bit to ‘1’ to request an interrupt, and the firmware clears an IRQ bit by setting it to ‘1’. Note The main FIFO/GPIF interrupt request is cleared by clearing the EXIF.6 bit to ‘0’; each individual FIFO/GPIF interrupt is cleared by setting its IRQ bit to ‘1’. 4.8 FIFO/GPIF Interrupt Autovectors INT4VEC Priorit y Value Source Notes 1 80 EP2PF Endpoint 2 Programmable Flag 2 84 EP4PF Endpoint 4 Programmable Flag 3 88 EP6PF Endpoint 6 Programmable Flag 4 8C EP8PF Endpoint 8 Programmable Flag 5 90 EP2EF Endpoint 2 Empty Flag 6 94 EP4EF Endpoint 4 Empty Flag 7 98 EP6EF Endpoint 6 Empty Flag 8 9C EP8EF Endpoint 8 Empty Flag The main FIFO/GPIF interrupt is shared by 14 interrupt sources. To save the code and processing time which normally is required to sort out the individual FIFO/GPIF interrupt source, the EZ-USB provides a second level of interrupt vectoring, called Autovectoring. When a FIFO/GPIF interrupt is asserted, the EZ-USB pushes the program counter onto its stack then jumps to address 0x0053, where it expects to find a ‘jump’ instruction to the FIFO/GPIF Interrupt service routine. The EZ-USB jump instruction is encoded as follows: 9 A0 EP2FF Endpoint 2 Full Flag 10 A4 EP4FF Endpoint 4 Full Flag 11 A8 EP6FF Endpoint 6 Full Flag Address Op-Code Endpoint 8 Full Flag 0x0053 LJMP 0x02 GPIF Operation Complete 0x0054 AddrH 0xHH (See General Programmable Interface, on page 121) 0x0055 AddrL 0xLL 12 AC EP8FF 13 B0 GPIFDONE 14 B4 GPIFWF GPIF Waveform (See General Programmable Interface, on page 121) Table 4-15. EZ-USB JUMP Instruction Hex Value If Autovectoring is enabled (AV4EN=1 in the INTSETUP register), the EZ-USB substitutes its INT4VEC byte (see Table 4-14 on page 69) for the byte at address 0x0055. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 69 Interrupts Therefore, if the high byte (‘page’) of a jump-table address is preloaded at location 0x0054, the automatically-inserted INT4VEC byte at 0x0055 directs the jump to the correct address out of the 14 addresses within the page. As shown in Table 4-16, the jump table contains a series of jump instructions, one for each individual FIFO/GPIF Interrupt source’s ISR. Table 4-16. A Typical FIFO/GPIF-Interrupt Jump Table Table Offset Instruction 4.8.1 FIFO/GPIF Autovector Coding To employ autovectoring for the FIFO/GPIF interrupt, perform the following steps: 1. Insert a jump instruction at 0x0053 to a table of jump instructions to the various FIFO/GPIF interrupt service routines. Make sure the jump table starts at a 0x0100byte page boundary plus 0x80. 2. Code the jump table with jump instructions to each individual FIFO/GPIF interrupt service routine. This table has two important requirements, arising from the format of the INT4VEC byte (0x80-based, with the 2 LSBs set to 0); the two requirements are the following: 0x80 LJMP EP2PF_ISR 0x84 LJMP EP4PF_ISR 0x88 LJMP EP6PF_ISR 0x8C LJMP EP8PF_ISR 0x90 LJMP EP2EF_ISR 0x94 LJMP EP4EF_ISR 3. Place the interrupt service routines anywhere in memory. 4. Write initialization code to enable the FIFO/GPIF interrupt (INT4) and Autovectoring. 0x98 LJMP EP6EF_ISR 0x9C LJMP EP8EF_ISR 0xA0 LJMP EP2FF_ISR 0xA4 LJMP EP4FF_ISR 0xA8 LJMP EP6FF_ISR 0xAC LJMP EP8FF_ISR 0xB0 LJMP GPIFDONE_ISR 0xB4 LJMP GPIFWF_ISR a. It must begin on a page boundary + 0x80 (address 0xnn80). b. The jump instructions must be four bytes apart. Figure 4-7 illustrates an ISR that services EP4’s Full Flag. When EP4 goes full, the EZ-USB asserts the FIFO/GPIF interrupt request, vectoring to location 0x0053. The jump instruction at this location, which was originally coded as ‘LJMP 0480’, becomes ‘LJMP 04A4’ because the EZ-USB automatically inserts A4, the INT4VEC value for EP4FF (Table 4-13 on page 67). The EZ-USB jumps to 0x04A4, where it executes the jump instruction to the EP4FF ISR, arbitrarily located for this example at address 0x0321. Once the EZ-USB vectors to 0x0053, initiation of the endpoint-specific ISR takes only eight instruction cycles. Figure 4-7. The FIFO/GPIF Autovector Mechanism in Action FIFO/GPIF Interrupt Vector 0x0053 0x0054 LJMP 0x0055 A4 70 0x0480 04 Automatically copied by EZ-USB INT4VEC FIFO_GPIF_Jmp_Table: A4 EP4FF_ISR 0x04A4 0x04A5 0x04A6 LJMP EP4FF_ISR 01 0x0321 19 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 5. Memory 5.1 Introduction Memory organization in the EZ-USB is similar, but not identical, to that of the standard 8051. There are three distinct memory areas: Internal Data Memory, External Data Memory, and External Program Memory. As is explained below, ‘External’ memory is not necessarily external to the EZ-USB chip. 5.2 Internal Data RAM As shown in Figure 5-1, the EZ-USB’s Internal Data RAM is divided into three distinct regions: the ‘Lower 128’, the ‘Upper 128’, and ‘SFR Space’. The Lower 128 and Upper 128 are general purpose RAM; the SFR Space contains EZ-USB control and status registers. Figure 5-1. Internal Data RAM Organization Lower 128 Indirect addressing only 0x7F 0xFF GeneralPurpose 0xFF Upper 128 0x30 0x2F 7F Register Bank Select (PSW.4:3) 10 01 00 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 78 Bit-Addressable RAM 0x20 07 11 .... .... SFR Space 0x80 0x7F 0x80 Lower 128 00 Direct addressing only R0-R7 (Bank 3) R0-R7 (Bank 2) R0-R7 (Bank 1) 0x00 Direct or indirect addressing R0-R7 (Bank 0) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 71 Memory 5.2.1 5.3 The Lower 128 The Lower 128 occupies Internal Data RAM locations 0x000x7F. All of the Lower 128 may be accessed as general-purpose RAM, using either direct or indirect addressing (for more information on the EZ-USB addressing modes. See chapter “Instruction Set” on page 175). Two segments of the Lower 128 may be accessed in other ways. ■ ■ Locations 0x00-0x1F comprise four banks of 8 registers each, numbered R0 through R7. The current bank is selected via the ‘register-select’ bits (RS1:RS0) in the PSW special-function register; code which references registers R0-R7 accesses them only in the currentlyselected bank. Locations 0x20-0x2F are bit addressable. Each of the 128 bits in this segment may be individually addressed, either by its bit address (0x00 to 0x7F) or by reference to the byte which contains it (0x20.0 to 0x2F.7). 5.2.2 The Upper 128 The Upper 128 occupies Internal Data RAM locations 0x800xFF; all 128 bytes may be accessed as general-purpose RAM, but only by using indirect addressing (for more information on the EZ-USB addressing modes. See chapter “Instruction Set” on page 175). Since the EZ-USB’s stack is internally accessed using indirect addressing, it is a good idea to put the stack in the Upper 128; this frees the more-efficiently-accessed Lower 128 for general purpose use. 5.2.3 Special Function Register Space The Special Function Register (SFR) space, like the Upper 128, is accessed at Internal Data RAM locations 0x80-0xFF. The EZ-USB keeps SFR space separate from the Upper 128 by using different addressing modes to access the two regions: SFRs may only be accessed using ‘direct’ addressing, and the Upper 128 may only be accessed using ‘indirect’ addressing. The SFR space contains EZ-USB control and status registers; an overview is in section 11.12 Special Function Registers on page 174, and a full description of all the SFRs is in the Registers chapter on page 211. The sixteen SFRs at locations 0x80, 0x88, …, 0xF0, 0xF8 are bit-addressable. Each of the 128 bits in these registers may be individually addressed, either by its bit address (0x80 to 0xFF) or by reference to the byte which contains it (for example, 0x80.0, 0xC8.7, etc.). External Program Memory and External Data Memory The standard 8051 employs a Harvard architecture for its External memory; the program and data memories are physically separate. The EZ-USB uses a modified version of this memory model; ‘off-chip’ program and data memories are separate, but the ‘on-chip’ program and data memories are unified in a Von Neumann architecture. This allows the EZUSB’s on-chip RAM to be loaded from an external source (USB or EEPROM, see Enumeration and ReNumeration™, on page 51), then used as program memory. Standard 8051 The standard 8051 has separate address spaces for program and data memory; it can address 64 KB of read-only program memory at addresses 0x0000-0xFFFF, and another 64 KB of read/write data memory, also at addresses 0x0000-0xFFFF. The standard 8051 keeps the two memory spaces separate by using different bus signals to access them; the read strobe for program memory is PSEN# (Program Store Enable), and the read and write strobes for data memory are RD# and WR#. The 8051 generates PSEN# strobes for instruction fetches and for the MOVC (move code memory into the accumulator) instruction; it generates RD# and WR# strobes for all data-memory accesses. In a standard 8051 application, an external 64 KB ROM chip (enabled by the 8051’s PSEN# signal) might be used for program memory and an external 64 KB RAM chip (enabled by the 8051’s RD# and WR# signals) might be used for data memory. In the standard 8051, all program memory is read only. EZ-USB The EZ-USB has 16 KB of on-chip RAM (the ‘main RAM’) at addresses 0x0000-0x3FFF, and 512 bytes of on-chip RAM (the ‘Scratch RAM’) at addresses 0xE000-0xE1FF. Although this RAM is physically located inside the chip, it is addressed by EZ-USB firmware as ‘External’ memory, just as though it were in an external RAM chip. Some systems use only this on-chip RAM, with no off-chip memory. In those systems, the RD# and PSEN# strobes are automatically combined for accesses to addresses below 0x4000, so the main RAM is accessible as both data and program memory. The RD# and PSEN# strobes are not combined for the Scratch RAM; Scratch RAM is accessible as data memory only. Although it is technically accurate to say that the main RAM data memory is writable while the main RAM program memory is not, it is a distinction without a difference. The main RAM is accessible both as program memory and data memory, so writing to main RAM data memory is equivalent to writing to main RAM program memory at the same address. The Scratch RAM is never accessible as program memory. 72 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Memory The EZ-USB also reserves 7.5 KB (0xE200-0xFFFF) of the data-memory address space for control/status registers and endpoint buffers (see section On-Chip Data Memory at 0xE000-0xFFFF on page 76). Note Only the data-memory space is reserved; program memory in the 0xE000-0xFFFF range is not reserved, so the 128-pin EZ-USB can access off-chip program memory in that range. 5.3.1 After a power on reset, the EZ-USB immediately begins executing code at address 0x0000 in the off-chip program memory (as long as there is no EEPROM on the I2C bus with a valid 0xC0 or 0xC2 signature byte), rather than waiting for an EEPROM load or USB code download to complete (see the Resets chapter on page 83 for a full description of the EZ-USB resets). 56- and 100-Pin EZ-USB Chips The 56- and 100-pin EZ-USB chips have no facility for adding off-chip program or data memory. Therefore, the main RAM must serve as both program and data memory. To accomplish this, the EZ-USB reads the main RAM using the logical OR of the PSEN# and RD# strobes. It is the responsibility of the system designer to ensure that the programand data-memory spaces do not overlap; with most C compilers, this is done by using linker directives that place the code and data modules into separate areas. 5.3.2 128-Pin EZ-USB Chip It is possible to add off chip program and data memory to the 128-pin EZ-USB; the organization of that memory depends on the state of the EA (External Access) pin. Note that the EA pin is ‘live’, meaning it is always active and not just sampled coming out of a chip reset. EA = 0 The main RAM is accessible both as program and data memory, just as in the 56- and 100-pin EZ-USB. To avoid conflict with the main RAM, the pins which control access to off-chip memory (the RD#, WR#, CS#, OE#, and PSEN# pins) are inactive whenever the EZ-USB accesses addresses 0x0000-0x3FFF. This allows a 64 KB memory chip (data and/or program) to be added without requiring additional external logic to inhibit access to the lower 16 KB of that chip. Note that the PSEN# and RD# signals are available on separate pins, so the program and data spaces outside the EZ-USB are not combined as they are inside the EZ-USB. When code in the range 0x0000-0x3FFF is fetched from the on-chip RAM, the PSEN# pin is not asserted; when code is fetched from program memory in the range 0x4000-0xFFFF, the PSEN# pin is asserted. EA = 1 All program memory is off chip; all on chip RAM, including the main RAM, is data memory only. The EZ-USB reads all on-chip RAM using only the RD# strobe; the combining of RD# and PSEN# is disabled, so the on-chip RAM becomes data memory only. All program memory is off-chip; accesses to the lower 16 KB of off-chip program memory are not inhibited. Any code fetch asserts the PSEN# pin. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 73 Memory 5.4 EZ-USB Memory Maps Figure 5-2. EZ-USB External Program/Data Memory Map, EA=0 Inside EZ-USB Outside EZ-USB data memory FFFF E200 E000 7.5 KB USB regs and EP buffers (RD#,WR#) 0.5 KB RAM Data (RD#,WR#)* program memory (OK to populate data memory here--RD#/WR# strobes are not active) 40 KB External Data Memory (RD#,WR#) 48 KB External Program Memory (PSEN#) 3FFF 16 KB RAM Program & Data (PSEN#, RD#,WR#)* (OK to populate data memory here--RD#/WR# strobes are not active) (OK to populate program memory here-PSEN# strobe is not active) 0000 EA=0 * SUDPTRH:L, USB upload/download, I2C boot access Figure 5-2 illustrates the memory map of the 128-pin EZUSB with off-chip program and data memory. Note The 56- and 100-pin EZ-USB chips cannot access offchip memory; the entire memory map for those chips is illustrated on the left side of Figure 5-2, in the ‘Inside EZ-USB’ column. On-chip EZ-USB memory consists of three RAM regions: ■ 0x0000-0x3FFF (main RAM) ■ 0xE000-0xE1FF (Scratch RAM) ■ 0xE200-0xFFFF (Registers/Buffers) The middle column of Figure 5-2 indicates EZ-USB data memory (activated by the RD# and WR# strobes) and the right-most column indicates EZ-USB program memory (activated by PSEN#). The 16 KB main RAM occupies program memory (PSEN#) and data memory (RD#/WR#) addresses 0x0000-0x3FFF. The 512 byte ‘Scratch RAM’ occupies data memory (RD#/ WR#) addresses 0xE000-0xE1FF. 7.5 KB of control/status registers and endpoint buffers occupy data-memory (RD#/WR#) addresses 0xE2000xFFFF. 74 When off-chip memory is connected to the EZ-USB, it fills in the gaps not occupied by on-chip EZ-USB RAM. Since the lower 16 KB of memory is occupied by on-chip program/data memory and the upper 8 KB is occupied by on-chip data memory, the off-chip memory cannot be active in these regions. Nevertheless, it is still safe to populate those regions with off-chip memory, as the following paragraphs explain. The middle 40 KB of the data memory space may be filled with off-chip memory, since it does not conflict with the upper 8 KB of on-chip EZ-USB data memory and the lower 16 KB of on-chip EZ-USB program/data memory. To allow a 64 KB RAM to be connected to the EZ-USB, the EZ-USB gates its RD# and WR# strobes to exclude the top 8 KB and bottom 16 KB for off-chip accesses. Therefore, a 64 KB RAM can be connected to EZ-USB, and the top 8 KB and bottom 16 KB of it are automatically disabled. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Memory Likewise, when a 64 KB program memory (PSEN# strobe) is attached to the EZ-USB (when EA = 0), the lower 16 KB is automatically excluded for off-chip code fetches, avoiding conflict with the on-chip program/data memory inside EZUSB. This allows the ‘upper’ 48 KB of program memory space to be filled with off-chip memory. The asterisks in Figures Figure 5-2 on page 74 and Figure 5-3 indicate memory regions that may be accessed using three special EZ-USB resources: ■ Setup Data Pointer (see section 8.7 The Setup Data Pointer on page 95) ■ Upload or download via USB (see section 3.8 EZ-USB Vendor Request for Firmware Load on page 56) ■ Code boot from an I2C EEPROM (see section 13.6 EEPROM Boot Loader on page 192 and section 3.4 EEPROM Boot-load Data Formats on page 52) Figure 5-3 illustrates the 128-pin EZ-USB memory map when the EA pin is tied high. Note The only difference from Figure 5-2 is that the main RAM is data memory only, instead of combined code/data memory. This allows an offchip code memory to contain all of the EZ-USB firmware. In this configuration, the EZ-USB can begin executing code from off-chip memory immediately after power-on-reset. Note EZ-USB code execution begins at address 0x0000, where the reset vector is located. Off-chip data memory is partially disabled just as in Figure 5-2 on page 74, ensuring that off-chip data memory does not conflict with on-chip data RAM. Note Be careful to check the access time of external Flash or other program memory in this mode. The EZ-USB can stretch its RD# and WR# strobes to compensate for slow data memories, but it does not have the capability to stretch its PSEN# signal to allow for slow program memories. An external program memory chip must meet the program memory access-time specifications given in the FX2LP and FX1 data sheets. Figure 5-3. EZ-USB External Program/Data Memory Map, EA=1 Inside EZ-USB Outside EZ-USB data memory FFFF E200 E000 7.5 KB USB regs and EP buffers (RD#,WR#) 0.5 KB RAM Data (RD#,WR#)* program memory (OK to populate data memory here--RD#/WR# strobes are not active) 40 KB External Data Memory (RD#,WR#) 64 KB External Program Memory (PSEN#) 3FFF 16 KB RAM Data (RD#,WR#)* (OK to populate data memory here--RD#/WR# strobes are not active) 0000 EA=1 * SUDPTRH:L, USB upload/download, I2C boot access EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 75 Memory 5.5 ‘Von-Neumannizing’ OffChip Program and Data Memory 5.6 On-Chip Data Memory at 0xE000-0xFFFF Figure 5-4. On-Chip Data Memory at 0xE000-0xFFFF The 128-pin EZ-USB package provides a 16-bit address bus, an 8 bit data bus, and memory control signals PSEN#, RD#, and WR#. These signals are used to expand the EZUSB’s external program and/or external data memory. As described in the previous section, the EZ-USB gates the RD# and WR# signals to exclude selection of off-chip data memory in the range occupied by the on-chip memory. The PSEN# signal is also available on a pin for connection to offchip code memory. In some systems, it may be desirable to combine off-chip program and data memory, just as the EZ-USB combines its on-chip program/data main RAM. These systems must logically OR the PSEN# and RD# strobes to qualify the off-chip memory’s chip enable and output enable signals. To save the external logic which would normally be needed, EZ-USB provides two additional control signals, CS# and OE#. The equations for these active-low signals are: CS# = RD# + WR# + PSEN# OE# = RD# + PSEN# FFFF EP2-EP8 (4 KB) Buffers F000 EFFF Reserved (2 KB ) E800 E7FF E7C0 E7BF E780 E77F E740 E73F E700 E6FF E500 E4FF E480 E47F E400 E3FF EP1IN (64) EP1OUT (64) EP0 IN/OUT (64) Reserved (64) EZ-USB Control and Status Registers (512) Reserved (128) GPIF Waveforms (128) Reserved (512) Because the RD#, WR#, and PSEN# signals are already qualified by the addresses allocated to off-chip memory, the added strobes CS# and OE# strobes are active only when the EZ-USB accesses off-chip memory. E200 E1FF Scratch RAM (512) E000 Figure 5-4 shows the memory map for on-chip data RAM at 0xE000-0xFFFF. 512 bytes of Scratch RAM are available at 0xE000-0xE1FF. This is data RAM only; code cannot be executed from it. The 128 bytes at 0xE400-0xE47F hold the four waveform descriptors for the GPIF, described in the General Programmable Interface chapter on page 121. The area from 0xE500-0xE6FF contains EZ-USB control and status registers. Memory blocks 0xE200-0xE3FF, 0xE480-0xE4FF, 0xE7000xE73F, and 0xE800-0xEFFF) are reserved; they must not be used for data storage. The remaining RAM contains the endpoint buffers. These buffers are accessible either as addressable data RAM (via the ‘MOVX’ instruction) or as FIFOs (via the Autopointer, described in section 8.8 Autopointers on page 96). 76 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 6. Power Management 6.1 Introduction The USB host can ‘suspend’ a device to put it into a power-down mode. When the USB signals a Suspend operation, the EZUSB goes through a sequence of steps to allow the firmware first to turn off external power-consuming subsystems, and then to enter a low-power mode by turning off the EZ-USB’s oscillator. Once suspended, the EZ-USB is awakened either by resumption of USB bus activity or by assertion of one of its two WAKEUP pins (provided that they are enabled). This chapter describes the suspend-resume mechanism. It is important to understand the distinction between ‘suspend’, ‘resume’, ‘idle’, and ‘wakeup’. ■ Suspend is a request (indicated by a 3-ms ‘J’ state on the USB bus) from the USB host/hub to the device. This request is usually sent by the host when it enters a low power ‘suspended’ state. USB devices are required to enter a low power state in response to this request. The EZ-USB also provides a register called suspend; writing any value to it allows the EZ-USB to enter the suspended state even when a Suspend condition does not exist on the bus. ■ Resume is a signal initiated by the device or host driving a ‘K’ state on the USB bus, requesting that the host or device be taken out of its low power ‘suspended’ mode. A USB device can only signal a resume if it has reported (through its Configuration Descriptor) that it is ‘remote wakeup capable’, and only if the host has enabled remote wakeup from that device. ■ Idle is an EZ-USB low power state. EZ-USB firmware initiates this mode by setting bit zero of the PCON (Power Control) register. To meet the stringent USB suspend current specification, the EZ-USB’s oscillator must be stopped; after the PCON.0 bit is set, the oscillator stops if: a) a suspend condition exists on the bus or the Suspend register has been written to, and b) all three wakeup sources are either disabled or false (WAKEUP, WU2, USB Resume). The EZ-USB exits the Idle state when it receives a wakeup interrupt. ■ Wakeup is the mechanism which restarts the EZ-USB oscillator and asserts an interrupt to force the EZ-USB to exit the Idle state and resume code execution. The EZ-USB recognizes three wakeup sources: one from the USB itself (when bus activity resumes) and two from device pins (WAKEUP and WU2). The EZ-USB enters and exits its Idle state independent of USB activity; in other words, the EZ-USB can enter the Idle state at any time, even when not connected to USB. The Idle state is ‘hooked into’ the USB Suspend-Resume mechanism using interrupts. A suspend interrupt is automatically generated when the USB goes inactive for 3 ms; EZ-USB firmware may respond to that interrupt by entering the Idle state to reduce power. If the EZ-USB is in the Idle state, a Wakeup interrupt is generated when one of the three Wakeup sources is asserted; the EZ-USB responds to that interrupt by exiting the Idle state and resuming code execution. Once the EZ-USB is awake, its firmware may send a USB Resume request by setting the SIGRSUME bit in the USBCS register (at 0xE680). Before sending the Resume request, the device must have: a) reported remote-wakeup capability in its Configuration Descriptor, and b) been given permission (via a ‘Set Feature-Remote Wakeup’ request from the host) to use that remote-wakeup capability. To be compliant with the USB Specification, firmware must wait 5 ms after the Wakeup interrupt, set the SIGRSUME bit, wait 10-15 ms, then clear it. Figure 6-1 illustrates the EZ-USB logic that implements USB suspend and resume. These operations are explained in the next sections. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 77 Power Management Figure 6-1. Suspend-Resume Control 24 MHz OPEN USB Resume WUPOL WUEN START STOP WAKEUP pin WU2POL Oscillator WU2EN WU2 pin PLL Restart Delay divider CLKOUT EICON.5 PCON.0 (ERESI) "RESUME" INT 8051 Signal Resume (USBCS.0) Resume Suspend No USB activity for 3 msec. 78 USB "SUSPEND" Interrupt Writes any value to SUSPEND register (0xE681) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Power Management 6.2 USB Suspend Figure 6-2. USB Suspend Sequence 24 MHz STOP Oscillator PLL divider CLKOUT PCON.0 Signal Resume (USBCS.0) 8051 No USB activity for 3 msec. USB "SUSPEND" Interrupt A USB device recognizes a Suspend request as three milliseconds of the bus-idle state. When the EZ-USB detects this condition, it asserts the USB interrupt (INT2) and the Suspend interrupt autovector (vector #3). If the CPU is in reset when a Suspend condition is detected on the bus, the EZ-USB automatically turns off its oscillators (and keep the CPU in reset) until an enabled Wakeup source is asserted. Note The bus-idle state is not equivalent to the disconnected-from-USB state; for full-speed, bus-idle is a ‘J’ state which means that the voltage on D+ is higher than that on D-. W rites any value to SUSPEND register (0xE681) 6.2.1 Suspend Register EZ-USB firmware can force the chip into its low-power mode at any time, even without detecting a 3-ms period of inactivity on the USB bus. This ‘unconditional suspend’ functionality is useful in applications which require the EZ-USB to enter its low-power mode even while disconnected from the USB bus. To force the EZ-USB unconditionally to enter its low-power mode, firmware simply writes any value to the Suspend register (at 0xE681) before setting the PCON.0 bit. EZ-USB firmware responds to the Suspend interrupt by taking the following actions: 1. Perform any necessary housekeeping such as shutting off external power-consuming devices. 2. Set bit zero of the PCON register. These actions put the EZ-USB into a low power ‘suspend’ state, as required by the USB Specification. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 79 Power Management 6.3 Wakeup/Resume Figure 6-3. EZ-USB Wakeup/Resume Sequence 24 MHz OPEN USB Resume WUPOL WUEN START Oscillator WAKEUP pin WU2POL WU2EN WU2 pin PLL Restart Delay divider CLKOUT EICON.5 (ERESI) "WAKEUP" INT Signal Resume (USBCS.0) 8051 Once in the low-power mode, there are three ways to wake up the EZ-USB: ■ USB activity on the EZ-USB’s DPLUS pin ■ Assertion of the WAKEUP pin ■ Assertion of the WU2 (‘Wakeup 2’) pin These three Wakeup sources may be individually enabled by setting the DPEN, WUEN, and WU2EN bits in the Wakeup Control register. WAKEUPCS b7 Wakeup Control & Status b6 b5 b4 WU2 WU WU2POL R/W R/W R/W 0 0 0 b2 b1 b0 WUPOL 0 DPEN WU2EN WUEN R/W R R/W R/W R/W 0 0 1 0 1 The polarities of the WAKEUP pins are set using the WUPOL and WU2POL bits; ‘0’ is active low and ‘1’ is active high. Three bits in the Wakeup register enable the three Wakeup sources. DPEN stands for ‘DPLUS Enable’ (DPLUS is one of the USB data lines; the other is DMINUS). WUEN (Wakeup Enable) enables the WAKEUP pin, and WU2EN (Wakeup 2 Enable) enables the WU2 pin. When the EZ-USB chip detects activity on DPLUS while DPEN is true, or a false-to-true transition on WAKEUP or WU2 while WUEN or WU2EN is true, it asserts the Wakeup interrupt. The status bits WU and WU2 indicate which of the WAKEUP pins caused the Wakeup event. Asserting the WAKEUP pin (according to its programmed polarity) sets the correspond- 80 E682 b3 ing bit. If the wakeup was caused by resumption of USB DPLUS activity, neither of these bits is set, leading to the conclusion that the third source, a USB bus reset, caused the Wakeup event. EZ-USB firmware clears the WU and WU2 flags by writing ‘1’ to them. Note Holding either WAKEUP pin in its active state (as determined by the programmed polarity) inhibits the EZUSB chip from turning off its oscillator in order to enter the ‘suspend’ state. Note While disconnected from the USB bus, the DPLUS and DMINUS lines may float. Noise on these lines may indicate activity to the EZ-USB and initiate a Wakeup event. EZUSB firmware must set DPEN to ‘0’ if this is not desired. Some designs also use the WAKEUP# pin as a general purpose input pin. Due to the built-in latch on this pin, it must be EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Power Management cleared before it can show the current state of the pin. For example, to detect a ‘1’ on the WAKEUP# pin use the following code: WAKEUPCS = bmWU | bmWUPOL | bmWUEN; Write one to bmWU to clear it, set // // active high, enable WAKEUPCS = bmWU | bmWUPOL | bmWUEN; line is required only if WUPOL // This // is changing. // A WUPOL change can trigger a WAKEUP event if (WAKEUPCS & bmWU) { // WAKEUP# is a one } else { // WAKEUP# is 0 } Wakeup Interrupt When a Wakeup event occurs, the EZ-USB restarts its oscillator and, after the PLL stabilizes, it generates an interrupt request. This applies whether or not the EZ-USB is connected to the USB. The Wakeup interrupt is a dedicated interrupt, and is not shared by USBINT like most of the other individual USB interrupts. The Wakeup interrupt vector is at 0x33, and has the highest interrupt priority. It is enabled by ERESI (EICON.5), and its IRQ flag is at EICON.4 (EICON is SFR 0xD8). Note If the EZ-USB is suspended with ERESI (EICON.5) low, it never ‘wakes up’. The Wakeup interrupt Service Routine clears the interrupt request flag RESI (using the ‘bit clear’ instruction, i.e. ‘clr EICON.4’), and then executes a ‘RETI’ (return from interrupt) instruction. This causes the EZ-USB to continue program execution at the instruction following the one that set PCON.0 to initiate the power-down operation. About the Wakeup Interrupt The EZ-USB enters its idle state when it sets PCON.0 to ‘1’. Although a standard 8051 exits the idle state when any interrupt occurs, the EZ-USB supports only the Wakeup interrupt to exit the idle state. Note If the polarity is changed, an additional Wakeup event may be triggered. Always clear the Wakeup event after changing the polarity. 6.4 6.3.1 Note If PCON.0 is set when no Suspend condition exists (for example, the USB is not signaling ‘Suspend’, and firmware has not written to the Suspend register), the Wakeup interrupt fires immediately. USB Resume (Remote Wakeup) USBCS E680 USB Control and Status b7 b6 b5 b4 b3 b2 b1 b0 HSM - - - DISCON NOSYNSOF RENUM SIGRSUME Firmware sets the SIGRSUME bit to send a remote-wakeup request to the host. To be compliant with the USB Specification, the firmware must wait 5 milliseconds after the Wakeup interrupt, set the SIGRSUME bit, wait 10-15 milliseconds, then clear it. Note Before setting the SIGRSUME bit to ‘1’, EZ-USB firmware must check that the source of the Wakeup event was one of the WAKEUP pins. If neither WAKEUP pin was the source, the Wakeup event was the resumption of USB DPLUS activity, and in this case, the device must not signal a remote-wakeup by setting the SIGRSUME bit to ‘1’. The Default USB Device does not support remote wakeup. This fact is reported at enumeration time in byte 7 of the built-in Configuration Descriptor (see Appendices A and B). 6.4.1 WU2 Pin The WU2 function shares the general-purpose I/O pin PA3. Unlike other multi-purpose I/O pins that use configuration registers (PORTACFG, PORTCCFG, and PORTECFG) to select alternate functions, the PA3 and WU2 functions are simultaneously active. However, the WU2 function has no effect unless enabled (by setting the WU2EN bit to ‘1’). If WU2 is used as a WAKEUP pin, make sure to set PA3 as an input (OEA.3=0, the default state) to prevent PA3 from also driving the pin. The dual nature of the PA3/WU2 pin allows the EZ-USB to enter the low-power mode, then periodically awaken itself. This is done by connecting an RC network to the PA3/WU2 pin; if the WU2 pin is set to the default polarity (active-high), EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 81 Power Management the resistor is connected to 3.3V and the capacitor is connected to ground. The firmware then performs these steps: 1. Set W2POL to ‘1’ for active-high polarity on the WU2 pin. 2. Set WU2EN to ‘1’ to enable Wakeup 2. 3. Enable the Wakeup interrupt by setting EICON.5=1. 4. Set PA3 to ‘0’, then set OEA.3 to ‘1’. This enables the PA3 output and drives the PA3/WU2 pin to ground, discharging the capacitor. 5. Set OEA.3 to ‘0’. This floats the PA3/WU2 pin, allowing the resistor to begin charging the capacitor. 6. Write any value to the Suspend register, so the EZ-USB unconditionally stops the oscillator when the firmware sets PCON.0. 7. Set PCON.0 to ‘1’. This commands the EZ-USB to enter the Idle state. After the capacitor charges to a logic high level, the Wakeup interrupt triggers via the WU2 pin. 1. In the Wakeup interrupt service routine, clear EICON.4 (the Wakeup interrupt request flag), then execute a ‘RETI’ instruction. This resumes program execution at the instruction following the instruction in step 7. 2. At this point, the firmware can check for any tasks to perform; if none are required, it can then re-enter the Idle state starting at step 4. By selecting a long time constant for the RC network attached to the WU2 pin, the EZ-USB chip can operate at extremely low average power, since the on/off (active/suspend) duty-cycle is very short. 82 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 7. Resets 7.1 Introduction There are three different reset functions on the EZ-USB. This chapter describes their effects. ■ Hard Reset. An active low reset pin (RESET#) is provided in order to reset the EZ-USB to a known state at power-on or any other application-specific reset event. ■ CPU Reset. This is controlled by the EZ-USB’s USB Core logic. The CPU Reset is always asserted (for example, the CPU is always held in reset) while the EZ-USB’s RESET# pin is asserted. ■ USB Bus Reset. This is a condition on the USB bus initiated by the USB host in order to put every device’s USB functions in a known state. Figure 7-1. EZ-USB Resets RES CPU Vcc CPUCS.0 (1 at PWR ON) RES RESET# USB Core USB Bus Reset DPLUS DMINUS 48 MHz XTALIN 24 MHz Oscillator PLL XTALOUT 7.2 12, 24, or 48 MHz ÷1, ÷2, or ÷4 CLKOUT Hard Reset The RESET# pin can be connected to an external R-C network or other external reset source in order to ensure that, when power is first applied, the EZ-USB is held in reset until the operating parameters (VCC voltage, crystal frequency, PLL frequency, and others) stabilize. The 24 MHz oscillator and PLL stabilize 5 ms after VCC reaches 3.0V. An R-C network can satisfy the power-on reset requirements of the EZ-USB. See Figure 7-1 for a sample connection scheme (for example, R = 27K ohm, C = 1 µF). The RESET# pin can also be asserted at any time after the EZ-USB is running. If the EZ-USB’s XTALIN pin is driven by an external clock source that continues to run while the chip is in reset, RESET# need only be asserted for 200 µs. Otherwise, it must be asserted for at least 5 ms. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 83 Resets The CLKOUT pin, crystal oscillator, and PLL are active as soon as power is applied. Once the CPU is out of reset, firmware may clear a control bit (CLKOE, CPUCS.1) to inhibit the CLKOUT output pin for EMI-sensitive applications that do not need this signal. The CLKOUT signal is active while RESET# is low. When RESET# returns high, the activity on the CLKOUT pin depends on whether or not the EZ-USB is in the low-power ‘suspend’ state; if it is, CLKOUT stops. Resumption of USB bus activity or assertion of the WAKEUP or WU2 pin (if enabled) restarts the CLKOUT signal. Power-on default values for all EZ-USB register bits are shown in the Registers chapter on page 211. At power-on reset: ■ Endpoint data buffers and byte counts are uninitialized ■ The CPU clock speed is set to 12 MHz, the CPU is held in reset, and the CLKOUT pin is active ■ All port pins are configured as general purpose input pins ■ USB interrupts are disabled and USB interrupt requests are cleared ■ Bulk IN and OUT endpoints are unarmed, and their stall bits are cleared. The EZ-USB NAKs IN and OUT tokens while the CPU is reset. 7.3.1 RAM Download Once enumerated, the host can download code into the EZUSB RAM using the ‘Firmware Load’ vendor request (Endpoint Zero chapter on page 37). The last packet loaded writes 0x00 to the CPUCS register, which releases the CPU from reset. Note that only CPUCS.0 can be written in this way. 7.3.2 EEPROM Load The Enumeration and ReNumeration™ chapter on page 51 describes the EEPROM boot loads in detail. At power-on, the EZ-USB checks for the presence of an EEPROM on its I 2C bus. If found, it reads the first EEPROM byte. If it reads 0xC2 as the first byte, the EZ-USB downloads firmware from the EEPROM into internal RAM. The last operation in a ‘C2’ Load writes 0x00 to the CPUCS register, which releases the CPU from reset. After a ‘C2’ Load, the EZ-USB sets the RENUM bit to ‘1’, so the firmware is responsible for responding to USB device requests. 7.3.3 External ROM ■ Endpoint data toggle bits are cleared to ‘0’ ■ The RENUM bit is cleared to ‘0’. This means that the Default USB Device, not the firmware, responds to USB device requests. The 128-pin EZ-USB can use off-chip program memory containing EZ-USB code and USB device descriptors, which include the VID/DID/PID bytes. Because such a system does not require an I 2C EEPROM to supply the VID/DID/ PID, the EZ-USB automatically releases the CPU from reset when: ■ The USB Function Address register is cleared to ‘0’ ■ ■ The endpoints are configured for the Default USB Device The EA pin is pulled high (indicating off-chip code memory), and ■ No ‘C0/C2’ EEPROM is detected on the I 2C bus ■ Interrupt autovectoring is turned Off ■ Configuration Zero, Alternate Setting Zero is in effect ■ The D+ pull up resistor is disconnected from the data line during a hard reset 7.3 Releasing the CPU Reset Register bit CPUCS.0 resets the CPU. This bit is set to ‘1’ at power-on, initially holding the CPU in reset. There are three ways that the CPUCS.0 bit can be cleared to ‘0’, releasing the CPU from reset: ■ By the host, as the final step of a RAM download ■ Automatically, at the end of an EEPROM load (assuming the EEPROM is correctly programmed) ■ Automatically, when external ROM is used (EA=1) and no ‘C0’ or ‘C2’ EEPROM is present Note EZ-USB firmware cannot put the CPU into reset by setting CPUCS.0 to ‘1’; to the firmware, that bit is read only. 84 Under these conditions, the EZ-USB also sets the RENUM bit to ‘1’, so the firmware is responsible for responding to USB device requests. 7.4 CPU Reset Effects The USB host may reset the CPU at any time by downloading the value 0x01 to the CPUCS register. The host might do this, for example, in preparation for loading code overlays, effectively magnifying the size of the internal EZ-USB RAM. For such applications, it is important to know the state of the EZ-USB chip during and after a CPU reset. In this section, this particular reset is called a ‘CPU Reset,’ and should not be confused with the resets described in section 7.2 Hard Reset on page 83 This discussion applies only to the condition in which the EZ-USB chip is powered, and the CPU is reset by the host setting the CPUCS.0 bit to ‘1’. The basic USB device configuration remains intact through a CPU reset. Endpoints keep their configuration, the USB Function Address remains the same, and the I/O ports retain their configurations and values. Stalled endpoints remain EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Resets stalled, data toggles do not change, and the RENUM bit is unaffected. The only effects of a CPU reset are as follows: 7.7 ■ USB (INT2) interrupts are disabled, but pending interrupt requests remain pending. Table 7-1. Effects of Various Resets on EZ-USB Resources (“—” means “no change”) ■ When the CPU comes out of reset, pending interrupts are kept pending, but disabled. This gives the firmware writer the choice of acting on pre-reset USB events, or ignoring them by clearing the pending interrupts before enabling INT2. ■ The breakpoint condition (BREAKPT.3) is cleared. ■ While the CPU is in reset, the EZ-USB enters the Suspend state automatically if a ‘suspend’ condition is detected on the bus. Reset Summary RESET# Pin CPU Reset USB Bus Reset Disconne ct CPU Reset Reset n/a — — IN Endpoints Unarm — — — OUT Endpoints Unarm — — — Breakpoint 0 0 — — Stall Bits 0 — — 0 Interrupt Enables 0 0 — — 0 — — — Active — — — Interrupt Requests 7.5 USB Bus Reset CLKOUT 12 MHz — — — The host signals a USB bus reset by driving an SE0 state (both D+ and D- data lines low) for a minimum of 10 ms. The EZ-USB senses this condition, requests the USB Interrupt (INT2), and supplies the interrupt vector for a USB Reset. After a USB bus reset, the following occurs: Data Toggles 0 — 0 0 Function Address 0 — 0 0 Default USB Device 0 — 0 0 ■ Data toggle bits are cleared to ‘0’. Default USB Device ■ The device address is reset to ‘0’. 0 — 0 0 Alternate Setting ■ If the Default USB Device is active, the USB configuration and alternate settings are reset to ‘0’. RENUM Bit 0 — — — ■ The FX2LP renegotiates with the host for high-speed (480 Mbps) mode. CPU Clock Speed Configuration Note that the RENUM bit is unchanged after a USB bus reset. Therefore, if a device has ReNumerated™ and loaded a new personality, it retains the new personality through a USB bus reset. 7.6 EZ-USB Disconnect Although not strictly a ‘reset,’ the disconnect-reconnect sequence used for ReNumeration™ affects the EZ-USB in ways similar to the other resets. When the EZ-USB simulates a disconnect-reconnect, the following occurs: ■ Endpoint STALL bits are cleared. ■ Data toggles are reset to ‘0’. ■ The Function Address is reset to ‘0’. ■ If the Default USB Device is active, the USB configuration and alternate settings are reset to ‘0’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 85 Resets 86 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 8. Access to Endpoint Buffers 8.1 Introduction USB data enters and exits the EZ-USB via endpoint buffers. Note External logic usually reads and writes this data by direct connection to the endpoint FIFOs without any participation by the EZ-USB’s CPU. This is especially necessary for the FX2LP, which can operate at the high-speed 480 Mbits/sec transfer rate. However, this feature is also available for FX2LP when attached to a full-speed host and for the full-speed-only FX1. Note The chapters Slave FIFOs, on page 99 and General Programmable Interface, on page 121 give details about how external logic directly connects to the large endpoint FIFOs. Direct connection is available only on endpoints 2, 4, 6, and 8. In the following sections, references to full-speed behavior refer to both FX2LP attached to a full-speed host and to the fullspeed-only FX1. When an application requires the CPU to process the data as it flows between external logic and the USB — or when there is no external logic — firmware can access the endpoint buffers either as blocks of RAM or (using a special auto-incrementing pointer) as a FIFO. Even when external logic or the built-in General Programmable Interface (GPIF) is handling high-bandwidth data transfers through the four large endpoint FIFOs without any CPU intervention, the firmware has certain responsibilities: ■ Configure the endpoints ■ Respond to host requests on CONTROL endpoint zero ■ Control and monitor GPIF activity ■ Handle all application-specific tasks using its USARTs, counter-timers, interrupts, I/O pins, and so on 8.2 EZ-USB Large and Small Endpoints EZ-USB endpoint buffers are divided into ‘small’ and ‘large’ groups. EP0 and EP1 are small, 64-byte endpoints which are accessible only by the CPU; they cannot be connected directly to external logic. EP2, EP4, EP6 and EP8 are large, configurable endpoints designed to meet the high-bandwidth requirements of USB 2.0. Although data normally flows through the large endpoint buffers under control of the FIFO interfaces described in Chapters 9 and 10, the CPU can access the large endpoints if necessary. 8.3 High Speed and Full Speed Differences The data payload size and transfer speed requirements differ between full speed (12 Mbps) and high speed (480 Mbps). The EZ-USB architecture is optimized for high-speed transfers, but does not limit full-speed transfers: ■ Instead of many small endpoint buffers, EZ-USB provides a reduced number of large buffers ■ EZ-USB provides double, triple, or quad buffering on its large endpoints (EP2, 4, 6, and 8) ■ The CPU need not participate in data transfers. Instead, dedicated EZ-USB logic and unified endpoint/interface FIFOs move data on and off the chip without any CPU intervention. In the FX2LP, endpoint buffers appear to have different sizes depending on whether it is operating at full or high speed. This is due to the difference in maximum data payload sizes allowed by the USB specification for the two modes, as illustrated by EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 87 Access to Endpoint Buffers Table 8-1. FX1 always operates in full-speed mode. nous types when the EZ-USB is operating at full speed. This is to account for the smaller maximum data payload sizes. Table 8-1. Maximum Data Payload Sizes for Full Speed and High Speed Transfer Type Max Data Payload Size Full Speed High Speed CONTROL (EP0 only) 8,16,32,64 64 BULK 8,16,32,64 512 INTERRUPT 1-64 1-1024 ISOCHRONOUS 1-1023 1-1024 When operating at high speed, firmware can configure the large endpoints’ size, type, and buffering depth; when operating at full speed, type and buffering are configurable but the buffer size is always fixed at 64 bytes for the non-isochronous types. Although the EP2, EP4, EP6, and EP8 buffers are physically large, they appear as smaller buffers for the non-isochro- 8.4 How the CPU Configures the Endpoints Endpoints are configured using the six registers shown in Table 8-2. Table 8-2. Endpoint Configuration Registers Address Name Configurable Parameters 0xE610 EP1OUTCFG valid, type1 (always OUT, 64 bytes, single-buffered) 0xE611 EP1INCFG valid, type1 (always IN, 64 bytes, single-buffered) 0xE612 EP2CFG valid, direction, type, size, buffering 0xE613 EP4CFG valid, direction, type (always 512 bytes, double-buffered in high-speed mode, 64 bytes double-buffered in fullspeed mode for non-iso) 0xE614 EP6CFG valid, direction, type, size, buffering 0xE615 EP8CFG valid, direction, type (always 512 bytes double-buffered in high-speed mode, 64 bytes double-buffered in fullspeed mode for non-iso) Note 1: For EP1, ‘type’ may be set to Interrupt or Bulk only. Even though these buffers are 64 bytes in size, they are reported as 512 for USB 2.0 compliance. The user must never transfer packets larger than 64 bytes to EP1. Note The Registers chapter on page 211 gives full bit-level details for all endpoint configuration registers. ■ Endpoint 0 does not require a configuration register since it is fixed as valid, IN/OUT, CONTROL, 64 bytes, single-buffered. EP0 uses a single 64-byte buffer both for IN and OUT transfers. EP1 uses separate 64 byte buffers for IN and OUT transfers. Endpoints EP2 and EP6 are the most flexible endpoints, as they are configurable for size (512 or 1024 bytes in highspeed mode, 64 bytes in full-speed mode for the non-isochronous types) and depth of buffering (double, triple, or quad). Endpoints EP4 and EP8 are fixed at 512 bytes, double-buffered in high-speed mode. They are fixed at 64 bytes, double-buffered in full-speed mode for the non-isochronous types. The bits in the EPxCFG registers control the following: ■ 88 Valid. Set to ‘1’ (default) to enable the endpoint. A nonvalid endpoint does not respond to host IN or OUT packets. Type. Two bits, TYPE1:0 (bits 5 and 4) set the endpoint type. ❐ 00 = invalid ❐ 01 = ISOCHRONOUS (EP2,4,6,8 only) ❐ 10 = BULK (default) ❐ 11 = INTERRUPT ■ Direction. 1 = IN, 0 = OUT. ■ Buffering. EP2 and EP6 only. Two bits, BUF1:0 control the depth of buffering. ❐ 00 = quad ❐ 01 = invalid ❐ 10 = double (default) ❐ 11 = triple ‘Buffering’ refers to the number of RAM blocks available to the endpoint. With double buffering, for example, USB data can fill or empty an endpoint buffer at the same time that another packet from the same endpoint fills or empties from the external logic. This technique maximizes performance EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Access to Endpoint Buffers by saving each side, USB and external-logic interface, from waiting for the other side. Multiple buffering is most effective when the providing and consuming rates are comparable but bursty (as is the case with USB and many other interfaces, such as disk drives). Assigning more RAM blocks (triple and quad buffering) provides more ‘smoothing’ of the bursty data rates. A simple way to determine the appropriate buffering depth is to start with the minimum, then increase it until no NAKs appear on the USB side and no wait states appear on the interface side. Note The Valid bit is ignored when buffer space is allocated by the EZ-USB (for example, BUF[1:0] takes precedence over the Valid bit). When you are not using all of the endpoints in the endpoint configuration, disable the unused endpoints by writing a zero into the “valid” bit of the corresponding EPxCFG register without disturbing the default state of the other bits in the register. For example, if the endpoint configuration 11 (see 1.17 EZUSB Endpoint Buffers on page 30), which utilizes only endpoints 2 and 8, must be used, configure the endpoints as follows. EP2CFG = 0xDB; SYNCDELAY; EP8CFG = 0x92; SYNCDELAY; EP4CFG &= 0x7F; SYNCDELAY; EP6CFG &=0x7F; SYNCDELAY; 8.5 CPU Access to EZ-USB Endpoint Data Endpoint data is visible to the CPU at the addresses shown in Table 8-3. Whenever the application calls for endpoint buffers smaller than the physical buffer sizes shown in Table 8-3, the CPU accesses the endpoint data starting from the lowest address in the buffer. For example, if EP2 has a reported MaxPacketSize of 512 bytes, the CPU accesses the data in the lower portion of the EP2 buffer (that is, from 0xF000 to 0xF1FF). Similarly, if the EZ-USB is operating in full-speed mode (which dictates a maximum bulk packet size of only 64 bytes), only the lower 64 bytes of the end- point (for example, 0xF000-0xF03F for EP2) are used for bulk data. Table 8-3. Endpoint Buffers in RAM Space Name Address Size (bytes) EPOBUF 0xE740-0xE77F 64 EP1OUTBUF 0xE780-0xE7BF 64 EP1INBUF 0xE7C0-0xE7FF 64 EP2FIFOBUF 0xF000-0xF3FF 1024 EP4FIFOBUF 0xF400-0xF7FF 1024 EP6FIFOBUF 0xF800-0xFBFF 1024 EP8FIFOBUF 0xFC00-0xFFFF 1024 Note EP0BUF is for the (optional) data stage of a Control transfer. The eight bytes of data from the Control packet appear in a separate EZ-USB RAM buffer called SETUPDAT, at 0xE6B8-0xE6BF. The CPU can only access the ‘active’ buffer of a multiplebuffered endpoint. In other words, firmware must treat a quad-buffered 512-byte endpoint as being only 512 bytes wide, even though the quad-buffered endpoint actually occupies 2048 bytes of RAM. Also, when EP2 and EP6 are configured such that EP4 and/or EP8 are unavailable, the firmware must never attempt to access the buffers corresponding to those unavailable endpoints. For example, if EP2 is configured for triple-buffered 1024byte operation, the firmware should access EP2 only at 0xF000-0xF3FF. The firmware should not access the EP4 or EP6 buffers in this configuration, since they do not exist (the RAM space which they would normally occupy is used to implement the EP2 triple-buffering). 8.6 CPU Control of EZ-USB Endpoints From the CPU’s point of view, the ‘small’ and ‘large’ endpoints operate slightly differently, due to the multiple-packet buffering scheme used by the large endpoints. The CPU uses internal registers to control the flow of endpoint data. Since the small endpoints EP0 and EP1 are programmed differently than the large endpoints EP2, EP4, EP6, and EP8, these registers fall into three categories: ■ Registers that apply to the small endpoints (EP0, EP1IN, and EP1OUT) ■ Registers that apply to the large endpoints (EP2, EP4, EP6, and EP8) ■ Registers that apply to both sets of endpoints EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 89 Access to Endpoint Buffers 8.6.1 Registers That Control EP0, EP1IN, and EP1OUT is automatically set to ‘1’ when the firmware writes to EP0BCL, and Busy is automatically cleared to ‘0’ after the data has been correctly received and ACK’d. When Busy transitions to zero, the EZ-USB also generates an EP0OUT interrupt request. Table 8-4. Registers that control EP0 and EP1 Address Name Function 0xE6A0 EP0CS EP0 HSNAK, Busy, Stall 0xE68A EP0BCH EP0 Byte Count (MSB) 0xE68B EP0BCL EP0 Byte Count (LSB) 0xE65C USBIE EP0 Interrupt Enables 0xE65D USBIRQ EP0 Interrupt Requests SFR 0xBA EP01STAT Endpoint 0 and 1 Status 0xE6A1 EP1OUTCS EP1OUT Busy, Stall 0xE68D EP1OUTBC EP1OUT Byte Count 0xE6A2 EP1INCS EP1IN Busy, Stall 0xE68F EP1INBC EP1IN Byte Count 8.6.1.1 EP0CS Note The EZ-USB’s autovectored interrupt system automatically transfers control to the appropriate Interrupt Service Routine (ISR) for the endpoint requiring service. The Interrupts chapter on page 59 describes this mechanism. STALL Firmware uses this register to coordinate Control transfers over endpoint 0. The EP0CS register contains three bits: HSNAK, Busy and Stall. Set STALL=1 to instruct the EZ-USB to return the Stall response to a Control transfer. This is generally done when the firmware does not recognize an incoming USB request. According to the USB specification, endpoint zero must always accept transfers, so Stall is automatically cleared to ‘0’ whenever a SETUP token arrives. If it is desired to stall a transfer and also clear HSNAK to ‘0’ (by writing a ‘1’ to it), the firmware should set STALL=1 first, in order to ensure that the Stall bit is set before the ‘acknowledge’ phase of the Control transfer can complete. 8.6.1.2 HSNAK HSNAK is automatically set to ‘1’ whenever the SETUP token of a Control transfer arrives. The EZ-USB logic automatically NAKs the status (handshake) stage of the Control transfer until the firmware clears the HSNAK bit by writing ‘1’ to it. This mechanism gives the firmware a chance to hold off subsequent transfers until it completes the actions required by the Control transfer. Note Firmware must clear the HSNAK bit after servicing every Control transfer. BUSY The read-only Busy bit is relevant only for the data stage of a Control transfer. BUSY=1 indicates that the endpoint is currently being serviced by USB, so firmware should not access the endpoint data. ‘Busy’ is automatically cleared to ‘0’ whenever the SETUP token of a Control transfer arrives. The Busy bit is set to ‘1’ under different conditions for IN and OUT transfers. For EP0 IN transfers, EZ-USB logic will NAK all IN tokens to EP0 until the firmware has ‘armed’ EP0 for IN transfers by writing to the EP0BCH:L Byte Count register, which sets BUSY=1 to indicate that firmware should not access the data. Once the endpoint data is sent and acknowledged, Busy is automatically cleared to ‘0’ and the EP0IN interrupt request bit is asserted. After Busy is automatically cleared to ‘0’, the firmware may refill the EP0IN buffer. For EP0 OUT transfers, EZ-USB logic will NAK all OUT tokens to EP0 until the firmware has ‘armed’ EP0 for OUT transfers by writing any value to the EP0BCL register. Busy 90 EP0BCH and EP0BCL These are the byte count registers for bytes sent as the optional data stage of a Control transfer. Although the EP0 buffer is only 64 bytes wide, the byte count registers are 16 bits wide to allow using the Setup Data Pointer to send USB IN data records that consist of multiple packets. To use the Setup Data Pointer in its most-general mode, firmware clears the SUDPTR AUTO bit and writes the wordaligned address of a data block into the Setup Data Pointer, then loads the EP0BCH:L registers with the total number of bytes to transfer. The EZ-USB automatically transfers the entire block, partitioning the data into MaxPacketSize packets as necessary. Note The Setup Data Pointer is the subject of section 8.7 The Setup Data Pointer on page 95. For IN transfers without using the Setup Data Pointer, firmware loads data into EP0BUF, then writes the number of bytes to transfer into EP0BCH and EP0BCL. The packet is armed for IN transfer when the firmware writes to EP0BCL, so EP0BCH should always be loaded first. These transfers are always 64 bytes or less, so EP0BCH must be loaded with ‘0’ (and EP0BCL must be in the range [0-64]). EP0BCH holds that zero value until firmware overwrites it. For EP0 OUT transfers, the byte count registers indicate the number of bytes received in EP0BUF. Byte counts for EP0 OUT transfers are always 64 or fewer, so EP0BCH is always zero after an OUT transfer. To re-arm the EP0 buffer for a future OUT transfer, the firmware simply writes any value to EP0BCL. Note The EP0BCH register must be initialized on reset, since its power-on-reset state is undefined. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Access to Endpoint Buffers 8.6.1.3 USBIE, USBIRQ Three interrupts — SUTOK, SUDAV, and EP0ACK — are used to manage Control transfers over endpoint zero. The individual enables for these three interrupt sources are in the USBIE register, and the interrupt-request flags are in the USBIRQ register. Each of the three interrupts signals the completion of a different stage of a Control transfer. Firmware arms the endpoint for OUT transfers by writing any value to the byte count register EP1OUTBC, which automatically sets BUSY=1. At power-on (or whenever a 0-to-1 transition occurs on the RESET# pin), the Busy bit is set to ‘0’, so the EZ-USB will NAK all EP1OUT transfers until the firmware arms EP1OUT by writing any value to EP1OUTBC. STALL ■ SUTOK. (Setup Token) asserts when EZ-USB receives the SETUP token. ■ SUDAV. (Setup Data Available) asserts when EZ-USB logic has loaded the eight bytes from the SETUP stage into the 8-byte buffer at SETUPDAT. Firmware sets STALL=1 to instruct the EZ-USB to return the Stall PID (instead of ACK or NAK) in response to an EP1OUT transfer. The EZ-USB continues to respond to EP1OUT transfers with the Stall PID until the firmware clears this bit. ■ EP0ACK. (Endpoint Zero Acknowledge) asserts when the handshake stage has completed. 8.6.1.6 EP1OUTBC The SUTOK interrupt is not normally used; it is provided for debug and diagnostic purposes. Firmware generally services the Control transfer by responding to the SUDAV interrupt, since this interrupt fires only after the eight setup bytes are available for examination in the SETUPDAT buffer. Firmware may read this 7-bit register to determine the number of bytes (0-64) in EP1OUTBUF. 8.6.1.4 8.6.1.7 EP01STAT The Busy bits in EP0CS, EP1OUTCS, and EP1INCS (described later in this chapter) are replicated in this SFR; they are provided here in order to allow faster access (via the MOV instruction rather than MOVX) to those bits. Three status bits are provided in the EP01STAT register; the status bits are the following: ■ EP1INBSY. 1 = EP1IN is busy ■ EP1OUTBSY. 1 = EP1OUT is busy ■ EP0BSY. 1 = EP0 is busy 8.6.1.5 EP1OUTCS This register is used to coordinate Bulk or Interrupt transfers over EP1OUT. The EP1OUTCS register contains two bits, Busy and Stall. BUSY This bit indicates when the firmware can read data from the Endpoint 1 OUT buffer. BUSY=1 means that the SIE ‘owns’ the buffer, so firmware should not read (or write) the buffer. BUSY=0 means that the firmware may read from (or write to) the buffer. A 1-to-0 Busy transition asserts the EP1OUT interrupt request, signaling that new EP1OUT data is available. ‘Busy’ is automatically cleared to ‘0’ after the EZ-USB verifies the OUT data for accuracy and ACKs the transfer. If a transmission error occurs, the EZ-USB automatically retries the transfer; error recovery is transparent to the firmware. Firmware writes any value to EP1OUTBC to arm an EP1OUT transfer. EP1INCS This register is used to coordinate Bulk or Interrupt transfers over EP1IN. The EP1INCS register contains two bits: Busy and Stall. BUSY This bit indicates when the firmware can load data into the Endpoint 1 IN buffer. BUSY=1 means that the SIE ‘owns’ the buffer, so firmware should not write (or read) the buffer. BUSY=0 means that the firmware may write data into (or read from) the buffer. A 1-to-0 Busy transition asserts the EP1IN interrupt request, signaling that the EP1IN buffer is free and ready to be loaded with new data. The firmware schedules an IN transfer by loading up to 64 bytes of data into EP1INBUF, then writing the byte count register EP1INBC with the number of bytes loaded (0-64). Writing the byte count register automatically sets BUSY=1, indicating that the transfer over USB is pending. After the EZ-USB subsequently receives an IN token, sends the data, and successfully receives an ACK from the host, Busy is automatically cleared to ‘0’ to indicate that the buffer is ready to accept more data. This generates the EP1IN interrupt request, which signals that the buffer is again available. At power on, or whenever a 0-to-1 transition occurs on the RESET# pin, the Busy bit is set to ‘0’, meaning that the EZUSB will NAK all EP1IN transfers until the firmware arms the endpoint by writing the number of bytes to transfer into the EP1INBC register. STALL Firmware sets STALL=1 to instruct the EZ-USB to return the Stall PID (instead of ACK or NAK) in response to an EP1IN EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 91 Access to Endpoint Buffers transfer. The EZ-USB continues to respond to EP1IN transfers with the Stall PID until the firmware clears this bit. 8.6.1.8 EP1INBC Firmware arms an IN transfer by loading this 7-bit register with the number of bytes (0-64) it has previously loaded into EP1INBUF. 8.6.2 Registers That Control EP2, EP4, EP6, EP8 Note In order to achieve the high transfer rates required by USB 2.0’s high-speed mode, and to maximize full-speed transfer rates, the EZ-USB’s CPU should not participate in transfers to and from the ‘large’ endpoints. Instead, those endpoints are usually connected directly to external logic (see chapters Slave FIFOs, on page 99 and General Programmable Interface, on page 121 for details). Although especially suited for high-speed (480 Mbits/sec) transfers, the functionality of these endpoints is identical at full speed, except for packet size. Some applications, however, may require the firmware to have at least some small amount of control over the large endpoints. For those applications, the EZ-USB provides the registers shown in Table 8-5. Table 8-5. Registers that Control EP2,EP4,EP6 and EP8 Function 8.6.2.1 EP2468STAT The Endpoint Full and Endpoint Empty status bits (described below, in section Section 8.6.2.3) are replicated here in order to allow faster access by the firmware. 8.6.2.2 EP2ISOINPKTS, EP4ISOINPKTS, EP6ISOINPKTS, EP8ISOINPKTS These registers only apply to ISOCHRONOUS IN endpoints. Refer to the EPxISOINPKTS register descriptions in the Registers chapter on page 211 for details. FX2LP has the capability of sending a zero-length packet (ZLP) when the host issues an IN token to an isochronous IN endpoint and the SIE does not have any data available. These registers do not affect full-speed (12 Mbps) operation; full-speed isochronous transfers are always fixed at one packet per frame. 8.6.2.3 EP2CS, EP4CS, EP6CS, EP8CS Because the four large EZ-USB endpoints offer double, triple or quad buffering, a single Busy bit is not sufficient to convey the state of these endpoint buffers. Therefore, these endpoints have multiple bits (NPAK, FULL, EMPTY) that can be inspected in order to determine the state of the endpoint buffers. Note Multiple-buffered endpoint data must be read or written only at the buffer addresses given in Table 8-3 on page 89. The EZ-USB automatically switches the multiple buffers in and out of the single addressable buffer space. Address Name SFR 0xAA EP2468STAT EP2, 4, 6, 8 empty/full 0xE648 INPKTEND force end of IN packet 0xE649 OUTPKTEND skip or commit an OUT packet 0xE640 EP2ISOINPKTS ISO IN packets per frame or microframe 0xE6A3 EP2CS npak, full, empty, stall NPAK values have different interpretations for IN and OUT endpoints: 0xE690 EP2BCH byte count (H) ■ 0xE691 EP2BCL byte count (L) OUT Endpoints. NPAK indicates the number of packets received over USB and ready for the firmware to read. 0xE641 EP4ISOINPKTS ISO IN packets per frame or microframe ■ 0xE6A4 EP4CS npak, full, empty, stall IN Endpoints. NPAK indicates the number of IN packets committed to USB (i.e., loaded and armed for USB transfer), and thus unavailable to the firmware. 0xE694 EP4BCH byte count (H) 0xE695 EP4BCL byte count (L) 0xE642 EP6ISOINPKTS ISO IN packets per frame/microframe 0xE6A5 EP6CS npak, full, empty, stall 0xE698 EP6BCH byte count (H) 0xE699 EP6BCL byte count (L) 0xE643 EP8ISOINPKTS ISO IN packets per frame/microframe 0xE6A6 EP8CS npak, full, empty, stall 0xE69C EP8BCH byte count (H) 0xE69D EP8BCL byte count (L) NPAK[2:0] (EP2, EP6) and NPAK[1:0] (EP4, EP8) The NPAK fields differ in size to account for the depth of buffering available to the endpoints. Only double buffering is available for EP4 and EP8 (two NPAK bits), and up to quad buffering is available for EP2 and EP6 (three NPAK bits). FULL While FULL and EMPTY apply to transfers in both directions, ‘FULL’ is more useful for IN transfers. It has the same meaning as ‘Busy’, but applies to multiple-buffered IN endpoints. FULL=1 means that all buffers are committed to USB, and none are available for firmware access. For IN transfers, FULL=1 means that all buffers are committed to USB, so firmware should not load the endpoint buffer with any more data. When FULL=1, NPAK holds 2, 3, or 4 92 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Access to Endpoint Buffers depending on the buffering depth (double, triple or quad). This indicates that all buffers are in use by the USB transfer logic. As soon as one buffer becomes available, FULL is cleared to ‘0’ and NPAK is decremented by one, indicating that all but one of the buffers are committed to USB (i.e., one is available for firmware access). As IN buffers are transferred over USB, NPAK decrements to indicate the number still pending, until all are sent and NPAK=0. In some cases, it may be desirable to insert a ‘hook’ into this data flow, so that – rather than the EZ-USB automatically committing the packets to the outside interface as they are received over USB – firmware receives an interrupt for every received OUT packet, then has the option either to commit the packet to the outside interface (the output FIFO), or to discard it. The firmware might, for example, inspect a packet header to make this skip/commit decision. EMPTY To enable this ‘hook’, the AUTOOUT bit is cleared to ‘0’. If AUTOOUT = 0 and an OUT endpoint is re-armed by writing to its low byte-count register, the actual value written to the register becomes significant: While FULL and EMPTY apply to transfers in both directions, EMPTY is more useful for OUT transfers. EMPTY=1 means that the buffers are empty; all received packets (2, 3, or 4, depending on the buffering depth) have been serviced. ■ If the SKIP bit (bit 7 of each EPxBCL register) is cleared to ‘0’, the packet is committed to the output FIFO and thereby made available to the FIFO’s master (either external logic or the internal GPIF). ■ If the SKIP bit is set to ‘1’, the just-received OUT packet is not committed to the output FIFO for transfer to the external logic; instead, the packet is ignored, its buffer is immediately made available for the next OUT packet, and the output FIFO (and external logic) never even ‘knows’ that it arrived. STALL Firmware sets STALL=1 to instruct the EZ-USB to return the Stall PID (instead of ACK or NAK) in response to an IN or OUT transfer. The EZ-USB continues to respond to IN or OUT transfers with the Stall PID until the firmware clears this bit. 8.6.2.4 EP2BCH:L, EP4BCH:L, EP6BCH:L, EP8BCH:L Endpoints EP2 and EP6 have 11-bit byte count registers to account for their maximum buffer sizes of 1024 bytes. Endpoints EP4 and EP8 have 10-bit byte count registers to account for their maximum buffer sizes of 512 bytes. The byte count registers function similarly to the EP0 and EP1 byte count registers: ■ For an IN transfer, the firmware loads the byte count registers to arm the endpoint (if EPxBCH must be loaded, it should be loaded first, since the endpoint is armed when EPxBCL is loaded). Note The AUTOOUT bit appears in bit 4 of the Endpoint FIFO Configuration Registers EP2FIFOCFG, EP4FIFOCFG, EP6FIFOCFG and EP8FIFOCFG. 8.6.3 Registers That Control All Endpoints Table 8-6. Registers That Control All Endpoints Addres s Name Description 0xE658 IBNIE IN-BULK-NAK individual interrupt enables 0xE659 IBNIRQ IN-BULK-NAK individual interrupt requests 0xE65A NAKIE PING plus combined IBN-interrupt enable 0xE65B NAKIRQ PING plus combined IBN-interrupt request 0xE65C USBIE SUTOK, SUDAV, EP0-ACK, SOF interrupt enables 0xE65D USBIRQ SUTOK, SUDAV, EP0-ACK, and SOF interrupt requests SKIP 0xE65E EPIE Endpoint interrupt enables Normally, the CPU interface and outside-logic interface to the endpoint FIFOs are independent, with separate sets of control bits for each interface. The AUTOOUT mode and the SKIP bit implement an ‘overlap’ between these two domains. A brief introduction to the AUTOOUT mode is given below; full details appear in the Slave FIFOs chapter on page 99 0xE65F EPIRQ Endpoint interrupt requests 0xE662 USBERRIE USB error interrupt enables 0xE663 USBERRIE USB error interrupt requests 0xE664 ERRCNTLIM USB error counter and limit 0xE665 CLRERRCNT Clear error count 0xE683 TOGCTL Endpoint data toggles When outside logic is connected to the interface FIFOs, the normal data flow is for the EZ-USB to commit OUT data packets to the outside interface FIFO as they become available. This ensures an uninterrupted flow of OUT data from the host to the outside world, and preserves the high bandwidth required by the high-speed mode. 8.6.3.1 ■ For an OUT transfer, the firmware reads the byte count registers to determine the number of bytes in the buffer, then writes any value to the low byte count register to rearm the endpoint. See the ‘Skip’ section, below, for further details. IBNIE, IBNIRQ, NAKIE, NAKIRQ These registers contain the interrupt-enable and interruptrequest bits for two endpoint conditions: IN-BULK-NAK and PING. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 93 Access to Endpoint Buffers IN-BULK-NAK When the host requests an IN packet from an EZ-USB BULK endpoint, the endpoint NAKs (returns the NAK PID) until the endpoint buffer is filled with data and armed for transfer, at which point the EZ-USB answers the IN request with data. Until the endpoint is armed, a flood of IN-NAKs can tie up bus bandwidth. Therefore, if the IN endpoints are not always kept full and armed, it may be useful to know when the host is ‘knocking at the door’, requesting IN data. The IN-BULK-NAK (IBN) interrupt provides this notification. The IBN interrupt fires whenever a Bulk endpoint NAKs an IN request. The IBNIE/IBNIRQ registers contain individual enable and request bits per endpoint, and the NAKIE/ NAKIRQ registers each contain a single bit, IBN, that is the OR’d combination of the individual bits in IBNIE/IBNIRQ, respectively. Firmware enables an interrupt by setting the enable bit high, and clears an interrupt request bit by writing a ‘1’ to it. Note The EZ-USB interrupt system is described in detail in the Interrupts chapter on page 59 The IBNIE register contains an individual interrupt-enable bit for each endpoint: EP0, EP1, EP2, EP4, EP6, and EP8. These bits are valid only if the endpoint is configured as a Bulk or Interrupt endpoint. The IBNIRQ register similarly contains individual interrupt request bits for the six endpoints. The IBN interrupt-service routine should take the following actions, in this order: 1. Clear the USB (INT2) interrupt request (by writing ‘0’ to it). 2. Inspect the endpoint bits in IBNIRQ to determine which IN endpoint just NAK’d. 3. Take the required action (set a flag, arm the endpoint, etc.), then clear the individual IBN bit in IBNIRQ for the serviced endpoint (by writing ‘1’ to it). 4. Repeat steps (2) and (3) for any other endpoints that require IBN service, until all IRQ bits are cleared. 5. Clear the IBN bit in the NAKIRQ register (by writing ‘1’ to it). Note Because the IBN bit represents the OR’d combination of the individual IBN interrupt requests, it does not ‘fire’ again until all individual IBN interrupt requests have been serviced and cleared. PING point is NAKing (not ready). While the endpoint is not ready, the host repeatedly sends all the OUT data; if it is repeatedly NAK’d, bus bandwidth is wasted. USB 2.0 introduced a new mechanism, called PING, that makes better use of bus bandwidth for ‘unready’ Bulk OUT endpoints. At high speed, the host can ‘ping’ a Bulk OUT endpoint to determine if it is ready to accept data, holding off the OUT data transfer until it can actually be accepted. The host sends a PING token, and the FX2LP responds with: ■ An ACK to indicate that there is space in the OUT endpoint buffer ■ A NAK to indicate ‘not ready, try later’. The PING interrupts indicate that an FX2LP Bulk OUT endpoint returned a NAK in response to a PING. Note PING only applies at high speed (480 Mbps). Unlike the IBN bits, which are combined into a single IBN interrupt for all endpoints, each Bulk OUT endpoint has a separate PING interrupt (EP0PING, EP1PING, EP2PING, …, EP8PING). Interrupt-enables for the individual interrupts are in the NAKIE register; the interrupt-requests are in the NAKIRQ register. The interrupt service routine for the PING interrupts should perform the following steps, in the order shown: 1. Clear the INT2 interrupt request. 2. Take the action for the requesting endpoint. 3. Clear the appropriate EPxPING bit for the endpoint. 8.6.3.2 EPIE, EPIRQ These registers are used to manage interrupts from the EZUSB endpoints. In general, an interrupt request is asserted whenever the following occurs: ■ An IN endpoint buffer becomes available for the CPU to load. ■ An OUT endpoint has new data for the CPU to read. For the small endpoints (EP0 and EP1IN/OUT), these conditions are synonymous with the endpoint Busy bit making a 1-to-0 transition (busy to not-busy). As with all EZ-USB interrupts, this one is enabled by writing a ‘1’ to its enable bit, and the interrupt flag is cleared by writing a ‘1’ to it. Note Do not attempt to clear an IRQ bit by reading the IRQ register, OR’ing its contents with a bit mask (for example, 00010000), then writing the contents back to the register. Since a ‘1’ clears an IRQ bit, this clears all the asserted IRQ bits rather than just the desired one. Instead, simply write a single ‘1’ (for example, 00010000) to the register. PING is the ‘flip side’ of IBN; it is used for high-speed (480 Mbps) Bulk OUT transfers. Thus, PING is only applicable to the FX2LP. 8.6.3.3 When operating at full speed, every host OUT transfer consists of the OUT PID and the endpoint data, even if the end- These registers are used to monitor the ‘health’ of the USB connection between the EZ-USB and the host. 94 USBERRIE, USBERRIRQ, ERRCNTLIM, CLRERRCNT EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Access to Endpoint Buffers USBERRIE This register contains the interrupt-enable bits for the ‘Isochronous Endpoint Error’ interrupts and the ‘USB Error Limit’ interrupt. An ‘Isochronous Endpoint Error’ occurs when the FX2LP detects a PID sequencing error for a high-bandwidth, highspeed ISO endpoint. which is toggled between data packet transfers. There are certain times when the firmware must reset an endpoint’s data toggle bit to ‘0’: ■ After a configuration changes (for example, after the host issues a Set Configuration request). ■ After an interface’s alternate setting changes (i.e., after the host issues a Set Interface request). ■ After the host sends a ‘Clear Feature - Endpoint Stall’ request to an endpoint. USBERRIRQ This register contains the interrupt flags for the ‘Isochronous Endpoint Error’ interrupts and the ‘USB Error Limit’ interrupt. For the first two, the firmware must clear the data toggle bits for all endpoints contained in the affected interfaces. For the third, only one endpoint’s data toggle bit is cleared. ERRCNTLIM The TOGCTL register contains bits to set or clear an endpoint data toggle bit, as well as to read the current state of a toggle bit. EZ-USB firmware sets the USB error limit to any value from 1 to 15 by writing that value to the lower nibble of this register; when that many USB errors (CRC errors, Invalid PIDs, garbled packets, etc.) have occurred, the ‘USB Error Limit’ interrupt flag is set. At power-on-reset, the error limit defaults to 4 (0100 binary). The upper nibble of this register contains the current USB error count. CLRERRCNT Writing any value to this register clears the error count in the upper nibble of ERRCNTLIM. The lower nibble of ERRCNTLIM is not affected. 8.6.3.4 TOGCTL As described in the Introducing EZ-USB® chapter on page 13 the host and device maintain a data toggle bit, TOGCTL b7 8.7 At this writing, there is no known reason for firmware to set an endpoint toggle to ‘1’. Also, since the EZ-USB handles all data toggle management, normally there is no reason to know the state of a data toggle. These capabilities are included in the TOGCTL register for completeness and debug purposes. A two-step process is employed to clear an endpoint data toggle bit to ‘0’. First, writes the TOGCTL register with an endpoint address (EP3:EP0) plus a direction bit (I/O). Then, keeping the endpoint and direction bits the same, write a ‘1’ to the ‘R’ (reset) bit. For example, to clear the data toggle for EP6 configured as an ‘IN’ endpoint, write the following values sequentially to TOGCTL: ■ 00010110 ■ 00110110 Data Toggle Control b6 b5 b4 b3 E683 b2 b1 b0 Q S R I/O EP3 EP2 EP1 EP0 R R/W R/W R/W R/W R/W R/W R/W x x x x x x x x The Setup Data Pointer The USB host sends device requests using Control transfers over endpoint 0. Some requests require the EZ-USB to return data over EP0. During enumeration, for example, the host issues Get Descriptor requests that ask for the device’s capabilities and requirements. The returned data can span many packets, so it must be partitioned into packet-sized blocks, then the blocks must be sent at the appropriate times (for example, when the EP0 buffer becomes ready). Note For the Setup Data Pointer to work properly, EP0’s MaxPacketSize must be set to 64, and the address of SUDPTRH:L must be word-aligned (for example, the LSB of SUDPTRL must be ‘0’). The Setup Data Pointer automates this process of returning IN data over EP0, simplifying the firmware. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 95 Access to Endpoint Buffers Table 8-7 lists the registers which configure the Setup Data Pointer. In accordance with the USB Specification, the EZ-USB sends the smaller of these two length fields. Table 8-7. Registers Used To Control the Setup Data Pointer 8.7.2 Address Register Name SUDPTRH High address 0xE6B4 SUDPTRL Low address 0xE6B5 SUDPTRCTL The Setup Data Pointer can access data in either of two RAM spaces: Function 0xE6B3 SDPAUTO bit To send a block of data, the block’s word-aligned starting address is loaded into SUDPTRH:L. The block length must previously have been set; the method for accomplishing this depends on the state of the SDPAUTO bit: ■ SDPAUTO = 0 (Manual Mode): Used for general-purpose block transfers. Firmware writes the block length to EP0BCH:L. ■ SDPAUTO = 1 (Auto Mode): Used for sending Device, Configuration, String, Device Qualifier, and Other Speed Configuration descriptors only. The block length is automatically read from the ‘length’ field of the descriptor itself; no explicit loading of EP0BCH:L is necessary. Writing to SUDPTRL starts the transfer; the EZ-USB automatically sends the entire block, packetizing as necessary. For example, to answer a Get Descriptor - Device request, firmware sets SDPAUTO = 1, then loads the address of the device descriptor into SUDPTRH:L. The EZ-USB then automatically loads the EP0 data buffer with the required number of packets and transfers them to the host. To command the EZ-USB to ACK the status (handshake) packet, the firmware clears the HSNAK bit (by writing ‘1’ to it) before starting the Setup Data Pointer transfer. If the firmware needs to know when the transaction is complete (for example, sent and acknowledged), it can enable the EP0ACK interrupt before starting the Setup Data Pointer transfer. Note When SDPAUTO = 0, writing to EP0BCH:L only sets the block length; it does not arm the transfer (the transfer is armed by writing to SUDPTRL). Therefore, before performing an EP0 transfer which does not use the Setup Data Pointer (i.e., one which is meant to be armed by writing to EP0BCL), SDPAUTO must be set to ‘1’. 8.7.1 Transfer Length When the host makes any EP0IN request, the EZ-USB respects the following two length fields: ■ ■ 96 Accessible Memory Spaces the requested number of bytes (from the last two bytes of the SETUP packet received from the host) the available number of bytes, supplied either as a length field in the actual descriptor (SDPAUTO = 1) or in EP0BCH:L (SDPAUTO = 0) ■ On-chip Main RAM (16 KB at 0x0000-0x3FFF) ■ On-chip Scratch RAM (512 bytes at 0xE000-0xE1FF) Note The Setup Data Pointer cannot be used to access offchip memory at any address. 8.8 Autopointers Endpoint data is available to the CPU in RAM buffers (see Table 8-3 on page 89). In some cases, it is faster for the firmware to access endpoint data as though it were in a FIFO register. The EZ-USB provides two special data pointers, called ‘Autopointers’, that automatically increment after each byte transfer. Using the Autopointers, firmware can access contiguous blocks of on- or off-chip data memory as a FIFO. Each Autopointer is controlled by a 16-bit address register (AUTOPTRnH:L), a data register (XAUTODATn), and a control bit (APTRnINC). An additional control bit, APTREN, enables both Autopointers. A read from (or write to) an Autopointer data register actually accesses the address pointed to by the corresponding Autopointer address register, which increments on every dataregister access. To read or write a contiguous block of memory (for example, an endpoint buffer) using an Autopointer, load the Autopointer’s address register with the starting address of the block, then repeatedly read or write the Autopointer’s data register. The AUTOPTRnH:L registers may be written or read at any time to determine the current Autopointer address. Most of the Autopointer registers are in SFR Space for quick access; the data registers are available only in External Data space. Table 8-8. Registers that control the Autopointers Address Register Name Function SFR 0xAF AUTOPTRSETUP Increment/freeze, off-chip access enable SFR 0x9A AUTOPTR1H Address high SFR 0x9B AUTOPTR1L Address low 0xE67B XAUTODAT1 Data SFR 0x9D AUTOPTR2H Address high SFR 0x9E AUTOPTR2L Address low 0xE67C XAUTODAT2 Data The Autopointers are configured using three bits in the AUTOPTRSETUP register: one bit (APTREN) enables both EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Access to Endpoint Buffers autopointers, and two bits (one for each Autopointer, called APTR1INC and APTR2INC, respectively) control whether or not the address increments for every Autodata access. Enabling the Autopointers has one side effect: Any ‘code’ access (an instruction fetch, for instance) from addresses 0xE67B and 0xE67C returns the AUTODATA values, rather than the code-memory values at these two addresses. This introduces a two-byte ‘hole’ in the code memory. Note There is no 2-byte hole in the data memory at 0xE67B:E67C; the hole only appears in the program memory. Note The Autopointers must not be used to read or write registers in the 0xE600 to 0xE6FF range; Autopointer accesses within that range produce undefined results. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 97 Access to Endpoint Buffers 98 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 9. Slave FIFOs 9.1 Introduction Although some EZ-USB-based devices may use the EZ-USB’s CPU to process USB data directly (See chapter “Access to Endpoint Buffers” on page 87), most use the EZ-USB simply as a conduit between the USB and external data processing logic (for example, an ASIC or DSP, or the IDE controller on a hard disk drive). In devices with external data-processing logic, USB data flows between the host and that external logic — usually without any participation by the EZ-USB’s CPU — through the EZ-USB’s internal ‘endpoint FIFOs’. To the external logic, these endpoint FIFOs look like most others; they provide the usual timing signals, handshake lines (full, empty, programmable level), read and write strobes, output enable, and others. These FIFO signals must, of course, be controlled by a FIFO ‘master’. The EZ-USB’s General Programmable Interface (GPIF) can act as an ‘internal’ master when the EZ-USB is connected to external logic which does not include a standard FIFO interface (General Programmable Interface, on page 121 discusses the internal-master GPIF), or the FIFOs can be controlled by an external master. While its FIFOs are controlled by an external master, the EZ-USB is said to be in ‘Slave FIFO’ mode. This chapter provides details on the interface — both hardware and software — between the EZ-USB’s slave FIFOs and an ‘external’ master. 9.2 Hardware Figure 9-1 illustrates the four slave FIFOs. The figure shows the FIFOs operating in 16 bit mode, although they can also be configured for 8-bit operation. Figure 9-1. Slave FIFOs’ Role in the EZ-USB System CPU Slave FIFOs Device Pins FD[15:0] 30/48MHz IFCLK 5 - 48MHz where: x = 2, 4, 6, or 8 Slave FIFOs WORDWIDE = 1 EPxFIFOBUF EPx - EF, FF, PF CPU EPxBCH:L EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD / SLCS# SLOE SLRD SLWR FIFOADR[1:0] INPKTEND PKTEND PORT I /O EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 99 Slave FIFOs Table 9-1 lists the registers associated with the slave FIFO hardware. The registers are fully described in the Registers chapter on page 211 Figure 9-2. EZ-USB Slave Mode Full Featured Interface Pins IF CLK Table 9-1. Registers Associated with Slave FIFO Hardware F LAG A Register Name IFCONFIG EPxFIFOPFH/L PINFLAGSAB PORTACFG PINFLAGSCD INPKTEND FIFORESET EPxFIFOIE FIFOPINPOLAR EPxFIFOIRQ EPxCFG EPxFIFOBCH:L EPxFIFOCFG EPxFLAGS EPxAUTOINLENH:L EPxFIFOBUF F LAG B F LAG C EZ-USB Slav e Mode F LAG D / SLCS# SLO E EXT. Mas ter SLRD SLW R 9.2.1 PKT END F D[15:0] Slave FIFO Pins F IF O ADR[1:0] The EZ-USB comes out of reset with its I/O pins configured in ‘Ports’ mode, not ‘Slave FIFO’ mode. To configure the pins for Slave FIFO mode, the IFCFG[1:0] bits in the IFCONFIG register must be set to ‘11’ (see Table 13-10, “IFCFG Selection of Port I/O Pin Functions,” on page 188 for details). When IFCFG1:0 = 11, the Slave FIFO interface pins are presented to the external master, as shown in Figure 9-2. External logic accesses the FIFOs through an 8- or 16-bit wide data bus, FD. The data bus is bidirectional, with its output drivers controlled by the SLOE pin. The FIFOADR[1:0] pins select which of the four FIFOs is connected to the FD bus and is being controlled by the external master. In asynchronous mode (IFCONFIG.3 = 1), SLRD and SLWR are read and write strobes; in synchronous mode (IFCONFIG.3 = 0), SLRD and SLWR are enables for the IFCLK clock pin. Figure 9-3. Asynchronous vs. Synchronous Timing Models IFCLK SLRD SLWR SLRD SLWR Asynchronous Synchronous 100 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.2.2 FIFO Data Bus In either mode, the FIFOADR[1:0] pins select which of the four FIFOs is internally connected to the FD pins. The FIFO Data (FD) bus, FD[x:0], can be either 8- or 16-bits wide. The width is selected via each FIFO’s WORDWIDE bit, (EPxFIFOCFG.0): ■ WORDWIDE = 0: 8-bit mode. FD[7:0] replaces Port B. See Figure 9-4. ■ WORDWIDE = 1: 16-bit mode. FD[15:8] replaces Port D and FD[7:0] replaces Port B. See Figure 9-5. FD[7:0] is the LSB of the word, and FD[15:8] is the MSB of the word. Note If all of the FIFOs are configured for 8-bit mode, Port D remains available for use as general-purpose I/O. If any FIFO is configured for 16-bit mode, Port D is unavailable for use as general-purpose I/O regardless of which FIFO is currently selected via the FIFOADR[1:0] pins. Note In 16-bit mode, the EZ-USB only transfers even-sized packets of data across the FD bus. This should be considered when the EZ-USB interfaces to host software that sends or receives odd sized packets. On a hard reset, the FIFO data bus defaults to 16-bit mode (WORDWIDE = 1) for all FIFOs. Figure 9-4. 8-bit Mode Slave FIFOs, WORDWIDE = 0 EZ-USB Regi sters Sl ave FIFOs Devi ce Pi ns 30/48M Hz IFCLK 5 - 48M Hz FIFOADR[1:0] EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF FLAGA FLAGB FLAGC FLAGD/SLCS# EP2 EP4 EP6 EP8 SLOE SLRD SLWR PKT END FD[7:0] Figure 9-5. 16-bit Mode Slave FIFOs, WORDWIDE = 1 EZ-USB Registers Slave FIFOs Device Pins 30/48MHz IFCLK 5 - 48MHz FIFOADR[1:0] EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD/SLCS# SLOE SLRD SLWR PKTEND FD[15:0] EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 101 Slave FIFOs 9.2.3 Interface Clock IFCONFIG.6 selects between the 30- and 48-MHz internal clock: 0 = 30 MHz, 1 = 48 MHz. This bit has no effect when IFCONFIG.7 = 0. The slave FIFO interface can be clocked from either an internal or an external source. The EZ-USB’s internal clock source can be configured to run at either 30 or 48 MHz, and it can optionally be output on the interface clock (IFCLK) pin. If the EZ-USB is configured to use an external clock source, the IFCLK pin can be driven at any frequency between 5 MHz and 48 MHz. On a hard reset, the EZ-USB defaults to the internal source at 48 MHz, normal polarity, with the IFCLK output disabled. See Figure 9-6. IFCONFIG.5 is the output enable for the internal clock source: 0 = disable, 1 = enable. This bit must not be set to ‘1’ when IFCONFIG.7 = 0. IFCONFIG.4 inverts the polarity of the interface clock (either internal or external): 0 = normal, 1 = inverted. IFCLK inversion can make it easier to interface the EZ-USB with certain external circuitry. When an internal IFCLK is used (IFCONFIG.7 = 1), IFCONFIG.4 only affects the IFCLK output polarity if IFCONFIG.5 = 1. Figure 9-7 demonstrates the use of IFCLK output inversion in order to ensure a long enough setup time (ts) for reading the EZ-USB’s FIFO flags. IFCONFIG.7 selects between internal and external sources: 0 = external, 1 = internal. If an external IFCLK is chosen, it must be free running at a minimum frequency of 5 MHz. In addition, in order to provide synchronization for the internal endpoint FIFO logic, the external IFCLK source must be present before the firmware sets IFCONFIG.7 = 0. Note When IFCLK is configured as an input, the minimum external frequency that can be applied to it is 5 MHz. This clock must be applied prior to initialization of the GPIF; only interruptions of it lower the overall frequency, causing violations of the minimum frequency requirement. Figure 9-6. IFCLK Configuration IFCFG .6 30 M Hz 48 M Hz IFCFG .4 0 1 IFC FG .5 0 1 IFCLK Pin IFCFG .7 IFCFG .4 Internal IFCLK Signal 1 0 0 1 Figure 9-7. Satisfying Setup Timing by Inverting the IFCLK Output Internal IFCLK Signal Inverted IFCLK Output FIFO Flag EZ-USB Asserts Flag 102 ts Master Samples Flag EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.2.4 FIFO Flag Pins (FLAGA, FLAGB, FLAGC, FLAGD) Four pins — FLAGA, FLAGB, FLAGC, and FLAGD (see Figure 9-7) — report the status of the EZ-USB’s FIFOs; in addition to the usual ‘FIFO full’ and ‘FIFO empty’ signals, there is also a signal which indicates that a FIFO has filled to a user-programmable level. The external master typically monitors the ‘empty’ flag (EF) of OUT endpoints and the full (FF) flag of IN endpoints; the programmable level flag (PF) is equally useful for either type of endpoint (it can, for instance, give advance warning that an OUT endpoint is almost empty or that an IN endpoint is almost full). The FLAGA, FLAGB, and FLAGC pins can operate in either of two modes: Indexed or Fixed, as selected via the PINFLAGSAB and PINFLAGSCD registers. The FLAGD pin operates in Fixed mode only. FLAGA-FLAGC pins can be configured independently; some pins can be in Fixed mode while others are in Indexed mode. See the PINFLAGSAB and PINFLAGSCD register descriptions in the Registers chapter on page 211 for complete details. Flag pins configured for Indexed mode report the status of the FIFO currently selected by the FIFOADR[1:0] pins. When configured for Indexed mode, FLAGA reports the programmable level status, FLAGB reports the ‘full’ status, and FLAGC reports the ‘empty’ status. Flag pins configured for Fixed mode report one of the three conditions for a specific FIFO, regardless of the state of the FIFOADR[1:0] pins. The condition and FIFO are userselectable. For example, FLAGA could be configured to report FIFO2’s ‘empty’ status, FLAGB to report FIFO4’s ‘empty’ status, FLAGC to report FIFO4’s ‘programmable level’ status, and FLAGD to report FIFO6’s ‘full’ status. The polarity of the ‘empty’ and ‘full’ flag pins defaults to active-low but may be inverted via the FIFOPINPOLAR register. On a hard reset, the FIFO flags are configured for Indexed operation. Figure 9-8. FLAGx Pins EZ-USB Registers Slave FIFOs Device Pins 30/48MHz IFCLK 5 - 48MHz FIFOADR[1:0] EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD/SLCS# SLOE SLRD SLWR PKTEND FD[15:0] 9.2.5 Control Pins (SLOE, SLRD, SLWR, PKTEND, FIFOADR[1:0]) The Slave FIFO ‘control’ pins are SLOE (Slave Output Enable), SLRD (Slave Read), SLWR (Slave Write), PKTEND (Packet End), and FIFOADR[1:0] (FIFO Select). ‘Read’ and ‘Write’ are from the external master’s point of view; the external master reads from OUT endpoints and writes to IN endpoints. See Figure 9-9 on page 104. Slave Output Enable and Slave Read — SLOE and SLRD: In synchronous mode (IFCONFIG.3 = 0), the FIFO pointer is incremented on each rising edge of IFCLK while SLRD is asserted. In asynchronous mode (IFCONFIG.3 = 1), the FIFO pointer is incremented on each asserted-to-deasserted transition of SLRD. The SLOE pin enables the FD outputs. In synchronous mode, when SLOE is asserted, this causes the FD bus to be driven with the data that the FIFO pointer is currently pointing to. The data is pre-fetched and is output only when SLOE is asserted. In asynchronous mode, the data is not pre-fetched, and SLRD must be asserted when SLOE is asserted for the FD bus to be driven with the data that the FIFO pointer is currently pointing to. SLOE has no other function besides enabling the FD bus to be in a driven state. By default, SLOE and SLRD are active-low; their polarities can be changed via the FIFOPINPOLAR register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 103 Slave FIFOs Slave Write — SLWR In synchronous mode (IFCONFIG.3 = 0), data on the FD bus is written to the FIFO (and the FIFO pointer is incremented) on each rising edge of IFCLK while SLWR is asserted. In asynchronous mode (IFCONFIG.3 = 1), data on the FD bus is written to the FIFO (and the FIFO pointer is incremented) on each asserted-to-deasserted transition of SLWR. By default, SLWR is active-low; its polarity can be changed via the FIFOPINPOLAR register. assertion. PKTEND can be asserted anytime. In asynchronous mode, SLWR and PKTEND should not be pulsed at the same time. PKTEND should be asserted after SLWR has been deasserted for the minimum deasserted pulse width. In both modes, FIFOADR[1:0] should be held constant during the PKTEND pin assertion. Figure 9-9. Slave FIFO Control Pins EZ-USB Registers Slave FIFOs Device Pins 30/48MHz IFCLK FIFOADR[1:0]: The FIFOADR[1:0] pins select which of the four FIFOs is connected to the FD bus (and, if the FIFO flags are operating in Indexed mode, they select which FIFO’s flags are presented on the FLAGx pins): Table 9-2. FIFO Selection via FIFOADR[1:0] FIFOADR[1:0] Selected FIFO 00 EP2 01 EP4 10 EP6 11 EP8 5 - 48MHz FIFOADR[1:0] EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD/SLCS# SLOE SLRD SLWR PKTEND FD[15:0] PKTEND An external master asserts the PKTEND pin to commit an IN packet to USB regardless of the packet’s length. PKTEND is usually used when the master wishes to send a ‘short’ packet (for example, a packet smaller than the size specified in the EPxAUTOINLENH:L registers). For example: Assume that EP4AUTOINLENH:L is set to the default of 512 bytes. If AUTOIN = 1, the external master can stream data to FIFO4 continuously, and (absent any bottlenecks in the data path) the EZ-USB automatically commits a packet to USB whenever the FIFO fills with 512 bytes. If the master wants to send a stream of data whose length is not a multiple of 512, the last packet is not be automatically committed to USB because it is smaller than 512 bytes. To commit that last packet, the master can do one of two things: It can pad the packet with dummy data in order to make it exactly 512 bytes long, or it can write the short packet to the FIFO, then pulse the PKTEND pin. 9.2.6 Slave FIFO Chip Select The Slave FIFO Chip Select (SLCS#) pin is an alternate function of pin PA7; it is enabled via the PORTACFG.6 bit (see section 13.4.1 Port A Alternate Functions on page 185). The SLCS# pin allows external logic to effectively remove the EZ-USB from the FIFO Data bus, in order to, for example, share that bus among multiple slave devices. For applications that do not need to share the FD bus among multiple slave devices, the SLCS# pin can be tied to GND to permanently select the EZ-USB slave FIFO interface. This configuration is assumed for the interface and timing examples that follow. While the SLCS# pin is pulled high by external logic, the EZUSB floats its FD[x:0] pins and ignores the SLOE, SLRD, SLWR, and PKTEND pins. If the FIFO is configured to allow zero-length packets (EPxFIFOCFG.2 = 1), pulsing the PKTEND pin when a FIFO buffer is available commits a zero-length packet. By default, PKTEND is active-low; its polarity can be changed via the FIFOPINPOLAR register. Note The PKTEND pin must not be asserted unless a buffer is available, even if only a zero-length packet is being committed. The ‘full’ flag may be used to determine whether a buffer is available. Note In synchronous mode, there is no specific timing requirement for PKTEND assertion with respect to SLWR 104 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.2.7 Implementing Synchronous Slave FIFO Writes Figure 9-10. Interface Pins: Synchronous FIFO Writes STATE 4: If more data to write, transition to State 2 else transition to IDLE. Figure 9-11. State Machine: Synchronous FIFO Writes Full IFCLK 5-48MHz FIFOADR[1:0] FLAGB FULL FLAGC EMPTY State 3 Launch EZ-USB Slave Mode State 1 SLWR PKTEND Done State 2 State 4 EXT. Master FD[15:0] In order to implement synchronous FIFO writes, a typical sequence of events for the external master is: IDLE: When a write event occurs, transition to State 1. STATE 1: Point to IN FIFO, assert FIFOADR[1:0] (setup time must be met with respect to the rising edge of IFCLK), transition to State 2. STATE 2: If FIFO-Full flag is false (FIFO not full), transition to State 3 else remain in State 2. Figures 9-12 to 9-14 show timing examples of an external master performing synchronous FIFO writes to EP8. These examples assume that EP8 is configured as IN, Bulk, 512 bytes buffer size, 2x buffered, WORDWIDE = 1, AUTOIN = 1, EP8AUTOINLENH:L = 512. With AUTOIN = 1, and EP8AUTOINLENH:L = 512, this causes data packets to be automatically committed to USB whenever the master fills the FIFO with 512 bytes (or 256 words since WORDWIDE = 1). In Figure 9-12, the external master selects EP8 by setting FIFOADR[1:0] to ‘11’ and once it writes the first data value over the FD bus, FLAGC - EMPTY exhibits a ‘not-empty’ condition. STATE 3: Drive data on the bus, assert SLWR (setup and hold times must be met with respect to the rising edge of IFCLK), deassert SLWR. Transition to State 4. Figure 9-12. Timing Example: Synchronous FIFO Writes, Waveform 1 IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL Master Selects EP8 EP8 Not Empty FLAGC - EMPTY SLWR FD[15:0] Z N N+1 PKTEND EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 105 Slave FIFOs Figure 9-13. Timing Example: Synchronous FIFO Writes, Waveform 2 IFCLK FIFOADR0 Core Auto Commits Pkt FIFOADR1 FLAGB - FULL AUTOIN=1 FLAGC - EMPTY SLWR FD[15:0] 511 510 512 PKTEND In Figure 9-13, once the external master writes the 512th word into the EP8 FIFO, the second 512-byte packet is automatically committed to USB. The first 512-byte packet was automatically committed to USB when the external master wrote the 256th word into the EP8 FIFO. Figure 9-14 shows the fourth packet in the EP8 FIFO being manually committed by pulsing PKTEND. There is no specific timing requirement for PKTEND assertion with respect to SLWR assertion. Hence, PKTEND is asserted the same time the 816th word is written into EP8. This causes the short packet to be committed, which contains 48 words (or 96 bytes). The fourth packet would have been automatically committed if the external master finished writing the 1024th word. Once the fourth packet has been committed, FLAGB - FULL is asserted, indicating that no more FIFO buffers are available for the external master to write into. A buffer becomes available once the host has read an entire packet. Note FIFOADR[1:0] must be held constant during the PKTEND assertion. Figure 9-14. Timing Example: Synchronous FIFO Writes, Waveform 3, PKTEND Pin Illustrated IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL FLAGC - EMPTY Data Not Written SLWR FD[15:0] 815 816 N PKTEND Master Manually Commits Short Pkt 106 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.2.8 Implementing Synchronous Slave FIFO Reads Figure 9-15. Interface Pins: Synchronous FIFO Reads IFCLK 5-48MHz FULL FLAGC EMPTY EZ-USB Slave Mode STATE 4: If more data to read, transition to State 2 else transition to IDLE. Figure 9-16. State Machine: Synchronous FIFO Reads FIFOADR[1:0] FLAGB Note Since SLOE has no other function than to enable the FD outputs, it is also correct to tie the SLRD and SLOE signals together. Empty State 3 SLOE EXT. Master SLRD Launch FD[15:0] State 1 In order to implement synchronous FIFO reads, a typical sequence of events for the external master is: IDLE. When a read event occurs, transition to State 1. STATE 1: Point to OUT FIFO, assert FIFOADR[1:0] (setup time must be met with respect to the rising edge of IFCLK), transition to State 2. STATE 2: Assert SLOE. If FIFO-Empty flag is false (FIFO not empty), transition to State 3 else remain in State 2. Done State 2 State 4 Figures 9-17 and 9-18 show timing examples of an external master performing synchronous FIFO reads from EP2. These examples assume that EP2 is configured as OUT, Bulk, 512 bytes buffer size, 2x buffered, WORDWIDE = 0, AUTOOUT = 1. In Figure 9-17, the external master selects EP2 by setting FIFOADR[1:0] to 00. It asserts SLOE to turn on the FD output drivers, samples the first byte in the FIFO, and then pulses SLRD to increment the FIFO pointer. STATE 3: Sample data on the bus, assert SLRD (setup and hold times must be met with respect to the rising edge of IFCLK), deassert SLRD. Deassert SLOE, transition to State 4. Figure 9-17. Timing: Synchronous FIFO Reads, Waveform 1 IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL Selects EP2 Asserts SLOE then Reads First Byte in FIFO FLAGC - EMPTY Increments to Next Byte in FIFO SLOE SLRD FD[7:0] Z EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F N N+1 107 Slave FIFOs Figure 9-18. Timing Example: Synchronous FIFO Reads, Waveform 2, EMPTY Flag Illustrated IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL EP2 Empty FLAGC - EMPTY Reads 1023 Byte in FIFO SLOE Reads Last Byte in FIFO SLRD FD[7:0] 1024 1023 Figure 9-18 shows FLAGC - EMPTY assert after the master reads the 1024th (last) byte in the FIFO. This assumes that the host has only sent 1024 bytes to EP2. 9.2.9 Z Figure 9-20. State Machine: Asynchronous FIFO Writes Full Implementing Asynchronous Slave FIFO Writes Figure 9-19. Interface Pins: Asynchronous FIFO Writes State 3 Launch Done State 2 State 1 State 4 FIFOADR[1:0] FLAGB FLAGC FULL EMPTY SLW R EZ-USB Slave Mode FD[15:0] PKTEND EXT. Master In order to implement asynchronous FIFO writes, a typical sequence of events for the external master is: IDLE. When a write event occurs, transition to State 1. STATE 1: Point to IN FIFO, assert FIFOADR[1:0] (setup time must be met with respect to the asserting edge of SLWR), transition to State 2. STATE 2: If FIFO-Full flag is false (FIFO not full), transition to State 3 else remain in State 2. STATE 3: Drive data on the bus (setup time must be met with respect to the deasserting edge of SLWR), write data to the FIFO and increment the FIFO pointer by asserting then deasserting SLWR, transition to State 4. STATE 4: If more data to write, transition to State 2 else transition to IDLE. 108 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs Figure 9-21. Timing: Asynchronous FIFO Writes IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL FLAGC - EMPTY SLWR Z FD[15:0] N N+1 PKTEND Figure 9-21 shows a timing example of asynchronous FIFO writes to EP8. The external master selects EP8 by setting FIFOADR[1:0] to 11. Once it writes the first data value over the FD bus, FLAGC - EMPTY exhibits a ‘not empty’ condition. Note Since SLOE has no other function than to enable the FD outputs, it is also correct to tie the SLRD and SLOE signals together. 9.2.10 Figure 9-23. State Machine: Asynchronous FIFO Reads. Implementing Asynchronous Slave FIFO Reads STATE 4: If more data to read, transition to State 2 else transition to IDLE. Empty Figure 9-22. Interface Pins: Asynchronous FIFO Reads State 3 FIFOADR[1:0] FLAGB FLAGC Launch Done State 2 FULL EMPTY State 1 State 4 SLOE EZ-USB Slave Mode SLRD FD[15:0] EXT. Master In order to implement asynchronous FIFO reads, a typical sequence of events for the external master is: IDLE: When a read event occurs, transition to State 1. STATE 1: Point to OUT FIFO, assert FIFOADR[1:0] (setup time must be met with respect to the asserting edge of SLRD), transition to State 2. STATE 2: If Empty flag is false (FIFO not empty), transition to State 3 else remain in State 2. STATE 3: Assert SLOE, assert SLRD, sample data on the bus, deassert SLRD (increment FIFO pointer), deassert SLOE, transition to State 4. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 109 Slave FIFOs Figure 9-24. Timing: Asynchronous FIFO Reads IFCLK FIFOADR0 FIFOADR1 FLAGB - FULL FLAGC - EMPTY SLOE SLRD N Z FD[15:0] Figure 9-24 shows a timing example of asynchronous FIFO reads from EP2. The external master selects EP2 by setting FIFOADR[1:0] to 00, and strobes SLOE/SLRD to sample data on the FD bus. 9.3 Firmware This section describes the interface between EZ-USB firmware and the FIFOs. More information is available in the Access to Endpoint Buffers chapter on page 87. Table 9-3. Registers Associated with Slave FIFO Firmware Z Autopointer mechanism built into the EZ-USB (see section Autopointers on page 96). Additionally, there are a number of FIFO control and status registers: Byte Count registers indicate the number of bytes in each FIFO; flag bits indicate FIFO fullness, mode bits control the various FIFO modes, etc. This chapter focuses on the registers and bits which are specific to slave-FIFO operation; for a more detailed description of all the FIFO registers, see the chapters Access to Endpoint Buffers, on page 87 and Registers, on page 211 EPxCFG INPKTEND/OUTPKTEND EPxFIFOCFG EPxFIFOIE EPxAUTOINLENH/L EPxFIFOIRQ Note Setting the REVCTL bits enables features that are not required by every application. So although not necessary, for proper operation as described in this chapter, EZ-USB firmware must set the DYN_OUT and ENH_PKT bits (REVCTL.0 and REVCTL.1) to ‘1’. EPxFIFOPFH:L INT2IVEC Figure 9-25. EPxFIFOBUF Registers EP2468STAT INT4IVEC EP24FIFOFLGS INTSETUP EP68FIFOFLGS IE EPxCS IP EPxFIFOFLGS INT2CLR EPxBCH:L INT4CLR EPxFIFOBCH:L EIE EPxFIFOBUF EXIF Register Name EZ-USB Registers IFCLK 5 - 48MHz FIFOADR[1:0] Firmware FIFO Access EZ-USB firmware can access the slave FIFOs using four registers in XDATA memory: EP2FIFOBUF, EP4FIFOBUF, EP6FIFOBUF, and EP8FIFOBUF. These registers can be read and written directly (using the MOVX instruction), or they can serve as sources and destinations for the dual 110 Device Pins 30/48MHz REVCTL (bits 0 and 1 must be initialized to ‘1’ for operation as described in this chapter) 9.3.1 Slave FIFOs EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD/SLCS# SLOE SLRD SLWR PKTEND FD[15:0] EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.3.2 EPx Memories 9.3.4 The slave FIFOs connect external logic to the EZ-USB’s four endpoint memories (EP2, EP4, EP6, and EP8). These endpoint memories have the following programmable features: 1. Type can be either BULK, INTERRUPT, or ISOCHRONOUS. 2. Direction can be either IN or OUT. 3. For EP2 and EP6, size can be either 512 or 1024 bytes. EP4 and EP8 are fixed at 512 bytes. 4. Buffering can be 2x, 3x, or 4x for EP2 and EP6. EP4 and EP8 are fixed at 2x. Auto-In / Auto-Out Modes The EZ-USB FIFOs can be configured to commit packets to/ from USB automatically. For IN endpoints, Auto-In Mode allows the external logic to stream data into a FIFO continuously, with no need for it or the EZ-USB firmware to packetize the data or explicitly signal the EZ-USB to send it to the host. For OUT endpoints, Auto-Out Mode allows the host to continuously fill a FIFO, with no need for the external logic or EZ-USB firmware to handshake each incoming packet, arm the endpoint buffers, and so on. See Figure 9-27. Figure 9-27. When AUTOOUT=1, OUT Packets are Automatically Committed 5. EZ-USB can automatically commit endpoint data to and from the slave FIFO interface (AUTOIN = 1, AUTOOUT = 1), or manually commit endpoint data to and from the slave FIFO interface (AUTOIN = 0, AUTOOUT = 0). CPU On a hard reset, these endpoint memories are configured as follows: 1. EP2 - Bulk OUT, 512 bytes/packet, 2x buffered. Host 2. EP4 - Bulk OUT, 512 bytes/packet, 2x buffered. USB Data Path Slave M aster 3. EP6 - Bulk IN, 512 bytes/packet, 2x buffered. AUTOOUT=1 4. EP8 - Bulk IN, 512 bytes/packet, 2x buffered. Note In full speed mode, buffer sizes scale down to 64 bytes for the non-isochronous types. Figure 9-26. EPx Memories EZ-USB Registers Slave FIFOs Device Pins 30/48MHz IFCLK To configure an IN endpoint FIFO for Auto Mode, set the AUTOIN bit in the appropriate EPxFIFOCFG register to ‘1’. To configure an OUT endpoint FIFO for Auto Mode, set the AUTOOUT bit in the appropriate EPxFIFOCFG register to ‘1’. See Figure 9-28 and Figure 9-29 on page 112. On a hard reset, all FIFOs default to Manual Mode (i.e., AUTOIN = 0 and AUTOOUT = 0). 5 - 48MHz FIFOADR[1:0] EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 FLAGA FLAGB FLAGC FLAGD/SLCS# SLOE SLRD SLWR PKTEND FD[15:0] 9.3.3 Slave FIFO Programmable Level Flag Each FIFO’s Programmable level Flag (PF) asserts when the FIFO reaches a user-defined fullness threshold. See the discussion of the EPxFIFOPFH:L registers in the Registers chapter on page 211 for full details. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 111 Slave FIFOs Figure 9-28. TD_Init Example: Configuring AUTOOUT = 1 TD_Init(): … … … … … REVCTL = 0x03; SYNCDELAY; EP2CFG = 0xA2; SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; EP2FIFOCFG = 0x10; … … … … … // REVCTL.0 and REVCTL.1 to set to 1 // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x // Reset the FIFO // Arm both EP2 buffers to “prime the pump” // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 Figure 9-29. TD_Init Example: Configuring AUTOIN = 1 TD_Init(): … … … … … REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1 SYNCDELAY; EP8CFG = 0xE0; // EP8 is DIR=IN, TYPE=BULK SYNCDELAY; FIFORESET = 0x80; // Reset the FIFO SYNCDELAY; FIFORESET = 0x88; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP8FIFOCFG = 0x0C; // EP8 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0 SYNCDELAY; EP8AUTOINLENH = 0x02; // Auto-commit 512-byte packets SYNCDELAY; EP8AUTOINLENL = 0x00; … … … … … 9.3.5 CPU Access to OUT Packets, AUTOOUT = 1 The EZ-USB’s CPU is not in the host-to-master data path when AUTOOUT = 1. To achieve the maximum bandwidth, the host and master are directly connected, bypassing the CPU. Figure 9-30 shows that, in Auto-Out mode, data from the host is automatically committed to the FIFOs with no firmware intervention. Figure 9-30. TD_Poll Example: No Code Necessary for OUT Packets When AUTOOUT=1 TD_Poll(): … … … … … // no code necessary to xfr data from host to master! // AUTOOUT=1 auto-commits packets … … … … … Note If AUTOOUT = 1, an OUT FIFO buffer is automatically committed, and could contain 0-1024 bytes, depending on the size of the OUT packet transmitted by the host. The buffer size should be set appropriately (512 or 1024) to accommodate the USB data payload size. 112 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.3.6 CPU Access to OUT Packets, AUTOOUT = 0 In some systems, it may be desirable to allow the EZ-USB’s CPU to participate in the transfer of data between the host and the slave FIFOs. To configure a FIFO for this ‘Manual-Out’ mode, the AUTOOUT bit in the appropriate EPxFIFOCFG register must be cleared to ‘0’ (see Figure 9-31). Figure 9-31. TD_Init Example, Configuring AUTOOUT=0 TD_Init(): … … … … … REVCTL = 0x03; SYNCDELAY; EP2CFG = 0xA2; SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; … … … … … // REVCTL.0 and REVCTL.1 set to 1 // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x // Reset the FIFO // EP2 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 // Arm both EP2 buffers to “prime the pump” As Illustrated in Figure 9-32, EZ-USB firmware can do one of three things when the EZ-USB is in Manual-Out mode and a packet is received from the host: See section 8.6.2.4 EP2BCH:L, EP4BCH:L, EP6BCH:L, EP8BCH:L on page 93 for a detailed description of the SKIP bit. 1. It can ‘commit’ (pass to the FIFOs) the packet by writing OUTPKTEND with SKIP=0 (Figure 9-33 on page 113). Figure 9-32. Skip, Commit, or Source (AUTOOUT=0) 2. It can ‘skip’ (discard) the packet by writing OUTPKTEND with SKIP=1 (Figure 9-34 on page 114). 3. It can ‘edit’ the packet (or source an entire OUT packet) by writing to the FIFO buffer directly, then write the length of the packet to EPxBCH:L. The write to EPxBCL commits the edited packet, so EPxBCL should be written after writing EPxBCH (Figure 9-35 on page 114). EPxBCH:L CPU skip = 0 Host In all cases, the OUT buffer automatically re-arms so it can receive the next packet, once the external master has finished reading all data in the OUT buffer. USB Data Slave Master skip = 1 AUTO OUT = 0 Figure 9-33. TD_Poll Example, AUTOOUT=0, Commit Packet TD_Poll(): … … … … … if( !( EP2468STAT & 0x01 ) ) { // EP2EF=0 when FIFO NOT empty, host sent packet OUTPKTEND = 0x02; // SKIP=0, pass buffer on to master } … … … … … EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 113 Slave FIFOs Figure 9-34. sbTD_Poll Example, AUTOOUT=0, Skip Packet TD_Poll(): … … … … … if( !( EP2468STAT & 0x01 ) ) { // EP2EF=0 when FIFO NOT empty, host sent packet OUTPKTEND = 0x82; // SKIP=1, do NOT pass buffer on to master } … … … … … Figure 9-35. TD_Poll Example, AUTOOUT=0, Source TD_Poll(): … … … … … if( EP24FIFOFLGS & 0x02 ) { SYNCDELAY; // FIFORESET = 0x80; // nak all OUT pkts. from host SYNCDELAY; // FIFORESET = 0x82; // advance all EP2 buffers to cpu domain SYNCDELAY; // EP2FIFOBUF[0] = 0xAA; // create newly sourced pkt. data SYNCDELAY; // EP2BCH = 0x00; SYNCDELAY; // EP2BCL = 0x01; // commit newly sourced pkt. to interface fifo // beware of "left over" uncommitted buffers SYNCDELAY; // OUTPKTEND = 0x82; // skip uncommitted pkt. (second pkt.) // note: core does not allow pkts. to get out of sequence SYNCDELAY; // FIFORESET = 0x00; // release "nak all" } … … … … … Note If an uncommitted packet is in an OUT endpoint buffer when the EZ-USB is reset, that packet is not automatically committed to the master. To ensure that no uncommitted packets are in the endpoint buffers after a reset, the EZ-USB firmware’s ‘endpoint initialization’ routine should skip 2, 3, or 4 packets (depending on the buffering depth selected for the FIFO) by writing OUTPKTEND with SKIP=1. See Figure 9-36. Figure 9-36. TD_Init Example, OUT Endpoint Initialization TD_Init(): … … … … … REVCTL = 0x03; SYNCDELAY; EP2CFG = 0xA2; SYNCDELAY; EP2FIFOCFG = 0x00; // REVCTL.0 and REVCTL.1 set to 1 // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x // EP2 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 // OUT endpoints do NOT come up armed SYNCDELAY; OUTPKTEND = 0x82; // arm first buffer by writing OUTPKTEND w/skip=1 SYNCDELAY; OUTPKTEND = 0x82; // arm second buffer by writing OUTPKTEND w/skip=1 … … … … … 114 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.3.7 CPU Access to IN Packets, AUTOIN = 1 Auto-In mode is similar to Auto-Out mode: When an IN FIFO is configured for Auto-In mode (by setting its AUTOIN bit to ‘1’), data from the master is automatically packetized and committed to USB without any CPU intervention (see Figure 9-37). Figure 9-37. TD_Poll Example, AUTOIN = 1 TD_Poll(): … … … … … // no code necessary to xfr data from master to host! // AUTOIN=1 and EP8AUTOINLEN=512 auto commits packets // in 512 byte chunks. … … … … … Auto-In mode differs in one important way from Auto-Out mode: In Auto-Out mode, data (excluding data in short packets) is always auto-committed in 512- or 1024-byte packets; in Auto-In mode, the auto-commit packet size may be set to any non-zero value (with the single restriction, of course, that the packet size must be less than or equal to the size of the endpoint buffer). Each FIFO’s Auto-In packet size is stored in its EPxAUTOINLENH:L register pair. Figure 9-39. Firmware Intervention, AUTOIN = 0 or 1 I/O Busy CPU Host To source an IN packet, EZ-USB firmware can temporarily halt the flow of data from the external master (via a signal on a general-purpose I/O pin, typically), wait for an endpoint buffer to become available, create a new packet by writing directly to that buffer, then commit the packet to USB and release the external master. In this way, the firmware can insert its own packets in the data stream. See Figure 9-38, which illustrates data flowing directly between the master and the host, and Figure 9-39, which shows the firmware sourcing an IN packet. A firmware example appears in Figure 9-40 on page 116. USB Data Path Slave Master AUTOIN=0 or AUTOIN=1 Figure 9-38. Master Writes Directly to Host, AUTOIN = 1 I/O Busy CPU Host USB Data Path Slave Master AUTOIN=1 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 115 Slave FIFOs Figure 9-40. TD_Poll Example: Sourcing an IN Packet TD_Poll(): … … … … … if( source_pkt_event ) { // 100-msec background timer fired if( holdoff_master( ) ) { // signaled “busy” to master successful while( !( EP68FIFOFLGS & 0x20 ) ) { // EP8EF=0, when buffer not empty ; // wait ‘til host takes entire FIFO data } FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x88; SYNCDELAY; FIFORESET = 0x00; EP8FIFOBUF[ EP8FIFOBUF[ EP8FIFOBUF[ EP8FIFOBUF[ 0 1 2 3 ] ] ] ] = = = = // initiate the “source packet” sequence 0x02; 0x06; 0x07; 0x03; // // // //, packet start of text msg , packet end of text msg SYNCDELAY; EP8BCH = 0x00; SYNCDELAY; EP8BCL = 0x04; // pass newly-sourced buffer on to host } else { history_record( EP8, BAD_MASTER ); } } … … … … … 9.3.8 Access to IN Packets, AUTOIN=0 In some systems, it may be desirable to allow the EZ-USB’s CPU to participate in every data-transfer between the external master and the host. To configure a FIFO for this ‘Manual-In’ mode, the AUTOIN bit in the appropriate EPxFIFOCFG register must be cleared to ‘0’. In Manual-In mode, EZ-USB firmware can commit, skip, or edit packets sent by the external master, and it may also source packets directly. To commit a packet, firmware writes the endpoint number (with SKIP=0) to the INPKTEND register. To skip a packet, firmware writes the endpoint number with SKIP=1 to the INPKTEND register. To edit or source a packet, firmware writes to the FIFO buffer, then writes the packet commit length to EPxBCH and EPxBCL (in that order). Figure 9-41. TD_Poll, AUTOIN=0, Committing a Packet via INPKTEND TD_Poll(): … … … … … if( master_finished_longxfr( ) ) { // master currently points to EP8, pins FIFOADR[1:0]=11 if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available INPKTEND = 0x08; // firmware commits EP8 packet // by writing 8 to INPKTEND release_master( EP8 ); } } … … … … … 116 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs Figure 9-42. TD_Poll, AUTOIN=0, Skipping a Packet via INPKTEND TD_Poll(): … … … … … if( master_finished_longxfr( ) ) { // master currently points to EP8, pins FIFOADR[1:0]=11 if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available INPKTEND = 0x88; // firmware skips EP8 packet // by writing 0x88 to INPKTEND release_master( EP8 ); } } … … … … … Figure 9-43. TD_Poll, AUTOIN=0, Editing a Packet via EPxBCH:L TD_Poll(): … … … … … if( master_finished_xfr( ) ) { // modify the data EP8FIFOBUF[ 0 ] = 0x02; // , packet start of text msg EP8FIFOBUF[ 7 ] = 0x03; // , packet end of text msg SYNCDELAY; EP8BCH = 0x00; SYNCDELAY; EP8BCL = 0x08; // pass buffer on to host, packet size is 8 } … … … … … 9.3.9 Auto In/Auto Out Initialization Enabling Auto In transfers between slave FIFO and endpoint 6. Arm OUT buffers by writing to OUTPKTEND N times with skip = 1, where N is buffering depth. 7. Set bit EPxFIFOCFG.4=1. Typically, a FIFO is configured for Auto-In mode as follows: 1. Configure bits IFCONFIG[7:4] to define the behavior of the interface clock. 2. Set bits IFCFG1:0=11. 3. Set REVCTL.0 and REVCTL.1 to ‘1’. 4. Configure EPxCFG. 5. Reset the FIFOs. 6. Set bit EPxFIFOCFG.3=1. 7. Set the size through the EPxAUTOINLENH:L registers. Enabling Auto Out transfers between endpoint and slave FIFO Typically, a FIFO is configured for Auto-Out mode as follows: 1. Configure bits IFCONFIG[7:4] to define the behavior of the interface clock. 2. Set bits IFCFG1:0=11. 3. Set REVCTL.0 and REVCTL.1 to ‘1’. 4. Configure EPxCFG. 5. Reset the FIFOs. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 117 Slave FIFOs 9.3.10 Auto Mode: Synchronous FIFO IN Data Transfers Figure 9-44. Code Example, Synchronous Slave FIFO IN Data Transfer TD_Init(): IFCONFIG = 0x03; SYNCDELAY; REVCTL = 0x03; SYNCDELAY; EP8CFG = 0xE0; SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x84; SYNCDELAY; FIFORESET = 0x86; SYNCDELAY; FIFORESET = 0x88; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP8FIFOCFG = 0x0C; PINFLAGSAB = 0x00; SYNCDELAY; PINFLAGSCD = 0x00; // use IFCLK pin driven by external logic (5MHz to 48MHz) // use slave FIFO interface pins driven sync by external master // REVCTL.0 and REVCTL.1 set to 1 // sets EP8 valid for IN's // and defines the endpoint for 512 byte packets, 2x buffered // reset all FIFOs // // // // this defines the external interface to be the following: this lets the EZ-USB auto commit IN packets, gives the ability to send zero length packets, and sets the slave FIFO data interface to 8-bits // // // // defines FLAGA as prog-level flag, pointed to by FIFOADR[1:0] FLAGB as full flag, as pointed to by FIFOADR[1:0] FLAGC as empty flag, as pointed to by FIFOADR[1:0] won't generally need FLAGD PORTACFG = 0x00; // used PA7/FLAGD as a port pin, not as a FIFO flag SYNCDELAY; FIFOPINPOLAR = 0x00; // set all slave FIFO interface pins as active low SYNCDELAY; EP8AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks SYNCDELAY; EP8AUTOINLENL = 0x00; SYNCDELAY; EP8FIFOPFH = 0x80; SYNCDELAY; EP8FIFOPFL = 0x00; // you can define the programmable flag (FLAGA) // to be active at the level you wish TD_Poll(): // nothing! The EZ-USB is doing all the work of transferring packets // from the external master sync interface to the endpoint buffer... 118 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Slave FIFOs 9.3.11 Auto Mode Example: Asynchronous FIFO IN Data Transfers The initialization code is exactly the same as for the synchronous-transfer example in Auto Mode: Synchronous FIFO IN Data Transfers on page 118, but with IFCLK configured for internal use at a rate of 48 MHz and the ASYNC bit set to ‘1’. Figure 9-45 shows the one-line modification that is needed. Figure 9-45. TD_Init Example, Asynchronous Slave FIFO IN Data Transfers TD_Init( ): // slight modification from our synchronous firmware example IFCONFIG = 0xCB; // this defines the external interface as follows: // use internal IFCLK (48MHz) // use slave FIFO interface pins asynchronously to external master Code to perform the transfers is, as before, unnecessary; as Figure 9-46 illustrates. Figure 9-46. TD_Poll Example, Asynchronous Slave FIFO IN Data Transfers TD_Poll( ): // nothing! The EZ-USB is doing all the work of transferring packets // from the external master async interface to the endpoint buffer… 9.3.12 Skipping Out Packets while in AUTOOUT Mode If flushing the packets in the buffers is required, It is necessary to switch from auto mode to manual mode and reset the FIFO. In auto out mode, if the firmware needs to flush the packets received from host that are not read by the external master/slave, the firmware can implement this sequence: 1. Set the NAKALL bit 3. Reset the FIFOs 4. Use OUTPKTEND 'n' times to skip uncommitted packets (FIFO is 'n' buffered) 5. Switch to auto mode 6. Release the NAKALL bit Note Resetting the FIFO while it is configured as AUTOOUT does not clear the buffer or set the EMPTY bit in EPxCS. This is why OUTPKTEND is used 'n' times for 'n' buffered FIFO. 2. Switch to manual mode Figure 9-47. TD_Poll Example, Skipping Out Packets in AUTOOUT Mode TD_Poll ( ) : … … … if (FIFO_RESET) { //This is an example code segment which resets the EP2 FIFO //where EP2 has been configured as AUTOOUT //Note: Settings of other bits of EPxFIFOCFG are ignored here FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; EP2FIFOCFG = 0x00; //switching to manual mode SYNCDELAY; FIFORESET = 0x02; // Reset FIFO 2 SYNCDELAY; OUTPKTEND = 0X82; //OUTPKTEND done twice as EP2 is double buffered by default SYNCDELAY; OUTPKTEND = 0X82; SYNCDELAY; EP2FIFOCFG = 0x10; //switching to auto mode SYNCDELAY; FIFORESET = 0x00; //Release NAKALL SYNCDELAY; } … … … EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 119 Slave FIFOs 9.3.13 Aborting Packets in FIFO while in AUTOIN Mode Resetting the FIFO, after taking it out of the AUTOIN mode, empties the FIFO and sets the EMPTY bit in EPxCS. Any packets in the buffers are skipped or invalid. Thus the sequence is: 1. Set the NAKALL bit 2. Switch to manual mode 3. Reset the FIFOs 4. Switch to auto mode 5. Release the NAKALL bit Figure 9-48. TD_Poll Example, Aborting Packets in FIFO while in AUTOIN Mode TD_Poll ( ) : … … … if (FIFO_RESET) { //This is an example code segment which resets the EP6 FIFO //where EP6 has been configured as AUTOIN //Note: Settings of other bits of EPxFIFOCFG are ignored here FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; EP6FIFOCFG = 0x00; //switching to manual mode SYNCDELAY; FIFORESET = 0x06; // Reset FIFO 6 SYNCDELAY; EP6FIFOCFG = 0x0C; //switching to auto mode SYNCDELAY; FIFORESET = 0x00; //Release NAKALL SYNCDELAY; } … … … 9.4 Switching Between Manual Out and Auto Out Because OUT endpoints are not automatically armed when the EZ-USB enters Auto-Out mode, the firmware can safely switch the EZ-USB between Manual-Out and Auto-Out modes without any need to flush or reset the FIFOs. Note Switching between Manual-Out mode to Auto-Out mode is not required for every application. Most applications remain in either mode for each endpoint. 120 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 10. General Programmable Interface 10.1 Introduction The General Programmable Interface (GPIF) is an internal master to the EZ-USB’s endpoint FIFOs. It replaces the external ‘glue’ logic which might otherwise be required to build an interface between the EZ-USB and the outside world. At the GPIF’s core is a programmable state machine which generates up to six ‘control’ and nine ‘address’ outputs, and accepts six external and two internal ‘ready’ inputs. Four user defined Waveform Descriptors control the state machine; generally (but not necessarily), one is written for FIFO reads, one for FIFO writes, one for single-byte/word reads, and one for single-byte/word writes. Note Read and Write are from the EZ-USB’s point of view. ‘Read’ waveforms transfer data from the outside world to the EZUSB; ‘Write’ waveforms transfer data from the EZ-USB to the outside world. EZ-USB firmware can assign the FIFO read and FIFO write waveforms to any of the four FIFOs, and the GPIF generates the proper strobes and handshake signals to the outside-world interface as data is transferred into or out of that FIFO. As with external mastering (see Slave FIFOs, on page 99), the data bus between the FIFOs and the outside world can be either 8 or 16 bits wide. The GPIF is not limited to simple handshaking interfaces between the EZ-USB and external ASICs or microprocessors; it is powerful enough to directly implement such protocols as ATAPI (PIO and UDMA), IEEE 1284 (EPP Parallel Port), Utopia, and others. An EZ-USB can, for instance, function as a single-chip interface between USB and an IDE hard disk drive or CompactFlash™ memory card. This chapter provides an overview of GPIF, discusses external connections, and explains the operation of the GPIF engine. Figure 10-1 on page 122 presents a block diagram illustrating GPIF’s place in the EZ-USB system. Note GPIF waveforms are created with the Cypress GPIF Designer utility, a Windows®-based application which is distributed with the Cypress EZ-USB Development Kit. Although this chapter describes the structure of the Waveform Descriptors in some detail, knowledge of that structure is usually not necessary. The GPIF Designer simply hides the complexity of the Waveform Descriptors; it does not compromise the programmer’s control over the GPIF in any way. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 121 General Programmable Interface Figure 10-1. GPIF’s Place in the EZ-USB System 8051 GPIF XDATA Device Pins FD[15:0] 30/48MHz XGPIFSGLDATH/L IFCLK Slave FIFOs W ORDW IDE=1 EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EP2 EP4 EP6 EP8 INPKTEND 5 - 48MHz EPxEF EPxFF EPxPF CLK GPIFADR[8:0] SLOE SLRD SLW R CTL[5:0] RDY[5:0] FIFOADR[1:0] W aveform Descriptors 8051 GPIF W F0 W F1 W F2 W F3 GSTATE[2:0] XGPIFSGLDATLX GPIFTRIG GPIF DONE GPIFW F 8051 INTRDY PORT I/O Figure 10-2 on page 123 shows an example of a simple GPIF transaction. For this transaction, the GPIF generates an address (GPIFADR[8:0]), drives the FIFO data bus (FD[15:0]), then waits for an externally-supplied handshake signal (RDY0) to go low, after which it pulls its CTL0 output low. When the RDY0 signal returns high, the GPIF brings its CTL0 output high, then floats the data bus. 122 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-2. Example GPIF Waveform S0 GPIFADR[8:0] FD[15:0] A S1 S2 S3 S4 S5 S6 A+1 Z VALID Z CTL0 RDY0 10.1.1 Typical GPIF Interface The GPIF allows the EZ-USB to connect directly to external peripherals such as ASICs, DSPs, or other digital logic that uses an 8 or 16 bit parallel interface. The GPIF provides external pins that can operate as outputs (CTL[5:0]), inputs (RDY[5:0]), Data bus (FD[15:0]), and Address Lines (GPIFADR[8:0]). A Waveform Descriptor in internal RAM describes the behavior of each of the GPIF signals. The Waveform Descriptor is loaded into the GPIF registers by the EZ-USB firmware during initialization, and it is then used throughout the execution of the code to perform transactions over the GPIF interface. Figure 10-3 shows a block diagram of a typical interface between the EZ-USB and a peripheral function. Figure 10-3. EZ-USB Interfacing to a Peripheral 10.2 Hardware Table 10-1 lists the registers associated with the GPIF hardware; a detailed description of each register may be found in the Registers chapter on page 211. Table 10-1. Registers Associated with GPIF Hardware Register Name GPIFIDLECS IFCONFIG GPIFIDLECTL FIFORESET GPIFCTLCFG EPxCFG PORTCCFG EPxFIFOCFG PORTECFG EPxAUTOINLENH/L GPIFADR[8:0] GPIFADRH/L EPxFIFOPFH/L IFCLK GPIFTCB3:0 FD[15:0] EZ-USB Master Mode The following sections detail the features available and steps needed to create an efficient GPIF design. This includes definition of the external GPIF connections and the internal register settings, along with EZ-USB firmware needed to execute data transactions over the interface. CTL[5:0] Peripheral RDY[5:0] PORT I/O GPIFWFSELECT EPxGPIFTRIG EPxGPIFFLGSEL GPIFABORT EPxGPIFPFSTOP XGPIFSGLDATH/LX/LNOX GPIFREADYCFG GPIFSGLDATH/LX/LNOX GPIFREADYSTAT GPIFTRIG Note The ‘x’ in these register names represents 2, 4, 6, or 8; endpoints 0 and 1 are not associated with the GPIF. GSTATE[2:0] Debug EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 123 General Programmable Interface 10.2.1 The External GPIF Interface per IFCLK clock (once every 20.8 ns if IFCLK is running at 48 MHz). The GPIF provides many general input and output signals with which external peripherals may be interfaced ‘gluelessly’ to the EZ-USB. The GPIF interface signals are shown in Table 10-2. IN/OUT 10.2.3.1 Control Output Modes The GPIF Control pins (CTL[5:0]) have several output modes: Table 10-2. GPIF Pin Descriptions PIN By default, these signals are driven high. Description CTL[5:0] O / Hi-Z Programmable control outputs RDY[5:0] I Sampleable ready inputs FD[15:0] I / O / Hi-Z Bidirectional FIFO data bus GPIFADR[8:0] O / Hi-Z Address outputs IFCLK I/O Interface clock GSTATE[2:0] O / Hi-Z Current GPIF State number (for debug) ■ CTL[3:0] can act as CMOS outputs (optionally tristatable) or open drain outputs. ■ CTL[5:4] can act as CMOS outputs or open-drain outputs. If CTL[3:0] are configured to be tristatable, CTL[5:4] are not available. The Control Output pins (CTL[5:0]) are usually used as strobes (enable lines), read/write lines, and others. The Ready Input pins (RDY[5:0]) are sampled by the GPIF and can force a transaction to wait (inserting wait states), continue, or repeat until they are in a particular state. Table 10-3. CTL[5:0] Output Modes TRICTL (GPIFCTLCFG.7) GPIFCTLCFG[6:0] 0 0 CMOS, CMOS, Not Tri-statable Not Tri-statable 0 1 Open-Drain Open-Drain 1 X CMOS, Tri-statable Not Available CTL[3:0] CTL[5:4] The GPIF Data Bus is a collection of the FD[15:0] pins. ■ An 8 bit wide GPIF interface uses pins FD[7:0]. ■ A 16 bit wide GPIF interface uses pins FD[15:0]. 10.2.4 The GPIF Address lines (GPIFADR[8:0]) can generate an incrementing address as data is transferred. If higher order address lines are needed, other non-GPIF I/O signals (for example, general-purpose I/O pins) may be used. The Interface Clock, IFCLK, can be configured to be either an input (default) or an output interface clock for synchronous interfaces to external logic. The GSTATE[2:0] pins are outputs that show the current GPIF State number; they are used for debugging GPIF waveforms. The number of GPIF signals available externally varies depending on the package. See package information in Introducing EZ-USB® chapter on page 13. 10.2.2 Default GPIF Pins Configuration The EZ-USB comes out of reset with its I/O pins configured in Ports mode, not GPIF Master mode. To configure the pins for GPIF mode, the IFCFG1:0 bits in the IFCONFIG register must be set to ‘10’ (see Table 13-10, “IFCFG Selection of Port I/O Pin Functions,” on page 188 for details). 10.2.3 Six Control OUT Signals The 100 and 128-pin EZ-USB packages bring out all six Control Output pins, CTL[5:0]. The 56-pin package brings out three of these signals, CTL[2:0]. CTLx waveform edges can be programmed to make transitions as often as once 124 Six Ready IN Signals The 100 and 128-pin EZ-USB packages bring out all six Ready inputs, RDY[5:0]. The 56-pin package brings out two of these signals, RDY[1:0]. The RDY inputs can be sampled synchronously or asynchronously. When the GPIF samples RDY inputs asynchronously (SAS = 0), the RDY inputs are unavoidably delayed by a small amount (approximately 24 ns at 48 MHz IFCLK). In other words, when the GPIF ‘looks’ at a RDY input, it actually ‘sees’ the state of that input 24 ns ago. 10.2.5 Nine GPIF Address OUT Signals Nine GPIF address lines, GPIFADR[8:0], are available. If the GPIF address lines are configured as outputs, writing to the GPIFADRH:L registers drives these pins immediately. The GPIF engine can then increment them under control of the Waveform Descriptors. The GPIF address lines can be tristated by clearing the associated PORTxCFG bits and OEx bits to ‘0’ (see section 13.4.3 Port C Alternate Functions on page 187 and section 13.4.4 Port E Alternate Functions on page 188). 10.2.6 Three GSTATE OUT Signals Three GPIF State lines, GSTATE[2:0], are available as an alternate configuration of PORTE[2:0]. These default to general-purpose inputs; setting GSTATE (IFCONFIG.2) to ‘1’ selects the alternate configuration and overrides PORTECFG[2:0] bit settings. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface The GSTATE[2:0] pins output the current GPIF State number; this feature is used for debugging GPIF waveforms, and is useful for correlating intended GPIF waveform behavior with actual observed GPIF signaling. 10.2.7 8/16-Bit Data Path, WORDWIDE = 1 (default) and WORDWIDE = 0 When the EZ-USB is configured for GPIF Master mode, PORTB is always configured as FD[7:0]. If any of the WORDWIDE bits (EPxFIFOCFG.0) are set to ‘1’, PORTD is automatically configured as FD[15:8]. If all the WORDWIDE bits are cleared to ‘0’, PORTD is available for general-purpose I/O. 10.2.8 Byte Order for 16 Bit GPIF Transactions Data is sent over USB in packets of 8-bit bytes, not 16-bit words. When the FIFO Data bus is 16 bits wide, the first byte in every pair sent over USB is transferred over FD[7:0] and the second byte is transferred over FD[15:8]. 10.2.9 Interface Clock (IFCLK) The GPIF interface can be clocked from either an internal or an external source. The EZ-USB’s internal clock source can be configured to run at either 30 or 48 MHz, and it can optionally be output on the IFCLK pin. If the EZ-USB is configured to use an external clock source, the IFCLK pin can be driven at any frequency between 5 MHz and 48 MHz. On a hard reset, the EZ-USB defaults to the internal source at 48 MHz, normal polarity, with the IFCLK output disabled. See Figure 10-4. IFCONFIG.7 selects between internal and external sources: 0 = external, 1 = internal. If an external IFCLK is chosen, it must be free running at a minimum frequency of 5 MHz. In addition, in order to provide synchronization for the internal endpoint FIFO logic, the external IFCLK source must be present before the firmware sets IFCONFIG.7 = 0. IFCONFIG.6 selects between the 30 and 48 MHz internal clock: 0 = 30 MHz; 1 = 48 MHz. This bit has no effect when IFCONFIG.7 = 0. IFCONFIG.5 is the output enable for the internal clock source: 0 = disable; 1 = enable. This bit has no effect when IFCONFIG.7 = 0. IFCONFIG.4 inverts the polarity of the interface clock (whether it is internal or external): 0 = normal; 1 = inverted. IFCLK inversion can make it easier to interface the EZ-USB with certain external circuitry. When an internal IFCLK is used (IFCONFIG.7 = 1), IFCONFIG.4 only affects the IFCLK output polarity (if IFCONFIG.5 = 1). When an external IFCLK is used (IFCONFIG.7 = 0), IFCONFIG.4 only affects the IFCLK input polarity. Figure 10-5 on page 126, for example, demonstrates the use of IFCLK output inversion in order to ensure a long enough setup time (ts) for a control signal to the peripheral. Note When IFCLK is configured as an input, the minimum external frequency that can be applied to it is 5 MHz. This clock must be applied prior to initialization of the GPIF and interruptions of it lowers the overall frequency, causing violations of the minimum frequency requirement. Figure 10-4. IFCLK Configuration IFCFG.6 30 MHz 48 MHz IFCFG.4 0 1 IFCFG.5 0 1 IFCLK Pin IFCFG.7 IFCFG .4 Internal IFCLK Signal 1 0 0 1 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 125 General Programmable Interface Figure 10-5. Satisfying Setup Timing by Inverting the IFCLK Output Internal IFCLK Signal Inverted IFCLK Output 4. Assign the RDYn signals to the interface. Make a list of all interface signals to be driven from the peripheral to the GPIF, and assign them to the RDY[5:0] inputs. If there are more input signals than available RDY inputs, non-GPIF I/O signals must be sampled manually by EZUSB firmware. In this case, the RDYn inputs should be used only for signals that must be sampled as part of a data transaction. FIFO Flag EZ-USB Asserts Flag 10.2.10 ts 3. Assign the CTLx signals to the interface. Make a list of all interface signals to be driven from the GPIF to the peripheral, and assign them to the CTL[5:0] inputs. If there are more output signals than available CTLx outputs, non-GPIF I/O signals must be driven manually by EZ-USB firmware. In this case, the CTLx outputs should be assigned only to signals that must be driven as part of a data transaction. Master Samples Flag 5. Determine the proper GPIF Address connections. If the interface uses an Address Bus, use the GPIFADR[8:0] signals for the least significant bits, and other non-GPIF I/O signals for the most significant bits. If the address pins are not needed (as when, for instance, the peripheral is a FIFO) they may be left unconnected. Connecting GPIF Signal Pins to Hardware The first step in creating the interface between the EZUSB’s GPIF and an external peripheral is to define the hardware interconnects. 1. Choose IFCLK settings. Choose either the internal or external interface clock. If internal, choose either 30 or 48 MHz; if external, ensure that the frequency of the external clock is in the range 5-48 MHz, and that it is free running. 2. Determine the proper FIFO Data Bus size. If the data bus for the interface is 8 bits wide, use the FD[7:0] pins and set WORDWIDE=0. If the data bus for the interface is 16 bits wide, use FD[15:0] and set WORDWIDE=1. 10.2.11 Example GPIF Hardware Interconnect Table 10-4 illustrates the hardware connections that can be made for a standard interface to a 27C256 EPROM. The process is the same for larger, more-complicated interfaces. Note Two other GPIF hardware interconnect examples are also available in the GPIF Designer utility. These examples illustrate a connection between the GPIF and the asynchronous FIFO as well as a connection between the GPIF and a DSP from Texas Instrument. Table 10-4. Example GPIF Hardware Interconnect Step Result Connection Made 1. Choose IFCLK settings. Internal IFCLK, 48MHz, Async RDY sampling, GPIF. No connection. 2. Determine proper FIFO Data Bus size. 8 bits from the EPROM. FD[7:0] to D[7:0]. Firmware writes WORDWIDE=0. 3. Assign CTLx signals to the interface. CS and OE are inputs to the EPROM. CTL0 to CS. CTL1 to OE. 4. Assign RDYn signals to the interface. 27C256 EPROM has no output ready/wait signals. No connection. 5. Determine the proper GPIFADR connections. 16 bits of address. 126 GPIFADR[8:0] to A[8:0] and other I/O pins to A[15:9]. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.3 Programming the GPIF Waveforms Each GPIF Waveform Descriptor can define up to seven States. In each State, the GPIF can be programmed to: ■ Drive (high or low) or float the CTL outputs ■ Sample or drive the FIFO Data bus ■ Increment the value on the GPIF Address bus ■ Increment the pointer into the current FIFO ■ Trigger a GPIFWF (GPIF Waveform) interrupt ■ The RDYx input pins ■ A FIFO flag ■ The INTRDY (internal RDY) flag ■ The Transaction-Count-Expired flag then AND, OR, or XOR the two terms and branch on the result to any State or: ■ Delay a specified number [1-256] of IFCLK cycles States that sample and branch are called ‘Decision Points’ (DPs); states that do not are called ‘Non-Decision Points’ (NDPs). Additionally, each State may either sample any two of the following: Figure 10-6. GPIF State Machine Overview CPU IDLE where: 6 Y 1 and X = Y-1 10.3.1 {AND, OR, XOR} (A LFunc B) State 7 trig Done NDP DP State X State Y IDLE ■ CPU GPIF INTRDY bit GPIFWF ISR State 7 (reserved) GPIF State Machine (up to 7 programmable states) The GPIF Registers Two blocks of registers control the GPIF state machine: ■ Event GPIF Configuration Registers — These registers configure the general settings and report the status of the interface. Refer to the Registers chapter on page 211 and the remainder of this chapter for details. Waveform Registers — These registers are loaded with the Waveform Descriptors that configure the GPIF state machine; there are a total of 128 bytes located at addresses 0xE400 to 0xE47F. The GPIF Designer utility should be used to create Waveform Descriptors. GPIF transactions cannot be initiated until the Configuration registers and Waveform registers are loaded by EZ-USB firmware. Access to the Waveform registers is only allowed while the EZ-USB is in GPIF mode (i.e., IFCFG1:0 = 10). The Waveform registers may only be written while the GPIF engine is halted (for example, DONE = 1). If it is desired to dynamically reconfigure Waveform Descriptors, this may be accomplished by writing just the bytes that change; it is not necessary to reload the entire set of Waveform Descriptors in order to modify only a few bytes. Firmware Hooks 10.3.2 Programming GPIF Waveforms The ‘programs’ for GPIF waveforms are the Waveform Descriptors, which are stored in the Waveform registers by EZ-USB firmware. The EZ-USB can hold up to four Waveform Descriptors, each of which can be used for one of four types of transfers: Single Write, Single Read, FIFO Write, or FIFO Read. By default, one Waveform Descriptor is assigned to each transfer type, but it is not necessary to retain that configuration; all four Waveform Descriptors could, for instance, be configured for FIFO Write usage (see the GPIFWFSELECT register in the Registers chapter on page 211). Each Waveform Descriptor consists of up to seven 32 bit State Instructions that program key transition points for GPIF interface signals. There is a one-to-one correspondence between the State Instructions and the GPIF state machine States. Among other things, each State Instruction defines the state of the CTLx outputs, the state of FD[15:0], the use of the RDYn inputs, and the behavior of GPIFADR[8:0]. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 127 General Programmable Interface Transitions from one State to another always happen on a rising edge of the IFCLK, but the GPIF may remain in one State for many IFCLK cycles. 10.3.2.1 The combination of these bits defines CTL5:0 during IDLE as follows: ■ If TRICTL is ‘0’, GPIFIDLECTL[5:0] directly represent the output states of CTL5:0 during the IDLE State. The GPIFCTLCFG[5:0] bits determine whether the CTL5:0 outputs are CMOS or open drain: If GPIFCTLCFG.x = 0, CTLx is CMOS; if GPIFCTLCFG.x = 1, CTLx is open drain. ■ If TRICTL is ‘1’, GPIFIDLECTL[7:4] are the output enables for the CTL[3:0] signals, and GPIFIDLECTL[3:0] are the output values for CTL[3:0]. CTL4 and CTL5 are unavailable in this mode. The GPIF IDLE State A Waveform consists of up to seven programmable States, numbered S0 to S6, and one special Idle State: S7. Note A Waveform terminates when the GPIF program branches to its Idle State. To complete a GPIF transaction, the GPIF program must branch to the IDLE State, regardless of the State that the GPIF program is currently executing. For example, a GPIF Waveform might be defined by a program which contains only two programmed States, S0 and S1. The GPIF program would branch from S1 (or S0) to S7 when it wished to terminate. Table 10-5 illustrates this relationship. Table 10-5. Control Outputs (CTLx) During the IDLE State TRICTL The state of the GPIF signals during the Idle State is determined by the contents of the GPIFIDLECS and GPIFIDLECTL registers. Once a waveform is triggered, another waveform may not be started until the first one terminates. Termination of a waveform is signaled through the DONE bit (GPIFIDLECS.7 or GPIFTRIG.7) or, optionally, through the GPIFDONE interrupt. ■ If DONE = 0, the GPIF is busy generating a Waveform. ■ If DONE = 1, the GPIF is done (GPIF is in the Idle State) and ready for firmware to start the next GPIF transaction. Note With one exception (writing to the GPIFABORT register in order to force the current waveform to terminate) it is illegal to write to any of the GPIF-related registers (including the Waveform Registers) while the GPIF is busy. Doing so causes indeterminate behavior likely to result in data corruption. GPIF Data Bus During IDLE During the Idle State, the GPIF Data Bus (FD[15:0]) can be either driven or tri-stated, depending on the setting of the IDLEDRV bit (GPIFIDLECS.0): ■ If IDLEDRV = 0, the GPIF Data Bus is tri-stated during the Idle State. ■ If IDLEDRV = 1, the GPIF Data Bus is actively driven during the Idle State, to the value last placed on the bus by a GPIF Waveform. CTL Outputs During IDLE During the IDLE State, the state of CTL[5:0] depends on the following register bits: ■ TRICTL (GPIFCTLCFG.7), as described in section 10.2.3.1 Control Output Modes on page 124. ■ GPIFCTLCFG[5:0] ■ GPIFIDLECTL[5:0]. 128 Control Output Output State CTL0 GPIFIDLECTL.0 CTL1 GPIFIDLECTL.1 CTL2 GPIFIDLECTL.2 0 1 10.3.2.2 Output Enable N/A (CTL Outputs are always CTL3 GPIFIDLECTL.3 CTL4 GPIFIDLECTL.4 enabled when TRICTL = 0) CTL5 GPIFIDLECTL.5 CTL0 GPIFIDLECTL.0 GPIFIDLECTL.4 CTL1 GPIFIDLECTL.1 GPIFIDLECTL.5 CTL2 GPIFIDLECTL.2 GPIFIDLECTL.6 CTL3 GPIFIDLECTL.3 GPIFIDLECTL.7 CTL4 N/A CTL5 (CTL4 and CTL5 are not available when TRICTL = 1) Defining States Each Waveform is made up of a number of States, each of which is defined by a 32 bit State Instruction. Each State can be one of two basic types: a Non-Decision Point (NDP) or a Decision Point (DP). For ‘write’ waveforms, the data bus is either driven or tristated during each State. For ‘read’ waveforms, the data bus is either sampled/stored or not sampled during each State. Non-Decision Point (NDP) States For NDP States, the control outputs (CTLx) are defined by the GPIF instruction to be either ‘1’, ‘0’, or tri-stated during the entire State. NDP States have a programmable fixed duration in units of IFCLK cycles. Figure 10-7 illustrates the basic concept of NDP States. A write waveform is shown, and for simplicity all the States are shown with equal spacing. Although there are a total of six programmable CTL outputs, only one (CTL0) is shown in Figure 10-7. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-7. Non-Decision P int (NDP) States S0 GPIFADR[8:0] FD[15:0] S1 S2 S3 S4 S5 S6 A Z Z VALID CTL0 The following information refers to Figure 10-7. In State 0: ■ FD[7:0] is programmed to be tri-stated. ■ CTL0 is programmed to be driven to a logic ‘1’. In State 1: ■ FD[7:0] is programmed to be driven. ■ CTL0 is still programmed to be driven to a logic ‘1’. In State 2: ■ FD[7:0] is programmed to be driven. ■ CTL0 is programmed to be driven to a logic ‘0’. In State 3: ■ FD[7:0] is programmed to be driven. ■ CTL0 is still programmed to be driven to a logic ‘0’. In State 4: ■ FD[7:0] is programmed to be driven. ■ CTL0 is programmed to be driven to a logic ‘1’. In State 5: ■ FD[7:0] is programmed to be tri-stated. ■ CTL0 is still programmed to be driven to a logic ‘1’. In State 6: defined for this waveform, the Idle State would not automatically be entered after the last programmed State; that last programmed State’s State Instruction would have to include an explicit unconditional branch to the Idle State. Decision Point States Any State can be designated as a Decision Point (DP). A DP allows the GPIF engine to sample two signals — each of the ‘two’ can be the same signal, if desired — perform a boolean operation on the sampled values, then branch to other States (or loop back on itself, remaining in the current State) based on the result. If a State Instruction includes a control task (advance the FIFO pointer, increment the GPIFADR address, and so on), that task is always executed once upon entering the State, regardless of whether the State is a DP or NDP. If the State is a DP that loops back on itself, however, it can be programmed to re-execute the control task on every loop. With a Decision Point, the GPIF can perform simple tasks (wait until a RDY line is low before continuing to the next State, for instance). Decision point States can also perform more-complex tasks by branching to one State if the operation on the sampled signals results in a logic ‘1’, or to a different State if it results in a logic ‘0’. ■ FD[7:0] is programmed to be tri-stated. In each State Instruction, the two signals to sample can be selected from any of the following: ■ CTL0 is still programmed to be driven to a logic ‘1’. ■ The six external RDY signals (RDY0-RDY5) ■ One of the current FIFO’s flags (PF, EF, FF) ■ The INTRDY bit in the READY register ■ A Transaction Count Expired signal (which replaces RDY5) Since all States in this example are coded as NDPs, the GPIF automatically branches from the last State (S6) to the Idle State (S7). This is the State in which the GPIF waits until the next GPIF waveform is triggered by the firmware. States 2 and 3 in the example are identical, as are States 5 and 6. In a real application, these would probably be combined (there is no need to duplicate a State in order to ‘stretch’ it, since each NDP State can be assigned a duration in terms of IFCLK cycles). If fewer than 7 States were The State Instruction also specifies a logic function (AND, OR, or XOR) to be applied to the two selected signals. If it is desired to act on the state of only one signal, the usual procedure is to select the same signal twice and specify the logic function as AND. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 129 General Programmable Interface The State Instruction also specifies which State to branch to if the result of the logical expression is ‘0,’ and which State to branch to if the result of the logical expression is ‘1.’ Below is an example waveform created using one Decision Point State (State 1); Non-Decision Point States are used for the rest of the waveform. In Figure 10-8 and Figure 10-9, there is a single Decision Point defined as State 1. In this example, the input ready signal is assumed to be connected to RDY0, and the State Instruction for S1 is configured to branch to State 2 if RDY0 is a logic ‘0’ or to branch to State 1 (for example, loop indefinitely) if RDY0 is a logic ‘1’. In Figure 10-8, the GPIF remains in S1 until the RDY0 signal goes low, then branches to S2. Figure 10-9 illustrates the GPIF behavior when the RDY0 signal is already low when S1 is entered: The GPIF branches to S2. Note Although it appears in Figure 10-9 that the GPIF branches immediately from State 1 to State 2, this is not exactly true. Even if RDY0 is already low before the GPIF enters State 1, the GPIF spends one IFCLK cycle in State 1 to evaluate the decision point. The logic function is applied on the rising edge of IFCLK entering State 1. If the logic function holds TRUE at this point, then the branch is effective on the next rising of IFCLK. Figure 10-8. One Decision Point: Wait States Inserted Until RDY0 Goes Low S0 GPIFADR[8:0] A FD[15:0] Z S1 S2 S3 S4 VALID S5 S6 Z CTL0 RDY0 Figure 10-9. One Decision Point: No Wait States Inserted: RDY0 is Already Low at Decision Point I1 S0 GPIFADR[8:0] A FD[15:0] Z S1 VALID S2 S3 S4 S5 S6 Z CTL0 RDY0 130 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.3.3 Reexecuting a Task Within a DP State In the simple DP examples shown earlier in this chapter, a control task (e.g., output a word on FD[15:0] and increment GPIFADR[8:0]) executes only once at the start of a DP State, then the GPIF waits, sampling a RDYx input repeatedly until that input ‘tells’ the GPIF to branch to the next State. The GPIF also has the capability to reexecute the control task every time the RDYx input is sampled; this feature can be used to burst a large amount of data without passing through the Idle State (a waveform example is shown in Figure 10-10). To re-execute a task within a decision point state, the reexecute bit for that decision point must be enabled. This is performed by checking the ‘Loop (Re-Execute)’ check-box within GPIF Designer (an example is shown in Figure 10-11). Figure 10-13 on page 132 shows an example of a GPIF waveform that uses a DP state which does not reexecute its control tasks. Figure 10-10. Reexecuting a Task within a DP State IFCLK GPIFADR[8:0] A A+1 A+2 A+3 FD[15:0] D D+1 D+2 D+3 CTL0 RDY0 NDP DP NDP DP, transitions to next interval when terms are met DP, using re-execute control task feature… to loop on to itself until terms are met Figure 10-11. GPIF Designer Setup for the Waveform of Figure 10-10 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 131 General Programmable Interface Figure 10-12. GPIF Designer Output for the Waveform of Figure 10-10 State AddrMode 0 1 2 3 4 5 6 Same Val Inc Val Same Val Same Val Same Val Same Val Same Val DataMode Activate Activate No Data No Data No Data No Data No Data NextData SameData NextData SameData SameData SameData SameData SameData No Int No Int No Int No Int No Int No Int No Int Wait 4 IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Int Trig IF/Wait Term A 7 RDY0 LFUNC AND Term B RDY0 Branch1 Then 2 Branch0 Else 1 Re-execute Yes CTL0 1 0 1 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 Figure 10-13. A DP State That Does NOT Reexecute the Task IFCLK GPIFADR[8:0] A A+1 FD[15:0] D D+1 CTL0 RDY0 NDP DP NDP DP, transitions to next interval when terms are met DP, loop on to itself until terms are met… control tasks execute on rising edge transition into DP only… 132 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-14. GPIF Designer Setup for the Waveform of Figure 10-13 Figure 10-15. GPIF Designer Output for the Waveform of Figure 10-13 State AddrMode 0 1 2 3 4 5 6 Same Val Inc Val Same Val Same Val Same Val Same Val Same Val DataMode Activate Activate No Data No Data No Data No Data No Data NextData SameData NextData SameData SameData SameData SameData SameData No Int No Int No Int No Int No Int No Int No Int Wait 4 IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Int Trig IF/Wait Term A 7 RDY0 LFUNC AND Term B RDY0 Branch1 Then 2 Branch0 Else 1 Re-execute No CTL0 1 0 1 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 133 General Programmable Interface 10.3.4 State Instructions Each State’s characteristics are defined by a 4-byte State Instruction. The four bytes are named LENGTH / BRANCH, OPCODE, LOGIC FUNCTION, and OUTPUT. Note that the State Instructions are interpreted differently for Decision Points (DP = 1) and Non-Decision Points (DP = 0). Non-Decision Point State Instruction (DP = 0) LENGTH / BRANCH Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Number of IFCLK cycles to stay in this State (0 = 256 cycles) OPCODE 7 6 5 4 3 2 1 0 x x SGL GINT INCAD NEXT/ SGLCRC DATA DP = 0 6 5 4 3 2 1 0 LOGIC FUNCTION 7 Not Used OUTPUT (if TRICTL Bit = 1) 7 6 5 4 3 2 1 0 OE3 OE2 OE1 OE0 CTL3 CTL2 CTL1 CTL0 OUTPUT (if TRICTL Bit = 0) 7 6 5 4 3 2 1 0 x x CTL5 CTL4 CTL3 CTL2 CTL1 CTL0 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Decision Point State Instruction (DP = 1) LENGTH / BRANCH Bit 7 Bit 6 Re-Execute x Bit 5 BRANCHON1 BRANCHON0 OPCODE 7 6 5 4 3 2 1 0 x x SGL GINT INCAD NEXT/SGLCRC DATA DP = 1 6 5 4 3 2 1 0 LOGIC FUNCTION 7 LFUNC TERMA TERMB OUTPUT (if TRICTL Bit = 1) 134 7 6 5 4 3 2 1 0 OE3 OE2 OE1 OE0 CTL3 CTL2 CTL1 CTL0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface OUTPUT (if TRICTL Bit = 0) 7 6 5 4 3 2 1 0 x x CTL5 CTL4 CTL3 CTL2 CTL1 CTL0 LENGTH / BRANCH Register. This register’s interpretation depends on the DP bit: ■ ■ For DP = 0 (Non-Decision Point), this is a LENGTH field; it holds the fixed duration of this State in IFCLK cycles. A value of ‘0’ is interpreted as 256 IFCLK cycles. 0 = Use SGLDATH:L. DATA Bit. This bit specifies whether the FIFO Data bus is to be driven, tri-stated, or sampled. During a write: 1 = Drive the FIFO Data bus with the output data. For DP = 1 (Decision Point), this is a BRANCH field; it specifies the State to which the GPIF branches. 0 = tri-state (do not drive the bus). BRANCHON1 Specifies the State to which the GPIF branches if the logic expression evaluates to ‘1’. During a read: BRANCHON0 Specifies the State to which the GPIF branches if the logic expression evaluates to ‘0’. 1 = Sample the FIFO Data bus and store the data. Re-Execute Setting this bit allows the DP to re-execute its control tasks. OPCODE Register. This register sets a number of State characteristics. SGL Bit. This bit has no effect in a Single Read or Single Write waveform. In a FIFO waveform, it specifies whether a single data transaction should occur (from/to the SGLDATH:L or UDMACRCH:L registers), even in a FIFO Write or FIFO Read transaction. See also NEXT/ SGLCRC, below. 0 = Do not sample the data bus. DP Bit. This bit indicates whether the State is a DP or NDP. 1 = Decision Point. 0 = Non-Decision Point. 1 = Use SGLDATH:L or UDMACRCH:L. LOGIC FUNCTION Register. This register is used only in DP State Instructions. It specifies the inputs (TERMA and TERMB) and the Logic Function (LFUNC) to apply to those inputs. The result of the logic function determines the State to which the GPIF branches (see also LENGTH /BRANCH Register, above). 0 = Use the FIFO. TERMA and TERMB bits: GINT Bit. This bit specifies whether to generate a GPIFWF interrupt during this State. 1 = Generate GPIFWF interrupt (on INT4) when this State is reached. 0 = Do not generate interrupt. INCAD Bit. This bit specifies whether to increment the GPIF Address lines GPIFADR[8:0]. = 000: RDY0 = 001: RDY1 = 010: RDY2 = 011: RDY3 = 100: RDY4 = 101: RDY5 (or Transaction-Count Expiration, if GPIFREADYCFG.5 = 1) 1 = Increment the GPIFADR[8:0] bus at the beginning of this State. = 110: FIFO flag (PF, EF, or FF), preselected via EPxGPIFFLGSEL 0 = Do not increment the GPIFADR[8:0] signals. = 111: INTRDY (Bit 7 of the GPIFREADYCFG register) NEXT/SGLCRC Bit. If SGL = 0, specifies whether the FIFO should be advanced at the start of this State. 1 = Move the next data in the OUT FIFO to the LFUNC bits: = 00: A AND B = 01: A OR B = 10: A XOR B top. 0 = Do not advance the FIFO. The NEXT bit has no effect when the waveform is applied to an IN FIFO. If SGL = 1, specifies whether data should be transferred to/from SGLDATH:L or UDMACRCH:L. See also SGL Bit above. 1 = Use UDMACRCH:L. = 11: A AND B The TERMA and TERMB inputs are sampled at each rising edge of IFCLK. The logic function is applied, then the branch is taken on the next rising edge. This register is meaningful only for DP Instructions; when the DP bit of the OPCODE register is cleared to ‘0’, the contents of this register are ignored. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 135 General Programmable Interface OUTPUT Register. This register controls the state of the six Control outputs (CTL5:0) during the entire State defined by this State Instruction. Table 10-7. Waveform Descriptor 0 Structure (continued) XDATA Address OEx Bit. If TRICTL = 1, specifies whether the corresponding CTLx output signal is tri-stated. 1 = Drive CTLx 0 = Tri-state CTLx CTLx Bit. This specifies the state to set each CTLx signal to during this entire State. 1 = High level If the CTLx bit in the GPIFCTLCFG register is set to ‘1’, the output driver is an open-drain. If the CTLx bit in the GPIFCTLCFG register is set to ‘0’, the output driver is driven to CMOS levels. 0 = Low level 10.3.4.1 Structure of the Waveform Descriptors Contents 0xE407 Reserved 0xE408 OPCODE[0] (OPCODE field of State 0 of Waveform Program 0) 0xE409 OPCODE[1] (OPCODE field of State 1 of Waveform Program 0) 0xE40A OPCODE[2] (OPCODE field of State 2 of Waveform Program 0) 0xE40B OPCODE[3] (OPCODE field of State 3 of Waveform Program 0) 0xE40C OPCODE[4] (OPCODE field of State 4 of Waveform Program 0) 0xE40D OPCODE[5] (OPCODE field of State 5 of Waveform Program 0) 0xE40E OPCODE[6] (OPCODE field of State 6 of Waveform Program 0) 0xE40F Reserved 0xE410 OUTPUT[0] (OUTPUT field of State 0 of Waveform Program 0) 0xE411 OUTPUT[1] (OUTPUT field of State 1 of Waveform Program 0) Up to four different Waveforms can be defined. Each Waveform Descriptor comprises up to 7 State Instructions which are loaded into the Waveform Registers as defined in this section. 0xE412 OUTPUT[2] (OUTPUT field of State 2 of Waveform Program 0) 0xE413 OUTPUT[3] (OUTPUT field of State 3 of Waveform Program 0) 0xE414 OUTPUT[4] (OUTPUT field of State 4 of Waveform Program 0) 0xE415 OUTPUT[5] (OUTPUT field of State 5 of Waveform Program 0) Table 10-6. Waveform Descriptor Addresses 0xE416 OUTPUT[6] (OUTPUT field of State 6 of Waveform Program 0) 0xE417 Reserved 0xE418 LOGIC FUNCTION[0] (LOGIC FUNCTION field of State 0 of Waveform Program 0) 0xE419 LOGIC FUNCTION[1] (LOGIC FUNCTION field of State 1 of Waveform Program 0) 0xE41A LOGIC FUNCTION[2] (LOGIC FUNCTION field of State 2 of Waveform Program 0) Waveform Descriptor Base XDATA Address 0 0xE400 1 0xE420 2 0xE440 3 0xE460 Within each Waveform Descriptor, the State Instructions are packed as described in Table 10-7. Waveform Descriptor 0 is shown as an example. The other Waveform Descriptors follow exactly the same structure but at higher XDATA addresses. 0xE41B LOGIC FUNCTION[3] (LOGIC FUNCTION field of State 3 of Waveform Program 0) 0xE41C LOGIC FUNCTION[4] (LOGIC FUNCTION field of State 4 of Waveform Program 0) 0xE41D LOGIC FUNCTION[5] (LOGIC FUNCTION field of State 5 of Waveform Program 0) Table 10-7. Waveform Descriptor 0 Structure 0xE41E LOGIC FUNCTION[6] (LOGIC FUNCTION field of State 6 of Waveform Program 0) 0xE41F Reserved XDATA Address Contents 0xE400 LENGTH / BRANCH [0] (LENGTH / BRANCH field of State 0 of Waveform Program 0) 0xE401 LENGTH / BRANCH [1] (LENGTH / BRANCH field of State 1 of Waveform Program 0) Once a GPIF transfer is initiated, the ONLY way to terminate the transfer is to either: 0xE402 LENGTH / BRANCH [2] (LENGTH / BRANCH field of State 2 of Waveform Program 0) ■ have it terminate naturally when the byte count expires or 0xE403 LENGTH / BRANCH [3] (LENGTH / BRANCH field of State 3 of Waveform Program 0) ■ 0xE404 LENGTH / BRANCH [4] (LENGTH / BRANCH field of State 4 of Waveform Program 0) have the 8051 terminate and abort the transfer by writing to the GPIFABORT register. 0xE405 LENGTH / BRANCH [5] (LENGTH / BRANCH field of State 5 of Waveform Program 0) 0xE406 LENGTH / BRANCH [6] (LENGTH / BRANCH field of State 6 of Waveform Program 0) 136 10.3.4.2 Terminating a GPIF Transfer Once a GPIF transfer is triggered, it does not terminate until the Transaction Count (TC) has expired. The GPIF engine checks the state of the TC only when in IDLE state. While designing a GPIF waveform, you must have the waveform EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface pass through an IDLE state in order for the GPIF to check the TC and finally terminate when TC has expired. 10.4 Firmware GPIF does allow you to save time and avoid going through the IDLE state by using the ‘Transaction Count Expired’ (TCxpire) signal. This TCxpire replaces RDY5, if GPIFREADYCFG.5 = 1. Section 10.4.3.2 Reading the Transaction-Count Status in a DP State on page 150 provides further information on this. Table 10-8. Registers Associated with GPIF Firmware GPIFTRIG (SFR) EPxCFG GPIFSGLDATH (SFR) EPxFIFOCFG GPIFSGLDATLX (SFR) EPxAUTOINLENH/L GPIFSGLDATLNOX (SFR) EPxFIFOPFH/L EPxGPIFTRIG EP2468STAT(SFR) XGPIFSGLDATH EP24FIFOFLGS(SFR) XGPIFSGLDATLX EP68FIFOFLGS(SFR) XGPIFSGLDATLNOX EPxCS GPIFABORT EPxFIFOFLGS GPIFIE GPIFIRQ EPxFIFOIE GPIFTCB3 EPxFIFOIRQ GPIFTCB2 INT2IVEC GPIFTCB1 INT4IVEC GPIFTCB0 INTSETUP IE (SFR) EPxBCH/L IP (SFR) EPxFIFOBCH/L INT2CLR(SFR) EPxFIFOBUF INT4CLR(SFR) INPKTEND/OUTPKTEND EIE (SFR) EXIF (SFR) The ‘x’ in these register names represents 2, 4, 6, or 8; endpoints 0 and 1 are not associated with the Slave FIFOs. The GPIF Designer utility, distributed with the Cypress EZUSB Development Kit, generates C code which may be linked with the rest of an application’s source code. Except for GpifInit(), the GPIF Designer output source file does not include the following basic GPIF framework and functions. TD_Init(): … … … … … GpifInit(); // Configures GPIF from GPIF Designer generated waveform data // TODO: configure other endpoints, etc. here // TODO: arm OUT buffers here // // // // // // // setup INT4 as internal source for GPIF interrupts using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; //Enable INT4 Autovectoring SYNCDELAY; GPIFIE = 0x03; // Enable GPIFDONE and GPIFWF interrupts SYNCDELAY; EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4)=1 // TODO: configure GPIF interrupts to meet your needs here EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 137 General Programmable Interface … … … … … void GpifInit( void ) { BYTE i; // // // // // // // // // // // // // Registers which require a synchronization delay, see section 15.14 FIFORESET FIFOPINPOLAR INPKTEND OUTPKTEND EPxBCH:L REVCTL GPIFTCB3 GPIFTCB2 GPIFTCB1 GPIFTCB0 EPxFIFOPFH:L EPxAUTOINLENH:L EPxFIFOCFG EPxGPIFFLGSEL PINFLAGSxx EPxFIFOIRQ EPxFIFOIE GPIFIRQ GPIFIE GPIFADRH:L UDMACRCH:L EPxGPIFTRIG GPIFTRIG // 8051 doesn't have access to waveform memories 'til // the part is in GPIF mode. IFCONFIG = 0xCE; // IFCLKSRC=1 , // xMHz=1 , // IFCLKOE=0 , // IFCLKPOL=0 , // ASYNC=1 , // GSTATE=1 , // IFCFG[1:0]=10, GPIFABORT = 0xFF; FIFOs executes on internal clk source 48MHz internal clk rate Don't drive IFCLK pin signal at 48MHz Don't invert IFCLK pin signal from internal clk master samples asynchronous Drive GPIF states out on PORTE[2:0], debug WF FX2 in GPIF master mode // abort any waveforms pending GPIFREADYCFG = InitData[ 0 ]; GPIFCTLCFG = InitData[ 1 ]; GPIFIDLECS = InitData[ 2 ]; GPIFIDLECTL = InitData[ 3 ]; GPIFWFSELECT = InitData[ 5 ]; GPIFREADYSTAT = InitData[ 6 ]; // use dual autopointer feature... AUTOPTRSETUP = 0x07; // inc both pointers, // ...warning: this introduces program holes // ...at E67B (XAUTODAT1) and E67C (XAUTODAT2) // source APTR1H = MSB( &WaveData ); APTR1L = LSB( &WaveData ); // destination AUTOPTRH2 = 0xE4; AUTOPTRL2 = 0x00; // transfer for ( i = 0x00; i < 128; i++ ) { EXTAUTODAT2 = EXTAUTODAT1; 138 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface } // Configure GPIF Address pins, output initial value, PORTCCFG = 0xFF; // [7:0] as alt. func. GPIFADR[7:0] OEC = 0xFF; // and as outputs PORTECFG |= 0x80; // [8] as alt. func. GPIFADR[8] OEE |= 0x80; // and as output // ...OR... tri-state // PORTCCFG = 0x00; // OEC = 0x00; // PORTECFG &= 0x7F; // OEE &= 0x7F; GPIFADR[8:0] pins // [7:0] as port I/O // and as inputs // [8] as port I/O // and as input // GPIF address pins update when GPIFADRH/L written SYNCDELAY; // GPIFADRH = 0x00; // bits[7:1] always 0 SYNCDELAY; // GPIFADRL = 0x00; // point to PERIPHERAL address 0x0000 // Configure GPIF FlowStates registers for Wave 0 of WaveData FLOWSTATE = FlowStates[ 0 ]; FLOWLOGIC = FlowStates[ 1 ]; FLOWEQ0CTL = FlowStates[ 2 ]; FLOWEQ1CTL = FlowStates[ 3 ]; FLOWHOLDOFF = FlowStates[ 4 ]; FLOWSTB = FlowStates[ 5 ]; FLOWSTBEDGE = FlowStates[ 6 ]; FLOWSTBHPERIOD = FlowStates[ 7 ]; } // Set Address GPIFADR[8:0] to PERIPHERAL void Peripheral_SetAddress( WORD gaddr ) { SYNCDELAY; // GPIFADRH = gaddr >> 8; SYNCDELAY; // GPIFADRL = ( BYTE )gaddr; // setup GPIF address } // Set GPIF Transaction Count void Peripheral_SetGPIFTC( WORD xfrcnt ) { SYNCDELAY; // GPIFTCB1 = xfrcnt >> 8; // setup transaction count SYNCDELAY; // GPIFTCB0 = ( BYTE )xfrcnt; } #define GPIF_FLGSELPF 0 #define GPIF_FLGSELEF 1 #define GPIF_FLGSELFF 2 // Set EP2GPIF Decision Point FIFO Flag Select (PF, EF, FF) void SetEP2GPIFFLGSEL( WORD DP_FIFOFlag ) { EP2GPIFFLGSEL = DP_FIFOFlag; } EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 139 General Programmable Interface // Set EP4GPIF Decision Point FIFO Flag Select (PF, EF, FF) void SetEP4GPIFFLGSEL( WORD DP_FIFOFlag ) { EP4GPIFFLGSEL = DP_FIFOFlag; } // Set EP6GPIF Decision Point FIFO Flag Select (PF, EF, FF) void SetEP6GPIFFLGSEL( WORD DP_FIFOFlag ) { EP6GPIFFLGSEL = DP_FIFOFlag; } // Set EP8GPIF Decision Point FIFO Flag Select (PF, EF, FF) void SetEP8GPIFFLGSEL( WORD DP_FIFOFlag ) { EP8GPIFFLGSEL = DP_FIFOFlag; } // Set EP2GPIF Programmable Flag STOP, overrides Transaction Count void SetEP2GPIFPFSTOP( void ) { EP2GPIFPFSTOP = 0x01; } // Set EP4GPIF Programmable Flag STOP, overrides Transaction Count void SetEP4GPIFPFSTOP( void ) { EP4GPIFPFSTOP = 0x01; } // Set EP6GPIF Programmable Flag STOP, overrides Transaction Count void SetEP6GPIFPFSTOP( void ) { EP6GPIFPFSTOP = 0x01; } // Set EP8GPIF Programmable Flag STOP, overrides Transaction Count void SetEP8GPIFPFSTOP( void ) { EP8GPIFPFSTOP = 0x01; } // write single byte to PERIPHERAL, using GPIF void Peripheral_SingleByteWrite( BYTE gdata ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } XGPIFSGLDATLX = gdata; // trigger GPIF // ...single byte write transaction } // write single word to PERIPHERAL, using GPIF void Peripheral_SingleWordWrite( WORD gdata ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; 140 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface } // using registers in XDATA space XGPIFSGLDATH = gdata >> 8; XGPIFSGLDATLX = gdata; // trigger GPIF // ...single word write transaction } // read single byte from PERIPHERAL, using GPIF void Peripheral_SingleByteRead( BYTE xdata *gdata ) { static BYTE g_data = 0x00; while( !( GPIFTRIG & 0x80 ) ) { ; } // poll GPIFTRIG.7 Done bit // using registers in XDATA space, dummy read g_data = XGPIFSGLDATLX; // trigger GPIF // ...single byte read transaction while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } // using registers in XDATA space, *gdata = XGPIFSGLDATLNOX; // ...GPIF reads byte from PERIPHERAL } // read single word from PERIPHERAL, using GPIF void Peripheral_SingleWordRead( WORD xdata *gdata ) { BYTE g_data = 0x00; while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } // using registers in XDATA space, dummy read g_data = XGPIFSGLDATLX; // trigger GPIF // ...single word read transaction while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } // using registers in XDATA space, GPIF reads word from PERIPHERAL *gdata = ( ( WORD )XGPIFSGLDATH << 8 ) | ( WORD )XGPIFSGLDATLNOX; } #define GPIFTRIGWR 0 #define GPIFTRIGRD 4 #define GPIF_EP2 0 #define GPIF_EP4 1 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 141 General Programmable Interface #define GPIF_EP6 2 #define GPIF_EP8 3 // write bytes/words to PERIPHERAL, using GPIF and EPxFIFO // if EPx WORDWIDE=0 then write bytes // if EPx WORDWIDE=1 then write words void Peripheral_FIFOWrite( BYTE FIFO_EpNum ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } // trigger FIFO write transactions, using SFR GPIFTRIG = FIFO_EpNum; // R/W=0, EP[1:0]=FIFO_EpNum for EPx writes } // read bytes/words from PERIPHERAL, using GPIF and EPxFIFO // if EPx WORDWIDE=0 then read bytes // if EPx WORDWIDE=1 then read words void Peripheral_FIFORead( BYTE FIFO_EpNum ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 GPIF Done bit { ; } // trigger FIFO read transactions, using SFR GPIFTRIG = GPIFTRIGRD | FIFO_EpNum; // R/W=1, EP[1:0]=FIFO_EpNum for EPx reads } 142 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.4.1 Single Read Transactions Figure 10-16. Firmware Launches a Single Read Waveform, WORDWIDE=0 8051 GPIF XDATA Device Pins * FD[7:0] 30/48MHz IFCLK 5 - 48MHz CLK XGPIFSGLDATH/L GPIFADR[8:0] W aveform Descriptors CTL[5:0] W F0 W F1 W F2 W F3 RDY[5:0] 8051 GPIF XGPIFSGLDATLX GPIF DONE GPIFW F 8051 INTRDY * All EPx WORDWIDE bits must be cleared to ‘0’ for 8 bit single transactions. If any of the EPx WORDWIDE bits are set to ‘1’, then single transactions are 16 bits wide. Figure 10-17. Single Read Transaction Waveform IFCLK 0x00AB GPIFADR[8:0] 0x80 hi-Z FD[7:0] hi-Z CTL0 RDY0 NDP NDP i1 NDP i2 NDP NDP i3 i4 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F NDP 143 General Programmable Interface Figure 10-18. GPIF Designer Setup for the Waveform of Figure 10-17 sample data bus here Figure 10-19. GPIF Designer Output for the Waveform of Figure 10-17 State AddrMode 0 1 2 3 4 5 6 Same Val Same Val Same Val Same Val Same Val Same Val Same Val DataMode No Data No Data Activate No Data No Data No Data No Data NextData SameData SameData SameData SameData SameData SameData SameData Int Trig IF/Wait No Int No Int No Int No Int No Int No Int No Int Wait 4 Wait 1 Wait 1 Wait 2 Wait 1 Wait 1 Wait 1 7 Term A LFUNC Term B Branch1 Branch0 Re-execute CTL0 1 1 0 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 To perform a Single Read transaction: 1. Initialize the GPIF Configuration Registers and Waveform Descriptors. 2. Check that the GPIF is IDLE by checking if the DONE bit (GPIFIDLECS.7 or GPIFTRIG.7) is set. In 16 bit mode only, the most significant byte, FD[15:8], of data is read from the XGPIFSGLDATH register. In 8 and 16 bit modes, the least significant byte of data is read by either: ❐ reading XGPIFSGLDATLX, which reads the least significant byte and starts another Single Read transaction. ❐ reading XGPIFSGLDATLNOX, which reads the least significant byte but does not start another Single Read transaction. 3. Perform a dummy read of the XGPIFSGLDATLX register to start a single transaction. 4. Wait for the GPIF to indicate that the transaction is complete. When the transaction is complete, the DONE bit (GPIFIDLECS.7 or GPIFTRIG.7) is set to ‘1’. If enabled, a GPIFDONE interrupt is also generated. 5. Depending on the bus width and the desire to start another transaction, the data read by the GPIF can be retrieved from the XGPIFSGLDATH, XGPIFSGLDATLX, and/or the XGPIFSGLDATLNOX register (or from the SFR-space copies of these registers). 144 The following C program fragments (Figure 10-20 on page 145 and Figure 10-21 on page 146) illustrate how to perform a Single Read transaction in 8 bit mode (WORDWIDE=0): EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-20. Single Read Transaction Functions #define #define #define #define #define PERIPHCS 0x00AB AOKAY 0x80 BURSTMODE 0x0000 TRISTATE 0xFFFF EVER ;; // prototypes void GpifInit( void ); // Set Address GPIFADR[8:0] to PERIPHERAL void Peripheral_SetAddress( WORD gaddr ) { if( gaddr < 512 ) { // drive GPIF address bus w/gaddr GPIFADRH = gaddr >> 8; SYNCDELAY; GPIFADRL = ( BYTE )gaddr; // setup GPIF address } else { // tri-state GPIFADR[8:0] pins PORTCCFG = 0x00; // [7:0] as port I/O OEC = 0x00; // and as inputs PORTECFG &= 0x7F; // [8] as port I/O OEE &= 0x7F; // and as input } } // read single byte from PERIPHERAL, using GPIF void Peripheral_SingleByteRead( BYTE xdata *gdata ) { static BYTE g_data = 0x00; while( !( GPIFTRIG & 0x80 ) ) { ; } // poll GPIFTRIG.7 Done bit // using registers in XDATA space, dummy read g_data = XGPIFSGLDATLX; // to trigger GPIF single byte read transaction while( !( GPIFTRIG & 0x80 ) ) { ; } // poll GPIFTRIG.7 Done bit // using registers in XDATA space, GPIF read byte from PERIPHERAL here *gdata = XGPIFSGLDATLNOX; } EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 145 General Programmable Interface Figure 10-21. Initialization Code for Single Read Transactions void TD_Init( void ) { BYTE xdata periph_status; … … … … … GpifInit(); // Configures GPIF from GPIF Designer generated waveform data // TODO: configure other endpoints, etc. here // TODO: arm OUT buffers here // // // // // // // setup INT4 as internal source for GPIF interrupts using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; //Enable INT4 Autovectoring SYNCDELAY; GPIFIE = 0x03; // Enable GPIFDONE and GPIFWF interrupts SYNCDELAY; EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4)=1 // TODO: configure GPIF interrupts to meet your needs here … … … … … // get status of peripheral function Peripheral_SetAddress( PERIPHCS ); Peripheral_SingleByteRead( &periph_status ); if( periph_status == AOKAY ) { // set it and forget it Peripheral_SetAddress( BURSTMODE ); } else { Peripheral_SetAddress( TRISTATE ); } } 146 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.4.2 Single Write Transactions Figure 10-22. Firmware Launches a Single Write Waveform, WORDWIDE=0 8051 G PIF XDA TA Device P ins * FD [7:0] 30/48M H z IFC LK 5 - 48M Hz CLK XG P IFS G LD A TH /L 8051 G P IFA DR [8:0] W aveform Descriptors C TL[5:0] W F0 W F1 W F2 W F3 R DY [5:0] G P IF XG P IFS G LD A TLX G PIF D O N E G P IFW F 8051 INTR DY * All EPx WORDWIDE bits must be cleared to zero for 8 bit single transactions. If any of the EPx WORDWIDE bits are set to ‘1’, then single transactions are 16 bits wide. Figure 10-23. Single Write Transaction Waveform IFCLK 0x00AB GPIFADR[8:0] hi-Z FD[7:0] 0x01 hi-Z CTL0 RDY0 NDP NDP –i1I1 NDP i2 NDP i3 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F NDP i4 NDP 147 General Programmable Interface Figure 10-24. GPIF Designer Setup for the Waveform of Figure 10-23 drive databus here Figure 10-25. GPIF Designer Output for the Waveform of Figure 10-23 State AddrMode 0 1 2 3 4 5 6 Same Val Same Val Same Val Same Val Same Val Same Val Same Val DataMode No Data No Data Activate No Data No Data No Data No Data NextData SameData SameData SameData SameData SameData SameData SameData Int Trig IF/Wait No Int No Int No Int No Int No Int No Int No Int Wait 4 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 7 Term A LFUNC Term B Branch1 Branch0 Re-execute CTL0 1 1 0 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 Single Write transactions are simpler than Single Read transactions because no dummy read operation is required. To execute a Single Write transaction: 1. Initialize the GPIF Configuration Registers and Waveform Descriptors. (GPIFIDLECS.7 or GPIFTRIG.7) is set to ‘1’. If enabled, a GPIFDONE interrupt is also generated. The following C program fragments (Figure 10-26 and Figure 10-27 on page 149) illustrate how to perform a Single Write transaction in 8 bit mode (WORDWIDE=0): 2. Check that the GPIF is IDLE by checking if the DONE bit (GPIFIDLECS.7 or GPIFTRIG.7) is set. 3. If in 16 bit mode (WORDWIDE = 1), write the most significant byte of the data to the XGPIFSGLDATH register, then write the least significant byte to the XGPIFSGLDATLX register to start a Single Write transaction. 4. In 8 bit mode, simply write the data to the XGPIFSGLDATLX register to start a Single Write transaction. 5. Wait for the GPIF to indicate that the transaction is complete. When the transaction is complete, the DONE bit 148 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-26. Single Write Transaction Functions #define PERIPHCS 0x00AB #define P_HSMODE 0x01 // prototypes void GpifInit( void ); // Set Address GPIFADR[8:0] to PERIPHERAL void Peripheral_SetAddress( WORD gaddr ) { GPIFADRH = gaddr >> 8; SYNCDELAY; GPIFADRL = ( BYTE )gaddr; // setup GPIF address } // write single byte to PERIPHERAL, using GPIF void Peripheral_SingleByteWrite( BYTE gdata ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } XGPIFSGLDATLX = gdata; // trigger GPIF single byte write transaction } Figure 10-27. Initialization Code for Single Write Transactions void TD_Init( void ) { … … … … … GpifInit(); // Configures GPIF from GPIF Designer generated waveform data // TODO: configure other endpoints, etc. here // TODO: arm OUT buffers here // // // // // // // setup INT4 as internal source for GPIF interrupts using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; //Enable INT4 Autovectoring SYNCDELAY; GPIFIE = 0x03; // Enable GPIFDONE and GPIFWF interrupts SYNCDELAY; EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4)=1 // TODO: configure GPIF interrupts to meet your needs here … … … … … // tell peripheral we are going into high speed xfr mode Peripheral_SetAddress( PERIPHCS ); Peripheral_SingleByteWrite( P_HSMODE ); } EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 149 General Programmable Interface 10.4.3 FIFO Read and FIFO Write (Burst) Transactions FIFO Read and FIFO Write waveforms transfer data to and from the EZ-USB’s Slave FIFOs (See chapter “Slave FIFOs” on page 99). The waveform is started by writing to EPxGPIFTRIG, where ‘x’ represents the FIFO (2, 4, 6, or 8) to/ from which data should be transferred, or to GPIFTRIG. A FIFO Read or FIFO Write waveform generally transfers a long stream of data rather than a single byte or word. Usually, the waveform is programmed to terminate after a specified number of transactions or when a FIFO flag asserts (for example, when an IN FIFO is full or an OUT FIFO is empty). A ‘transaction’ is a transfer of a single byte (if WORDWIDE = 0) or word (if WORDWIDE = 1) to or from a FIFO. Using the GPIF Designer’s terminology, a transaction is either an ‘Activate Data’ for a FIFO Read or a ‘Next FIFO Data’ for a FIFO Write. 10.4.3.1 Transaction Counter To use the Transaction Counter for FIFO ‘x’, load GPIFTCB3:0 with the desired number of transactions (1 to 4,294,967,295). When a FIFO Read or Write waveform is triggered on that FIFO, the GPIF transfers the specified number of bytes (or words, if WORDWIDE = 1) automatically. This mode of operation is called Long Transfer Mode; when the Transaction Counter is used in this way, the Waveform Descriptor should branch to the Idle State after each transaction. Each time through the Idle State, the GPIF checks the Transaction Count; when it expires, the waveform terminates and the DONE bit is set. Otherwise, the GPIF re-executes the entire Waveform Descriptor. Note In Long Transfer Mode, the DONE bit is not set until the Transaction Count expires. While the Transaction Count is active, the GPIF checks the Full Flag (for IN FIFOs) or the Empty Flag (for OUT FIFOs) on every pass through the Idle State. If the flag is asserted, the GPIF pauses until the over/underflow threat is removed, then it automatically resumes. In this way, the GPIF automatically throttles data flow in Long Transfer Mode. feature allows the Transaction Counter to be used without passing through the Idle State after each transaction. 10.4.4 GPIF Flag Selection The GPIF can examine the PF, EF, or FF (of the current FIFO) during a waveform. One of the three flags is selected by the FS[1:0] bits in the EPxGPIFFLGSEL register; that selected flag is called the GPIF Flag. 10.4.5 GPIF Flag Stop When EPxGPIFPFSTOP.0 is set to ‘1’, FIFO Read and Write transactions are terminated by the assertion of the GPIF Flag. When this feature is used, it overrides the Transaction Counter; the GPIF waveform terminates (sets DONE to ‘1’) only when the GPIF Flag asserts. If the GPIF Flag is already asserted at the time the waveform is launched, a GPIF DONE interrupt is not generated. No special programming of the Waveform Descriptors is necessary, and FIFO Waveform Descriptors that transition through the Idle State on each transaction (for example, waveforms that do not use the Transaction Counter) are unaffected. Automatic throttling of the FIFOs in IDLE still occurs, so there is no danger of the GPIF writing to a full FIFO or reading from an empty FIFO. Note Unless the firmware aborts the GPIF transfer by writing to the GPIFABORT register, only the GPIF Flag assertion terminates the waveform and sets the DONE bit. A waveform can potentially execute forever if the GPIF Flag never asserts. Important The GPIF Flag is only automatically tested by the EZ-USB core while transitioning through the IDLE State, and the assertion of the GPIF Flag is not latched. Since the assertion of the GPIF Flag is not latched, if it is asserted and deasserted during the waveform (due to the dynamic relationship between USB host activity and status of the EZUSB FIFOs), the EZ-USB core would not see the GPIF Flag asserted in the IDLE state. The GPIFTCB3:0 registers are readable and they update as transactions occur, so the CPU can read the Transaction Count value at any time. 10.4.3.2 Reading the Transaction-Count Status in a DP State To sample the transaction-count status in a DP State, set GPIFREADYCFG.5 to ‘1’ (which instructs the EZ-USB to replace the RDY5 input with the transaction-count expiration flag), then launch a FIFO transaction which uses a transaction count. The EZ-USB sets the transaction-count expiration flag to ‘1’ when the transaction count expires. This 150 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.4.5.1 Performing a FIFO Read Transaction Figure 10-28. Firmware Launches a FIFO Read Waveform 8051 GPIF XDATA Device Pins FD[7:0] 30/48MHz IFCLK 5 - 48MHz Slave FIFOs EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EPxEF EPxFF EPxPF EP2 EP4 EP6 EP8 CLK GPIFADR[8:0] SLOE SLRD SLW R INPKTEND CTL[5:0] RDY[5:0] FIFOADR[1:0] W aveform Descriptors 8051 GPIF W F0 W F1 W F2 W F3 GPIFTRIG GPIF DONE GPIFW F 8051 INTRDY Figure 10-29. Example FIFO Read Transaction GPIF TC EPxFIFOBUF TC=N 0x01 TC=N+1 0x02 TC=N+2 0x03 … … Peripheral data (Pdata) N N+1 0x01 i2 0x02 i2 N+2 0x03 i2 … … 512 0xFF i2 … TC=512 0xFF EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 151 General Programmable Interface Figure 10-30. FIFO Read Transaction Waveform IFCLK 0x0000 GPIFADR[8:0] hi-Z FD[7:0] Pdata++ hi-Z CTL0 RDY0 NDP NDP –i1I1 NDP i2 The above waveform executes until the Transaction Counter expires (until it counts to 512, in this example). The Transaction Counter is decremented and sampled on each pass through the IDLE state. When the Transaction Counter is used without passing through the IDLE state, the Transaction Counter is decremented on each ‘Activate’ (which samples the data bus). NDP i3 NDP i4 NDP Each iteration of the waveform reads a data value from the FIFO data bus into the FIFO, then decrements and checks the Transaction Counter. When it expires, the DONE bit is set to ‘1’ and the GPIFDONE interrupt request is asserted. Figure 10-31. GPIF Designer Setup for the Waveform of Figure 10-30 sample databus here 152 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-32. GPIF Designer Output for the Waveform of Figure 10-30 State AddrMode 0 1 2 3 4 5 6 Same Val Same Val Same Val Same Val Same Val Same Val Same Val DataMode No Data No Data Activate No Data No Data No Data No Data NextData SameData SameData SameData SameData SameData SameData SameData Int Trig IF/Wait No Int No Int No Int No Int No Int No Int No Int Wait 4 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 7 Term A LFUNC Term B Branch1 Branch0 Reexecute CTL0 1 1 0 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 Typically, when performing a FIFO Read, only one ‘Activate’ is needed in the waveform, since each execution of ‘Activate’ increments the internal FIFO pointer (and EPxBCH:L) automatically. To perform a FIFO Read Transaction: 1. Program the EZ-USB to detect completion of the transaction. As with all GPIF Transactions, bit 7 of the GPIFTRIG register (the DONE bit) signals when the Transaction is complete. 2. In the GPIFTRIG register, set the RW bit to ‘1’ and load EP[1:0] with the appropriate value for the FIFO which is to receive the data. 3. Program the EZ-USB to commit (‘pass-on’) the data from the FIFO to the endpoint. The data can be transferred from the FIFO to the endpoint by either of the following methods. ❐ AUTOIN=1: CPU is not in the data path; the EZ-USB automatically commits data from the FIFO Data bus to the USB. ❐ AUTOIN=0: Firmware must manually commit data to the USB by writing either EPxBCL or INPKTEND (with SKIP=0). The following C program fragments (Figure 10-33 on page 154 through Figure 10-36 on page 156) illustrate how to perform a FIFO Read transaction in 8 bit mode (WORDWIDE = 0) with AUTOIN = 0. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 153 General Programmable Interface Figure 10-33. FIFO Read Transaction Functions #define GPIFTRIGRD 4 #define #define #define #define GPIF_EP2 GPIF_EP4 GPIF_EP6 GPIF_EP8 0 1 2 3 #define BURSTMODE 0x0000 #define HSPKTSIZE 512 … … … … … // reads from PERIPHERAL, using GPIF and EPxFIFO void Peripheral_FIFORead( BYTE FIFO_EpNum ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 GPIF Done bit { ; } // trigger FIFO read transactions, using SFR GPIFTRIG = GPIFTRIGRD | FIFO_EpNum; // R/W=1, EP[1:0]=FIFO_EpNum // for EPx reads } // Set GPIF Transaction Count void Peripheral_SetGPIFTC( WORD xfrcnt) { GPIFTCB1 = xfrcnt >> 8; // setup transaction count SYNCDELAY; GPIFTCB0 = ( BYTE )xfrcnt; } … … … … … 154 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-34. Initialization Code for FIFO Read Transactions void TD_Init( void ) { … … … … … GpifInit(); // Configures GPIF from GPIF Designer generated waveform data // TODO: configure other endpoints, etc. here EP8CFG = 0xE0; // EP8 is DIR=IN, TYPE=BULK SYNCDELAY; EP8FIFOCFG = 0x04; // EP8 is AUTOOUT=0, AUTOIN=0, ZEROLEN=1, WORDWIDE=0 // TODO: arm OUT buffers here // // // // // // // setup INT4 as internal source for GPIF interrupts using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; //Enable INT4 Autovectoring SYNCDELAY; GPIFIE = 0x03; // Enable GPIFDONE and GPIFWF interrupts SYNCDELAY; EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4)=1 // TODO: configure GPIF interrupts to meet your needs here … … … … … // tell peripheral we are going into high speed xfr mode Peripheral_SetAddress( PERIPHCS ); Peripheral_SingleByteWrite( P_HSMODE ); // configure some GPIF registers Peripheral_SetAddress( BURSTMODE ); Peripheral_SetGPIFTC( HSPKTSIZE ); } Figure 10-35. FIFO Read w/ AUTOIN = 0, Committing Packets via INPKTEND w/SKIP=0 void TD_Poll( void ) { … … … … … if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available // host is taking EP8 data fast enough Peripheral_FIFORead( GPIF_EP8 ); } if( gpifdone_event_flag ) { // GPIF currently pointing to EP8, last FIFO accessed if( !( EP2468STAT & 0x80 ) ) { // EP8F=0 when buffer available INPKTEND = 0x08; // Firmware commits pkt by writing 8 to INPKTEND gpifdone_event_flag = 0; } } … … … … … } EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 155 General Programmable Interface Figure 10-36. FIFO Read w/ AUTOIN = 0, Committing Packets through EPxBCL void TD_Poll( void ) { … … … … … if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available // host is taking EP8 data fast enough Peripheral_FIFORead( GPIF_EP8 ); } if( gpifdone_event_flag ) { // GPIF currently pointing to EP8, last FIFO accessed if( !( EP2468STAT & 0x80 ) ) { // EP8F=0 when buffer available // modify the data EP8FIFOBUF[ 0 ] = 0x02; // , packet start of text msg EP8FIFOBUF[ 7 ] = 0x03; // , packet end of text msg SYNCDELAY; EP8BCH = 0x00; SYNCDELAY; EP8BCL = 0x08; // pass 8-byte packet on to host } } … … … … … } 10.4.6 Firmware Access to IN Packets, (AUTOIN=1) Figure 10-37. GPIF FIFO Read Transactions, AUTOIN = 1 The only difference between auto (AUTOIN=1) and manual (AUTOIN=0) modes for IN packets is the packet length feature (EPxAUTOINLENH/L) in AUTOIN=1. 8051 Host USB Data Path Slave GPIF Peripheral AUTOIN=1, Long Transfer Mode Figure 10-38. FIFO Read Transaction Code, AUTOIN = 1 void TD_Init( void ) { EP8CFG = 0xE0; // EP8 is DIR=IN, TYPE=BULK SYNCDELAY; EP8FIFOCFG = 0x0C; // EP8 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0 SYNCDELAY; EP8AUTOINLENH = 0x02; // if AUTOIN=1, auto commit 512 byte packets SYNCDELAY; EP8AUTOINLENL = 0x00; } void TD_Poll( void ) { // no code necessary to xfr data from master to host! // AUTOIN=1 and EP8AUTOINLENH:L=512 auto commits IN packets, // in 512 byte chunks. } 156 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-39. Firmware Intervention, AUTOIN = 0/1 USB Data Path AUTOIN=0 or AUTOIN=1 Firmware Access to IN Packets, (AUTOIN = 0) In manual IN mode (AUTOIN=0), the firmware has the following options: 8051 Host 10.4.7 Slave GPIF Peripheral 1. It can commit (‘pass-on’) packets sent from the master to the host when a buffer is available, by writing the INPKTEND register with the corresponding EPx number and SKIP = 0 (see Figure 10-40). 2. It can skip a packet by writing to INPKTEND with SKIP = 1. See Figure 10-41 on page 157. 3. It can source or edit a packet (for example, write directly to EPxFIFOBUF) then write the EPxBCL. See Figure 10-42 on page 158. Figure 10-40. Committing a Packet by Writing INPKTEND with EPx Number (w/SKIP = 0) TD_Poll(): … … … … … if( master_finished_longxfr( ) ) { // master currently points to EP8, last FIFO accessed if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available INPKTEND = 0x08; // Firmware commits pkt // by writing 0x08 to INPKTEND release_master( EP8 ); } } … … … … … Figure 10-41. Skipping a Packet by Writing to INPKTEND w/SKIP = 1 TD_Poll(): … … … … … if( master_finished_longxfr( ) ) { // master currently points to EP8, last FIFO accessed if( !( EP68FIFOFLGS & 0x10 ) ) { // EP8FF=0 when buffer available INPKTEND = 0x88; // Firmware commits pkt // by writing 0x88 to INPKTEND release_master( EP8 ); } } … … … … … EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 157 General Programmable Interface Figure 10-42. Sourcing an IN Packet by Writing to EPxBCH:L TD_Poll(): … … … … … if( source_pkt_event ) { // 100msec background timer fired if( holdoff_master( ) ) { // signaled “busy” to master successful while( !( EP68FIFOFLGS & 0x20 ) ) { // EP8EF=0, when buffer not empty ; // wait ‘til host takes entire FIFO data } // Reset FIFO 8. FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x88; SYNCDELAY; FIFORESET = 0x00; EP8FIFOBUF[ 0 ] EP8FIFOBUF[ 1 ] EP8FIFOBUF[ 2 ] EP8FIFOBUF[ 3 ] SYNCDELAY; EP8BCH = 0x00; SYNCDELAY; EP8BCL = 0x04; = = = = // Activate NAK-All to avoid race conditions. // Reset FIFO 8. // Deactivate NAK-All. 0x02; 0x06; 0x07; 0x03; // // // // , packet start of text msg , packet end of text msg // pass src’d buffer on to host } else { history_record( EP8, BAD_MASTER ); } } … … … … … 158 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.4.7.1 Performing a FIFO-Write Transaction Figure 10-43. Firmware Launches a FIFO Write Waveform 8051 GPIF XDATA Device Pins FD[7:0] 30/48MHz IFCLK 5 - 48MHz Slave FIFOs EP2FIFOBUF EP4FIFOBUF EP6FIFOBUF EP8FIFOBUF EPxEF EPxFF EPxPF EP2 EP4 EP6 EP8 CLK GPIFADR[8:0] SLOE SLRD SLW R INPKTEND CTL[5:0] RDY[5:0] FIFOADR[1:0] W aveform Descriptors 8051 GPIF W F0 W F1 W F2 W F3 GPIFTRIG GPIF DONE GPIF INTRDY 8051 INTRDY Figure 10-44. Example FIFO Write Transaction GPIF TC EPxFIFOBUF TC=N 0x01 TC=N+1 0x02 TC=N+2 0x03 … … Peripheral data (Pdata) N N+1 0x01 i2 0x02 i2 N+2 0x03 i2 … … 512 0xFF i2 … TC=512 0xFF EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 159 General Programmable Interface Figure 10-45. FIFO Write Transaction Waveform IFCLK 0x0000 GPIFADR[8:0] hi-Z FD[7:0] Pdata++ hi-Z CTL0 RDY0 NDP NDP –i1I1 NDP i2 The above waveform executes until the Transaction Counter expires (until it counts to 512, in this example). The Transaction Counter is decremented and sampled on each pass through the Idle State. When the Transaction Counter is used without passing through the IDLE state, the Transaction Counter is decremented on each ‘Nextdata’ (which increments the FIFO pointer). NDP i3 NDP i4 NDP Each iteration of the waveform writes a data value from the FIFO to the FIFO Data bus, then decrements and checks the Transaction Counter. When it expires, the DONE bit is set to ‘1’ and the GPIFDONE interrupt request is asserted. Figure 10-46. GPIF Designer Setup for the Waveform of Figure 10-45 drive databus here 160 increment FIFO pointer here EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-47. GPIF Designer Output for the Waveform of Figure 10-45 State AddrMode 0 1 2 3 4 5 6 Same Val Same Val Same Val Same Val Same Val Same Val Same Val DataMode No Data No Data Activate No Data No Data No Data No Data NextData SameData SameData SameData SameData SameData SameData NextData Int Trig IF/Wait No Int No Int No Int No Int No Int No Int No Int Wait 4 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 7 Term A LFUNC Term B Branch1 Branch0 Re-execute CTL0 1 1 0 1 1 1 1 1 CTL1 1 1 1 1 1 1 1 1 CTL2 1 1 1 1 1 1 1 1 CTL3 1 1 1 1 1 1 1 1 CTL4 1 1 1 1 1 1 1 1 CTL5 1 1 1 1 1 1 1 1 Typically, when performing a FIFO Write, only one ‘NextData’ is needed in the waveform, since each execution of ‘NextData’ increments the FIFO pointer. To perform a FIFO-Write Transaction: 1. Program the EZ-USB to detect completion of the transaction. As with all GPIF Transactions, bit 7 of the GPIFTRIG register (the DONE bit) signals when the Transaction is complete. 2. In the GPIFTRIG register, set the RW bit to ‘0’ and load EP[1:0] with the appropriate value for the FIFO which is to source the data. 3. Program the EZ-USB to commit (‘pass-on’) the data from the endpoint to the FIFO. The data can be transferred by either of the following methods: ❐ AUTOOUT=1: CPU is not in the data path; the EZUSB automatically commits data from the USB to the FIFO Data bus. ❐ AUTOOUT=0: Firmware must manually commit data to the FIFO Data bus by writing EPxBCL.7=0 (firmware can choose to skip the current packet by writing EPxBCL.7=1). The following C program fragments (Figure 10-48 on page 162 through Figure 10-50 on page 163) illustrate how to perform a FIFO-Read transaction in 8 bit mode (WORDWIDE = 0) with AUTOOUT = 0. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 161 General Programmable Interface Figure 10-48. FIFO Write Transaction Functions #define GPIFTRIGWR 0 #define #define #define #define GPIF_EP2 GPIF_EP4 GPIF_EP6 GPIF_EP8 0 1 2 3 #define BURSTMODE 0x0000 #define HSPKTSIZE 512 … … … … … // write bytes to PERIPHERAL, using GPIF and EPxFIFO void Peripheral_FIFOWrite( BYTE FIFO_EpNum ) { while( !( GPIFTRIG & 0x80 ) ) // poll GPIFTRIG.7 Done bit { ; } // trigger FIFO write transactions, using SFR GPIFTRIG = FIFO_EpNum; // R/W=0, EP[1:0]=FIFO_EpNum for EPx writes } // Set GPIF Transaction Count void Peripheral_SetGPIFTC( WORD xfrcnt) { GPIFTCB1 = xfrcnt >> 8; // setup transaction count SYNCDELAY; GPIFTCB0 = ( BYTE )xfrcnt; } … … … … … 162 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-49. Initialization Code for FIFO Write Transactions void TD_Init( void ) { … … … … … GpifInit(); // Configures GPIF from GPIF Designer generated waveform data // TODO: configure other endpoints, etc. here EP2CFG = 0xA2; // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x SYNCDELAY; EP2FIFOCFG = 0x00; // EP2 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; // “all” EP2 buffers automatically arm when AUTOOUT=1 // TODO: arm OUT buffers here OUTPKTEND = 0x82; // Arm both EP2 buffers to “prime the pump” SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; // // // // // setup INT4 as internal source for GPIF interrupts using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; //Enable INT4 Autovectoring GPIFIE = 0x03; // Enable GPIFDONE and GPIFWF interrupts EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4)=1 // TODO: configure GPIF interrupts to meet your needs here … … … … … // tell peripheral we are going into high speed xfr mode Peripheral_SetAddress( PERIPHCS ); Peripheral_SingleByteWrite( P_HSMODE ); // configure some GPIF control registers Peripheral_SetAddress( BURSTMODE ); } Figure 10-50. FIFO Write w/ AUTOOUT = 0, Committing Packets through OUTPKTEND void TD_Poll( void ) { … … … … … if( !( EP2468STAT & 0x01 ) ) { // EP2EF=0 when FIFO “not” empty, host sent pkt. OUTPKTEND = 0x02; // SKIP=0, pass buffer on to master if( gpifdone_event_flag { Peripheral_SetGPIFTC( Peripheral_FIFOWrite( gpifdone_event_flag = } ) HSPKTSIZE ); GPIF_EP2 ); 0; } … … … … … } EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 163 General Programmable Interface 10.4.8 Firmware Access to OUT packets, (AUTOOUT=1) To achieve the maximum USB 2.0 bandwidth, the host and master are directly connected when AOUTOOUT=1; the CPU is bypassed and the OUT FIFO is automatically committed to the host. Figure 10-51. CPU Not in Data Path, AUTOOUT=1 8051 Host USB Data Path Slave GPIF Peripheral AUTOOUT=1, Long Transfer Mode Figure 10-52. TD_Init Example: Configuring AUTOOUT = 1 TD_Init(): … … … … … REVCTL = 0x03; SYNCDELAY; EP2CFG = 0xA2; SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; EP2FIFOCFG = 0x10; // REVCTL.0 and REVCTL.1 set to 1 // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x // Reset the FIFO // Arm both EP2 buffers to “prime the pump” // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 … … … … … Figure 10-53. FIFO-Write Transaction Code, AUTOOUT = 1 TD_Poll(): … … … … … // no code necessary to xfr data from host to master! // AUTOOUT=1 auto-commits packets … … … … … 164 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface 10.4.9 Firmware Access to OUT Packets, (AUTOOUT = 0) Figure 10-54. Firmware can Skip or Commit, AUTOOUT = 0 8051 skip=0 Host USB Data Slave GPIF Peripheral skip=1 AUTOOUT=0 Figure 10-55. Initialization Code for AUTOOUT = 0 TD_Init(): … … … … … REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1 SYNCDELAY; EP2CFG = 0xA2; // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x SYNCDELAY; FIFORESET = 0x80; // Reset the FIFO SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; // EP2 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; // OUT endpoints do NOT come up armed OUTPKTEND = 0x82; // arm first buffer by writing OUTPKTEND w/skip=1 SYNCDELAY; OUTPKTEND = 0x82; // arm second buffer by writing OUTPKTEND w/skip=1 … … … … … In manual OUT mode (AUTOOUT = 0), the firmware has the following options: ■ It can commit (‘pass on’) packets sent from the host to the master when a buffer is available, by writing the OUTPKTEND register with the SKIP bit (OUTPKTEND.7) cleared to ‘0’ (see Figure 10-56) and the endpoint number in EP[3:0]. ■ It can skip packets sent from the host to the master by writing the OUTPKTEND register with the SKIP bit (OUTPKTEND.7) set to ‘1’ (see Figure 10-57) and the endpoint number in EP[3:0]. Figure 10-56. Committing an OUT Packet by Writing OUTPKTEND w/SKIP=0 TD_Poll(): … … … … … if( !( EP24FIFOFLGS & 0x02 ) ) { // EP2EF=0 when FIFO “not” empty, host sent pkt. OUTPKTEND = 0x02; // SKIP=0, pass buffer on to master } … … … … … EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 165 General Programmable Interface Figure 10-57. Skipping an OUT Packet by Writing OUTPKTEND w/SKIP=1 TD_Poll(): … … … … … if( !( EP24FIFOFLGS & 0x02 ) ) { // EP2EF=0 when FIFO “not” empty, host sent pkt. OUTPKTEND = 0x82; // SKIP=1, do NOT pass buffer on to master } … … … … … ■ It can edit the packet (or source an entire OUT packet) by writing to the FIFO buffer directly, then writing the length of the packet to EPxBCH:L. The write to EPxBCL commits the edited packet, so EPxBCL should be written after writing EPxBCH (Figure 10-58). In all cases, the OUT buffer automatically re-arms so it can receive the next packet, after the GPIF has transmitted all data in the OUT buffer. See section 8.6.2.4 EP2BCH:L, EP4BCH:L, EP6BCH:L, EP8BCH:L on page 93 for a detailed description of the SKIP bit. The master is not notified when a packet has been skipped by the firmware. The OUT FIFO is not committed to the host after a hard reset. This means that it is not available to initially accept any OUT packets. In its initialization routine, therefore, the firmware should skip n packets (where n = 2, 3, or 4 depending on the buffering depth) in order to ensure that the entire FIFO is committed to the host. See Figure 10-59 on page 167. Figure 10-58. Sourcing an OUT Packet (AUTOOUT = 0) TD_Poll(): … … … … … if( EP24FIFOFLGS & 0x02 ) { SYNCDELAY; // FIFORESET = 0x80; // nak all OUT pkts. from host SYNCDELAY; // FIFORESET = 0x82; // advance all EP2 buffers to cpu domain SYNCDELAY; // EP2FIFOBUF[0] = 0xAA; // create newly sourced pkt. data SYNCDELAY; // EP2BCH = 0x00; SYNCDELAY; // EP2BCL = 0x01; // commit newly sourced pkt. to interface fifo // beware of “left over” uncommitted buffers SYNCDELAY; // OUTPKTEND = 0x82; // skip uncommitted pkt. (second pkt.) // note: core does not allow pkts. to get out of sequence SYNCDELAY; // FIFORESET = 0x00; // release “nak all” } … … … … … 166 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F General Programmable Interface Figure 10-59. Ensuring that the FIFO is Clear after a Hard Reset TD_Init(): … … … … … REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1 SYNCDELAY; EP2CFG = 0xA2; // EP2 is DIR=OUT, TYPE=BULK, SIZE=512, BUF=2x SYNCDELAY; FIFORESET = 0x80; // Reset the FIFO SYNCDELAY; FIFORESET = 0x82; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; // EP2 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0 SYNCDELAY; // OUT endpoints do NOT come up armed OUTPKTEND = 0x82; // arm first buffer by writing OUTPKTEND w/skip=1 SYNCDELAY; OUTPKTEND = 0x82; // arm second buffer by writing OUTPKTEND w/skip=1 … … … … … 10.5 UDMA Interface The EZ-USB has additional GPIF registers specifically for implementing a UDMA (Ultra-ATA) interface. For more information, refer to the Registers chapter on page 211. 10.6 ECC Generation The EZ-USB has additional registers specifically for implementing ECC based on the SmartMedia™ standard. For more information, refer to the Registers chapter on page 211. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 167 General Programmable Interface 168 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 11. CPU Introduction 11.1 Introduction The EZ-USB’s CPU, an enhanced 8051, is fully described in chapters Instruction Set, on page 175, Input/Output, on page 181, and Timers/Counters and Serial Interface, on page 193. This chapter introduces the processor, its interface to the EZ-USB logic, and describes architectural differences from a standard 8051. Figure 11-1 is a block diagram of the EZ-USB’s 8051-based CPU. Figure 11-1. EZ-USB CPU Features Crystal Oscillator Register RAM (256 bytes) Serial Port1 Timer2 Timer1 Serial Port0 Timer0 Interrupt Control I/O Ports* 8-bit CPU Bus Control * The EZ-USB family implements I/O ports differently than in the standard 8051 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 169 CPU Introduction 11.2 8051 Enhancements 11.3 The EZ-USB uses the standard 8051 instruction set, so it is supported by industry-standard 8051 compilers and assemblers. Instructions execute faster on the EZ-USB than on the standard 8051. ■ Wasted bus cycles are eliminated; an instruction cycle uses only four clocks, rather than the standard 8051’s 12 clocks ■ The EZ-USB’s CPU clock runs at 12 MHz, 24 MHz, or 48 MHz—up to four times the clock speed of the standard 8051 In addition to speed improvements, the EZ-USB includes the following architectural enhancements to the CPU. ■ A second data pointer ■ A second USART ■ A third, 16 bit timer (TIMER2) ■ A high-speed external memory interface with a non-multiplexed 16 bit address bus ■ Eight additional interrupts (INT2-INT6, WAKEUP, T2, and USART1) ■ Variable MOVX timing to accommodate fast and slow RAM peripherals ■ Two Autopointers (auto-incrementing data pointers) ■ Vectored USB and FIFO/GPIF interrupts The EZ-USB has been designed to offer increased performance by executing instructions in a 4-clock bus cycle, as opposed to the 12-clock bus cycle in the standard 8051 (see Figure 11-2 on page 171). This shortened bus timing improves the instruction execution rate for most instructions by a factor of three over the standard 8051 architectures. Some instructions require a different number of instruction cycles on the EZ-USB than they do on the standard 8051. In the standard 8051, all instructions except for MUL and DIV take one or two instruction cycles to complete. In the EZUSB, instructions can take between one and five instruction cycles to complete. However, due to the shortened bus timing of the EZ-USB, every instruction executes faster than on a standard 8051, and the average speed improvement over the entire instruction set is approximately 2.5×. Table 11-1 catalogs the speed improvements. Table 11-1. EZ-USB Speed Compared to Standard 8051** Of the 246 EZ-USB opcodes... 150 execute at 3.0× standard speed 51 execute at 1.5× standard speed 43 execute at 2.0× standard speed 2 execute at 2.4× standard speed Average Improvement: ■ Baud rate timer for 115K/230K baud USART operation ■ Sleep mode with three wakeup sources ■ An I2C™ bus controller that runs at 100 or 400 kHz ■ EZ-USB specific SFRs ■ Separate buffers for the SETUP and DATA portions of a USB CONTROL transfer ■ A hardware pointer for SETUP data, plus logic to process entire CONTROL transfers automatically ■ CPU clock-rate selection of 12, 24 or 48 MHz ■ Breakpoint facility ■ I/O Port C read and write strobes 170 Performance Overview 2.5× ** Comparison is between EZ-USB and standard 8051 running at the same clock frequency. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F CPU Introduction Figure 11-2. EZ-USB to Standard 8051 Timing Comparison Single-Byte, Single-Cycle Instruction Timing PSEN EZ-USB AD0-AD7 PORT2 4 XTAL1 12 Standard 8051 ALE PSEN AD0-AD7 PORT2 11.4 Software Compatibility 11.5 The EZ-USB is object code compatible with the industry standard 8051 microcontroller. That is, object code compiled with an industry standard 8051 compiler or assembler executes on the EZ-USB and is functionally equivalent. However, because the EZ-USB uses a different instruction timing than the standard 8051, existing code with timing loops may require modification. 803x/805x Feature Comparison Table 11-2 provides a feature-by-feature comparison between the EZ-USB and several common 803x/805x devices. The EZ-USB instruction timing is identical to that of the Dallas Semiconductor DS80C320. Table 11-2. Comparison Between EZ-USB and Other 803x/805x Devices Intel Feature Clocks per instruction cycle Program / Data Memory Dallas DS80C320 8031 8051 80C32 80C52 12 12 12 12 Cypress EZ-USB 4 4 - 4 kB ROM - 8 kB ROM - 16 kB RAM Internal RAM 128 bytes 128 bytes 256 bytes 256 bytes 256 bytes 256 bytes Data Pointers 1 1 1 1 2 2 Serial Ports 1 1 1 1 2 2 16-bit Timers 2 2 3 3 3 3 Interrupt sources (internal and external) 5 5 6 6 13 13 Stretch data-memory cycles no no no no yes yes EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 171 CPU Introduction 11.6 EZ-USB/DS80C320 Differences 11.6.7 Although the EZ-USB is similar to the DS80C320 in terms of hardware features and instruction cycle timing, there are some important differences between the EZ-USB and the DS80C320. 11.6.1 Although the basic interrupt structure of the EZ-USB is similar to that of the DS80C320, five of the interrupt sources are different: Table 11-3. Differences between EZ-USB and DS80C320 Interrupts Interrupt Priority Serial Ports The EZ-USB does not implement serial port framing-error detection and does not implement slave address comparison for multiprocessor communications. Therefore, the EZUSB also does not implement the following SFRs: SADDR0, SADDR1, SADEN0, and SADEN1. 11.6.2 Timer 2 The EZ-USB does not implement Timer 2 downcounting mode or the downcount enable bit (TMOD2, Bit 0). Also, the EZ-USB does not implement Timer 2 output enable (T2OE) bit (TMOD2, Bit 1). Therefore, the TMOD2 SFR is also not implemented in the EZ-USB. The EZ-USB Timer 2 overflow output is active for one clock cycle. In the DS80C320, the Timer 2 overflow output is a square wave with a 50% duty cycle. Note Although the T2OE bit is not present in the EZ-USB, Timer 2 output can still be enabled or disabled via the PORTECFG.2 bit, since the T2OUT pin is multiplexed with PORTE.2. PORTECFG.2 = 0 configures the pin as a general-purpose I/ O pin and disabled Timer 2 output. PORTECFG.2 = 1 configures the pin as the T2OUT pin and enables Timer 2 output. 11.6.3 Timed Access Protection The EZ-USB does not implement timed access protection and, therefore, does not implement the TA SFR. 11.6.4 Watchdog Timer Power Fail Detection Power Fail RESUME (USB Wakeup) 8 External Interrupt 2 USB 9 External Interrupt 3 I²C Bus 10 External Interrupt 4 GPIF/FIFOs 12 Watchdog Timer External Interrupt 6 For more information, refer to the Timers/Counters and Serial Interface chapter on page 193. 11.7 EZ-USB Register Interface The EZ-USB peripheral logic (USB, GPIF, FIFOs, and others) is controlled via a set of memory mapped registers and buffers at addresses 0xE400 through 0xFFFF. These registers and buffers are grouped as follows: ■ GPIF Waveform Descriptor Tables ■ General configuration ■ Endpoint configuration ■ Interrupts ■ Input/Output ■ USB Control ■ Endpoint operation ■ GPIF/FIFOs ■ Endpoint buffers These registers and their functions are described throughout this manual. A full description of every EZ-USB register appears in the Registers chapter on page 211. 0xFF EZ-USB Internal RAM Upper 128 SFR Space 0x80 0x7F Indirect Addr Direct Addr 0x00 Direct Addr Port I/O The EZ-USB’s port I/O implementation is significantly different from that of the DS80C320, mainly because of the alternate functions shared with most of the I/O pins. See Input/ Output, on page 181. 172 Cypress EZ-USB Figure 11-3. EZ-USB Internal Data RAM The EZ-USB does not implement a power fail detection circuit. 11.6.6 Dallas DS80C320 0 11.8 The EZ-USB does not implement a watchdog timer. 11.6.5 Interrupts Lower 128 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F CPU Introduction Like the standard 8051, the EZ-USB contains 128 bytes of Internal Data RAM at addresses 0x00-0x7F and a partially populated SFR space at addresses 0x80-0xFF. An additional 128 indirectly-addressed bytes of Internal Data RAM (sometimes called ‘IDATA’) are also available at addresses 0x80-0xFF. All other on-chip EZ-USB RAM (program/data memory, endpoint buffer memory, and the EZ-USB control registers) is addressed as though it were off-chip 8051 memory. EZ-USB firmware reads or writes these bytes as data using the MOVX (‘move external’) instruction, even though the EZUSB RAM and register set is actually inside the EZ-USB chip. Off-chip memory attached to the EZ-USB address and data buses (only offered in the 128-pin packages) can also be accessed by the MOVX instruction. EZ-USB logic encodes its memory strobe and select signals (RD#, WR#, CS#, OE#, and PSEN#) to eliminate the need for external logic to separate the on-chip and off-chip memory spaces; see the Memory chapter on page 71. 11.9 11.10 Interrupts All standard 8051 interrupts, plus additional interrupts, are supported by the EZ-USB. Table 11-4 lists the EZ-USB interrupts. Table 11-4. EZ-USB Interrupts Standard 8051 Interrupts Pin PA0 / INT0# INT1 Pin PA1 / INT1# Timer 0 Internal, Timer 0 Timer 1 Internal, Timer 1 Tx0 & Rx0 The EZ-USB implements I/O ports differently than a standard 8051, as described in Input/Output, on page 181. ■ An ‘OEx’ register. It sets the input/output direction of each of the 8 port pins (0 = input, 1 = output). ■ An ‘IOx’ register. Values written to IOx appear on the pins configured as outputs; values read from IOx indicate the states of the 8 pins, regardless of input/output configuration. Most I/O pins have alternate functions which are selected using configuration registers. When an alternate configuration is selected for an I/O pin, the corresponding OEx bit is ignored (see section 13.2 I/O Ports on page 181). The default (power on reset) state of all I/O ports is: alternate configurations ‘off’, all I/O pins configured as ‘inputs’. Source INT0 I/O Ports The EZ-USB has up to five 8 bit wide, bidirectional I/O ports. Each port is associated with a pair of registers. Additional EZ-USB Interrupts Internal, USART0 INT2 Internal, USB INT3 Internal, I²C Bus Controller INT4 Pin INT4 (100 and 128 pin only) OR Internal, GPIF/FIFOs INT5 Pin INT5# (100 and 128 pin only) INT6 Pin INT6 (100 and 128 pin only) WAKEUP Pin WAKEUP or Pin RA3/WU2 Tx1 & Rx1 Internal, USART1 Timer 2 Internal, Timer 2 The EZ-USB uses INT2 for 27 different USB interrupts. To help determine which interrupt is active, the EZ-USB provides a feature called Autovectoring, which dynamically changes the address pointed to by the ‘jump’ instruction at the INT2 vector address. This second level of vectoring automatically transfers control to the appropriate USB interrupt service routine (ISR). The EZ-USB interrupt system, including a full description of the Autovector mechanism, is the subject of the Interrupts chapter on page 59. 11.11 Power Control The EZ-USB implements a low power mode that allows it to be used in USB bus powered devices (which are required by the USB specification to draw no more than 500 A when suspended) and other low power applications. The mechanism by which the EZ-USB enters and exits this low power mode is described in detail in the Power Management chapter on page 77. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 173 CPU Introduction 11.12 Special Function Registers The EZ-USB was designed to keep coding as standard as possible, to allow easy integration of existing 8051 software development tools. The EZ-USB Special Function Registers (SFR) are summarized in Table 11-5. Standard 8051 SFRs are shown in normal type and EZ-USB-added SFRs are shown in bold type. Full details of the SFRs can be found in the Registers chapter on page 211. Table 11-5. EZ-USB Special Function Registers (SFR) x 8x 9x Ax Bx Cx Dx Ex Fx 0 IOA 1 SP IOB IOC IOD SCON1 PSW ACC B EXIF INT2CLR IOE SBUF1 2 DPL0 MPAGE 3 DPH0 INT4CLR OEA EICON EIE EIP OEB 4 DPL1 OEC 5 DPH1 OED 6 DPS OEE 7 PCON 8 TCON SCON0 9 TMOD SBUF0 IE IP A TL0 B TL1 C TH0 D TH1 AUTOPTRH2 AUTOPTRH1 EP2468STAT EP01STAT RCAP2L AUTOPTRL1 EP24FIFOFLGS GPIFTRIG RCAP2H GPIFSGLDATH TH2 E CKCON AUTOPTRL2 EP68FIFOFLGS F T2CON TL2 GPIFSGLDATLX AUTOPTRSETUP GPIFSGLDATLNOX Note All unlabeled SFRs are reserved. 11.13 External Address/Data Buses The 128-pin version of the EZ-USB provides external, nonmultiplexed 16-bit address and 8 bit data buses. This differs from the standard 8051, which multiplexes eight pins among three sources: I/O port 0, the external data bus, and the low byte of the external address bus. A standard 8051 system with external memory requires a demultiplexing address latch, strobed by the 8051 ALE (Address Latch Enable) pin. The external latch is not required by the EZ-USB chip, and no ALE signal is provided. In addition to eliminating the need for this external latch, the non-multiplexed EZ-USB bus saves one cycle per memoryfetch and allows external memory to be connected without sacrificing I/O pins. The EZ-USB is the sole master of the bus, providing read and write signals to the off-chip memory. The address bus is output-only, and cannot be floated. 11.14 Reset The various EZ-USB resets and their effects are described in the Resets chapter on page 83. 174 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 12. Instruction Set 12.1 Introduction This chapter provides a technical overview and description of the EZ-USB’s assembly-language instruction set. All EZ-USB instructions are binary code compatible with the standard 8051. The EZ-USB instructions affect bits, flags, and other status functions just as the 8051 instructions do. Instruction timing, however, is different both in terms of the number of clock cycles per instruction cycle and the number of instruction cycles used by each instruction. Table 12-2 on page 176 lists the EZ-USB instruction set and the number of instruction cycles required to complete each instruction. Table 12-1 defines the symbols and mnemonics used in Table 12-2. Table 12-1. Legend for Instruction Set Table Symbol A Function Accumulator Rn Register (R0–R7, in the bank selected by RS1:RS0) direct Internal RAM location (0x00-0x7F in the ‘Lower 128’, or 0x80-0xFF in ‘SFR’ space) @Ri Internal RAM location (0x00-0x7F in the ‘Lower 128’, or 0x80-0xFF in the ‘Upper 128’) pointed to by R0 or R1 rel Program-memory offset (-128 to +127 bytes relative to the first byte of the following instruction). Used by conditional jumps and SJMP. bit Bit address (0x20-x2F in the ‘Lower 128,’ and SFRs 0x80, 0x88, …, 0xF0, 0xF8) #data 8-bit constant (0-255) #data16 16-bit constant (0-65535) addr16 16-bit destination address; used by LCALL and LJMP, which branch anywhere in program memory addr11 11-bit destination address; used by ACALL and AJMP, which branch only within the current 2K page of program memory (i.e., the upper 5 address bits are copied from the PC) PC Program Counter; holds the address of the currently-executing instruction. For the purposes of ‘ACALL’, ‘AJMP’, and ‘MOVC A,@A+PC’ instructions, the PC holds the address of the first byte of the instruction following the currently-executing instruction. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 175 Instruction Set Table 12-2. EZ-USB Instruction Set Mnemonic Description Bytes Cycles 1 1 PSW Flags Affected Opcode (Hex) Arithmetic ADD A, Rn Add register to A CY OV AC 28-2F ADD A, direct Add direct byte to A 2 2 CY OV AC 25 ADD A, @Ri Add data memory to A 1 1 CY OV AC 26-27 ADD A, #data Add immediate to A 2 2 CY OV AC 24 ADDC A, Rn Add register to A with carry 1 1 CY OV AC 38-3F ADDC A, direct Add direct byte to A with carry 2 2 CY OV AC 35 ADDC A, @Ri Add data memory to A with carry 1 1 CY OV AC 36-37 ADDC A, #data Add immediate to A with carry 2 2 CY OV AC 34 SUBB A, Rn Subtract register from A with borrow 1 1 CY OV AC 98-9F SUBB A, direct Subtract direct byte from A with borrow 2 2 CY OV AC 95 SUBB A, @Ri Subtract data memory from A with borrow 1 1 CY OV AC 96-97 SUBB A, #data Subtract immediate from A with borrow 2 2 CY OV AC INC A Increment A 1 1 04 INC Rn Increment register 1 1 08-0F INC direct Increment direct byte 2 2 05 INC @ Ri Increment data memory 1 1 06-07 DEC A Decrement A 1 1 14 DEC Rn Decrement Register 1 1 18-1F DEC direct Decrement direct byte 2 2 15 DEC @Ri Decrement data memory 1 1 16-17 INC DPTR Increment data pointer 1 3 A3 MUL AB Multiply A and B (unsigned; product in B:A) 1 5 CY=0 OV A4 DIV AB Divide A by B (unsigned; quotient in A, remainder in B) 1 5 CY=0 OV 84 DA A Decimal adjust A 1 1 CY D4 94 Logical ANL, Rn AND register to A 1 1 ANL A, direct AND direct byte to A 2 2 58-5F 55 ANL A, @Ri AND data memory to A 1 1 56-57 ANL A, #data AND immediate to A 2 2 54 ANL direct, A AND A to direct byte 2 2 52 ANL direct, #data AND immediate data to direct byte 3 3 53 ORL A, Rn OR register to A 1 1 48-4F ORL A, direct OR direct byte to A 2 2 45 ORL A, @Ri OR data memory to A 1 1 46-47 ORL A, #data OR immediate to A 2 2 44 ORL direct, A OR A to direct byte 2 2 42 ORL direct, #data OR immediate data to direct byte 3 3 43 XRL A, Rn Exclusive-OR register to A 1 1 68-6F XRL A, direct Exclusive-OR direct byte to A 2 2 65 XRL A, @Ri Exclusive-OR data memory to A 1 1 66-67 XRL A, #data Exclusive-OR immediate to A 2 2 64 XRL direct, A Exclusive-OR A to direct byte 2 2 62 XRL direct, #data Exclusive-OR immediate to direct byte 3 3 63 CLR A Clear A 1 1 E4 CPL A Complement A 1 1 F4 176 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Instruction Set Table 12-2. EZ-USB Instruction Set (continued) Mnemonic Description Bytes Cycles 1 1 PSW Flags Affected Opcode (Hex) SWAP A Swap nibbles of a C4 RL A Rotate A left 1 1 RLC A Rotate A left through carry 1 1 RR A Rotate A right 1 1 RRC A Rotate A right through carry 1 1 MOV A, Rn Move register to A 1 1 MOV A, direct Move direct byte to A 2 2 E5 MOV A, @Ri Move data byte at Ri to A 1 1 E6-E7 MOV A, #data Move immediate to A 2 2 74 MOV Rn, A Move A to register 1 1 F8-FF 23 CY 33 03 CY 13 Data Transfer E8-EF MOV Rn, direct Move direct byte to register 2 2 A8-AF MOV Rn, #data Move immediate to register 2 2 78-7F MOV direct, A Move A to direct byte 2 2 F5 MOV direct, Rn Move register to direct byte 2 2 88-8F MOV direct, direct Move direct byte to direct byte 3 3 85 MOV direct, @Ri Move data byte at Ri to direct byte 2 2 86-87 MOV direct, #data Move immediate to direct byte 3 3 75 MOV @Ri, A MOV A to data memory at address Ri 1 1 F6-F7 MOV @Ri, direct Move direct byte to data memory at address Ri 2 2 A6-A7 MOV @Ri, #data Move immediate to data memory at address Ri 2 2 76-77 MOV DPTR, #data16 Move 16-bit immediate to data pointer 3 3 90 MOVC A, @A+DPTR Move code byte at address DPTR+A to A 1 3 93 MOVC A, @A+PC Move code byte at address PC+A to A 1 3 83 MOVX A, @Ri Move external data at address Ri to A 1 2-9* E2-E3 MOVX A, @DPTR Move external data at address DPTR to A 1 2-9* E0 MOVX @Ri, A Move A to external data at address Ri 1 2-9* F2-F3 MOVX @DPTR, A Move A to external data at address DPTR 1 2-9* F0 PUSH direct Push direct byte onto stack 2 2 C0 POP direct Pop direct byte from stack 2 2 D0 XCH A, Rn Exchange A and register 1 1 C8-CF XCH A, direct Exchange A and direct byte 2 2 C5 XCH A, @Ri Exchange A and data memory at address Ri 1 1 C6-C7 XCHD A, @Ri Exchange the low-order nibbles of A and data memory at address Ri 1 1 D6-D7 1 1 * Number of cycles is user-selectable. See Stretch Memory Cycles on page 178. Boolean CLR C Clear carry CLR bit Clear direct bit 2 2 SETB C Set carry 1 1 SETB bit Set direct bit 2 2 CPL C Complement carry 1 1 CY=0 C3 CY=1 D3 C2 D2 CY B3 CPL bit Complement direct bit 2 2 ANL C, bit AND direct bit to carry 2 2 CY 82 ANL C, /bit AND inverse of direct bit to carry 2 2 CY B0 ORL C, bit OR direct bit to carry 2 2 CY 72 ORL C, /bit OR inverse of direct bit to carry 2 2 CY A0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F B2 177 Instruction Set Table 12-2. EZ-USB Instruction Set (continued) Mnemonic Description MOV C, bit Move direct bit to carry MOV bit, C Move carry to direct bit Bytes Cycles 2 2 PSW Flags Affected 2 2 92 CY Opcode (Hex) A2 Branching ACALL addr11 Absolute call to subroutine 2 3 11-F1 LCALL addr16 Long call to subroutine 3 4 12 RET Return from subroutine 1 4 22 RETI Return from interrupt 1 4 32 AJMP addr11 Absolute jump unconditional 2 3 01-E1 LJMP addr16 Long jump unconditional 3 4 02 SJMP rel Short jump (relative address) 2 3 80 JC rel Jump if carry = 1 2 3 40 JNC rel Jump if carry = 0 2 3 50 JB bit, rel Jump if direct bit = 1 3 4 20 JNB bit, rel Jump if direct bit = 0 3 4 30 JBC bit, rel Jump if direct bit = 1, then clear the bit 3 4 10 JMP @ A+DPTR Jump indirect to address DPTR+A 1 3 73 JZ rel Jump if accumulator = 0 2 3 60 JNZ rel Jump if accumulator is non-zero 2 3 CJNE A, direct, rel Compare A to direct byte; jump if not equal 3 4 70 CY B5 CJNE A, #d, rel Compare A to immediate; jump if not equal 3 4 CY B4 CJNE Rn, #d, rel Compare register to immediate; jump if not equal 3 4 CY B8-BF CY CJNE @ Ri, #d, rel Compare data memory to immediate; jump if not equal 3 4 DJNZ Rn, rel Decrement register; jump if not zero 2 3 D8-DF B6-B7 DJNZ direct, rel Decrement direct byte; jump if not zero 3 4 D5 1 1 00 Miscellaneous NOP No operation There is an additional reserved opcode (A5) that performs the same function as NOP. All mnemonics are copyright 1980, Intel Corporation. 12.1.1 Instruction Timing 12.1.2 Instruction cycles in the EZ-USB are four clock cycles in length, as opposed to the 12 clock cycles per instruction cycle in the standard 8051. For full details of the instructioncycle timing differences between the EZ-USB and the standard 8051, See “Performance Overview” on page 170.. In the standard 8051, all instructions except for MUL and DIV take one or two instruction cycles to complete. In the EZ-USB, instructions can take between one and five instruction cycles to complete. For calculating the timing of software loops, etc., use the ‘Cycles’ column from Table 12-2. The ‘Bytes’ column indicates the number of bytes occupied by each instruction. By default, the EZ-USB’s timer/counters run at 12 clock cycles per increment so that timer-based events have the same timing as with the standard 8051. The timers can also be configured to run at 4 clock cycles per increment to take advantage of the higher speed of the EZ-USB’s CPU. Stretch Memory Cycles The EZ-USB can execute a MOVX instruction in as few as two instruction cycles. However, it is sometimes desirable to stretch this value (for example to access slow memory or slow memory-mapped peripherals such as USARTs or LCDs). The EZ-USB’s ‘stretch memory cycle’ (Wait States) feature enables EZ-USB firmware to adjust the speed of data memory accesses (program memory code fetches are not affected). The three LSBs of the Clock Control Register (CKCON, at SFR location 0x8E) control the stretch value; stretch values between zero and seven may be used. A stretch value of zero adds zero instruction cycles, resulting in MOVX instructions which execute in two instruction cycles. A stretch value of seven adds seven instruction cycles, resulting in MOVX instructions which execute in nine instruction cycles. The stretch value can be changed dynamically under program control. At power on reset, the stretch value defaults to one (three cycle MOVX); for the fastest data memory access, EZ-USB 178 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Instruction Set software must explicitly set the stretch value to zero. The stretch value affects only data memory access (not program memory). Table 12-3 lists the data memory access speeds for stretch values zero through seven. MD2-0 are the three LSBs of the Clock Control Register (CKCON.2-0). The strobe width timing shown is typical. The stretch value affects the width of the read/write strobe and all related timing. Using a higher stretch value results in a wider read/write strobe, which allows the memory or peripheral more time to respond. CPUCS.4:3 sets the basic clock reference for the EZ-USB. These bits can be modified by EZ-USB firmware at any time. At power on reset, CPUCS.4:3 is set to ‘00’ (12 MHz). Table 12-3. Data Memory Stretch Values Strobe Width @ 24 MHz CPUCS.4:3 = 01 @ 48 MHz CPUCS.4:3 = 10 MD1 MD0 MOVX Instruction Cycles Read/Write Strobe Width (Clocks) 0 0 0 2 2 0 0 1 3 (default) 4 333 ns 167 ns 83.3 ns 0 1 0 4 8 667 ns 333 ns 167 ns 0 1 1 5 12 1000 ns 500 ns 250 ns 1 0 0 6 16 1333 ns 667 ns 333 ns 1 0 1 7 20 1667 ns 833 ns 417 ns 1 1 0 8 24 2000 ns 1000 ns 500 ns 1 1 1 9 28 2333 ns 1167 ns 583 ns 12.1.3 Dual Data Pointers The EZ-USB employs dual data pointers to accelerate data memory block moves. The standard 8051 data pointer (DPTR) is a 16 bit pointer used to address external data RAM or peripherals. The EZ-USB maintains the standard data pointer as DPTR0 at the standard SFR locations 0x82 (DPL0) and 0x83 (DPH0); it is not necessary to modify existing code to use DPTR0. The EZ-USB adds a second data pointer (DPTR1) at SFR locations 0x84 (DPL1) and 0x85 (DPH1). The SEL bit (bit 0 of the DPTR Select Register, DPS, at SFR 0x86), selects the active pointer. When SEL = 0, instructions that use the DPTR will use DPL0:DPH0. When SEL = 1, instructions that use the DPTR will use DPL1:DPH1. No other bits of the DPS SFR are used. All DPTR related instructions use the data pointer selected by the SEL Bit. Switching between the two data pointers by toggling the SEL bit relieves EZ-USB firmware from the burden of saving source and destination addresses when doing a block move; therefore, using dual data pointers provides significantly increased efficiency when moving large blocks of data. Strobe Width @ 12 MHz CPUCS.4:3 = 00 Strobe Width MD2 167 ns 83.3 ns 41.7 ns The SFR locations related to the dual data pointers are: 0x82 0x83 0x84 0x85 0x86 12.1.4 DPL0 DPH0 DPL1 DPH1 DPS DPTR0 low byte DPTR0 high byte DPTR1 low byte DPTR1 high byte DPTR Select (Bit 0) Special Function Registers The four SFRs listed below are related to CPU operation and program execution. Except for the Stack Pointer (SP), each of the registers is bit addressable. 0x81 0xD0 0xE0 0xF0 SP PSW ACC B Stack Pointer Program Status Word Accumulator Register B Register Table 12-4 lists the functions of the PSW bits. The fastest way to toggle the SEL bit between the two data pointers is via the ‘INC DPS’ instruction, which toggles bit 0 of DPS between ‘0’ and ‘1’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 179 Instruction Set Table 12-4. PSW Register - SFR 0xD0 Bit Function PSW.7 CY - Carry flag. This is the unsigned carry bit. The CY flag is set when an arithmetic operation results in a carry from bit 7 to bit 8, and cleared otherwise. In other words, it acts as a virtual bit 8. The CY flag is cleared on multiplication and division. See the ‘PSW Flags Affected’ column in Table 12-2 on page 176. PSW.6 AC - Auxiliary carry flag. Set to ‘1’ when the last arithmetic operation resulted in a carry into (during addition) or borrow from (during subtraction) the high order nibble, otherwise cleared to ‘0’ by all arithmetic operations. See the ‘PSW Flags Affected’ column in Table 12-2 on page 176. PSW.5 F0 - User flag 0. Available to EZ-USB firmware for general purpose. PSW.4 RS1 - Register bank select bit 1. PSW.3 RS0 - Register bank select bit 0. RS1:RS0 select a register bank in internal RAM: RS1 RS0 0 0 1 1 0 1 0 1 Bank Selected Register bank 0, addresses 0x00-0x07 Register bank 1, addresses 0x08-0x0F Register bank 2, addresses 0x10-0x17 Register bank 3, addresses 0x18-0x1F PSW.2 OV - Overflow flag. This is the signed carry bit. The OV flag is set when a positive sum exceeds 0x7F or a negative sum (in two’s complement notation) exceeds 0x80. After a multiply, OV = 1 if the result of the multiply is greater than 0xFF. After a divide, OV = 1 if a divide-by-0 occurred. See the ‘PSW Flags Affected’ column in Table 12-2 on page 176. PSW.1 F1 - User flag 1. Available to EZ-USB firmware for general purpose. PSW.0 P - Parity flag. Contains the modulo-2 sum of the 8 bits in the accumulator (for example, set to ‘1’ when the accumulator contains an odd number of ‘1’ bits, set to ‘0’ when the accumulator contains an even number of ‘1’ bits). 180 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 13. Input/Output 13.1 Introduction The 56-pin EZ-USB provides two input/output systems: ■ A set of programmable I/O pins ■ A programmable I2C bus controller The 100- and 128-pin packages additionally provide two programmable USARTs, which are described in the Timers/Counters and Serial Interface chapter on page 193 The I/O pins may be configured either for general purpose I/O or for alternate functions (GPIF address and data; FIFO data; USART, timer, and interrupt signals, and others). This chapter describes the usage of the pins in the general purpose configuration, and the methods by which the pins may be configured for alternate functions. This chapter also provides both the programming information for the I2C interface and the operating details of the EEPROM boot loader. The role of the boot loader is described in the Enumeration and ReNumeration™ chapter on page 51. 13.2 I/O Ports The EZ-USB’s I/O ports are implemented differently than those of a standard 8051. The EZ-USB has up to five 8-pin bidirectional I/O ports, labeled A, B, C, D, and E. Individual I/O pins are labeled Px.n, where x is the port (A, B, C, D, or E) and n is the pin number (0 to 7). The 100- and 128-pin EZ-USB packages provide all five ports; the 56-pin package provides only ports A, B, and D. Each port is associated with a pair of registers: ■ An OEx register (where x is A, B, C, D, or E), which sets the input/output direction of each of the 8 pins (0 = input, 1 = output). See the OEx register on page 182. ■ An IOx register (where x is A, B, C, D, or E). Values written to IOx appear on the pins which are configured as outputs; values read from IOx indicate the states of the 8 pins, regardless of input/output configuration. See IOx register on page 183. Most I/O pins have alternate functions which may be selected using configuration registers (see Table 13-1 on page 185 through Table 13-9 on page 188). Each alternate function is unidirectional; the EZ-USB ‘knows’ whether the function is an input or an output, so when an alternate configuration is selected for an I/O pin, the corresponding OEx bit is ignored (see Figures Figure 13-2 on page 184 and Figure 13-3 on page 184). The default (power on reset) state of all I/O ports is: ■ Alternate configurations off ■ All I/O pins configured as inputs Figure 13-1 on page 182 shows the basic structure of an EZ-USB I/O pin. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 181 Input/Output Figure 13-1. EZ-USB I/O Pin OEx Bit Write IOx Bit I/O Pin Read 13.3 SFR Registers OEA Port A Output Enable b6 b5 v4 v3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 OEB Port B Output Enable OEC SFR 0xB3 Port C Output Enable OED SFR 0xB4 Port D Output Enable OEE 182 SFR 0xB2 b7 SFR 0xB5 Port E Output Enable SFR 0xB6 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Input/Output IOA Port A (Bit-Addressable) SFR 0x80 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x IOB Port B (Bit-Addressable) IOC SFR 0x90 Port C (Bit-Addressable) IOD SFR 0xA0 Port D (Bit-Addressable) IOE SFR 0xB0 Port E 13.4 SFR 0xB1 I/O Port Alternate Functions Each I/O pin may be configured for an alternate (for example, non-general purpose I/O) function. These alternate functions are selected through various configuration registers, as described in the following sections. The I/O pin logic for alternate function outputs is slightly different than for alternate function inputs, as shown in Figures 13-2 (output) and 13-3 (input). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 183 Input/Output Figure 13-2. I/O Pin Logic when Alternate Function is an OUTPUT Alternate Function (Output) Alternate Function (Output) OEx Bit OEx Bit Write Write IOx Bit I/O Pin IOx Bit Read I/O Pin Read a) General-Purpose I/O Configuration b) Alternate-Function Configuration Figure 13-2 shows an I/O pin whose alternate function is always an output. In Figure 13-2a, the I/O pin is configured for general purpose I/O. In this configuration, the alternate function is disconnected and the pin functions normally. In Figure 13-2b, the I/O pin is configured as an alternatefunction output. In this configuration, the IOx/OEx output buffer is disconnected from the I/O pin, so writes to IOx and OEx have no effect on the I/O pin. ‘Reads’ from IOx, however, continue to work normally; the state of the I/O pin (and, therefore, the state of the alternate function) is always available. Figure 13-3 shows an I/O pin whose alternate function is always an input. In Figure 13-3a, the I/O pin is configured for general purpose I/O. There is an important difference between alternate-function inputs and the alternate function outputs shown earlier in Figure 13-2 on page 184: Note Alternatefunction inputs are never disconnected; they are always listening. If the alternate function’s interrupt is enabled, signals on the I/O pin may trigger that interrupt. If the pin is to be used only for general purpose I/O, the alternate function’s interrupt must be disabled. For example, suppose the PE5/INT6 pin is configured for general purpose I/O. Since the INT6 function is an input, the pin signal is also routed to the EZ-USB’s internal INT6 logic. If the INT6 interrupt is enabled, traffic on the PE5 pin trigger an INT6 interrupt. If this is undesirable, the INT6 interrupt should be disabled. Figure 13-3. I/O Pin Logic when Alternate Function is an INPUT Alternate Function (Input) Alternate Function (Input) OEx Bit OEx Bit Write Write I/O Pin IOx Bit Read a) General-Purpose I/O Configuration 184 I/O Pin IOx Bit Read b) Alternate-Function Configuration EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Input/Output Of course, this side effect can be useful in certain situations. In the case of PE5/INT6, for example, PE5 can trigger an INT6 interrupt even if the I/O pin is configured as an output (for example, OEE.5 = 1), so the EZ-USB’s firmware can directly generate external interrupts. from I/Ox, however, continue to work normally; the state of the I/O pin (and therefore, the input to the alternate function) is always available. In Figure 13-3b, the I/O pin is configured as an alternate function input. Just as with alternate function outputs, the IOx/OEx output buffer is disconnected from the I/O pin, so writes to IOx and OEx have no effect on the I/O pin. ‘Reads’ Alternate functions for the Port A pins are selected by bits in three registers, as shown in Tables 13-1 and 13-2. 13.4.1 Port A Alternate Functions Table 13-1. Register Bits that Select Port A Alternate Functions b7 b6 b5 b4 b3 b2 b1 b0 FLAGD SLCS[1] 0 0 0 0 INT1 INT0 IFCLKSRC 3048MHZ IFCLKOE IFCLKPOL ASYNC GSTATE IFCFG1 IFCFG0 WU2 WU WU2POL WUPOL 0 DPEN WU2EN WUEN PORTACFG (0xE670) IFCONFIG (0xE601) WAKEUPCS (0xE682) [1] Although the SLCS alternate function is selected by bit 6 of PORTACFG, that function does not appear on pin PA6. Instead, the SLCS function appears on pin PA7 (see Table 13-2). Table 13-2. Port A Alternate Function Configuration Port A Pin Alternate Function Alternate Function is Selected By... Alternate Function is Described in... PA.0 INT0 PORTACFG.0 = 1 Interrupts chapter on page 59 PA.1 INT1 PORTACFG.1 = 1 Interrupts chapter on page 59 PA.2 SLOE IFCFG1:0 = 11 Slave FIFOs chapter on page 99 WU2EN = 1 Power Management chapter on page 77 PA.3 WU2 PA.4 FIFOADR0 IFCFG1:0 = 11 Slave FIFOs chapter on page 99 PA.5 FIFOADR1 IFCFG1:0 = 11 Slave FIFOs chapter on page 99 PA.6 PKTEND IFCFG1:0 = 11 Slave FIFOs chapter on page 99 PORTACFG.7 = 1 Slave FIFOs chapter on page 99 PORTACFG.6 = 1 and IFCFG1:0 = 11 Slave FIFOs chapter on page 99 [1] FLAGD [2] PA.7 SLCS[3] [1] When PA.3 is configured for alternate function WU2, it continues to function as a general purpose input pin as well. See section 6.4.1 WU2 Pin on page 81 for more information. [2] Although PA.7’s alternate function FLAGD is selected via the PORTACFG register, the state of the FLAGD output is undefined unless IFCFG1:0 = 11. [3] FLAGD takes priority over SLCS if PORTACFG.6 and PORTACFG.7 are both set to ‘1’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 185 Input/Output 13.4.2 Port B and Port D Alternate Functions pins are also configured for an alternate configuration (FIFO Data 15:8). See Tables 13-3, 13-4, and 13-5. If all WORDWIDE bits are cleared to ‘0’ (for example, if all four FIFOs are operating in 8 bit mode), the eight Port D pins may be used as general purpose I/O pins even if IFCFG1 = 1. When IFCFG1 = 1, all eight Port B pins are configured for an alternate configuration (FIFO Data 7:0). If any of the FIFOs are set to 16 bit mode (via the WORDWIDE bits in the EPxFIFOCFG registers), all eight Port D Table 13-3. Register Bits Which Select Port B and Port D Alternate Functions IFCONFIG (0xE601) EP2FIFOCFG (0xE618) EP4FIFOCFG (0xE619) EP6FIFOCFG (0xE61A) EP8FIFOCFG (0xE61B) b7 b6 b5 b4 b3 b2 b1 b0 IFCLKSRC 3048MHZ IFCLKOE IFCLKPOL ASYNC GSTATE IFCFG1 IFCFG0 0 INFM2 OEP2 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 0 INFM4 OEP4 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 0 INFM6 OEP6 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 0 INFM8 OEP8 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE Table 13-4. Port B Alternate-Function Configuration Port B Pin Alternate Function Alternate Function is Selected By... PB.7:0 FD[7:0] IFCFG1 = 1 Alternate Function is Described in... Slave FIFOs chapter on page 99 Table 13-5. Port D Alternate-Function Configuration 186 Port D Pin Alternate Function Alternate Function is Selected By... PD.7:0 FD[15:8] IFCFG1 = 1 and any WORDWIDE bit = 1 Alternate Function is Described in... Slave FIFOs chapter on page 99 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Input/Output 13.4.3 Port C Alternate Functions Each Port C pin may be individually configured for an alternate function by setting a bit in the PORTCCFG register, as shown in Tables 13-6 and 13-7. Table 13-6. Register Bits That Select Port C Alternate Functions PORTCCFG (0xE671) b7 b6 b5 b4 b3 b2 b1 b0 GPIFA7 GPIFA6 GPIFA5 GPIFA4 GPIFA3 GPIFA2 GPIFA1 GPIFA0 Table 13-7. Port C Alternate Function Configuration Port C Pin Alternate Function Alternate Function is Selected By... Alternate Function is Described in... PC.0 GPIFA0[1] PORTCCFG.0 = 1 General Programmable Interface chapter on page 121. PC.1 GPIFA1[1] PORTCCFG.1 = 1 General Programmable Interface chapter on page 121. PC.2 GPIFA2 [1] PORTCCFG.2 = 1 General Programmable Interface chapter on page 121. PC.3 GPIFA3[1] PORTCCFG.3 = 1 General Programmable Interface chapter on page 121. PC.4 GPIFA4[1] PORTCCFG.4 = 1 General Programmable Interface chapter on page 121. PC.5 GPIFA5[1] PORTCCFG.5 = 1 General Programmable Interface chapter on page 121. PC.6 GPIFA6 [1] PORTCCFG.6 = 1 General Programmable Interface chapter on page 121. PC.7 GPIFA7[1] PORTCCFG.7 = 1 General Programmable Interface chapter on page 121. [1] Although the Port C alternate functions GPIFA0:7 are selected via the PORTCCFG register, the states of the GPIFA0:7 outputs are undefined unless IFCFG1:0 = 10. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 187 Input/Output 13.4.4 Port E Alternate Functions If the GSTATE bit in the IFCONFIG register is set to ‘1’, the PE.2:0 pins are automatically configured as GPIF Status pins GSTATE[2:0], regardless of the PORTECFG.2:0 settings. In other words, GSTATE overrides PORTECFG.2:0. See Tables 13-8 and 13-9. Each Port E pin may be individually configured for an alternate function by setting a bit in the PORTECFG register. Table 13-8. Register Bits That Select Port E Alternate Functions b7 b6 b5 b4 b3 b2 b1 b0 PORTECFG (0xE671) GPIFA8 T2EX INT6 RXD1OUT RXD0OUT T2OUT T1OUT T0OUT IFCONFIG (0xE601) IFCLKSRC 3048MHZ IFCLKOE IFCLKPOL ASYNC GSTATE IFCFG1 IFCFG0 Table 13-9. Port E Alternate-Function Configuration Port E Pin Alternate Function Alternate Function is Selected By... Alternate Function is Described in... PE.0 T0OUT[1,3] PORTECFG.0 = 1 and GSTATE = 0 Timers/Counters and Serial Interface chapter on page 193 PE.1 T1OUT[1,3] PORTECFG.1 = 1 and GSTATE = 0 Timers/Counters and Serial Interface chapter on page 193 [1] PE.2 T2OUT PORTECFG.2 = 1 and GSTATE = 0 Timers/Counters and Serial Interface chapter on page 193 PE.3 RXD0OUT PORTECFG.3 = 1 Timers/Counters and Serial Interface chapter on page 193 PE.4 RXD1OUT PORTECFG.4 = 1 Timers/Counters and Serial Interface chapter on page 193 PE.5 INT6 PORTECFG.5 = 1 Interrupts chapter on page 59 PE.6 T2EX PORTECFG.6 = 1 Timers/Counters and Serial Interface chapter on page 193 PE.7 GPIFA8[2] PORTECFG.7 = 1 General Programmable Interface chapter on page 121 [1] If GSTATE is set to ‘1’, these settings are overridden and PE.2:0 are all automatically configured as GPIF Status pins (See General Programmable Interface chapter on page 121). [2] Although the PE.7 alternate function GPIFA8 is selected via the PORTECFG register, the state of the GPIFA8 output is undefined unless IFCFG1:0 = 10. [3] Alternate function for PE.1:0 not available for CY7C68015A and CY68016A. Table 13-10. IFCFG Selection of Port I/O Pin Functions (continued) Table 13-10. IFCFG Selection of Port I/O Pin Functions IFCFG1:0 = 00 IFCFG1:0 = 10 IFCFG1:0 = 11 (Ports) (GPIF Master) (Slave FIFO) PD7 FD[15] FD[15] PD6 FD[14] FD[14] PD5 FD[13] FD[13] PD4 FD[12] FD[12] PD3 FD[11] FD[11] PD2 FD[10] FD[10] PD1 FD[9] FD[9] PD0 FD[8] FD[8] PB7 FD[7] FD[7] PB6 FD[6] FD[6] PB5 FD[5] FD[5] PB4 FD[4] FD[4] PB3 FD[3] FD[3] PB2 FD[2] FD[2] PB1 FD[1] FD[1] PB0 FD[0] FD[0] INT0# / PA0 INT0# / PA0 INT0# / PA0 INT1# / PA1 INT1# / PA1 INT1# / PA1 188 IFCFG1:0 = 00 IFCFG1:0 = 10 (Ports) (GPIF Master) IFCFG1:0 = 11 (Slave FIFO) PA2 PA2 SLOE WU2 / PA3 WU2 / PA3 WU2 / PA3 PA4 PA4 FIFOADR0 PA5 PA5 FIFOADR1 PA6 PA6 PKTEND PA7 PA7 PA7 / FLAGD / SLCS# PC7:0 PC7:0 PC7:0 PE7:0 PE7:0 PE7:0 Note Signals shown in bold type do not change with IFCFG; they are shown for completeness. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Input/Output 13.5 I2C Bus Controller by checking for BERR=1 (see section 13.5.2.1 I2CS Register on page 190). The I2C bus controller uses the SCL (Serial Clock) and SDA (Serial Data) pins, and performs two functions: ■ General purpose interfacing to I 2C peripherals ■ Boot loading from a serial EEPROM Each peripheral (slave) device on the I 2C bus has a unique address. The first byte of an I2C transaction contains the address of the desired peripheral. Figure 13-5 shows the format for this first byte, which is sometimes called a control byte. Note Pull up resistors are required on the SDA and SCL lines, even if nothing else is connected to the I2C bus. Each line must be pulled up to Vcc through a 2.2K ohm resistor. The EZ-USB sends the bit sequence shown in Figure 13-5 to select the peripheral at a particular address, to establish the transfer direction (using R/W), and to determine if the peripheral is present by testing for ACK. The bus frequency defaults to approximately 100 kHz for compatibility, and it can be configured to run at 400 kHz for devices that support the higher speed. 13.5.1 The four most significant bits (SA3:0) are the peripheral chip’s slave address. I2 C devices are internally hardwired to pre-assigned slave addresses by device type. EEPROMs, for instance, are assigned slave address 1010. The next three bits (DA2:0) usually reflect the states of the device’s address pins. A device with three address pins can be strapped to one of eight distinct addresses, which allows, for example, up to eight serial EEPROMs to be individually addressed on one I2 C b us. Interfacing to I2C Peripherals Figure 13-4 illustrates the waveforms for an I2C transfer. SCL and SDA are open drain EZ-USB pins which must be pulled up to Vcc with external resistors. The EZ-USB is a bus master only, meaning that it generates clock pulses on SCL. Once the master drives SCL low, external slave devices can hold SCL low to extend clock-cycle times. The eighth bit (R/W) sets the direction for the data transfer to follow (1 = master read, 0 = master write). Most address transfers are followed by one or more data transfers, with the ‘stop’ condition generated after the last data byte is transferred. Serial data is permitted to change state only while SCL is low, and must be valid while SCL is high. Two exceptions to this rule are the ‘start’ and ‘stop’ conditions. A ‘start’ condition is defined as a high-to-low transition on SDA while SCL is high, and a ‘stop’ condition is defined as a low-to-high transition on SDA while SCL is high. Data is sent MSB first. During the last bit time (clock #9 in Figure 13-4), the transmitting device floats the SDA line to allow the receiving device to acknowledge the transfer by pulling SDA low. 13.5.1.1 In Figure 13-5, the master clocks the 7 bit slave/device address out on SDA, then sets the R/W bit high at clock 8, indicating that a read transfer follows this address byte. At clock 9, the master releases SDA and treats it as an input; the peripheral device responds to its address by asserting ACK. At clock 10, the master begins to clock in data from the slave on the SDA pin. Multiple Bus Masters The EZ-USB acts only as a bus master, never as a slave. Conflicts with a second master can be detected, however, Figure 13-4. General I2C Transfer start stop SDA SDA D7 D6 D5 D4 D3 D2 D1 D0 ACK SCL SCL 1 2 3 4 5 6 7 8 9 Figure 13-5. Addressing an I2C Peripheral start SDA SA3 SA2 SA1 SA0 DA2 DA1 DA0 R/W ACK D7 D6 SCL 1 2 3 4 5 6 7 8 9 10 11 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 189 Input/Output 13.5.2 Registers The three registers shown in this section are used to conduct transfers over the I2C bus. 13.5.2.1 I2CS Register I2CS I2C Bus Control and Status E678 b7 b6 b5 b4 b3 b2 b1 b0 START STOP LASTRD ID1 ID0 BERR ACK DONE R/W R/W R/W R R R R R 0 0 0 x x 0 0 0 Bit 7: START. When START = 1, the next write to I2DAT generates a ‘start’ condition followed by the byte of data written to I2DAT. The START bit is automatically cleared to 0 after the ACK interval (clock 9 in Figure 13-4 on page 189). START is a control bit. Bit 6: STOP. When STOP = 1 after the ACK interval (clock 9 in Figure 13-4 on page 189), a ‘stop’ condition is generated. STOP may be set by firmware at any time before, during, or after the 9-bit data transaction. STOP is automatically cleared after the ‘stop’ condition is generated. STOP is a control bit. An interrupt request is available to signal that the stop condition is complete; see STOPIE, below. Bit 5: LASTRD. An I2C master reads data by floating the SDA line and issuing clock pulses on the SCL line. After every eight bits, the master drives SDA low for one clock to indicate ACK. To signal the last byte of a multi-byte transfer, the master floats SDA at ACK time to instruct the slave to stop sending. LASTRD is a control bit. When LASTRD = 1 at ACK time, the EZ-USB floats the SDA line. The LASTRD bit may be set at any time before or during the data transfer; it is automatically cleared after the ACK interval. Note Setting LASTRD does not automatically generate a ‘stop’ condition. At the end of a read transfer, the STOP bit should also be set. Bits 3 and 4: ID1, ID0. These bits are automatically set by the boot loader to indicate the Boot EEPROM addressing mode. They are normally used only for debug purposes; for full details, see section 13.6 EEPROM Boot Loader on page 192. till BERR is reset. If the bus error causes the master to detect bus contention and slave to be stuck in the middle of a transfer. Then there is no in-built contention resolution method to workaround this deadlock. If there is a possibility of this condition then the design must implement a method of resetting the slave or clocking the slave till the next ACK. Note DONE is set with BERR only when bus contention occurs during a transfer. If BERR is set and the bus is still busy when firmware attempts to restart a transfer, that transfer request is ignored and the DONE flag is not set. If contention is expected, therefore, EZ-USB firmware should incorporate a timeout to test for this condition. See Steps 1 and 3 of Section 13.5.3 and Section 13.5.4. Bit 1: ACK. During the ninth clock of a write transfer, the slave indicates reception of the byte by driving SDA low to acknowledge the byte it just received. The EZ-USB floats SDA during this time, samples the SDA line, and updates the ACK bit with the complement of the detected value: ACK = 1 indicates that the slave acknowledged the transfer, and ACK = 0 indicates the slave did not. ACK is a status bit. The ACK bit is only meaningful after a write transfer. After a read transfer, its state should be ignored. Bit 0: DONE. The EZ-USB sets this bit whenever it completes a byte transfer. The EZ-USB also generates an interrupt request when it sets the DONE bit. The DONE bit is automatically cleared when the I2DAT register is read or written, and the interrupt request bit is automatically cleared by reading or writing the I2CS or I2DAT registers (or by clearing EXIF.5 to 0). DONE is a status bit. For additional information, refer to the I2CS register on page 278. Bit 2: BERR. This bit indicates a bus error. BERR=1 indicates that there was bus contention during the preceding transfer, which results when an outside device drives the bus when it should not, or when another bus master wins arbitration and takes control of the bus. BERR is a status bit. When a bus error is detected, the EZ-USB immediately cancels its current transfer, floats the SCL and SDA lines, and sets DONE and BERR. BERR remains set until it is updated at the next ACK interval. The I2C master does not drive SCL 190 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Input/Output 13.5.2.2 I2CDAT Register I2DAT I2C Bus Data b7 b6 b5 E679 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Writing to I2DAT initiates a write transfer on the I2C bus; the value written to I2DAT is then transferred. Reading from I2DAT retrieves the data that was transferred in the previous read transfer and (with one exception) initiates another read transfer. To retrieve data from the previous read transfer 13.5.2.3 without initiating another transfer, I2DAT must be read during the generation of the ‘stop’ condition. See Step 13 of section 13.5.4 Receiving Data on page 191 for details. For additional information, refer to the I2CDAT register on page 280. I2CTL Register I2CTL I 2C Bus Mode b7 b6 b5 b4 E67A b3 b2 b1 b0 0 0 0 0 0 0 STOPIE 400KHZ R R R R R R R/W R/W 0 0 0 0 0 0 0 0 I2CTL configures the bus. Data is transferred to and from the bus through the I 2DAT register. The I2CS register controls the transfers and reports various status conditions. Bit 1: STOPIE. Setting this bit to ‘1’ enables the STOP bit Interrupt Request, which is activated when the STOP bit makes a 1-to-0 transition (for example, when generation of a ‘stop’ condition is complete). STOPIE is a control bit. 13.5.3 Sending Data Bit 0: 400KHZ. When this bit is at its default value of ‘0’, SCL is driven at approximately 100 kHz. Setting this bit to ‘1’ causes the EZ-USB to drive SCL at approximately 400 kHz. 400KHZ is a control bit. For additional information, refer to the I2CTL register on page 281. 13.5.4 Receiving Data To send a multiple byte data record, follow these steps: To read a multiple-byte data record, follow these steps: 1. Set START=1. If BERR=1, start timer. The timeout should be at least as long as the longest expected Startto-Stop interval on the bus. 1. Set START=1. If BERR = 1, start timer. The timeout should be at least as long as the longest expected Startto-Stop interval on the bus. 2. Write the 7-bit peripheral address and the direction bit (0 for a write) to I2DAT. 2. Write the 7-bit peripheral address and the direction bit (1 for a read) to I2DAT. 3. Wait for DONE=1 or for timer to expire*. If BERR=1, go to step 1. 3. Wait for DONE=1 or for timer to expire*. If BERR=1, go to step 1. 4. If ACK=0, go to step 9. 4. If ACK=0, set STOP=1 and go to step 15. 5. Load I2DAT with a data byte. 5. Read I2DAT to initiate the first burst of nine SCL pulses to clock in the first byte from the slave. Discard the value that was read from I2DAT. 6. Wait for DONE=1*. If BERR=1, go to step 1. 7. If ACK=0, go to step 9. 8. Repeat steps 5-7 for each byte until all bytes have been transferred. 9. Set STOP=1. Wait for STOP = 0 before initiating another transfer. 6. Wait for DONE=1. If BERR=1, go to step 1. 7. Read the just-received byte of data from I2DAT. This read also initiates the next read transfer. 8. Repeat steps 6 and 7 for each byte until ready to read the second-to-last byte. 9. Wait for DONE=1. If BERR=1, go to step 1. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 191 Input/Output 10. Before reading the second-to-last I2DAT byte, set LASTRD=1. 11. Read the second-to-last byte from I2DAT. With LASTRD=1, this initiates the final byte read on the bus. 12. Wait for DONE=1. If BERR=1, go to step 1. 13. Set STOP=1. 14. Read the final byte from I2DAT immediately (the next instruction) after setting the STOP bit. By reading I2DAT while the ‘stop’ condition is being generated, the justreceived data byte is retrieved without initiating an extra read transaction (nine more SCL pulses) on the I 2Cbus. Additional EEPROM devices can be attached to the I2Cbus for general purpose use, as long as they are strapped for device addresses other than 000 or 001. Note Many single byte Address EEPROM’s are special cases, because the EEPROM responds to all eight device addresses. If one of these EEPROM’s is used for boot loading, no other EEPROMs may share the bus. Consult your EEPROM data sheet for details After determining whether a one or two byte address EEPROM is attached, the EZ-USB reports its results in the ID1 and ID0 bits, as shown in Table 13-12. 15. Wait for STOP = 0 before initiating another transfer. Table 13-12. Results of Power-On_Reset EEPROM Test 13.6 EEPROM Boot Loader Whenever the EZ-USB is taken out of reset via the reset pin, its boot loader checks for the presence of an EEPROM on the I2C bus. If an EEPROM is detected, the loader reads the first EEPROM byte to determine how to enumerate. The various enumeration modes are described in the Enumeration and ReNumeration™ chapter on page 51. The EZ-USB boot loader supports two I 2C EEPROM types: ■ EEPROMs with slave address 1010 that use an 8-bit internal address (for example, 24LC00, 24LC01/B, 24LC02/B). ■ EEPROMs with slave address 1010 that use a 16-bit internal address (for example, 24AA64, 24LC128, 24AA256). ID1 ID0 0 0 No EEPROM detected Meaning 0 1 One byte address load EEPROM detected 1 0 Two byte address load EEPROM detected 1 1 Not used Note The EZ-USB does not check for bus contention during the bootloading process; if another I2C master is sharing the bus, that master must not attempt to initiate any transfers while the EZ-USB bootloader is running. EEPROMs with densities up to 256 bytes require only a single address byte; larger EEPROMs require two address bytes. The EZ-USB must determine which EEPROM type is connected — one or two address bytes — so that it can properly read the EEPROM. The EZ-USB uses the EEPROM device-address pins A2, A1, and A0 to determine whether to send out one or two bytes of address. As shown in Table 13-11, single byte address EEPROMs must be strapped to address 000, while double byte address EEPROMs must be strapped to address 001. Table 13-11. Strap Boot EEPROM Address Lines to These Values Bytes Example EEPROM A2 A1 A0 16 24LC00[1] N/A N/A N/A 128 24LC01 0 0 0 256 24LC02 0 0 0 4K 24LC32 0 0 1 8K 24LC64 0 0 1 16K 24LC128 0 0 1 [1] This EEPROM does not have device-address pins. 192 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 14. Timers/Counters and Serial Interface 14.1 Introduction The EZ-USB’s timer/counters and serial interface are very similar to the standard 8051, with some differences and enhancements. This chapter provides technical information on configuring and using the timer/counters and serial interface. 14.2 Timers/Counters The EZ-USB includes three timer/counters (Timer 0, Timer 1, and Timer 2). Each timer/counter can operate either as a timer with a clock rate based on the EZ-USB’s internal clock (CLKOUT) or as an event counter clocked by the T0 pin (Timer 0), T1 pin (Timer 1), or the T2 pin (Timer 2). Timers 1 and 2 may be used for baud clock generation for the serial interface (see section 14.3 Serial Interface on page 201 for details of the serial interface). Note The EZ-USB can be configured to operate at 12, 24, or 48 MHz. In timer mode, the timer/counters run at the same speed as the EZ-USB, and they are not affected by the CLKOE and CLKINV configuration bits (CPUCS.1 and CPUCS.2). Each timer/counter consists of a 16 bit register that is accessible to software as two SFRs. ■ Timer 0 TH0 and TL0 ■ Timer 1 TH1 and TL1 ■ Timer 2 TH2 and TL2 14.2.1 803x/805x Compatibility The implementation of the timers/counters is similar to that of the Dallas Semiconductor DS80C320. Table 14-1 summarizes the differences in timer/counter implementation between the Intel 8051, the Dallas Semiconductor DS80C320, and the EZUSB. Table 14-1. Timer/Counter Implementation Comparison Feature Intel 8051 Dallas DS80C320 2 3 Timer 0/1 overflow available as output signals No No Yes; T0OUT, T1OUT (one CLKOUT pulse) Timer 2 output enable n/a Yes Yes Timer 2 down-count enable n/a Yes No Timer 2 overflow available as output signal n/a Yes Yes; T2OUT (one CLKOUT pulse) Number of timers 14.2.2 EZ-USB 3 Timers 0 and 1 Timers 0 and 1 operate in four modes, as controlled through the TMOD SFR (Table 14-2 on page 195) and the TCON SFR (Table 14-3 on page 195). The four modes are: ■ 13 bit timer/counter (mode 0) ■ 16 bit timer/counter (mode 1) ■ 8 bit counter with auto-reload (mode 2) ■ Two 8 bit counters (mode 3, Timer 0 only) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 193 Timers/Counters and Serial Interface 14.2.2.1 Mode 0, 13 Bit Timer/Counter— Timer 0 and Timer 1 The timer counts transitions from the selected source as long as the GATE Bit is 0, or the GATE Bit is 1 and the corresponding interrupt pin (INT0 or INT1) is 1. Mode 0 operation is illustrated in Figure 14-1. When the 13 bit count increments from 0x1FFF (all ones), the counter rolls over to all zeros, the TF0 (or TF1) Bit is set in the TCON SFR, and the T0OUT (or T1OUT) pin goes high for one clock cycle. In mode 0, the timer is configured as a 13 bit counter that uses bits 0-4 of TL0 (or TL1) and all 8 bits of TH0 (or TH1). The timer enable bit (TR0/TR1) in the TCON SFR starts the timer. The C/T Bit selects the timer/counter clock source: either CLKOUT or the T0/T1 pins. Ignore the upper 3 bits of TL0 (or TL1) because they are indeterminate in mode 0. Figure 14-1. Timer 0/1 - Modes 0 and 1 Divide by CLKOUT T0M (or T1M) 0 1 0 CLK C/ T Divide by 4 0 TL0 (or TL1) 7 4 1 Mode 0 T0 (or T1) TR0 (or TR1) Mode 1 0 TH0 (or TH1) 7 GATE INT0 (or INT1) pin TF0 (or TF1) INT To Serial Port (Timer 1 only) 194 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface 14.2.2.2 Mode 1, 16 Bit Timer/Counter — Timer 0 and Timer 1 In mode 1, the timer is configured as a 16 bit counter. As illustrated in Figure 14-1 on page 194, all 8 bits of the LSB Register (TL0 or TL1) are used. The counter rolls over to all zeros when the count increments from 0xFFFF. Otherwise, mode 1 operation is the same as mode 0. Table 14-2. TMOD Register — SFR 0x89 Bit Function TMOD.7 GATE1 - Timer 1 gate control. When GATE1 = 1, Timer 1 will clock only when INT1 = 1 and TR1 (TCON.6) = 1. When GATE1 = 0, Timer 1 will clock only when TR1 = 1, regardless of the state of INT1. TMOD.6 C/T1 - Counter/Timer select. When C/T1 = 0, Timer 1 is clocked by CLKOUT/4 or CLKOUT/12, depending on the state of T1M (CKCON.4). When C/T1 = 1, Timer 1 is clocked by high-to-low transitions on the T1 pin. TMOD.5 M1 - Timer 1 mode select bit 1. TMOD.4 M0 - Timer 1 mode select bit 0. M1 M0 Mode 0 0 1 1 0 1 0 1 Mode 0: 13 bit counter Mode 1: 16 bit counter Mode 2: 8 bit counter with auto-reload Mode 3: Timer 1 stopped TMOD.3 GATE0 - Timer 0 gate control, When GATE0 = 1, Timer 0 will clock only when INT0 = 1 and TR0 (TCON.4) = 1. When GATE0 = 0, Timer 0 will clock only when TR0 = 1, regardless of the state of INT0. TMOD.2 C/T0 - Counter/Timer select. When C/T0 = 0, Timer 0 is clocked by CLKOUT/4 or CLKOUT/12, depending on the state of T0M (CKCON.3). When C/T0 = 1, Timer 0 is clocked by high-to-low transitions on the T0 pin. TMOD.1 M1 - Timer 0 mode select bit 1. TMOD.0 M0 - Timer 0 mode select bit 0. M1 M0 Mode 0 0 1 1 0 1 0 1 Mode 0: 13 bit counter Mode 1: 16 bit counter Mode 2: 8 bit counter with auto-reload Mode 3: Two 8 bit counters Table 14-3. TCON Register — SFR 0x88 Bit Function TCON.7 TF1 - Timer 1 overflow flag. Set to 1 when the Timer 1 count overflows; automatically cleared when the EZ-USB vectors to the interrupt service routine. TCON.6 TR1 - Timer 1 run control. 1 = Enable counting on Timer 1. TCON.5 TF0 - Timer 0 overflow flag. Set to 1 when the Timer 0 count overflows; automatically cleared when the EZ-USB vectors to the interrupt service routine. TCON.4 TR0 - Timer 0 run control. 1 = Enable counting on Timer 0. TCON.3 IE1 - Interrupt 1 edge detect. If external interrupt 1 is configured to be edge-sensitive (IT1 = 1), IE1 is set when a negative edge is detected on the INT1 pin and is automatically cleared when the EZ-USB vectors to the corresponding interrupt service routine. In this case, IE1 can also be cleared by software. If external interrupt 1 is configured to be level-sensitive (IT1 = 0), IE1 is set when the INT1 pin is 0 and automatically cleared when the INT1 pin is 1. In level-sensitive mode, software cannot write to IE1. TCON.2 IT1 - Interrupt 1 type select. INT1 is detected on falling edge when IT1 = 1; INT1 is detected as a low level when IT1 = 0. TCON.1 IE0 - Interrupt 0 edge detect. If external interrupt 0 is configured to be edge-sensitive (IT0 = 1), IE0 is set when a negative edge is detected on the INT0 pin and is automatically cleared when the EZ-USB vectors to the corresponding interrupt service routine. In this case, IE0 can also be cleared by software. If external interrupt 0 is configured to be level-sensitive (IT0 = 0), IE0 is set when the INT0 pin is 0 and automatically cleared when the INT0 pin is 1. In level-sensitive mode, software cannot write to IE0. TCON.0 IT0 - Interrupt 0 type select. INT0 is detected on falling edge when IT0 = 1; INT0 is detected as a low level when IT0 = 0. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 195 Timers/Counters and Serial Interface Figure 14-2. Timer 0/1 - Mode 2 Divide by T0M (or T1M) 0 C/ T CLKOUT TL0 (or TL1) 0 1 Divide by 4 0 7 RELOAD 1 CLK T0 (or T1) TR0 (or TR1) 0 TH0 (or TH1) 7 GATE TF0 (or TF1) INT0 (or INT1) pin INT To Serial Port (Timer 1 only) 14.2.2.3 Mode 2, 8 Bit Counter with AutoReload — Timer 0 and Timer 1 In mode 2, the timer is configured as an 8 bit counter, with automatic reload of the start value on overflow. TL0 (or TL1) is the counter, and TH0 (or TH1) stores the reload value. As illustrated in Figure 14-2, mode 2 counter control is the same as for mode 0 and mode 1. When TL0/1 increments from 0xFF, the value stored in TH0/1 is reloaded into TL0/1. 14.2.2.4 Control of Timer 1 when Timer 0 is in mode 3 is through the Timer 1 mode bits. To turn Timer 1 on, set Timer 1 to mode 0, 1, or 2. To turn Timer 1 off, set it to mode 3. The Timer 1 C/T Bit and T1M Bit are still available to Timer 1. Therefore, Timer 1 can count CLKOUT/4, CLKOUT/12, or high-to-low transitions on the T1 pin. The Timer 1 GATE function is also available when Timer 0 is in mode 3. Mode 3, Two 8 Bit Counters — Timer 0 Only In mode 3, Timer 0 operates as two 8 bit counters. Selecting mode 3 for Timer 1 simply stops Timer 1. As shown in Figure 14-3 on page 197, TL0 is configured as an 8 bit counter controlled by the normal Timer 0 control bits. TL0 can either count CLKOUT cycles (divided by 4 or by 12) or high-to-low transitions on the T0 pin, as determined by the C/T Bit. The GATE function can be used to give counter enable control to the INT0 pin. TH0 functions as an independent 8 bit counter. However, TH0 can only count CLKOUT cycles (divided by 4 or by 12). The Timer 1 control and flag bits (TR1 and TF1) are used as the control and flag bits for TH0. When Timer 0 is in mode 3, Timer 1 has limited usage because Timer 0 uses the Timer 1 control bit (TR1) and interrupt flag (TF1). Timer 1 can still be used for baud rate generation and the Timer 1 count values are still available in the TL1 and TH1 Registers. 196 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface Figure 14-3. Timer 0 - Mode 3 Divide by CLKOUT T0M 0 1 Divide by 0 CLK C/ T 7 TL0 0 1 T0 pin TR0 TF0 INT TF1 INT GATE INT0 pin 0 TH0 7 TR1 14.2.3 Timer Rate Control By default, the EZ-USB timers increment every 12 CLKOUT cycles, just as in the standard 8051. Using this default rate allows existing application code with real-time dependencies, such as baud rate, to operate properly. Applications that require fast timing can set the timers to increment every four CLKOUT cycles instead, by setting bits in the Clock Control Register (CKCON) at SFR location 0x8E. (See Table 14-4). Each timer’s rate can be set independently. These settings have no effect in counter mode. Table 14-4. CKCON (SFR 0x8E) Timer Rate Control Bits Bit ■ T2CON (SFR 0xC8) Timer/Counter 2 Control register, (see Table 14-5 on page 198). ■ RCAP2L (SFR 0xCA) Captures the TL2 value when Timer 2 is configured for capture mode, or as the LSB of the 16 bit reload value when Timer 2 is configured for auto-reload mode. ■ RCAP2H (SFR 0xCB) Captures the TH2 value when Timer 2 is configured for capture mode, or as the MSB of the 16 bit reload value when Timer 2 is configured for auto-reload mode. ■ TL2 (SFR 0xCC) The lower eight bits of the 16 bit count. ■ TH2 (SFR 0xCD) The upper eight bits of the 16 bit count. Function CKCON.5 T2M - Timer 2 clock select. When T2M = 0, Timer 2 uses CLKOUT/12 (for compatibility with standard 8051); when T2M = 1, Timer 2 uses CLKOUT/4. This bit has no effect when Timer 2 is configured for baud rate generation. CKCON.4 T1M - Timer 1 clock select. When T1M = 0, Timer 1 uses CLKOUT/12 (for compatibility with standard 8051); when T1M = 1, Timer 1 uses CLKOUT/4. CKCON.3 T0M - Timer 0 clock select. When T0M = 0, Timer 0 uses CLKOUT/12 (for compatibility with standard 8051); when T0M = 1, Timer 0 uses CLKOUT/4. 14.2.4 The SFRs associated with Timer 2 are: Timer 2 Timer 2 runs only in 16 bit mode and offers several capabilities not available with Timers 0 and 1. The modes available for Timer 2 are: ■ 16 bit timer/counter ■ 16 bit timer with capture ■ 16 bit timer/counter with auto-reload ■ Baud rate generator EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 197 Timers/Counters and Serial Interface Table 14-5. T2CON Register — SFR 0xC8 Bit Function T2CON.7 TF2 - Timer 2 overflow flag. Hardware sets TF2 when the Timer 2 overflows from 0xFFFF. TF2 must be cleared to 0 by the software. TF2 is only set to a ‘1’ if RCLK and TCLK are both cleared to ‘0’. Writing a one to TF2 forces a Timer 2 interrupt if enabled. T2CON.6 EXF2 - Timer 2 external flag. Hardware sets EXF2 when a reload or capture is caused by a high-to-low transition on the T2EX pin, and EXEN2 is set. EXF2 must be cleared to ‘0’ by software. Writing a one to EXF2 forces a Timer 2 interrupt, if enabled. T2CON.5 RCLK - Receive clock flag. Determines whether Timer 1 or Timer 2 is used for Serial Port 0 timing of received data in serial mode 1 or 3. RCLK=1 selects Timer 2 overflow as the receive clock; RCLK=0 selects Timer 1 overflow as the receive clock. T2CON.4 TCLK - Transmit clock flag. Determines whether Timer 1 or Timer 2 is used for Serial Port 0 timing of transmit data in serial mode 1 or 3. TCLK=1 selects Timer 2 overflow as the transmit clock; TCLK=0 selects Timer 1 overflow as the transmit clock. T2CON.3 EXEN2 - Timer 2 external enable. EXEN2=1 enables capture or reload to occur as a result of a high-to-low transition on the T2EX pin, if Timer 2 is not generating baud rates for the serial port. EXEN2=0 causes Timer 2 to ignore all external events on the T2EX pin. T2CON.2 TR2 - Timer 2 run control flag. TR2=1 starts Timer 2; TR2=0 stops Timer 2. T2CON.1 C/T2 - Counter/Timer select. When C/T2 = 1, Timer 2 is clocked by high-to-low transitions on the T2 pin.When C/T2 = 0 in modes 0, 1, or 2, Timer 2 is clocked by CLKOUT/4 or CLKOUT/12, depending on the state of T2M (CKCON.5). When C/T2 = 0 in mode 3, Timer 2 is clocked by CLKOUT/2, regardless of the state of CKCON.5. T2CON.0 CP/RL2 - Capture/reload flag. When CP/RL2=1, Timer 2 captures occur on high-to-low transitions of the T2EX pin, if EXEN2 = 1. When CP/ RL2 = 0, auto-reloads occur when Timer 2 overflows or when high-to-low transitions occur on the T2EX pin, if EXEN2 = 1. If either RCLK or TCLK is set to ‘1’, CP/RL2 does not function and Timer 2 operates in auto-reload mode following each overflow. 14.2.4.1 Timer 2 Mode Control Table 14-6 summarizes how the T2CON bits determine the Timer 2 mode. Table 14-6. Timer 2 Mode Control Summary TR2 TCLK RCLK CP/RL2 0 X X X Timer 2 stopped Mode 1 1 X X Baud rate generator 1 X 1 X Baud rate generator 1 0 0 0 16 bit timer/counter with auto-reload 1 0 0 1 16 bit timer/counter with capture X = Don’t care 14.2.5 Timer 2: The 6 Bit Timer/Counter Mode Figure 14-4 illustrates how Timer 2 operates in timer/counter mode with the optional capture feature. The C/T2 Bit determines whether the 16 bit counter counts CLKOUT cycles (divided by 4 or 12), or high-to-low transitions on the T2 pin. The TR2 Bit enables the counter. When the count increments from 0xFFFF, the TF2 flag is set and the T2OUT pin goes high for one CLKOUT cycle. 14.2.5.1 Timer 2 The 16 Bit Timer/Counter Mode with Capture The Timer 2 capture mode (Figure 14-4) is the same as the 16 bit timer/counter mode, with the addition of the capture registers and control signals. The CP/RL2 Bit in the T2CON SFR enables the capture feature. When CP/RL2 = 1, a high-to-low transition on the T2EX pin when EXEN2 = 1 causes the Timer 2 value to be loaded into the capture registers RCAP2L and RCAP2H. 198 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface Figure 14-4. Timer 2 - Timer/Counter with Capture Divide by 12 CLKOUT T2M CP/RL2 = 1 0 0 1 C/ T2 CLK Divide by 4 0 7 8 15 TH2 TL2 1 T2 pin 78 0 15 TF2 EXEN2 CAPTURE INT EXF2 T2EX pin 14.2.6 RCAP2H RCAP2L TR2 Timer 2: 16 Bit Timer/Counter Mode with Auto-Reload and the starting value is reloaded into TL2 and TH2. Software must preload the starting value into the RCAP2L and RCAP2H registers. When CP/RL2 = 0, Timer 2 is configured for the auto-reload mode illustrated in Figure 14-5. Control of counter input is the same as for the other 16 bit counter modes. When the count increments from 0xFFFF, Timer 2 sets the TF2 flag When Timer 2 is in auto-reload mode, a reload can be forced by a high-to-low transition on the T2EX pin, if enabled by EXEN2 = 1. Figure 14-5. Timer 2 - Timer/Counter with Auto Reload Divide by CLKOUT T2M 1 Divide by 4 CP/RL2 = 0 0 0 C/ T2 CLK 7 8 0 TL2 1 15 TH2 T2 pin 0 7 8 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 15 TF2 EXEN2 T2EX pin RCAP2H RCAP2L TR2 EXF2 INT 199 Timers/Counters and Serial Interface 14.2.7 Timer 2: Baud Rate Generator Mode Bit. Timer 2 is used as the receive baud clock source when RCLK=1, and as the transmit baud clock source when TCLK=1. Set either RCLK or TCLK to ‘1’ to configure Timer 2 to generate baud rates for Serial Port 0 in serial mode 1 or 3. Figure 14-6 on page 200 is the functional diagram for the Timer 2 baud rate generator mode. In baud rate generator mode, Timer 2 functions in auto-reload mode. However, instead of setting the TF2 flag, the counter overflow is used to generate a shift clock for the serial port function. As in normal auto-reload mode, the overflow also causes the preloaded start value in the RCAP2L and RCAP2H Registers to be reloaded into the TL2 and TH2 Registers. When operating as a baud rate generator, Timer 2 does not set the TF2 Bit. In this mode, a Timer 2 interrupt can only be generated by a high-to-low transition on the T2EX pin setting the EXF2 Bit, and only if enabled by EXEN2 = 1. The counter time base in baud rate generator mode is CLKOUT/2. To use an external clock source, set C/T2 to ‘1’ and apply the desired clock source to the T2 pin. Note The maximum frequency for an external clock source on the T2 pin is 6 MHz. When either TCLK = 1 or RCLK = 1, Timer 2 is forced into auto-reload operation, regardless of the state of the CP/RL2 Figure 14-6. Timer 2 - Baud Rate Generator Mode CLKOUT Divide by 2 0 TIMER 1 OVERFLOW C/ T2 CLK 1 Divide by 2 T2 TR2 SMOD 0 7 8 0 TL2 RCL 15 TH2 1 0 1 RX CLOC Divide by 16 TCL RCAP2L RCAP2H 7 8 0 15 1 EXEN2 T2EX 200 EXF TIMER 2 INTERRUPT 0 Divide by 16 TX CLOCK EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface 14.3 Serial Interface The EZ-USB provides two serial ports. Serial Port 0 operates almost exactly as a standard 8051 serial port; depending on the configured mode (see Table 14-7), its baud-clock source can be CLKOUT/4 or CLKOUT/12, Timer 1, Timer 2, or the High-Speed Baud Rate Generator (see section 14.3.2 High-Speed Baud Rate Generator on page 202). Serial Port 1 is identical to Serial Port 0, except that it cannot use Timer 2 as its baud rate generator. The number of serial ports available externally vary depending on the package. See package information in Introducing EZ-USB® chapter on page 13. Each serial port can operate in synchronous or asynchronous mode. In synchronous mode, the EZ-USB generates the serial clock and the serial port operates in half duplex mode. In asynchronous mode, the serial port operates in full duplex mode. In all modes, the EZ-USB double buffers the incoming data so that a byte of incoming data can be received while firmware is reading the previously received byte. The registers associated with the serial ports are as follows. (Registers PCON and EICON also include some functionality which is not part of the Serial Interface). ■ PCON (SFR 0x87) Bit 7, Serial Port 0 rate control SMOD0 (Table 14-13 on page 203) ■ SCON0 (SFR 0x98) Serial Port 0 control (Table 14-11 on page 203) ■ SBUF0 (SFR 0x99) Serial Port 0 transmit/receive buffer ■ EICON (SFR 0xD8) Bit 7, Serial Port 1 rate control SMOD1 (Table 14-12 on page 203) ■ SCON1 (SFR 0xC0) Serial Port 1 control (Table 14-14 on page 203) ■ SBUF1 (SFR 0xC1) Serial Port 1 transmit/receive buffer ■ T2CON (SFR 0xC8) Baud clock source for modes 1 and 3 (RCLK and TCLK in Table 14-5 on page 198) ■ UART230 (0xE608) High-Speed Baud Rate Generator enable (see section 14.3.2 High-Speed Baud Rate Generator) Each serial port can operate in one of four modes, as outlined in Table 14-7. Table 14-7. Serial Port Modes Mode Sync/ Async Baud-Clock Source Data Bits Start/ Stop 9th Bit Function 0 Sync CLKOUT/4 or CLKOUT/12 8 None None 1 Async Timer 1 (Ports 0 and 1), 8 1 start, 1 stop None Timer 2 (Port 0 only), or High-Speed Baud Rate Generator (Ports 0 and 1) 2 Async CLKOUT/32 or CLKOUT/64 9 1 start, 1 stop 0, 1, or parity 3 Async Timer 1 (Ports 0 and 1), 9 1 start, 1 stop 0, 1, or parity Timer 2 (Port 0 only), or High-Speed Baud Rate Generator (Ports 0 and 1) Note: The High-Speed Baud Rate Generator provides 115.2K or 230.4K baud rates (see section 14.3.2 High-Speed Baud Rate Generator on page 202). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 201 Timers/Counters and Serial Interface 14.3.1 803x/805x Compatibility tions of baud clock sources for Modes 1 and 3 are listed below. The implementation of the serial interface is similar to that of the Dallas Semiconductor, DS80C320. Table 14-8 summarizes the differences in serial interface implementation between the Intel 8051, the Dallas Semiconductor DS80C320, and the EZ-USB. Table 14-8. Serial Interface Implementation Comparison Feature Dallas DS80C320 Intel 8051 EZ-USB Number of serial ports 1 2 2 Framing error detection not implemented implemented not implemented Slave address comparison for multiprocessor communication not implemented implemented not implemented 14.3.2 High-Speed Baud Rate Generator The EZ-USB incorporates a high speed baud rate generator which can provide 115.2K and 230.4K baud rates for either or both serial ports, regardless of the EZ-USB’s internal clock frequency (12, 24, or 48 MHz). The high-speed baud rate generator is enabled for Serial Port 0 by setting UART230.0 to ‘1’; it is enabled for Serial Port 1 by setting UART230.1 to ‘1’. When enabled, the high speed baud rate generator defaults to 115.2K baud. To select 230.4K baud for Serial Port 0, set SMOD0 (PCON.7) to ‘1’; for Serial Port 1, set SMOD1 (EICON.7) to ‘1’. Table 14-9. UART230 Register — Address 0xE608 Bit Function UART230.7:2 Reserved UART230.1 UART230.0 230UART1 - Enable high-speed baud rate generator for serial port 1. When 230UART1 = 1, a 115.2K baud (if SMOD1 = 0) or 230.4K baud (if SMOD1 = 1) clock is provided to serial port 1. When 230UART1 = 0, serial port 1’s baud clock is provided by one of the sources shown in Table 14-7 on page 201. 230UART0 - Enable high-speed baud rate generator for serial port 0. When 230UART0 = 1, a 115.2K baud (if SMOD0 = 0) or 230.4K baud (if SMOD0 = 1) clock is provided to serial port 0. When 230UART1 = 0, serial port 0’s baud clock is provided by one of the sources shown in Table 14-7 on page 201. Table 14-10. Allowable Baud-Clock Combinations for Modes 1 and 3 Port 0 Port 1 Timer 1 Timer 1 Timer 2 Timer 1 Timer 2 High Speed Baud Rate Generator High Speed Baud Rate Generator High Speed Baud Rate Generator 14.3.3 Mode 0 Serial mode 0 provides synchronous, half duplex serial communication. For Serial Port 0, serial data output occurs on the RXD0OUT pin, serial data is received on the RXD0 pin, and the TXD0 pin provides the shift clock for both transmit and receive. For Serial Port 1, the corresponding pins are RXD1OUT, RXD1, and TXD1. The serial mode 0 baud rate is either CLKOUT/12 or CLKOUT/4, depending on the state of the SM2_0 bit (or SM2_1 for Serial Port 1). When SM2_0 = 0, the baud rate is CLKOUT/12, when SM2_0 = 1, the baud rate is CLKOUT/4. Mode 0 operation is identical to the standard 8051. Data transmission begins when an instruction writes to the SBUF0 (or SBUF1) SFR. The USART shifts the data, LSB first, at the selected baud rate, until the 8 bit value has been shifted out. Mode 0 data reception begins when the REN_0 (or REN_1) bit is set and the RI_0 (or RI_1) bit is cleared in the corresponding SCON SFR. The shift clock is activated and the USART shifts data, LSB first, in on each rising edge of the shift clock until eight bits have been received. One CLKOUT cycle after the eighth bit is shifted in, the RI_0 (or RI_1) bit is set and reception stops until the software clears the RI bit. Figure 14-7 on page 204 through Figure 14-10 on page 205 illustrate Serial Port Mode 0 transmit and receive timing for both low speed (CLKOUT/12) and high speed (CLKOUT/4) operation. The figures show Port 0 signal names, RXD0, RXD0OUT, and TXD0. The timing is the same for Port 1 signals RXD1, RXD1OUT, and TXD1, respectively. Note When the High-Speed Baud Rate Generator is enabled for either serial port, neither port may use Timer 1 as its baud-clock source. Therefore, the allowable combina- 202 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface Table 14-11. SCON0 Register — SFR 98h Bit Function SCON0.7 SM0_0 - Serial Port 0 mode bit 0. SCON0.6 SM1_0 - Serial Port 0 mode bit 1, decoded as: SM0_0 SCON0.5 SM1_0 Mode 0 0 0 0 1 1 1 0 2 1 1 3 SM2_0 - Multiprocessor communication enable. In modes 2 and 3, this bit enables the multiprocessor communication feature. If SM2_0 = 1 in mode 2 or 3, then RI_0 is not activated if the received ninth bit is zero. If SM2_0=1 in mode 1, then only RI_0 is activated if a valid stop is received. In mode 0, SM2_0 establishes the baud rate: when SM2_0=0, the baud rate is CLKOUT/12; when SM2_0=1, the baud rate is CLKOUT/4. SCON0.4 REN_0 - Receive enable. When REN_0=1, reception is enabled. SCON0.3 TB8_0 - Defines the state of the 9th data bit transmitted in modes 2 and 3. SCON0.2 RB8_0 - In modes 2 and 3, RB8_0 indicates the state of the 9th bit received. In mode 1, RB8_0 indicates the state of the received stop bit. In mode 0, RB8_0 is not used. SCON0.1 TI_0 - Transmit interrupt flag. Indicates that the transmit data word has been shifted out. In mode 0, TI_0 is set at the end of the 8th data bit. In all other modes, TI_0 is set when the stop bit is placed on the TXD0 pin. TI_0 must be cleared by firmware. SCON0.0 RI_0 - Receive interrupt flag. Indicates that serial data word has been received. In mode 0, RI_0 is set at the end of the 8th data bit. In mode 1, RI_0 is set after the last sample of the incoming stop bit, subject to the state of SM2_0. In modes 2 and 3, RI_0 is set at the end of the last sample of RB8_0. RI_0 must be cleared by firmware. Table 14-12. EICON (SFR 0xD8) SMOD1 Bit Bit EICON.7 Function SMOD1 - Serial Port 1 baud rate doubler enable. When SMOD1 = 1 the baud rate for Serial Port is doubled. Table 14-13. PCON (SFR 0x87) SMOD0 Bit Bit PCON.7 Function SMOD0 - Serial Port 0 baud rate double enable. When SMOD0 = 1, the baud rate for Serial Port 0 is doubled. Table 14-14. SCON1 Register—SFR C0h Bit Function SCON1.7 SM0_1 - Serial Port 1 mode bit 0. SCON1.6 SM1_1 - Serial Port 1 mode bit 1, decoded as: SM0_1 SM1_1 Mode SCON1.5 0 0 0 0 1 1 1 0 2 1 1 3 SM2_1 - Multiprocessor communication enable. In modes 2 and 3, this bit enables the multiprocessor communication feature. If SM2_1 = 1 in mode 2 or 3, then RI_1 is not activated if the received ninth bit is ‘0’. If SM2_1=1 in mode 1, then only RI_1 is activated if a valid stop is received. In mode 0, SM2_1 establishes the baud rate: when SM2_1=0, the baud rate is CLKOUT/12; when SM2_1=1, the baud rate is CLKOUT/4. SCON1.4 REN_1 - Receive enable. When REN_1=1, reception is enabled. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 203 Timers/Counters and Serial Interface Table 14-14. SCON1 Register—SFR C0h Bit Function SCON1.3 TB8_1 - Defines the state of the ninth data bit transmitted in modes 2 and 3. SCON1.2 RB8_1 - In modes 2 and 3, RB8_1 indicates the state of the ninth bit received. In mode 1, RB8_1 indicates the state of the received stop bit. In mode 0, RB8_1 is not used. SCON1.1 TI_1 - Transmit interrupt flag. Indicates that the transmit data word has been shifted out. In mode 0, TI_1 is set at the end of the eighth data bit. In all other modes, TI_1 is set when the stop bit is placed on the TXD1 pin. TI_1 must be cleared by the software. SCON1.0 RI_1 - Receive interrupt flag. Indicates that serial data word has been received. In mode 0, RI_1 is set at the end of the eighth data bit. In mode 1, RI_1 is set after the last sample of the incoming stop bit, subject to the state of SM2_1. In modes 2 and 3, RI_1 is set at the end of the last sample of RB8_1. RI_1 must be cleared by the software. Figure 14-7. Serial Port Mode 0 Receive Timing - Low Speed Operation CLKOUT D0 RXD0 D1 D2 D3 D4 D5 D6 D7 RXD0OUT TXD0 TI RI Figure 14-8. Serial Port Mode 0 Receive Timing - High Speed Operation CLKOUT RXD0 D0 D1 D2 D3 D4 D5 D6 D7 RXD0OUT TXD0 TI RI Note At both low and high speed in Mode 0, data on RXD0 is sampled two CLKOUT cycles before the rising clock edge on TXD0. 204 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface Figure 14-9. Serial Port Mode 0 Transmit Timing - Low Speed Operation CLKOUT RXD0 RXD0OUT D0 D1 D2 D3 D4 D5 D6 D7 TXD0 TI RI Figure 14-10. Serial Port Mode 0 Transmit Timing - High Speed Operation CLKOUT RXD0 RXD0OUT D0 D1 D2 D3 D4 D5 D6 D7 TXD0 TI RI 14.3.4 Mode 1 Mode 1 provides standard asynchronous, full-duplex communication, using a total of 10 bits: one start bit, eight data bits, and one stop bit. For receive operations, the stop bit is stored in RB8_0 (or RB8_1). Data bits are received and transmitted LSB first. Mode 1 operation is identical to that of the standard 8051 when Timer 1 uses CLKOUT/12, (T1M=0, the default). 14.3.4.1 When using Timer 1, the SMOD0 (or SMOD1) Bit selects whether or not to divide the Timer 1 rollover rate by 2. Therefore, when using Timer 1, the baud rate is determined by the equation: SMODx 2 Baud Rate = ------------------ Timer 1 Overflow 32 Equation 1 When using Timer 2, the baud rate is determined by the equation: Mode 1 Baud Rate The mode 1 baud rate is a function of timer overflow. Serial Port 0 can use either Timer 1 or Timer 2 to generate baud rates. Serial Port 1 can only use Timer 1. The two serial ports can run at the same baud rate if they both use Timer 1, or different baud rates if Serial Port 0 uses Timer 2 and Serial Port 1 uses Timer 1. Timer 2 Overflow Baud Rate = -----------------------------------------16 Equation 2 Each time the timer increments from its maximum count (0xFF for Timer 1 or 0xFFFF for Timer 2), a clock is sent to the baud rate circuit. That clock is then divided by 16 to generate the baud rate. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 205 Timers/Counters and Serial Interface To use Timer 1 as the baud rate generator, it is generally best to use Timer 1 mode 2 (eight bit counter with autoreload), although any counter mode can be used. In mode 2, the Timer 1 reload value is stored in the TH1 register, which makes the complete formula for Timer 1: Equation 3 SMODx 2 CLKOUT Baud Rate = ------------------ --------------------------------------------------------------------------32 12 – 8 T1M 256 – TH1 To derive the required TH1 value from a known baud rate when T1M=0, use the equation: 2 (TMOD.5:4=10) with a CLKOUT/4 clock source (T1M=1) and the full timer rollover (SMOD1=1) More accurate baud rates may be achieved by using Timer 2 as the baud rate generator. To use Timer 2 as the baud rate generator, configure Timer 2 in auto-reload mode and set the TCLK and/or RCLK bits in the T2CON SFR. TCLK selects Timer 2 as the baud rate generator for the transmitter; RCLK selects Timer 2 as the baud rate generator for the receiver. The 16 bit reload value for Timer 2 is stored in the RCAP2L and RCA2H SFRs, which makes the equation for the Timer 2 baud rate: Equation 6 SMODx 2 CLKOUT TH1 = 256 – -----------------------------------------------384 Baud Rate Equation 4 CLKOUT Baud Rate = --------------------------------------------------------------------------------------------------------------32 65536 – 256 RCAP2H + RCAP2L To derive the required TH1 value from a known baud rate when T1M=1, use the equation: To derive the required RCAP2H and RCAP2L values from a known baud rate, use the equation: SMODx CLKOUT 2 TH1 = 256 – ------------------------------------------------128 Baud Rate CLKOUT RCAP2HL = 65536 ------------------------------------32 Baud Rate Equation 5 Note Very low serial port baud rates may be achieved with Timer 1 by enabling the Timer 1 interrupt, configuring Timer 1 to mode 1, and using the Timer 1 interrupt to initiate a 16 bit software reload. Equation 7 When either RCLK or TCLK is set, the TF2 flag is not set on a Timer 2 rollover and the T2EX reload trigger is disabled. Table 14-16 lists sample RCAP2H:L reload values for a variety of common serial baud rates. Table 14-15 lists sample reload values for a variety of common serial port baud rates, using Timer 1 operating in mode Table 14-15. Timer 1 Reload Values for Common Serial Port Mode 1 Baud Rates CLKOUT = 12 MHz Nominal TH1 Rate Reload Value Actual Rate CLKOUT = 24 MHz TH1 Error Actual Reload Rate Value CLKOUT = 48 MHz TH1 Error Reload Actual Error Rate Value 57600 FD 62500 +8.50% F9 53571 -6.99% F3 57692 +0.16% 38400 FB 37500 -2.34% F6 37500 -2.34% EC 37500 -2.34% 28800 F9 26786 -6.99% F3 28846 +0.16% E6 28846 +0.16% 19200 F6 18750 -2.34% EC 18750 -2.34% D9 19230 +0.16% 9600 EC 9375 -2.34% D9 9615 +0.16% B2 9615 +0.16% 4800 D9 4807 +0.16% B2 4807 +0.16% 64 4807 +0.16% 2400 B2 2403 +0.16% 64 2403 +0.16% — — — Settings: SMOD=1, C/T=0, Timer1 Mode=2, T1M=1 Note Using rates that are off by 2% or more do not work in all systems. 206 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface Table 14-16. Timer 2 Reload Values for Common Serial Port Mode 1 Baud Rates CLKOUT = 12 MHz Nominal Rate RCAP2H:L Reload Value Actual Rate CLKOUT = 24 MHz RCAP2H:L Error Reload Value Actual Rate CLKOUT = 48 MHz RCAP2H:L Error Reload Value Actual Rate Error 57600 FFF9 53571 -6.99% FFF3 57692 +0.16% FFE6 57692 +0.16% 38400 FFF6 37500 -2.34% FFEC 37500 -2.34% FFD9 38461 +0.16% 28800 FFF3 28846 +0.16% FFE6 28846 +0.16% FFCC 28846 +0.16% 19200 FFEC 18750 -2.34% FFD9 19230 +0.16% FFB2 19230 +0.16% 9600 FFD9 9615 +0.16% FFB2 9615 +0.16% FF64 9615 +0.16% 4800 FFB2 4807 +0.16% FF64 4807 +0.16% FEC8 4807 +0.16% 2400 FF64 2403 +0.16% FEC8 2403 +0.16% FD90 2403 +0.16% Note using rates that are off by 2.3% or more do not work in all systems. 14.3.4.2 Mode 1 Transmit Figure 14-11 on page 208 illustrates the mode 1 transmit timing. In mode 1, the USART begins transmitting after the first rollover of the divide-by-16 counter after the software writes to the SBUF0 (or SBUF1) register. The USART transmits data on the TXD0 (or TXD1) pin in the following order: start bit, 8 data bits (LSB first), stop bit. The TI_0 (or TI_1) bit is set 2 CLKOUT cycles after the stop bit is transmitted. 14.3.5 Mode 1 Receive Figure 14-12 on page 208 illustrates the mode 1 receive timing. Reception begins at the falling edge of a start bit received on the RXD0 (or RXD1) pin, when enabled by the REN_0 (or REN_1) Bit. For this purpose, the RXD0 (or RXD1) pin is sampled 16 times per bit for any baud rate. When a falling edge of a start bit is detected, the divide-by16 counter used to generate the receive clock is reset to align the counter rollover to the bit boundaries. For noise rejection, the serial port establishes the content of each received bit by a majority decision of 3 consecutive samples in the middle of each bit time. For the start bit, if the falling edge on the RXD0 (or RXD1) pin is not verified by a majority decision of 3 consecutive samples (low), then the serial port stops reception and waits for another falling edge on the RXD0 (or RXD1) pin. At the middle of the stop bit time, the serial port checks for the following conditions: ■ RI_0 (or RI_1) = 0 ■ If SM2_0 (or SM2_1) = 1, the state of the stop bit is 1 (If SM2_0 (or SM2_1) = 0, the state of the stop bit does not matter. If the above conditions are met, the serial port then writes the received byte to the SBUF0 (or SBUF1) Register, loads the stop bit into RB8_0 (or RB8_1), and sets the RI_0 (or RI_1) Bit. If the above conditions are not met, the received data is lost, the SBUF Register and RB8 Bit are not loaded, and the RI Bit is not set. After the middle of the stop bit time, the serial port waits for another high-to-low transition on the (RXD0 or RXD1) pin. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 207 Timers/Counters and Serial Interface Figure 14-11. Serial Port 0 Mode 1 Transmit Timing Write to SBUF0 TX CLK SHIFT START TXD0 D0 D1 D2 D3 D4 D5 D6 D7 STOP RXD0 RXD0OUT TI_0 RI_0 Figure 14-12. Serial Port 0 Mode 1 Receive Timing RX CLK RXD0 START D0 D1 D2 D3 D4 D5 D6 D7 STOP Bit detector sampling SHIFT RXD0OUT TXD0 TI_0 RI_0 14.3.6 Mode 2 14.3.6.1 Mode 2 Transmit Mode 2 provides asynchronous, full-duplex communication, using a total of 11 bits: one start bit, eight data bits, a programmable ninth bit, and one stop bit. The data bits are transmitted and received LSB first. For transmission, the ninth bit is determined by the value in TB8_0 (or TB8_1). To use the ninth bit as a parity bit, move the value of the P bit (SFR PSW.0) to TB8_0 (or TB8_1). Figure 14-13 on page 209 illustrates the mode 2 transmit timing. Transmission begins after the first rollover of the divide-by-16 counter following a software write to SBUF0 (or SBUF1). The USART shifts data out on the TXD0 (or TXD1) pin in the following order: start bit, data bits (LSB first), ninth bit, stop bit. The TI_0 (or TI_1) Bit is set when the stop bit is placed on the TXD0 (or TXD1) pin. The Mode 2 baud rate is either CLKOUT/32 or CLKOUT/64, as determined by the SMOD0 (or SMOD1) bit. The formula for the mode 2 baud rate is: 14.3.6.2 SMODx CLKOUTBaud Rate = 2-----------------------------------------------64 Equation 8 Mode 2 operation is identical to the standard 8051. 208 Mode 2 Receive Figure 14-14 on page 209 illustrates the mode 2 receive timing. Reception begins at the falling edge of a start bit received on the RXD0 (or RXD1) pin, when enabled by the REN_0 (or REN_1) Bit. For this purpose, the RXD0 (or RXD1) pin is sampled 16 times per bit for any baud rate. When a falling edge of a start bit is detected, the divide-by- EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Timers/Counters and Serial Interface 16 counter used to generate the receive clock is reset to align the counter rollover to the bit boundaries. At the middle of the stop bit time, the serial port checks for the following conditions: For noise rejection, the serial port establishes the content of each received bit by a majority decision of three consecutive samples in the middle of each bit time. For the start bit, if the falling edge on the RXD0 (or RXD1) pin is not verified by a majority decision of three consecutive samples (low), then the serial port stops reception and waits for another falling edge on the RXD0 (or RXD1) pin. ■ RI_0 (or RI_1) = 0 ■ If SM2_0 (or SM2_1) = 1, the state of the stop bit is ‘1’. (If SM2_0 (or SM2_1) = 0, the state of the stop bit does not matter.) If the above conditions are met, the serial port then writes the received byte to the SBUF0 (or SBUF1) Register, loads the stop bit into RB8_0 (or RB8_1), and sets the RI_0 (or RI_1) Bit. If the above conditions are not met, the received data is lost, the SBUF Register and RB8 Bit are not loaded, and the RI Bit is not set. After the middle of the stop bit time, the serial port waits for another high-to-low transition on the RXD0 (or RXD1) pin. Figure 14-13. Serial Port 0 Mode 2 Transmit Timing Write to SBUF0 TX CLK SHIFT TXD0 START D0 D1 D2 D3 D4 D5 D6 D7 TB8 STOP RXD0 RXD0OUT TI_0 RI_0 Figure 14-14. Serial Port 0 Mode 2 Receive Timing RX CLK RXD0 START D0 D1 D2 D3 D4 D5 D6 D7 RB8 STOP Bit Detector Sampling SHIFT RXD0OUT TXD0 TI_0 RI_0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 209 Timers/Counters and Serial Interface 14.3.7 Mode 3 That is, mode 3 is a combination of mode 2 protocol and mode 1 baud rate. Figure 14-15 illustrates the mode 3 transmit timing. Figure 14-16 illustrates the mode 3 receive timing. Mode 3 provides asynchronous, full-duplex communication, using a total of 11 bits: one start bit, eight data bits, a programmable ninth bit, and one stop bit. The data bits are transmitted and received LSB first. Mode 3 operation is identical to that of the standard 8051 when Timer 1 uses CLKOUT/12, (T1M=0, the default). The mode 3 transmit and operations are identical to mode 2. The mode 3 baud rate generation is identical to mode 1. Figure 14-15. Serial Port 0 Mode 3 Transmit Timing Write to SBUF0 TX CLK SHIFT TXD0 START D0 D1 D2 D3 D4 D5 D6 D7 TB8 STOP RXD0 RXD0OUT TI_0 RI_0 Figure 14-16. Serial Port 0 Mode 3 Receive Timing RX CLK RXD0 START D0 D1 D2 D3 D4 D5 D6 D7 RB8 STOP Bit Detector Sampling SHIFT RXD0OUT TXD0 TI_0 RI_0 210 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 15. Registers 15.1 Introduction This section describes the EZ-USB registers in the order they appear in the EZ-USB memory map, see Figure 5-4 on page 76. The registers are named according to the following conventions. Most registers deal with endpoints. The general register format is DDDnFFF, where: DDD is endpoint direction where: ❐ IN or OUT with respect to the USB host. n is the endpoint number where: ❐ ’ISO’ indicates isochronous endpoints as a group. FFF is the function where: ❐ CS is a control and status register. ❐ IRQ is an interrupt request bit. ❐ IE is an interrupt enable bit. ❐ BC, BCL, and BCH are byte count registers. BC is used for single byte counts, and BCH/BCL are used as the high and low bytes of 16-bit byte counts. ❐ DATA is a single-register access to a FIFO. ❐ BUF is the start address of a buffer. 15.1.1 ❐ Example Register Format EP1INBC is the Endpoint 1 IN byte count. 15.1.2 Other Conventions USB indicates a global (not endpoint specific) USB function. ADDR is an address. VAL means valid. FRAME is a frame count. PTR is an address pointer. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 211 Registers Register Name Register Function b7 b6 b5 b4 Address b3 b2 b1 b0 bitname bitname bitname bitname bitname bitname bitname bitname R, W access R, W access R, W access R, W access R, W access R, W access R, W access R, W access Default val Default val Default val Default val Default val Default val Default val Default val The register table above illustrates the register description format used in this chapter. ■ The top line shows the register name, functional description, and address in the EZ-USB memory. ■ The second line shows the bit position in the register. ■ The third line shows the name of each bit in the register. ■ The fourth line shows CPU accessibility: Read, Write, or R/W. ■ The fifth line shows the default value. These values apply after a hard reset. 15.2 Special Function Registers EZ-USB implements many control registers as SFRs (Special Function Registers). These SFRs are shown in Table 15-1. Bold type indicates SFRs that are not in the standard 8051, but are included in the EZ-USB. Table 15-1. EZ-USB Special Function Registers (SFR) x 8x 9x Ax Bx Cx Dx Ex Fx 0 IOA 1 SP IOB IOC IOD SCON1 PSW ACC B EXIF INT2CLR IOE SBUF1 2 DPL0 MPAGE INT4CLR 3 DPH0 EICON EIE EIP OEA OEB 4 DPL1 OEC 5 DPH1 OED 6 DPS OEE 7 PCON 8 TCON SCON0 9 TMOD SBUF0 A TL0 B TL1 C TH0 D TH1 AUTOPTRH2 E CKCON AUTOPTRL2 F IE IP AUTOPTRH1 EP2468STAT EP01STAT RCAP2L AUTOPTRL1 EP24FIFOFLGS GPIFTRIG RCAP2H GPIFSGLDATH TH2 EP68FIFOFLGS T2CON TL2 GPIFSGLDATLX AUTOPTR-SETUP GPIFSGLDATLNOX All unlabeled SFRs are reserved. 212 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F SFR 15.3 About SFRs Because the SFRs are directly addressable internal registers, firmware can access them quickly, without the overhead of loading the data pointer and performing a MOVX instruction. For example, the firmware reads the EZ-USB Port B pins using a single instruction, as shown below. Single instruction to read port B: mov a,IOB In the same manner, firmware writes the value 0x55 to Port C using only one MOV instruction, as shown below. Single instruction to read port C: mov IOC,#55h SFRs in rows 0 and 8 are bit-addressable; individual bits of the registers may be efficiently set, cleared, or toggled using special bit-addressing instructions (for example, setb IOB.2 sets bit 2 of the IOB register). IOA Port A (bit addressable) SFR 0x80 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x IOB Port B (bit addressable) SFR 0x90 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 A15 A14 A13 A12 A11 A10 A9 A8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 AUTOPTRH1 Autopointer 1 Address HIGH AUTOPTRL1 SFR 0x9A Autopointer 1 Address Low SFR 0x9B b7 b6 b5 b4 b3 b2 b1 b0 A7 A6 A5 A4 A3 A2 A1 A0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 213 SFR AUTOPTRH2 Autopointer 2 Address HIGH SFR 0x9D b7 b6 b5 b4 b3 b2 b1 b0 A15 A14 A13 A12 A11 A10 A9 A8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 A7 A6 A5 A4 A3 A2 A1 A0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 x x x x x x x x W W W W W W W W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 x x x x x x x x W W W W W W W W x x x x x x x x AUTOPTRL2 Autopointer 2 Address Low IOC SFR 0x9E Port C (bit addressable) INT2CLR SFR 0xA0 Interrupt 2 Clear INT4CLR SFR 0xA1 Interrupt 4 Clear b0 SFR 0xA2 b0 Writing any value to INT2CLR or INT4CLR clears the INT2 or INT4 interrupt request bit for the INT2/INT4 interrupt currently being serviced. Note Writing to one of these registers has the same effect as clearing the appropriate interrupt request bit in the EZ-USB external register space. For example, suppose the EP2 Empty Flag interrupt is asserted. The EZ-USB automatically sets bit 1 of the EP2FIFOIRQ register (in External Data memory space, at 0xE651), and asserts the INT4 interrupt request. Using autovectoring, the EZ-USB automatically calls (vectors to) the EP2_FIFO_EMPTY 2 Interrupt Service Routine (ISR). The first task in the ISR is to clear the interrupt request bit, EP2FIFOIRQ.1. The firmware can do this either by accessing the EP2FIFOIRQ register (at 0xE651) and writing a ‘1’ to bit 1, or simply by writing any value to INT4CLR. The first method requires the use of the data pointer, which must be saved and restored along with the accumulator in an ISR. The second method is much faster and does not require saving the data pointer, so it is preferred. 214 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F SFR EP2468STAT Endpoints 2,4,6,8 Status Flags SFR 0xAA b7 b6 b5 b4 b3 b2 b1 b0 EP8F EP8E EP6F EP6E EP4F EP4E EP2F EP2E R R R R R R R R 0 1 0 1 1 0 1 0 The bits in EP2468STAT correspond to Endpoint Status bits in the EZ-USB register file, as follows: Table 15-2. SFR and EZ-USB Register File Correspondences Bit EPSTAT SFR EZ-USB Register.Bit EZ-USB Register File address 7 EP8 Full flag EP8CS.3 E6A6 6 EP8 Empty flag EP8CS.2 E6A6 5 EP6 Full flag EP6CS.3 E6A5 4 EP6 Empty flag EP6CS.2 E6A5 3 EP4 Full flag EP4CS.3 E6A4 2 EP4 Empty flag EP4CS.2 E6A4 1 EP2 Full flag EP2CS.3 E6A3 0 EP2 Empty flag EP2CS.2 E6A3 Note The Endpoint status bits represent the Packet Status. EP24FIFOFLGS Endpoints 2, 4 Slave FIFO Status Flags SFR 0xAB b7 b6 b5 b4 b3 b2 b1 b0 0 EP4PF EP4EF EP4FF 0 EP2PF EP2EF EP2FF R R R R R R R R 0 0 1 0 0 0 1 0 b7 b6 b5 b4 b3 b2 b1 b0 0 EP8PF EP8EF EP8FF 0 EP6PF EP6EF EP6FF R R R R R R R R 0 1 1 0 0 1 1 0 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 APTR2INC APTR1INC APTREN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 1 1 0 EP68FIFOFLGS Endpoints 6, 8 Slave FIFO Status Flags AUTOPTRSETUP SFR 0xAC Autopointers 1 and 2 Setup SFR 0xAF EZ-USB provides two identical autopointers. They are similar to the internal ‘DPTR’ data pointers, but with an additional feature: each can automatically increment after every memory access. Using one or both of the autopointers, EZ-USB firmware can perform very fast block memory transfers. The AUTOPTRSETUP register is configured as follows: ■ Set APTRnINC=0 to freeze the address pointer, APTRnINC=1 to automatically increment it for every read or write of an XAUTODATn register. This bit defaults to ‘1’, enabling the auto increment feature. ■ To enable the autopointer, set APTREN=1. Enabling the Autopointers has one side-effect: any code access (an instruction fetch, for instance) from addresses 0xE67B and 0xE67C return the AUTODATA values, rather than the code-memory values at these two addresses. This introduces a two-byte ‘hole’ in the code memory. The firmware then writes a 16 bit address to AUTOPTRHn/Ln. Then, for every read or write of an XAUTODATn register, the address pointer automatically increments (if APTRnINC=1). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 215 SFR IOD Port D (bit addressable) SFR 0xB0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x EZ-USB I/O ports PORTA-PORTD appear as bit addressable SFRs. Reading a register or bit returns the logic level of the port pin that is two CLKOUT clocks old. Writing a register bit writes the port latch. Whether or not the port latch value appears on the I/O pin depends on the state of the pin’s OE (Output Enable) bit. The I/O pins may also be assigned alternate function values, in which case the IOx and OEx bit values are overridden on a bit-by-bit basis. IOD is bit-addressable. Use Bit 2 to set PORTD - single instruction: setb IOD.2 ; set bit 2 of IOD SFR IOE Port E SFR 0xB1 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x I/O port PORTE is also accessed using an SFR, but unlike the PORTA-PORTD SFRs, it is not bit-addressable. Use OR to set bit 3: mov or mov 216 a,IOE a,#00001000b IOE,a ; set bit 3 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F SFR OEA Port A Output Enable SFR 0xB2 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 OEB Port B Output Enable OEC SFR 0xB3 Port C Output Enable OED SFR 0xB4 Port D Output Enable OEE SFR 0xB5 Port E Output Enable SFR 0xB6 The bits in 0EA - 0EE turn on the output buffers for the five I/O Ports PORTA-PORTE. Set a bit to ‘1’ to turn on the output buffer, set it to ‘0’ to turn the buffer off. EP01STAT Endpoint 0 and 1 Status SFR 0xBA b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 EP1INBSY EP1OUTBSY EP0BSY R R R R R R R R 0 0 0 0 0 0 0 0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 217 SFR GPIFTRIG see Section 15.15 Endpoint 2,4,6,8 GPIF Slave FIFO Trigger SFR 0xBB b7 b6 b5 b4 b3 b2 b1 b0 DONE 0 0 0 0 R/W EP1 EP0 R/W R R R R R/W R/W R/W 1 0 0 0 0 x x x b7 b6 b5 b4 b3 b2 b1 b0 D15 D14 D13 D12 D11 D10 D9 D8 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R R R R x x x x x x x x GPIFSGLDATH GPIF Data HIGH (16-bit mode only) GPIFSGLDATLX SFR 0xBD GPIF Data Low w/Trigger GPIFSGLDATLNOX SFR 0xBE SFR 0xBF GPIF Data Low w/No Trigger Most of these SFR registers are also accessible in external RAM space, at the addresses shown in Table 15-3. Table 15-3. SFR Registers and External Ram Equivalent SFR Register Name Hex EP2468STAT AA EP24FIFOFLGS AB EP68FIFOFLGS AC EP01STAT GPIFTRIG External Ram Register Address and Name E6A3-E6A6 EPxCS E6A7-E6AA EPxFIFOFLGS BA E6A0-E6A2 EP0CS, EP1OUTCS, EP1INCS BB E6D4, E6DC, E6E4, E6EC EPxGPIFTRIG GPIFSGLDATH BD E6F0 XGPIFSGLDATH GPIFSGLDATLX BE E6F1 XGPIFSGLDATLX GPIFSGLDATLNOX BF E6F2 XGPIFSGLDATLNOX 218 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F WAVEDATA E400- 15.4 GPIF Waveform Memories 15.4.1 WAVEDATA GPIF Waveform Descriptor Data Register WAVEDATA GPIF Waveform Descriptor 0, 1, 2, 3 Data E400-E47F* b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x *Accessible only when IFCFG1:0 = 10. The four GPIF waveform descriptor tables are stored in this space. See the General Programmable Interface chapter on page 121 for details. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 219 CPUCS E600 15.5 General Configuration Registers 15.5.1 CPUCS CPU Control and Status Register CPUCS CPU Control and Status b7 E600 b6 b5 b4 b3 b2 b1 b0 0 0 PORTCSTB CLKSPD1 CLKSPD0 CLKINV CLKOE 8051RES R R R/W R/W R/W R/W R/W R 0 0 0 0 0 0 1 0 Bit Name Description 5 PORTCSTB PORTC access generates RD and WR strobes. The 100- and 128-pin EZ-USB packages have two output pins, RD and WR, that can be used to synchronize data transfers on I/O PORTC. When PORTCSTB=1, this feature is enabled. Any read of PORTC activates a RD strobe, and any write to PORTC activates a WR strobe. The RD and WR strobes are asserted for two CLKOUT cycles; the WR strobe asserts two CLKOUT cycles after the PORTC pins are updated. If a design uses the 128-pin EZ-USB and connects off-chip memory to the address and data buses, this bit should be set to zero. This is because the RD and WR pins are also the standard strobes used to read and write off-chip memory, so normal reads/writes to I/O Port C disrupt normal accesses to that memory. 4:3 CLKSPD[1:0] CPU Clock Speed CLKSPD1 CLKSPD0 CPU Clock 0 0 12 MHz (Default) 0 1 24 MHz 1 0 48 MHz 1 1 Reserved These bits set the CPU clock speed. On a hard reset, these bits default to ‘00’ (12 MHz). Firmware may modify these bits at any time. 2 CLKINV Invert CLKOUT Signal. 0 CLKOUT signal not inverted (as shown in all timing diagrams). 1 CLKOUT signal inverted. 1 CLKOE Drive CLKOUT Pin. 0 CLKOUT pin floats. 1 CLKOUT pin driven. 0 8051RES 8051 Reset. The USB host writes ‘1’ to this bit to reset the 8051, and ‘0’ to run the 8051. Only the USB host writes to this bit (via the 0xA0 firmware load command). 220 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F IFCONFIG E601 15.5.2 IFCONFIG Interface Configuration (Ports, GPIF, Slave FIFOs) Register IFCONFIG Interface Configuration(Ports, GPIF, slave FIFOs) b6 b5 b4 b3 b2 b1 b0 IFCLKSRC 3048MHZ IFCLKOE IFCLKPOL ASYNC GSTATE IFCFG1 IFCFG0 R/W R/W R/W R/W R/W R/W R/W R/W 1 0 0 0 0 0 0 0 Bit Name Description 7 IFCLKSRC FIFO/GPIF Clock Source. This bit selects the clock source for both the FIFOS and GPIF. 0 The external clock on the IFCLK pin is selected. 1 An internal 30 or 48 MHz (default) clock is used (default). 6 3048MHZ Internal FIFO/GPIF Clock Frequency This bit selects the internal FIFO and GPIF clock frequency. 0 30 MHz (default) 1 48 MHz 5 IFCLKOE IFCLK pin output enable. 0 1 4 E601 b7 Tri-state Drive Invert the IFCLK signal. This bit indicates that the IFCLK signal is inverted. 0 The clock has the polarity shown in all the timing diagrams in this manual. 1 The clock is inverted. IFCLKPOL Figure 15-1. IFCLK Configuration IFCFG.6 30 MHz IFCFG.4 0 1 48 MHz IFCFG.5 0 1 IFCLK Pin IFCFG.7 IFCFG.4 Internal IFCLK Signal 3 1 0 ASYNC 0 1 Slave FIFO Asynchronous Mode. 0 The Slave FIFOs operate synchronously. A clock is supplied either internally or externally on the IFCLK pin; the FIFO control signals function as read and write enable signals for the clock signal. 1 The Slave FIFOs operate asynchronously. No clock signal input to IFCLK is required; the FIFO control signals function directly as read and write strobes. (continued on next page) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 221 IFCONFIG E601 15.5.2 2 IFCONFIG (continued) GSTATE Drive GSTATE [2:0] on PORTE [2:0]. When GSTATE = 1, three bits in Port E take on the signals shown below. The GSTATE bits, which indicate GPIF states, are used for diagnostic purposes. I/O Pin 1:0 IFCFG[1:0] Alternate Function PE0 GSTATE[0] PE1 GSTATE[1] PE2 GSTATE[2] Select Interface Mode (Ports, GPIF, or Slave FIFO) 00 Ports 01 Reserved 10 GPIF Interface (internal master) 11 Slave FIFO Interface (external master) These bits control the following EZ-USB interface signals, as shown below. IFCFG[1:0] = 00 (Ports) IFCFG[1:0] = 10 (GPIF Master) IFCFG[1:0] = 11 (Slave FIFO) PD7 FD[15] FD[15] PD6 FD[14] FD[14] PD5 FD[13] FD[13] PD4 FD[12] FD[12] PD3 FD[11] FD[11] PD2 FD[10] FD[10] PD1 FD[9] FD[9] PD0 FD[8] FD[8] PB7 FD[7] FD[7] PB6 FD[6] FD[6] PB5 FD[5] FD[5] PB4 FD[4] FD[4] PB3 FD[3] FD[3] PB2 FD[2] FD[2] PB1 FD[1] FD[1] PB0 FD[0] FD[0] INT0/PA0 INT0/PA0 INT0/PA0 INT1/PA1 INT1/PA1 INT1/PA1 PA2 PA2 SLOE WU2/PA3 WU2/PA3 WU2/PA3 PA4 PA4 FIFOADR0 PA5 PA5 FIFOADR1 PA6 PA6 PKTEND PA7 PA7 PA7/FLAGD/SLCS PC7:0 PC7:0 PC7:0 PE7:0 PE7:0 PE7:0 Note Signals shown in bold type do not change with IFCFG; they are shown for completeness. 222 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F PINFLAGSxx E602 15.5.3 PINFLAGSxx Slave FIFO FLAGA-FLAGD Pin Configuration Registers PINFLAGSAB see Section 15.15 Slave FIFO FLAGA and FLAGB Pin Configuration E602 b7 b6 b5 b4 b3 b2 b1 b0 FLAGB3 FLAGB2 FLAGB1 FLAGB0 FLAGA3 FLAGA2 FLAGA1 FLAGA0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 PINFLAGSCD see Section 15.15 Slave FIFO FLAGC and FLAGD Pin Configuration E603 b7 b6 b5 b4 b3 b2 b1 b0 FLAGD3 FLAGD2 FLAGD1 FLAGD0 FLAGC3 FLAGC2 FLAGC1 FLAGC0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 EZ-USB has four FIFO flag output pins, FLAGA, FLAGB, FLAGC and FLAGD. These flags can be programmed to represent various FIFO flags using four select bits for each FIFO. The PINFLAGSAB register controls the FLAGA and FLAGB signals, and the PINFLAGSCD register controls the FLAGC and FLAGD signal. The four bit coding for all four flags is the same, as shown in Table 15-4 on page 223. In the ‘FLAGx’ notation, ‘x’ can be A, B, C or D. Table 15-4. FIFO Flag Pin Functions FLAGx3 FLAGx2 FLAGx1 FLAGx0 Pin Function FLAGA=PF, FLAGB=FF, FLAGC=EF, FLAGD=EP2PF (Actual FIFO is selected by FIFOADR[0,1] pins) 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 EP2 PF 0 1 0 1 EP4 PF 0 1 1 0 EP6 PF 0 1 1 1 EP8 PF 1 0 0 0 EP2 EF 1 0 0 1 EP4 EF 1 0 1 0 EP6 EF 1 0 1 1 EP8 EF 1 1 0 0 EP2 FF 1 1 0 1 EP4 FF 1 1 1 0 EP6 FF 1 1 1 1 EP8 FF Reserved Note FLAGD defaults to EP2PF (fixed flag). (continued on next page) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 223 PINFLAGSxx E602 15.5.3 PINFLAGSxx (continued) For the default (0000) selection, the four FIFO flags are indexed as shown in the first table entry. The input pins FIFOADR1 and FIFOADR0 select to which of the four FIFOs the flags correspond. These pins are decoded as follows: FIFOADR1 Pin FIFOADR0 Pin Selected FIFO 0 0 EP2 0 1 EP4 1 0 EP6 1 1 EP8 For example, if FLAGA[3:0]=0000 and the FIFO address pins are driven to [01], then FLAGA is the EP4-Programmable Flag, FLAGB is the EP4-Full Flag, and FLAGC is the EP4-Empty Flag, and FLAGD defaults as PA7. Set PORTACFG.7 = 1 to use FLAGD which by default is EP2PF(fixed flag). The other (non-zero) values of FLAGx[3:0] allow the designer to independently configure the four flag outputs FLAGA-FLAGD to correspond to any flag—Programmable, Full, or Empty—from any of the four endpoint FIFOS. This allows each flag to be assigned to any of the four FIFOS, including those not currently selected by the FIFOADDR pins. For example, external logic could be filling the EP2IN FIFO with data while also checking the full flag for the EP4OUT FIFO. 224 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FIFORESET E604 15.5.4 FIFORESET FIFO Reset Register FIFORESET see Section 15.15 Restore FIFOs to Default State E604 b7 b6 b5 b4 b3 b2 b1 b0 NAKALL 0 0 0 EP3 EP2 EP1 EP0 W W W W W W W W x x x x x x x x Write 0x80 to this register to NAK all transfers from the host, then write 0x82, 0x84, 0x86, or 0x88 to continue to NAKALL and reset an individual FIFO. This will restore endpoint FIFO flags and byte counts to their default states. Write 0x00 to restore normal operation. Bit Name Description 7 NAKALL NAK all. NAK all transfers from the host. 3:0 EP3:0 Endpoint. By writing the desired endpoint number (2,4,6,8), EZ-USB logic resets the individual endpoint. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 225 BREAKPT E605 15.5.5 BREAKPT Breakpoint Register BREAKPT b7 Breakpoint Control b6 b5 E605 b4 b3 b2 b1 b0 0 0 0 0 BREAK BPPULSE BPEN 0 R R R R R/W R/W R/W R 0 0 0 0 0 0 0 0 Bit Name Description 3 Break Enable Breakpoint. The BREAK bit is set when the CPU address bus matches the address held in the bit breakpoint address registers (0xE606/07). The BKPT pin reflects the state of this bit. Write a ‘1’ to the BREAK bit to clear it. It is not necessary to clear the BREAK bit if the pulse mode bit (BPPULSE) is set. 2 BPPULSE Breakpoint Pulse Mode. Set this bit to ‘1’ to pulse the BREAK bit (and BKPT pin) high for eight CLKOUT cycles when the 8051 address bus matches the address held in the breakpoint address registers. When this bit is set to ‘0’, the BREAK bit (and BKPT pin) remains high until it is cleared by firmware. 1 BPEN Breakpoint Enable. If this bit is ‘1’, a BREAK signal is generated whenever the 16 bit address lines match the value in the Breakpoint Address registers (BPADDRH:L). The behavior of the BREAK bit and associated BKP pin signal is either latched or pulsed, depending on the state of the BPPULSE bit. 226 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F BPADDRx E606 15.5.6 BPADDRx Breakpoint Address High, Breakpoint Address Low Registers BPADDRH b7 Breakpoint Address High b6 b5 b4 b3 E606 b2 b1 b0 A15 A14 A13 A12 A11 A10 A9 A8 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b6 b5 b2 b1 b0 BPADDRL b7 Breakpoint Address Low b4 b3 E607 A7 A6 A5 A4 A3 A2 A1 A0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 15:0 A[15:0] High and Low Breakpoint Address. When the current 16 bit address (code or XDATA) matches the BPADDRH/BPADDRL address, a breakpoint event occurs. The BPPULSE and BPEN bits in the BREAKPT register control the action taken on a breakpoint event. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 227 UART230 E607 15.5.7 UART230 230K Baud Clock (T0, T1, T2) Register UART230 230K Baud Clock for T1 b7 b6 b5 b4 b3 E608 b2 b1 b0 0 0 0 0 0 0 230UART1 230UART0 R R R R R R R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 1:0 230UART[1:0] Set 230K Baud Operation. Setting these bits to ‘1’ overrides the timer inputs to the USARTs, and USART0 and USART1 use the 230K baud clock rate. This mode provides the correct frequency to the USART regardless of the CPU clock frequency (12, 24, or 48 MHz). 228 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FIFOINPOLAR E609 15.5.8 FIFOINPOLAR Slave FIFO Interface Pins Polarity Register FIFOPINPOLAR see Section 15.15 Slave FIFO Interface Pins Polarity E609 b7 b6 b5 b4 b3 b2 b1 b0 0 0 PKTEND SLOE SLRD SLWR EF FF R R R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 5 PKTEND FIFO Packet End Polarity. This bit selects the polarity of the PKTEND FIFO input pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high 4 SLOE FIFO Output Enable Polarity. This bit selects the polarity of the SLOE FIFO input pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high 3 SLRD FIFO Read Polarity. This bit selects the polarity of the SLRD FIFO input pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high 2 SLWR FIFO Write Polarity. This bit selects the polarity of the SLWR FIFO input pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high 1 EF Empty Flag Polarity. This bit selects the polarity of the Empty Flag output pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high 0 FF Full Flag Polarity. This bit selects the polarity of the Full Flag output pin. 0 Selects the polarity shown in the data sheet (active low) 1 Selects active high. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 229 REVID E60A 15.5.9 REVID Chip Revision ID Register REVID Chip Revision ID b6 b5 b4 b3 b2 b1 b0 RV7 RV6 RV5 RV4 RV3 RV2 RV1 RV0 R R R R R R R R 0 0 0 0 0 0 0 1 Bit Name Description 7:0 RV[7:0] Chip Revision Number. These register bits define the silicon revision. 230 E60A b7 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F REVCTL E60B 15.5.10 REVCTL Chip Revision Control Register REVCTL See Section 15.15 Chip Revision Control E60B b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 DYN_OUT ENH_PKT R R R R R R R/W R/W 0 0 0 0 0 0 0 0 Note DYN_OUT and ENH_PKT default to ‘0’ on a hard reset. Cypress highly recommends setting both bits to ‘1’. Bit Name Description 1 DYN_OUT Disable Auto-Arming at the 0-1 transition of AUTOOUT. 0 The core automatically arms the endpoints when AUTOOUT is switched from ‘0’ to ‘1’. This means that firmware must reset the endpoint (and risk losing endpoint data) when switching between Auto-Out mode and Manual-Out mode. 1 The core disables auto-arming of the endpoints when AUTOOUT transitions from ‘0’ to ‘1’. This feature allows CPU intervention when switching between AUTO and Manual mode without having to reset the endpoint. Note When DYN_OUT = 1 and AUTOOUT = 1, the CPU is responsible for ‘priming the pump’ by initially arming the endpoints (OUTPKTEND w/SKIP = 1 to pass packets to host). 0 ENH_PKT Enhanced Packet Handling. 0 The CPU can neither source OUT packets nor skip IN packets; it has only the following capabilities. OUT packets: Skip or Commit IN packets: Commit or Edit/Source 1 The CPU has additional capabilities: OUT packets: Skip, Commit, or Edit/Source IN packets: Skip, Commit, or Edit/Source EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 231 GPIFHOLDAMOUNT E60C 15.5.11 GPIFHOLDAMOUNT GPIF Hold Time Register GPIFHOLDAMOUNT b7 E60C b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 R R R R R R RW HOLDTIME[1:0] RW 0 0 0 0 0 0 0 0 For any transaction where the GPIF writes data onto FD[15:0], this register determines how long the data is held. Valid choices are ‘0’, ‘½’, or ‘1’ IFCLK cycle. This register applies to any data written by the GPIF to FD[15:0], whether through a flow state or not. For non-flow states, the hold amount is really just a delay of the normal (non-held) presentation of FD[15:0] by the amount specified in HOLDTIME[1:0]. For flow states in which the GPIF is the master on the bus (FLOWSTB.SLAVE = 0), the hold amount is with respect to the activating edge (see FLOW_MASTERSTB_EDGE) of Master strobe (which is a CTL pin in this case). For flow states in which the GPIF is the slave on the bus (FLOWSTB.SLAVE = 1), the hold amount is really just a delay of the normal (non-held) presentation of FD[15:0] by the amount specified in HOLDTIME[1:0] in reaction to the activating edge of master strobe (which is a RDY pin in this case). Note the hold amount is NOT directly with respect to the activating edge of master Strobe in this case. It is with respect to when the data normally comes out in response to master strobe including any latency to synchronize master strobe. In all cases, the data is held for the desired amount even if the ensuing GPIF state calls for the data bus to be tri-stated. In other words the FD[15:0] output enable is held by the same amount as the data itself. Bit Name Description 1:0 HOLDTIME[1:0] GPIF Hold Time. 00 0 IFCLK cycles 01 ½ IFCLK cycle 10 1 IFCLK cycle 11 Reserved 232 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP1OUTCFG E610 15.6 Endpoint Configuration 15.6.1 EP1OUTCFG Endpoint 1-OUT Configuration Register EP1OUTCFG b7 Endpoint 1-OUT Configuration b3 E610 b6 b5 b4 b2 b1 b0 VALID 0 TYPE1 TYPE0 0 0 0 0 R/W R R/W R/W R R R R 1 0 1 0 0 0 0 0 Bit Name Description 7 VALID Activate an Endpoint. Set VALID=1 to activate an endpoint, and VALID=0 to de-activate it. All EZUSB endpoints default to VALID. An endpoint whose VALID bit is ‘0’ does not respond to any USB traffic. 5:4 TYPE[1:0] Defines the Endpoint Type. 00 01 10 11 Invalid Invalid Bulk (default) Interrupt EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 233 EP1INCFG E611 15.6.2 EP1INCFG Endpoint 1-IN Configuration Register EP1INCFG b7 Endpoint 1-IN Configuration b3 E611 b6 b5 b4 b2 b1 b0 VALID 0 TYPE1 TYPE0 0 0 0 0 R/W R R/W R/W R R R R 1 0 1 0 0 0 0 0 Bit Name Description 7 VALID Activate an Endpoint. Set VALID=1 to activate an endpoint, and VALID=0 to de-activate it. All EZUSB endpoints default to VALID. An endpoint whose VALID bit is ‘0’ does not respond to any USB traffic. 5:4 TYPE[1:0] Defines the Endpoint Type. 00 01 10 11 234 Invalid Invalid Bulk (default) Interrupt EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxCFG E612 15.6.3 EPxCFG Endpoint 2, 4, 6 and 8 Configuration Registers EP2CFG Endpoint 2 Configuration b7 E612 b6 b5 b4 b3 VALID DIR TYPE1 TYPE0 R/W R/W R/W R/W 1 0 1 0 b6 b5 b4 VALID DIR TYPE1 TYPE0 0 0 0 0 R/W R/W R/W R/W R R R R 1 0 1 0 0 0 0 0 b6 b5 b4 b3 b2 b1 b0 VALID DIR TYPE1 TYPE0 SIZE 0 BUF1 BUF0 R/W R/W R/W R/W R/W R R/W R/W 1 1 1 0 0 0 1 0 b6 b5 b4 b2 b1 b0 VALID DIR TYPE1 TYPE0 0 0 0 0 R/W R/W R/W R/W R R R R 1 1 1 0 0 0 0 0 EP4CFG b2 b1 b0 SIZE 0 BUF1 BUF0 R/W R R/W R/W 0 0 1 0 b2 b1 b0 Endpoint 4 Configuration b7 EP6CFG b3 E613 Endpoint 6 Configuration b7 EP8CFG E614 Endpoint 8 Configuration b7 b3 E615 These registers configure the large, data handling EZ-USB endpoints. Bit Name Description 7 VALID Activate an Endpoint. 0 Deactivate an endpoint. An endpoint whose VALID bit is 0 does not respond to any USB traffic. 1 Activate an endpoint (default) 6 DIR Sets Endpoint Direction. 0 OUT 1 IN 5:4 TYPE[1:0] Defines the Endpoint Type. The TYPE bits apply to all of the large-endpoint configuration registers. 00 Invalid 01 Isochronous 10 Bulk (default) 11 Interrupt 3 SIZE Sets Size of Endpoint Buffer. Endpoints 4 and 8 can only be 512 bytes. Endpoints 2 and 6 are selectable. 0 512 bytes 1 1024 bytes (continued on next page) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 235 EPxCFG E612 15.6.3 1:0 EPxCFG (continued) BUF[1:0] Buffering Type/Amount. 00 Quad 01 Invalid 10 Double 11 Triple Note The Valid bit is ignored when buffer space is allocated by the EZ-USB (for example, BUF[1:0] takes precedence over the Valid bit). When you are not using all of the endpoints in the endpoint configuration, disable the unused endpoints by writing a zero into the “valid” bit of the corresponding EPxCFG register without disturbing the default state of the other bits in the register. For example, if the endpoint configuration 11 (see 1.17 EZ-USB Endpoint Buffers on page 30), which uses only endpoints 2 and 8, must be used, configure the endpoints as follows. EP2CFG = 0xDB; SYNCDELAY; EP8CFG = 0x92; SYNCDELAY; EP4CFG &= 0x7F; SYNCDELAY; EP6CFG &=0x7F; SYNCDELAY; 236 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOCFG E618 15.6.4 EPxFIFOCFG Endpoint 2, 4, 6 and 8/Slave FIFO Configuration Registers EP2FIFOCFG see Section 15.15 Endpoint 2/Slave FIFO Configuration E618 EP4FIFOCFG see Section 15.15 Endpoint 4/Slave FIFO Configuration E619 EP6FIFOCFG see Section 15.15 Endpoint 6/Slave FIFO Configuration E61A EP8FIFOCFG see Section 15.15 Endpoint 8/Slave FIFO Configuration E61B b7 b6 b5 b4 b3 b2 b1 b0 0 INFM1 OEP1 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE R R/W R/W R/W R/W R/W R R/W 0 0 0 0 0 1 0 1 Bit Name Description 6 INFM1 IN Full Minus One. When a FIFO configuration register’s ‘INEARLY’ or INFM bit is set to ‘1’, the FIFO flags for that endpoint become valid one sample earlier than when the FULL condition occurs. These bits take effect only when the FIFOs are operating synchronously—according to an internally or externally supplied clock. Having the FIFO flag indications a clock early simplifies some synchronous interfaces (applies only to IN endpoints). 5 OEP1 OUT Empty Plus One. When a FIFO configuration register’s ‘OUTEARLY’ or OEP1 bit is set to ‘1’, the FIFO flags for that end point become valid one sample earlier than when the EMPTY condition occurs. These bits take effect only when the FIFOS are operating synchronously—according to an internally or externally supplied clock. Having the FIFO flag indications a clock early simplifies some synchronous interfaces (applies only to OUT endpoints). 4 AUTOOUT Instantaneous Connection to Endpoint FIFO. This bit applies only to OUT endpoints. 0 As soon as a buffer fills with USB data, an endpoint interrupt is asserted. The connection of the buffer to the endpoint FIFO is under control of the firmware, rather than automatically being connected. Using this method, the firmware can inspect the data in OUT packets, and based on what it finds, choose to include that packet in the endpoint FIFO or not. The firmware can even modify the packet data, and then commit it to the endpoint FIFO. Refer to Enhanced Packet Handling in section Chip Revision Control Register on page 231. 1 As soon as a buffer fills with USB data, the buffer is automatically and instantaneously committed to the endpoint FIFO bypassing the CPU. The endpoint FIFO flags and buffer counts immediately indicate the change in FIFO status. Refer to the description of the DYN_OUT bit in section Chip Revision Control Register on page 231. The SKIP bit (in the EPxBCL registers) chooses between skipping and committing packet data. Refer to OUTPKTEND in section Force OUT Packet End Register on page 255. (continued on next page) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 237 EPxFIFOCFG E618 15.6.4 3 2 EPxFIFOCFG (continued) AUTOIN ZEROLENIN Auto Commit to SIE. This bit applies only to IN endpoints. EZ-USB has EPxAUTOINLEN registers that allow the firmware to configure endpoints to sizes smaller than the physical memory sizes used to implement the endpoint buffers (512 or 1024 bytes). For example, suppose the firmware configures the EP2 buffer to be 1024 bytes (this must match the wMaxPacketSize value in the endpoint descriptor), and then sets up EP2 as a 760 byte endpoint by setting EP2AUTOINLEN=760. This makes EP2 appear to be a 760 byte endpoint to the USB host, even though EP2's physical buffer is 1024 bytes. 0 Each packet has to initially be manually committed to SIE, (prime the pump). See section Chip Revision Control Register on page 231. 1 EZ-USB automatically packetizes and dispatches IN packets according to the packet length value it finds in the EPxAUTOINLEN registers. In this example, the GPIF (or an external master, if the EZ-USB is in Slave FIFO mode) could load the EP2 buffer with 950 bytes, which the EZ-USB logic would then automatically send as two packets, of 760 and 190 bytes. Refer to Enhanced Packet Handling in section Chip Revision Control Register on page 231. Enable Zero length IN Packets. 0 1 0 WORDWIDE Zero length packets are sent on PKTEND. A zero length packet is sent when PKTEND is activated and there are no bytes in the current packet. Select Byte/Word FIFOs on PORTB/D Pins. This bit selects byte or word FIFOS on the PORTB and PORTD pins. The WORD bit applies ‘for IFCFG =11 or 10’. The OR of all four WORDWIDE bits is what causes PORTD to be PORTD or FD[15:8]. The individual WORDWIDE bits indicate how data is to be passed for each individual endpoint. 238 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP2AUTOINLENH E620 15.6.5 EP2AUTOINLENH Endpoint 2 AUTOIN Packet Length High Register EP2AUTOINLENH see Section 15.15 Endpoint 2 AUTOIN Packet Length High E620 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 PL10 PL9 PL8 R R R R R R/W R/W R/W 0 0 0 0 0 0 1 0 Bit Name Description 2:0 PL10:8 Packet Length High. High three bits of Packet Length. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 239 EP6AUTOINLENH E624 15.6.6 EP6AUTOINLENH Endpoint 6 AUTOIN Packet Length High Register EP6AUTOINLENH see Section 15.15 Endpoint 6 AUTOIN Packet Length High b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 PL10 PL9 PL8 R R R R R R/W R/W R/W 0 0 0 0 0 0 1 0 Bit Name Description 2:0 PL[10:8] Packet Length High. High three bits of Packet Length. 240 E624 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP4AUTOINLENH E622 15.6.7 EP4AUTOINLENH Endpoint 4 AUTOIN Packet Length High Register EP4AUTOINLENH see Section 15.15 Endpoint 4 AUTOIN Packet Length High E622 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 PL9 PL8 R R R R R R R/W R/W 0 0 0 0 0 0 1 0 Bit Name Description 1:0 PL[9:8] Packet Length High. High two bits of Packet Length. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 241 EP8AUTOINLENH E626 15.6.8 EP8AUTOINLENH Endpoint 8 AUTOIN Packet Length High Register EP8AUTOINLENH see Section 15.15 Endpoint 8 AUTOIN Packet Length High b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 PL9 PL8 R R R R R R R/W R/W 0 0 0 0 0 0 1 0 Bit Name Description 1:0 PL[9:8] Packet Length High. High two bits of Packet Length. 242 E626 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxAUTOINLENL E621 15.6.9 EPxAUTOINLENL Endpoint 2, 4, 6, 8 AUTOIN Packet Length Low Registers EP2AUTOINLENL see Section 15.15 Endpoint 2 AUTOIN Packet Length Low E621 EP4AUTOINLENL see Section 15.15 Endpoint 4 AUTOIN Packet Length Low E623 EP6AUTOINLENL see Section 15.15 Endpoint 6 AUTOIN Packet Length Low E625 EP8AUTOINLENL see Section 15.15 Endpoint 8 AUTOIN Packet Length Low E627 b7 b6 b5 b4 b3 b2 b1 b0 PL7 PL6 PL5 PL4 PL3 PL2 PL1 PL0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7:0 PL[7:0] Packet Length Low. Low eight bits of packet length. These registers can be used to set smaller packet sizes than the physical buffer size (refer to the previously described EPxCFG registers). The default packet size is 512 bytes for all endpoints. Note that EP2 and EP6 can have maximum sizes of 1024 bytes, and EP4 and EP8 can have maximum sizes of 512 bytes, to be consistent with the endpoint structure. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 243 EPxFIFOPFH E630 15.6.10 EPxFIFOPFH Endpoint 2, 6/Slave FIFO Programmable Level Flag High Registers EP2FIFOPFH see Section 15.15 b7 Endpoint 2/Slave FIFO Programmable-Level Flag High [High-Speed (480 Mbps) Mode and Full-Speed (12 Mbps) Iso Mode] b6 b5 b4 b3 IN: PKTS[2] IN: PKTS[1] IN: PKTS[0] OUT:PFC12 OUT:PFC11 OUT:PFC10 b2 b1 b0 Buffer Size PFC9 PFC8 1024 PFC8 512 DECIS PKTSTAT PFC11 PFC10 PFC9 R/W R/W R/W R/W R/W R R/W R/W 1 0 0 0 1 0 0 0 EP2FIFOPFH see Section 15.15 b7 0 E630 Endpoint 2/Slave FIFO Programmable-Level Flag High [Full-Speed (12 Mbps) Non-Iso Mode] b6 b5 b4 b3 b2 E630 b1 b0 IN: PKTS[2] DECIS PKTSTAT OUT:PFC12 OUT:PFC11 OUT:PFC10 0 PFC9 R/W R/W R/W R/W R/W R R/W R/W 1 0 0 0 1 0 0 0 EP6FIFOPFH see Section 15.15 b7 OUT:PFC8 Endpoint 6/Slave FIFO Programmable-Level Flag High [High-Speed (480 Mbps) Mode and Full-Speed (12 Mbps) Iso Mode] b6 b5 b4 b3 IN: PKTS[2] IN: PKTS[1] IN: PKTS[0] OUT:PFC12 OUT:PFC11 OUT:PFC10 b2 b1 b0 Buffer Size PFC9 PFC8 1024 PFC8 512 PKTSTAT PFC11 PFC10 PFC9 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 1 0 0 0 b7 Endpoint 6/Slave FIFO Programmable-Level Flag High [Full-Speed (12 Mbps) Non-Iso Mode] b6 b5 b4 b3 b2 64 E634 DECIS EP6FIFOPFH see Section 15.15 0 Buffer Size E634 b1 b0 IN: PKTS[2] DECIS PKTSTAT OUT:PFC12 OUT:PFC11 OUT:PFC10 0 PFC9 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 1 0 0 0 OUT:PFC8 Buffer Size 64 Note Buffer size is in bytes: 64 = Full speed Bulk/Int; 1023 = Full speed ISO, 1024 = High speed ISO/Int; 512 = All others. These registers control the point at which the programmable flag (PF) is asserted for each of the four endpoint FIFOs. The EPxFIFOPFH:L fields are interpreted differently for OUT and IN endpoints. The polarity of the programmable flag pin depends on the DECIS bit. If DECIS=0, then PF goes high when the byte count is equal to, or less than what is defined in the PF registers. If DECIS=1, (default) then PF goes high when the byte count is equal to, or greater than what is set in the PF register. For OUT endpoints, the byte count is the total number of bytes in the FIFO that are available to the external master. For IN endpoints, the byte count is determined by PKTSTAT bit as explained below. (continued on next page) 244 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOPFH E634 15.6.10 EPxFIFOPFH (continued) Each FIFO’s programmable-level flag asserts when the FIFO reaches a user-defined fullness threshold. That threshold is configured as follows: 1. For OUT packets: The threshold is stored in PFC12:0. The PF is asserted when the number of bytes in the entire FIFO is less than/equal to (DECIS = 0) or greater than/equal to (DECIS = 1) the threshold. 2. For IN packets, with PKTSTAT = 1: The threshold is stored in PFC9:0. The PF is asserted when the number of bytes written into the current, not-yet-committed packet in the FIFO is less than/equal to (DECIS = 0) or greater than/equal to (DECIS = 1) the threshold. 3. For IN packets, with PKTSTAT = 0: The threshold is stored in two parts: PKTS2:0 holds the number of committed packets, and PFC9:0 holds the number of bytes in the current, not-yet-committed packet. The PF is asserted when the FIFO is at or less full than (DECIS = 0), or at or more full than (DECIS=1), the threshold. By default, FLAGA is the programmable-level flag for the endpoint currently pointed to by the FIFOADR[1:0] pins. For EP2 and EP4, the default endpoint configuration is BULK, OUT, 512, 2x, and the PF pin asserts when the entire FIFO has greater than/equal to 512 bytes. For EP6 and EP8, the default endpoint configuration is BULK, IN, 512, 2x, and the PF pin asserts when the entire FIFO has less than/equal to 512 bytes. In other words, the default-configuration PFs for EP2 and EP4 assert when the FIFOs are half-full, and the default configuration PFs for EP6 and EP8 assert when those FIFOs are half-empty. In the first example below, bits 5-3 have data that is required to complete the transfer. In the second example, bits 5-3 do not matter - those bits are don’t cares because PKTSTAT = 1: Example 1: Assume a Bulk IN transfer over Endpoint 2 and PKTSTAT = 0: ■ ■ EP2FIFOPFH = 0001 0000 ❐ b6 = 0 (or PKTSTAT = 0): this indicates that the transfer includes packets (as defined by bits 5, 4, and 3) plus bytes (the sum in the flag low register) ❐ b5b4b3 = 010 binary (or 2 decimal): this indicates the number of packets to expect during the transfer (in this case, two packets…) EP2FIFOPFL = 0011 0010 ❐ …plus 50 bytes in the currently filling packet (the sum of the binary bits in the EP2FIFOPFL register is 2 +16 + 32 = 50 decimal) DECIS = 0, thus PF activates when the FIFO is at or less full than 2 PKTS + 50 bytes. Example 2: To perform an IN transfer of a number over the same endpoint, set PKTSTAT = 1 and write a value into the EP2FIFOPFL register: ■ EP2FIFOPFH = 0100 0000 ■ EP2FIFOPFL = 0100 1011 (75 bytes) Setting PKTSTAT = 1 causes the PF decision to be based on the byte count alone, ignoring the packet count. This mode is valuable for double-buffered endpoints, where only the byte count of the currently-filling packet is important. DECIS = 0, thus PF is asserted when the currently filling packet is at or less than 75 bytes. Bit Name Description 1:0 PFC[9:8] PF Threshold. Bits 1:0 of EP2FIFOPFH are bits 9:8 of the byte count register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 245 EPxFIFOPFH E632 Endpoint 4, 8 Slave FIFO Programmable Level Flag High Registers EP4FIFOPFH see Section 15.15 Endpoint 4/Slave FIFO Programmable-Level Flag HIGH [High-Speed (480 Mbps) Mode and Full-Speed (12 Mbps) Iso Mode] E632 b7 b6 b5 b4 b3 b2 b1 b0 DECIS PKTSTAT 0 IN: PKTS[1] IN: PKTS[0] 0 0 PFC8 OUT:PFC10 OUT:PFC9 R/W R/W R R/W R/W R R R/W 1 0 0 0 1 0 0 0 EP4FIFOPFH see Section 15.15 Endpoint 4/Slave FIFO Programmable-Level Flag HIGH [Full-Speed (12 Mbps) Non-Iso Mode] E632 b7 b6 b5 b4 b3 b2 b1 b0 DECIS PKTSTAT 0 OUT:PFC10 OUT:PFC9 0 0 PFC8 R/W R/W R R/W R/W R R R/W 1 0 0 0 1 0 0 0 EP8FIFOPFH see Section 15.15 Endpoint 8/Slave FIFO Programmable-Level Flag HIGH [High-Speed (480 Mbps) Mode and Full-Speed (12 Mbps) Iso Mode] E636 b7 b6 b5 b4 b3 b2 b1 b0 DECIS PKTSTAT 0 IN: PKTS[1] IN: PKTS[0] 0 0 PFC8 OUT:PFC10 OUT:PFC9 R/W R/W R R/W R/W R R R/W 0 0 0 0 1 0 0 0 . EP8FIFOPFH see Section 15.15 Endpoint 8/Slave FIFO Programmable-Level Flag HIGH [Full-Speed (12 Mbps) Non-Iso Mode] E636 b7 b6 b5 b4 b3 b2 b1 b0 DECIS PKTSTAT 0 OUT:PFC10 OUT:PFC9 0 0 PFC8 R/W R/W R R/W R/W R R R/W 0 0 0 0 1 0 0 0 Refer to the discussion for EP2FIFOPFH. Bit Name Description 7 DECIS PF Polarity. See EP2FIFOPFH and EP6FIFOPFH register definition. 6 PKSTAT Packet Status. See EP2FIFOPFH and EP6FIFOPFH register definition. Bit 4-3 PKTS1:0 / PFC10:9 PF Threshold. See EP2FIFOPFH and EP6FIFOPFH register definition. Bit 0 PFC8 PF Threshold. See EP2FIFOPFH and EP6FIFOPFH register definition. 246 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOPFL E631 15.6.11 EPxFIFOPFL Endpoint 2, 4, 6, 8/Slave FIFO Programmable Level Flag Low Registers EP2FIFOPFL see Section 15.15 Endpoint 2/Slave FIFO Prog. Flag Low E631 EP4FIFOPFL see Section 15.15 Endpoint 4/Slave FIFO Prog. Flag Low E633 EP6FIFOPFL see Section 15.15 Endpoint 6/Slave FIFO Prog. Flag Low E635 EP8FIFOPFL see Section 15.15 Endpoint 8/Slave FIFO Prog. Flag Low [High-Speed (480 Mbps) Mode and Full-Speed (12 Mbps) Iso Mode] E637 b7 b6 b5 b4 b3 b2 b1 b0 PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 EP2FIFOPFL see Section 15.15 Endpoint 2/Slave FIFO Prog. Flag Low E631 EP4FIFOPFL see Section 15.15 Endpoint 4/Slave FIFO Prog. Flag Low E633 EP6FIFOPFL see Section 15.15 Endpoint 6/Slave FIFO Prog. Flag Low E635 EP8FIFOPFL see Section 15.15 Endpoint 8/Slave FIFO Prog. Flag Low [Full-Speed (12 Mbps) Non-Iso Mode] E637 b7 b6 b5 b4 b3 b2 b1 b0 IN: PKTS[1] IN: PKTS[0] PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 OUT:PFC7 OUT:PFC6 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7:0 PFC[7:0] PF Threshold. This register contains the current packet bytes to be transferred when the EPxFIFOPFH register requires data. Note Bits 9:8 of the byte count are in bits 1:0 of EP2FIFOPFH/EP6FIFOPFH. Note Bit 8 of the byte count is bit 0 of EP4FIFOPFH/EP8FIFOPFH. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 247 EPxFIFOPFL E631 15.6.11.1 IN Endpoints For IN endpoints, the Trigger registers can apply to either the full FIFO, comprising multiple packets, or only to the current packet being filled. The PKTSTAT bit controls this choice. Table 15-5. Interpretation of PF for IN Endpoints PKTSTAT PF applies to: EPxFIFOPFH:L format 0 PKTS + Current packet bytes PKTS[ ] PBC[ ] 1 Current packet bytes only PBC[ ] Example 1: The following is an example of how you might use the first case. Assume a Bulk IN transfer over Endpoint 2. For Bulk transfers, the EZ-USB packet buffer size is 512 bytes for high-speed mode. Assume you have set up an EP2AUTOINLENH:L value of 100 bytes per packet, and you have configured the endpoint for triple-buffering. This means that whenever 100 bytes are loaded into a packet buffer, the EZ-USB logic commits that packet buffer to the USB interface, essentially adding 100 bytes to the ‘USB-side’ FIFO. You want to notify the external logic that is filling the endpoint FIFO under two conditions: ■ Two of the three packet buffers are full (committed to sending over USB, but not yet sent). ■ The current packet buffer is half-full. In other words, all available IN endpoint buffer space is almost full. You accomplish this by setting: ■ ■ EP2FIFOPFH = 0001 0000 ❐ b6: PKTSTAT = 0 to include packets plus bytes ❐ b5b4b3 = 2: two packets… EP2FIFOPFL = 0011 0010 ❐ …plus 50 bytes in the currently filling packet Example 2: If you want the PF to inform the outside interface (the logic that is filling the IN FIFO) whenever the current packet is 75% full, set PKTSTAT=1, and load a packet byte count of 75: ■ EP2FIFOPFH = 1100 0000 ■ EP2FIFOPFHL = 0100 1011 (75 bytes) Setting PKTSTAT=1 causes the PF decision to be based on the byte count alone, ignoring the packet count. This mode is valuable for double buffered endpoints, where only the byte count of the currently-filling packet is important. DECIS=1, thus PF is asserted when the currently filling packet is at or greater than 75 bytes. 248 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOPFL E631 15.6.11.2 OUT Endpoints For OUT endpoints, the PF flag applies to the total number of bytes in the multi-packet FIFO, with no packet count field. Instead of representing byte counts in two segments, a packet count and a byte count for the currently emptying packet, the byte Trigger values indicate total bytes available in the FIFO. Note the discontinuity between PFC10 and PFC9. Notice that the packet byte counts differ in the upper PFC bits because the endpoints support different FIFO sizes: The EP2 FIFO can be a maximum of 4096 bytes long, the EP6 FIFO can be a maximum of 2048 bytes long, and the EP4 and EP8 FIFOS can be a maximum of 1024 bytes long. The diagram below shows examples of the maximum FIFO sizes. Figure 15-2. Maximum FIFO Sizes 512 512 512 1024 EP2 512 EP2 512 EP2 512 1024 1024 1024 EP2 512 512 EP4 EP2 1024 512 1024 512 512 512 EP2 512 EP6 512 EP6 512 1024 1024 512 512 EP6 512 EP6 512 EP8 512 1024 512 1024 512 512 EP8 512 1024 EP8 512 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 512 249 EP2ISOINPKTS E640 15.6.12 EP2ISOINPKTS Endpoint 2 ISO IN Packets per Frame Register EP2ISOINPKTS b7 Endpoint 2 (if ISO) IN Packets Per Frame b6 b5 b4 b3 E640 b2 b1 b0 AADJ 0 0 0 0 0 INPPF1 INPPF0 R/W R R R R R R/W R/W 0 0 0 0 0 0 0 1 The FX2LP has the capability of sending zero length isochronous data packet (ZLP) when the host issues an IN token to an isochronous IN endpoint FIFO and the SIE does not have any data packets available. A zero length IN packet is automatically sent in the micro-frame if the IN FIFO has no committed packets. This feature is very useful when designing high bandwidth isochronous applications. When an isochronous IN endpoint is configured for greater than one packet per micro-frame, there is a possibility of the core not having more than one packet available in a micro-frame. In this case, when the host issues an IN token, the FX2LP core automatically sends a zero length packet in response to each of the IN tokens received from the host. Hence avoiding the occurrence of a scenario where the host may encounter a turnaround timeout error on not receiving any data when requesting more than one packet per microframe. In full-speed mode, the EZ-USB only sends one packet per frame, regardless of the EPxISOINPKTS register setting. If the IN endpoint does not have any data packets available, the core automatically sends a zero length packet. Bit Name Description 7 AADJ Auto Adjust. If AADJ is set to ‘1’, the FX2LP automatically manages the data PID sequencing for high-speed, highbandwidth isochronous IN endpoints that require additional transactions per micro-frame. Upon receiving the first IN token in the micro-frame, the FX2LP logic evaluates the fullness of committed packets in the IN FIFO. If the logic detects a committed short packet that contains less than 1024 bytes, no further packets beyond the short packet are sent in the micro-frame. If the IN FIFO has no committed packets, then a single zero length packet is sent in the micro-frame. If the IN FIFO is full of 1024 byte packets, then the number of packets sent in the micro-frame is limited by the INPPF[1:0] setting. In both high-speed and full-speed modes, the EZ-USB sends a zero length IN packet if the IN FIFO has no committed packets. If AADJ is set to ‘0’, for IN transactions within the micro-frame, the FX2LP always starts with a data PID corresponding to the number of packets per micro-frame specified in INPPF[1:0]. For example, if INPPF[1:0]=10 (two packets per micro-frame), the FX2LP returns a data PID of DATA1 for the first IN transaction in the micro-frame, even if the data packet is short, or no data is available to be sent for the next IN transaction in the micro-frame. In full-speed mode, the EZ-USB only sends one packet per frame, regardless of the EPxISOINPKTS register setting. 1:0 250 INPPF[1:0] IN Packets per Frame. If EP2 is an ISOCHRONOUS IN endpoint, these bits determine the number of packets to be sent per micro-frame (high-speed mode). Allowed values are 1, 2, or 3. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP4ISOINPKTS E641 15.6.13 EP4ISOINPKTS Endpoint 4 ISO IN Packets per Frame Register EP4ISOINPKTS b7 Endpoint 4 (if ISO) IN Packets Per Frame b6 b5 b4 b3 E641 b2 b1 b0 AADJ 0 0 0 0 0 INPPF1 INPPF0 R/W R R R R R R R 0 0 0 0 0 0 0 1 EP4 is not high-bandwidth ISO capable and is only allowed to send up to one packet per micro-frame in high-speed mode, and one packet per frame in full speed mode. In both high-speed and full-speed modes, EZ-USB sends a zero length IN packet if the IN FIFO has no committed packets. Bit Name Description 7 AADJ Auto Adjust. If AADJ is set to ‘1’ and the IN FIFO has no committed packets, then a single zero length packet is sent in the micro-frame. 1:0 INPPF[1:0] IN Packets per Frame. If EP4 is an ISOCHRONOUS IN endpoint, these bits determine the number of packets to be sent per micro-frame (high-speed mode). INPPF1:0 is hardcoded to ‘01’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 251 EP6ISOINPKTS E642 15.6.14 EP6ISOINPKTS Endpoint 6 ISO IN Packets per Frame Register EP6ISOINPKTS b7 Endpoint 6 (if ISO) IN Packets Per Frame b6 b5 b4 b3 E642 b2 b1 b0 AADJ 0 0 0 0 0 INPPF1 INPPF0 R/W R R R R R R/W R/W 0 0 0 0 0 0 0 1 The FX2LP has the capability of sending zero length isochronous data packet (ZLP) when the host issues an IN token to an isochronous IN endpoint FIFO and the SIE does not have any data packets available. A zero length IN packet is automatically sent in the micro-frame if the IN FIFO has no committed packets. This feature is very useful when designing high bandwidth isochronous applications. When an isochronous IN endpoint is configured for greater than one packet per micro-frame, there is a possibility of the core not having more than one packet available in a micro-frame. In this case, when the host issues an IN token, the FX2LP core automatically sends a zero length packet in response to each of the IN tokens received from the host. Hence avoiding the occurrence of a scenario where the host may encounter a turnaround time-out error on not receiving any data when requesting more than one packet per microframe. In full-speed mode, the EZ-USB only sends one packet per frame, regardless of the EPxISOINPKTS register setting. If the IN endpoint does not have any data packets available, the core automatically sends a zero length packet. Bit Name Description 7 AADJ Auto Adjust. If AADJ is set to ‘1’, the FX2LP automatically manages the data PID sequencing for high-speed, highbandwidth isochronous IN endpoints that require additional transactions per micro-frame. Upon receiving the first IN token in the micro-frame, the FX2LP logic evaluates the fullness of committed packets in the IN FIFO. If the logic detects a committed short packet that contains less than 1024 bytes, no further packets beyond the short packet are sent in the micro-frame. If the IN FIFO has no committed packets, then a single zero length packet is sent in the microframe. If the IN FIFO is full of 1024-byte packets, then the number of packets sent in the micro-frame is limited by the INPPF[1:0] setting. In both high-speed and full-speed modes, the EZ-USB sends a zero length IN packet if the IN FIFO has no committed packets. If AADJ is set to ‘0’, for IN transactions within the micro-frame, the FX2LP always starts with a data PID corresponding to the number of packets per micro-frame specified in INPPF1:0. For example, if INPPF[1:0]=10 (two packets per micro-frame), the FX2LP returns a data PID of DATA1 for the first IN transaction in the micro-frame, even if the data packet is short, or no data is available to be sent for the next IN transaction in the micro-frame. In full-speed mode, the EZ-USB only sends one packet per frame, regardless of the EPxISOINPKTS register setting. 1:0 INPPF[1:0] IN Packets per Frame If EP6 is an ISOCHRONOUS IN endpoint, these bits determine the number of packets to be sent per micro-frame (high-speed mode). Allowed values are ‘1’ or ‘2’. 252 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP8ISOINPKTS E643 15.6.15 EP8ISOINPKTS Endpoint 8 ISO IN Packets per Frame Register EP8ISOINPKTS b7 Endpoint 8 (if ISO) IN Packets Per Frame b6 b5 b4 b3 E643 b2 b1 b0 AADJ 0 0 0 0 0 INPPF1 INPPF0 R/W R R R R R R R 0 0 0 0 0 0 0 1 EP8 is not high bandwidth ISO capable and is only allowed to send up to one packet per micro-frame in high-speed mode, and one packet per frame in full speed mode. In both high-speed and full-speed modes, EZ-USB sends a zero length IN packet if the IN FIFO has no committed packets. Bit Name Description 7 AADJ Auto Adjust. If AADJ is set to ‘1’ and the IN FIFO has no committed packets, then a single zero length packet is sent in the micro-frame. 1:0 INPPF[1:0] IN Packets per Frame. If EP8 is an ISOCHRONOUS IN endpoint, these bits determine the number of packets to be sent per micro-frame (high-speed mode). INPPF[1:0] is hardcoded to ‘01’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 253 INPKTEND E648 15.6.16 INPKTEND Force IN Packet End Register INPKTEND see Section 15.15 Force IN Packet End E648 b7 b6 b5 b4 b3 b2 b1 b0 SKIP 0 0 0 EP3 EP2 EP1 EP0 W W W W W W W W x x x x x x x x . Bit Name Description 7 SKIP Skip Packet. When ENH_PKT (REVCTL.0) is set to ‘1’, setting this bit to a ‘1’ causes the IN packet to be skipped. Clearing this bit to ‘0’ automatically dispatches an IN buffer. 3:0 EP[3:0] Endpoint Number. Duplicates the function of the PKTEND pin. This feature is used only for IN transfers. By writing the desired endpoint number (2, 4, 6 or 8), EZ-USB logic automatically dispatches an IN buffer, for example, it commits the packet to the USB logic, and writes the accumulated byte count to the endpoint’s byte count register, thus arming the IN transfer. 254 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F OUTPKTEND E649 15.6.17 OUTPKTEND Force OUT Packet End Register OUTPKTEND see Section 15.15 Force OUT Packet End E649 b7 b6 b5 b4 b3 b2 b1 b0 SKIP 0 0 0 EP3 EP2 EP1 EP0 W W W W W W W W x x x x x x x x Bit Name Description 7 SKIP Skip Packet. When ENH_PKT (REVCTL.0) is set to ‘1’, setting this bit to a ‘1’ causes the OUT packet to be skipped. Clearing this bit to ‘0’ automatically dispatches an OUT buffer. 3:0 EP[3:0] Endpoint Number. Replaces the function of EPxBCL.7=1 (Skip). This feature is for OUT transfers. By writing the desired endpoint number (2, 4, 6, or 8), EZ-USB logic automatically skips or commits an OUT packet (depends on the SKIP bit settings). Note This register has no effect if REVCTL.0 = 0. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 255 EPxFIFOIE E650 15.7 Interrupts 15.7.1 EPxFIFOIE Endpoint 2, 4, 6, 8 Slave FIFO Flag Interrupt Enable Registers EP2FIFOIE see Section 15.15 EP2 Slave FIFO Flag Interrupt Enable (INT4) E650 EP4FIFOIE see Section 15.15 EP4 Slave FIFO Flag Interrupt Enable (INT4) E652 EP6FIFOIE see Section 15.15 EP6 Slave FIFO Flag Interrupt Enable (INT4) E654 EP8FIFOIE see Section 15.15 EP8 Slave FIFO Flag Interrupt Enable (INT4) E656 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 EDGEPF PF EF FF R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 The Interrupt registers control all the EZ-USB Interrupt Enables (IE) and Interrupt requests (IRQ). Interrupt enables and request bits for endpoint FIFO: Programmable Flag (PF), Empty Flag (EF), and Full Flag (FF). To enable any of these interrupts, INTSETUP.1 (INT4SRC) and INTSETUP.0 must be ‘1’. Bit Name Description 3 EDGEPF Firing Edge Programmable Flag. 0 The interrupt fires on the rising edge of the programmable flag. 1 The interrupt fires on the falling edge of the programmable flag. Note In order for the CPU to vector to the appropriate interrupt service routine, PF must be set to a ‘1’ and INTSETUP.0=1 (AV4EN) and INTSETUP.1=1 (INT4SRC). Refer to section INT 2 and INT 4 Setup Register on page 274 2 PF Programmable Flag. 0 The programmable flag interrupt is disabled. 1 The programmable flag interrupt is enabled on INT4. 1 EF Empty Flag. 0 The empty flag interrupt is disabled. 1 The empty flag interrupt is enabled on INT4. 0 FF Full Flag. 0 The full flag interrupt is disabled. 1 The full flag interrupt is enabled on INT4. 256 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOIRQ E651 15.7.2 EPxFIFOIRQ Endpoint 2, 4, 6, 8 Slave FIFO Flag Interrupt Request Registers EP2FIFOIRQ see Section 15.15 EP2 Slave FIFO Flag Interrupt Request (INT4) E651 EP4FIFOIRQ see Section 15.15 EP4 Slave FIFO Flag Interrupt Request (INT4) E653 EP6FIFOIRQ see Section 15.15 EP6 Slave FIFO Flag Interrupt Request (INT4) E655 EP8FIFOIRQ see Section 15.15 EP8 Slave FIFO Flag Interrupt Request (INT4) E657 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 PF EF FF R R R R R R/W R/W R/W 0 0 0 0 0 0 0 0 These are the Interrupt enables and request bits for endpoint FIFO: Programmable Flag (PF), Empty Flag (EF), and Full Flag (FF). Bit Name Description 2 PF Programmable Flag. EZ-USB sets PF to ‘1’ to indicate a ‘programmable flag’ interrupt request. The interrupt source is available in the interrupt vector register IVEC4. 1 EF Empty Flag. EZ-USB sets EF to ‘1’ to indicate an ‘empty flag’ interrupt request. The interrupt source is available in the interrupt vector register IVEC4. 0 FF Full Flag. EZ-USB sets FF to ‘1’ to indicate a ‘full flag’ interrupt request. The interrupt source is available in the interrupt vector register IVEC4. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 257 IBNIE E658 15.7.3 IBNIE IN-BULK-NAK Interrupt Enable Register IBNIE IN-BULK-NAK Interrupt Enable (INT2) b7 b6 b5 b4 b3 E658 b2 b1 b0 0 0 EP8 EP6 EP4 EP2 EP1 EP0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 5:0 EP[8,6,4,2,1,0] Endpoint Specific Interrupt Enable. These interrupts occur when the host sends an IN token to a Bulk-IN endpoint which has not been loaded with data and armed for USB transfer. In this case the EZ-USB SIE automatically NAKs the IN token and sets the IBNIRQ bit for the endpoint. Set IE=1 to enable the interrupt, and IE=0 to disable it. An IRQ bit is set to ‘1’ to indicate an interrupt request. The interrupt source is available in the interrupt vector register IVEC2. Note The firmware clears an IRQ bit by writing a ‘1’ to it. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. 258 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F IBNIRQ E659 15.7.4 IBNIRQ IN-BULK-NAK Interrupt Request Register IBNIRQ IN-BULK-NAK Interrupt Request (INT2) b7 b6 b5 b4 b3 E659 b2 b1 b0 0 0 EP8 EP6 EP4 EP2 EP1 EP0 R R R/W R/W R/W R/W R/W R/W 0 0 x x x x x x Bit Name Description 5:0 EP[8,6,4,2,1,0] Endpoint Specific Interrupt Enable. These interrupts occur when the host sends an IN token to a Bulk-IN endpoint which has not been loaded with data and armed for USB transfer. In this case the EZ-USB SIE automatically NAKs the IN token and sets the IBNIRQ bit for the endpoint. Set IE = 1 to enable the interrupt, and IE = 0 to disable it. An IRQ bit is set to ‘1’ to indicate an interrupt request. The interrupt source is available in the interrupt vector register IVEC2. Note The firmware clears an IRQ bit by writing a ‘1’ to it. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 259 NAKIE E65A 15.7.5 NAKIE Endpoint Ping-NAK/IBN Interrupt Enable Register NAKIE Endpoint Ping-NAK/IBN Interrupt Enable (INT2) b7 b6 b5 b4 b3 E65A b2 b1 b0 EP8 EP6 EP4 EP2 EP1 EP0 0 IBN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description Bit 7-2 EP[8,6,4,2,1,0] Ping-NAK INT Enable. These registers are active only during high-speed (480 Mbps) operation. USB 2.0 improves the USB 1.1 bus bandwidth utilization by implementing a PING-NAK mechanism for OUT transfers. When the host wishes to send OUT data to an endpoint, it first sends a PING token to see if the endpoint is ready, that is, it has an empty buffer. If a buffer is not available, the SIE returns a NAK handshake. PING-NAK transactions continue to occur until an OUT buffer is available, at which time the FX2LP SIE answers a PING with an ACK handshake. Then the host sends the OUT data to the endpoint. The OUT Ping NAK interrupt indicates that the host is trying to send OUT data, but the SIE responded with a NAK because no endpoint buffer memory is available. The firmware may wish to use this interrupt to free up an OUT endpoint buffer. Bit 0 IBN IBN INT Enable. This bit is automatically set when any of the IN bulk endpoints responds to an IN token with a NAK. This interrupt occurs when the host sends an IN token to a bulk IN endpoint which has not yet been armed. Individual enables and requests (per endpoint) are controlled by the IBNIE and IBNIRQ registers. Write a ‘1’ to this bit to clear the interrupt request. The IBN INT only fires on a 0-to-1 transition of an ‘OR’ condition of all IBN sources that are enabled. 260 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F NAKIRQ E65B 15.7.6 NAKIRQ Endpoint Ping-NAK/IBN Interrupt Request Register NAKIRQ Endpoint Ping-NAK/IBN Interrupt Request (INT2) b7 b6 b5 b4 b3 b2 E65B b1 b0 EP8 EP6 EP4 EP2 EP1 EP0 0 IBN R/W R/W R/W R/W R/W R/W R R/W x x x x x x 0 x Bit Name Description 7:2 EP[8,6,4,2,1,0] Ping-NAK INT Request. These registers are active only during high-speed (480 Mbps) operation. USB 2.0 improves the USB 1.1 bus bandwidth utilization by implementing a PING-NAK mechanism for OUT transfers. When the host wishes to send OUT data to an endpoint, it first sends a PING token to see if the endpoint is ready, that is, it has an empty buffer. If a buffer is not available, the SIE returns a NAK handshake. PING-NAK transactions continue to occur until an OUT buffer is available, at which time the FX2LP SIE answers a PING with an ACK handshake. Then the host sends the OUT data to the endpoint. The OUT Ping NAK interrupt indicates that the host is trying to send OUT data, but the SIE responded with a NAK because no endpoint buffer memory is available. The firmware may wish to use this interrupt to free up an OUT endpoint buffer. 0 IBN IBN INT Request. This bit is automatically set when any of the IN bulk endpoints responds to an IN token with a NAK. This interrupt occurs when the host sends an IN token to a bulk IN endpoint which has not yet been armed. Individual enables and requests (per endpoint) are controlled by the IBNIE and IBNIRQ registers. Write a ‘1’ to this bit to clear the interrupt request. The IBN INT only fires on a 0-to-1 transition of an ‘OR’ condition of all IBN sources that are enabled. Note The firmware clears an IRQ bit by writing a ‘1’ to it. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 261 USBIE E65C 15.7.7 USBIE USB Interrupt Enable Register USBIE USB Interrupt Enables (INT2) E65C b7 b6 b5 b4 b3 b2 b1 b0 0 EP0ACK HSGRANT URES SUSP SUTOK SOF SUDAV R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 6 EP0ACK EndPoint 0 Acknowledge. Status stage completed. 5 HSGRANT Grant High-Speed Access. The FX2LP SIE sets this bit when it has been granted high-speed (480 Mbps) access to USB. 4 URES USB Reset Interrupt Request. The USB signals a bus reset by driving both D+ and D- low for at least 10 milliseconds. When the USB core detects the onset of USB bus reset, it activates the URES interrupt request. The USB core sets this bit to ‘1’ when it detects a USB bus reset. Write a ‘1’ to this bit to clear the interrupt request. 3 SUSP Suspend Interrupt Request. If the EZ-USB detects 3 ms of no bus activity, it activates the SUSP (Suspend) interrupt request. The USB core sets this bit to ‘1’ when it detects USB SUSPEND signaling (no bus activity for 3 ms). Write a ‘1’ to this bit to clear the interrupt request. 2 SUTOK Setup Token. The USB core sets this bit to ‘1’ when it receives a SETUP token. Write a ‘1’ to this bit to clear the interrupt request. 1 SOF Start of Frame. The USB core sets this bit to ‘1’ when it receives a SOF packet. Write a ‘1’ to this bit to clear the interrupt request. 0 SUDAV SETUP Data Available Interrupt Request. The USB core sets this bit to ‘1’ when it has transferred the eight data bytes from an endpoint zero SETUP packet into internal registers (at SETUPDAT). Write a ‘1’ to this bit to clear the interrupt request. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. 262 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F USBIRQ E65D 15.7.8 USBIRQ USB Interrupt Request Register USBIRQ USB Interrupt Requests (INT2) E65D b7 b6 b5 b4 b3 b2 b1 b0 0 EP0ACK HSGRANT URES SUSP SUTOK SOF SUDAV R R/W R/W R/W R/W R/W R/W R/W 0 x x x x x x x Bit Name Description 6 EP0ACK EndPoint 0 Acknowledge. Status stage completed. 5 HSGRANT Grant High-Speed Access. The FX2LP SIE sets this bit when it has been granted high-speed (480 Mbps) access to USB. 4 URES USB Reset Interrupt Request. The USB signals a bus reset by driving both D+ and D- low for at least 10 milliseconds. When the USB core detects the onset of USB bus reset, it activates the URES interrupt request. The USB core sets this bit to ‘1’ when it detects a USB bus reset. Write a ‘1’ to this bit to clear the interrupt request. 3 SUSP Suspend Interrupt Request. If the EZ-USB detects 3 ms of no bus activity, it activates the SUSP (Suspend) interrupt request. The USB core sets this bit to ‘1’ when it detects USB SUSPEND signaling (no bus activity for 3 ms). Write a ‘1’ to this bit to clear the interrupt request. 2 SUTOK Setup Token. The USB core sets this bit to ‘1’ when it receives a SETUP token. Write a ‘1’ to this bit to clear the interrupt request. 1 SOF Start of Frame. The USB core sets this bit to ‘1’ when it receives a SOF packet. Write a ‘1’ to this bit to clear the interrupt request. 0 SUDAV SETUP Data Available Interrupt Request. The USB core sets this bit to ‘1’ when it has transferred the eight data bytes from an endpoint zero SETUP packet into internal registers (at SETUPDAT). Write a ‘1’ to this bit to clear the interrupt request. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 263 EPIE E65E 15.7.9 EPIE Endpoint Interrupt Enable Register EPIE Endpoint Interrupt Enables (INT2) b7 b6 b5 E65E b4 b3 b2 b1 b0 EP8 EP6 EP4 EP2 EP1OUT EP1IN EP0OUT EP0IN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 These Endpoint interrupt enable/request registers indicate the pending interrupts for each bulk endpoint. For IN endpoints, the interrupt asserts when the host takes a packet from the endpoint; for OUT endpoints, the interrupt asserts when the host supplies a packet to the endpoint. The IRQ bits function independently of the Interrupt Enable (IE) bits, so interrupt requests are held whether or not the interrupts are enabled. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. 264 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPIRQ E65F 15.7.10 EPIRQ Endpoint Interrupt Request Register EPIRQ Endpoint Interrupt Requests (INT2) b7 b6 b5 E65F b4 b3 b2 b1 b0 EP8 EP6 EP4 EP2 EP1OUT EP1IN EP0OUT EP0IN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 These Endpoint interrupt enable/request registers indicate the pending interrupts for each bulk endpoint. For IN endpoints, the interrupt asserts when the host takes a packet from the endpoint; for OUT endpoints, the interrupt asserts when the host supplies a packet to the endpoint. The IRQ bits function independently of the Interrupt Enable (IE) bits, so interrupt requests are held whether or not the interrupts are enabled. Note Do not clear an IRQ bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 265 GPIFIE E660 15.7.11 GPIFIE GPIF Interrupt Enable Register GPIFIE see Section 15.15 GPIF Interrupt Enable (INT4) E660 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 GPIFWF GPIFDONE R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 1 GPIFWF FIFO Read/Write Waveform. GPIF-to-firmware ‘hook’ in waveform, when waveform descriptor is programmed to assert the GPIFWF interrupt. 0 GPIFDONE GPIF Idle State. 0 Transaction in progress. 1 Transaction Done (GPIF is idle, hence GPIF is ready for next transaction). Fires IRQ4 if enabled. Note The firmware clears an interrupt request bit by writing a ‘1’ to it. Note Do not clear an IRQ Bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. 266 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFIRQ E661 15.7.12 GPIFIRQ GPIF Interrupt Request Register GPIFIRQ see Section 15.15 GPIF Interrupt Request (INT4) E661 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 GPIFWF GPIFDONE R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 x x Bit Name Description 1 GPIFWF FIFO Read/Write Waveform. GPIF-to-firmware ‘hook’ in waveform, when waveform descriptor is programmed to assert the GPIFWF interrupt. 0 GPIFDONE GPIF Idle State. 0 Transaction in progress. 1 Transaction Done (GPIF is idle, hence GPIF is ready for next transaction). Fires IRQ4 if enabled. Note The firmware clears an interrupt request bit by writing a ‘1’ to it. Note Do not clear an IRQ Bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 267 USBERRIE E662 15.7.13 USBERRIE USB Error Interrupt Enable Register USBERRIE USB Error Interrupt Enables (INT2) b3 E662 b7 b6 b5 b4 b2 b1 b0 ISOEP8 ISOEP6 ISOEP4 ISOEP2 0 R/W R/W R/W R/W R/W 0 0 ERRLIMIT R/W R/W 0 0 0 0 0 0 R/W 0 0 Bit Name Description 7:4 ISOEP[8,6,4,2] ISO Error Packet. The ISO EP Flag is set when ISO OUT data PIDs arrive out of sequence (applies to high speed only) and an ISO OUT packet was dropped because no buffer space was available for an OUT packet (in either full or high-speed modes). 0 ERRLIMIT Error Limit. ERRLIMIT counts USB bus errors — CRC, bit stuff, and so on, and triggers the interrupt when the programmed limit (0-15) is reached. The firmware clears an interrupt request bit by writing a ‘1’ to it. Note Do not clear an IRQ Bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. 268 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F USBERRIE E663 15.7.14 USBERRIE USB Error Interrupt Request Register USBERRIRQ USB Error Interrupt Request (INT2) b3 E663 b7 b6 b5 b4 b2 b1 b0 ISOEP8 ISOEP6 ISOEP4 ISOEP2 0 R/W R/W R/W R/W R 0 0 ERRLIMIT R R 0 0 0 0 0 0 R/W 0 x Bit Name Description 7:4 ISOEP[8,6,4,2] ISO Error Packet. The ISO EP Flag is set when ISO OUT data PIDs arrive out of sequence (applies to high speed only) and an ISO OUT packet was dropped because no buffer space was available for an OUT packet (in either full or high-speed modes). 0 ERRLIMIT Error Limit. ERRLIMIT counts USB bus errors — CRC, bit stuff, and so on, and triggers the interrupt when the programmed limit (0-15) is reached. The firmware clears an interrupt request bit by writing a ‘1’ to it. Note Do not clear an IRQ Bit by reading an IRQ register, OR’ing its contents with a bit mask, and writing back the IRQ register. This clears all pending interrupts. Instead, simply write the bit mask value (with a ‘1’ in the bit position of the IRQ you want to clear) directly to the IRQ register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 269 ERRCNTLIM E664 15.7.15 ERRCNTLIM USB Error Counter Limit Register ERRCNTLIM USB Error Counter and Limit E664 b7 b6 b5 b4 b3 b2 b1 b0 EC3 EC2 EC1 EC0 LIMIT3 LIMIT2 LIMIT1 LIMIT0 R R R R R/W R/W R/W R/W x x x x 0 1 0 0 Bit Name Description 7:4 EC[3:0] USB Error Count. Error count has a maximum value of ‘15’. 3:0 LIMIT[3:0] Error Count Limit. USB bus error count and limit. The firmware can enable the interrupt to cause an interrupt when the limit is reached. The default limit count is ‘4’. 270 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F CLRERRCNT E665 15.7.16 CLRERRCNT Clear Error Count Register CLRERRCNT b7 Clear Error Count EC3:0 b6 b5 b4 b3 E665 b2 b1 b0 x x x x x x x x W W W W W W W W x x x x x x x x Write any value to this register to clear the EC (Error Count) bits in the ERRCNTLIM register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 271 INT2IVEC E666 15.7.17 INT2IVEC INT 2 (USB) Autovector Register INT2IVEC INTERRUPT 2 (USB) Autovector E666 b7 b6 b5 b4 b3 b2 b1 b0 0 I2V4 I2V3 I2V2 I2V1 I2V0 0 0 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 6:2 I2V[4:0] INT 2 Autovector. To save the code and processing time required to sort out which USB interrupt occurred, the USB core provides a second level of interrupt vectoring, called Autovectoring. When the CPU takes a USB interrupt, it pushes the program counter onto its stack, and then executes a jump to address 43, where it expects to find a jump instruction to the INT2 service routine. I2V indicates the source of an interrupt from the USB Core. When the USB core generates an INT2 (USB) interrupt request, it updates INT2IVEC to indicate the source of the interrupt. The interrupt sources are encoded on I2V[4:0]. 272 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F INT4IVEC E667 15.7.18 INT4IVEC INT 4 (slave FIFOs and GPIF) Autovector Register INT4IVEC b7 Interrupt 4 (slave FIFOs and GPIF) Autovector b6 b5 b4 b3 b2 E667 b1 b0 1 0 I4V3 I4V2 I4V1 I4V0 0 0 R R R R R R R R 1 0 0 0 0 0 0 0 Bit Name Description 5:2 I4V[3:0] INT 4 Autovector. To save the code and processing time required to sort out which FIFO interrupt occurred, the USB core provides a second level of interrupt vectoring, called Autovectoring. When the CPU takes a USB interrupt, it pushes the program counter onto its stack, and then executes a jump to address 53, where it expects to find a jump instruction to the INT4 service routine. I4V indicates the source of an interrupt from the USB Core. When the USB core generates an INT4 (FIFO/GPIF) interrupt request, it updates INT4IVEC to indicate the source of the interrupt. The interrupt sources are encoded on I4V[3:0]. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 273 INTSETUP E668 15.7.19 INTSETUP INT 2 and INT 4 Setup Register INTSETUP b7 INT 2 and INT 4 Setup b6 b5 b4 b3 E668 b2 b1 b0 0 0 0 0 AV2EN 0 INT4SRC AV4EN R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 3 AV2EN INT2 Autovector Enable. To streamline the code that deals with the USB interrupts, this bit enables autovectoring on INT2. 1 INT4SRC INT 4 Source. 0 INT4 is supplied by the pin (default) 1 INT4 is supplied internally from FIFO/GPIF sources 0 AV4EN INT4 Autovector Enable. To streamline the 8051 code that deals with the FIFO interrupts, this bit enables autovectoring on INT4. 274 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F PORTACFG E670 15.8 Input/Output Registers 15.8.1 PORTACFG I/O PORTA Alternate Configuration Register PORTACFG I/O PORTA Alternate Configuration b7 b6 b5 b4 b3 FLAGD SLCS 0 0 R/W R/W R/W R/W 0 0 0 0 0 E670 b2 b1 b0 0 0 INT1 INT0 R/W R/W R/W R/W 0 0 0 The PORTxCFG register selects alternate functions for the PORTx pins. Bit Name Description 7 FLAGD FlagD Alternate Configuration. If IFCFG[1:0] = 11, setting this bit to '1' configures the PA7 pin as FLAGD, a programmable FIFO flag. 6 SLCS SLCS Alternate Configuration. If IFCFG[1:0] = 11, setting this bit to '1' configures the PA7 pin as SLCS, the slave FIFO chip select. 1:0 INT[1:0] Interrupts Enabled for Alternate Configuration. Setting these bits to '1' configures these PORTA pins as the INT1 or INT0 pins. Note Bits PORTACFG.7 and PORTACFG.6 both affect pin PA7. If both bits are set, FLAGD takes precedence. Note Bit 3 is the WU2EN bit in the Wakeup register. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 275 PORTCCFG E671 15.8.2 PORTCCFG I/O PORTC Alternate Configuration Register PORTCCFG I/O PORTC Alternate Configuration E671 b7 b6 b5 b4 b3 b2 b1 b0 GPIFA7 GPIFA6 GPIFA5 GPIFA4 GPIFA3 GPIFA2 GPIFA1 GPIFA0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7:0 GPIFA[7:0] Enable GPIF Address Pins. 0 Configure this as Port C. 1 Configure this port to output the lower address of enabled GPIF address pins. Additional bit set in PORTECFG, bit 7. 276 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F PORTECFG E672 15.8.3 PORTECFG I/O PORTE Alternate Configuration Register PORTECFG I/O PORTE Alternate Configuration E672 b7 b6 b5 b4 b3 b2 b1 b0 GPIFA8 T2EX INT6 RXD1OUT RXD0OUT T2OUT T1OUT T0OUT R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7 GPIFA8 Enable GPIF Address Pin. GPIF address bit 8 pin. 0 Configure this as Port E. 1 Configure this port to output the high address of enabled GPIF address pins. 6 T2EX Timer 2 Counter. Timer/Counter 2 Capture/Reload Input. 5 INT6 INT6 Interrupt Request. 1 Configure this Port E pin as INT6. 4 RXD1OUT Mode 0: USART1 Synchronous Data Output. 3 RXD0OUT Mode 0: USART0 Synchronous Data Output. 2:0 T2OUT, T1OUT, T0OUT Serial Data. Serial mode 0 provides synchronous, half duplex serial communication. For Serial Port 0, serial data output occurs on the RXD0OUT pin, serial data is received on the RXD0 pin, and the TXD0 pin provides the shift clock for both transmit and receive. Mode 0: Clock Output Modes 1-3: Serial Port 0 Data Output. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 277 I2CS E678 15.8.4 I2CS I²C Bus Control and Status Register I2CS I²C Bus Control and Status E678 b7 b6 b5 b4 b3 b2 b1 b0 START STOP LASTRD ID1 ID0 BERR ACK DONE R/W R/W R/W R R R R R 0 0 0 x x 0 0 0 For additional information refer to “Registers” on page 190 of the Input/Output chapter. Bit Name Description 7 START Signal START Condition. 1 6 STOP The next write to I2DAT generates a ‘start’ condition followed by the byte of data written to I2DAT. The START bit is automatically cleared to ‘0’ after the ACK interval. Signal STOP Condition. 1 After the ACK interval, a ‘stop’ condition is generated. STOP may be set by firmware at any time before, during, or after the 9 bit data transaction. STOP is automatically cleared after the ‘stop’ condition is generated. Data should not be written to I2CS or I2DAT unless the STOP bit is 0. An interrupt request is available to signal that the stop condition is complete; see ‘STOPIE’. 5 LASTRD Last Data Read. An I2C master reads data by floating the SDA line and issuing clock pulses on the SCL line. After every eight bits, the master drives SDA low for one clock to indicate ACK. To signal the last byte of a multi-byte transfer, the master floats SDA at ACK time to instruct the slave to stop sending. When LASTRD = 1 at ACK time, the EZ-USB floats the SDA line. The LASTRD bit may be set at any time before or during the data transfer; it is automatically cleared after the ACK interval. Note Setting LASTRD does not automatically generate a ‘stop’ condition. At the end of a read transfer, the STOP bit should also be set. 4:3 ID[1:0] Boot EEPROM ID. These bits are set by the boot loader to indicate whether an 8-bit address or 16-bit address EEPROM at slave address 000 or 001 was detected at power-on. Normally, they are used for debug purposes only. 00 No EEPROM found 01 8-bit EEPROM found at slave address 000 10 16-bit EEPROM found at slave address 001 11 Not used (continued on next page) 278 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F I2CS E678 15.8.4 2 I2CS (continued) BERR Bus Error. This bit indicates a bus error. BERR=1 indicates that there was bus contention during the preceding transfer, which results when an outside device drives the bus when it should not, or when another bus master wins arbitration and takes control of the bus. When a bus error is detected, the EZ-USB immediately cancels its current transfer, floats the SCL and SDA lines, then sets DONE and BERR. BERR remains set until it is updated at the next ACK interval. The I2C master will not drive SCL till BERR is reset. If the bus error causes the master to detect bus contention and slave to be stuck in the middle of a transfer. Then there is no in-built contention resolution method to workaround this deadlock. If there is a possibility of this condition then the design must implement a method of resetting the slave or clocking the slave till the next ACK. DONE is set with BERR only when bus contention occurs during a transfer. If BERR is set and the bus is still busy when firmware attempts to restart a transfer, that second transfer is cancelled but the DONE flag is not set. If contention is expected, EZ-USB firmware should incorporate a timeout to test for this condition. See Steps 1 and 3 of sections 13.5.3 Sending Data and 13.5.4 Receiving Data on page 191. 1 ACK Acknowledge Bit. During the ninth clock of a write transfer, the slave indicates reception of the byte by driving SDA low to acknowledge the byte it just received. The EZ-USB floats SDA during this time, samples the SDA line, and updates the ACK bit with the complement of the detected value: ACK=1 indicates that the slave acknowledged the transfer, and ACK=0 indicates the slave did not. The USB core updates the ACK bit and at the same time it sets DONE=1. The ACK bit is only meaningful after a write transfer. After a read transfer, its state should be ignored. 0 DONE Transfer DONE. The EZ- US B sets this bit whenever it completes a byte transfer. The EZ-USB also generates an interrupt request when it sets the DONE bit. The DONE bit is automatically cleared when the I2DAT register is read or written, and the interrupt request bit is automatically cleared by reading or writing the I 2CS or I2DAT registers (or by clearing EXIF.5 to 0). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 279 I2CDAT E679 15.8.5 I2CDAT I²C Bus Data Register I2DAT I²C Bus Data b7 b6 b5 b4 E679 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x For additional information refer to “Registers” on page 190 of the Input/Output chapter. Bit Name Description 7:0 Data Data Bits. Eight bits of data; writing or reading this register triggers a bus transaction. 280 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F I2CTL E67A 15.8.6 I2CTL I²C Bus Control Register I2CTL I²C Bus Control b7 b6 b5 b4 b3 E67A b2 b1 b0 0 0 0 0 0 0 STOPIE 400KHZ R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 For additional information refer to “Registers” on page 190 of the Input/Output chapter. Bit Name Description 1 STOPIE Stop Interrupt Enable Bit. Setting this bit enables the STOP bit interrupt request, which is activated when the STOP bit makes a 1-to-0 transition. 0 400KHZ High-Speed I2C Bus. For I2C peripherals that support it, the I2C bus can run at 400 kHz. 0 The I2C bus operates at approximately 100 kHz. 1 The I2C bus operates at approximately 400 kHz. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 281 XAUTODATx E67A 15.8.7 XAUTODATx AUTOPOINTERs 1 and 2 MOVX Access Registers XAUTODAT1 AUTOPTR1 MOVX Access XAUTODAT2 AUTOPTR2 MOVX Access b7 b6 b5 b4 b3 E67B E67C b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 Data AUTODATAx. Data read or written to the XAUTODATx register accesses the memory addressed by the AUTOP RHn/Ln registers, and optionally increments the address after the read or write. 282 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F XAUTODATx E67A 15.9 15.9.1 ECC Control and Data Registers ECC Features The EZ-USB can calculate Error Correcting Codes (ECCs) on data that passes across its GPIF or Slave FIFO interfaces. There are two ECC configurations: Two ECCs, each calculated over 256 bytes (SmartMedia Standard); and one ECC calculated over 512 bytes. The ECC can correct any one-bit error or detect any two-bit error. Note To use the ECC logic, the GPIF or Slave FIFO interface must be configured for byte-wide operation. 15.9.2 ECC Implementation The two ECC configurations are selected by the ECCM bit. ECCM = 0 Two 3-byte ECCs, each calculated over a 256-byte block of data. This configuration conforms to the SmartMedia™ Standard. Write any value to ECCRESET, then pass data across the GPIF or Slave FIFO interface. The ECC for the first 256 bytes of data are calculated and stored in ECC1. The ECC for the next 256 bytes are stored in ECC2. After the second ECC is calculated, the values in the ECCx registers does not change until ECCRESET is written again, even if more data is subsequently passed across the interface. ECCM = 1 One 3-byte ECC calculated over a 512-byte block of data. Write any value to ECCREST then pass data across the GPIF or Slave FIFO interface. The ECC for the first 512 bytes of data are calculated and stored in ECC1; ECC2 is unused. After the ECC is calculated, the value in ECC1 does not change until ECCRESET is written again, even if more data is subsequently passed across the interface. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 283 XAUTODATx E67A 15.9.3 ECC Check/Correct The following code demonstrates the ECC correction algorithms for 256-byte and 512-byte ECCs. In the 256-byte example, the calculated_ecc[] array contains the contents of the appropriate ECCx registers; in the 512-byte example, the ECC1 registers are read directly. // // ECC Check/Correct for 256-byte ECC. // // Enter with 256 bytes of received data in data[], 3 bytes of received ECC in // received_ecc[], and the ECC calculated by the EZ-USB in calculated_ecc[]. // UINT8 received_ecc[3]; UINT8 checkECC (void) { UINT8 a,b,c,x,y; a = received_ecc[0] ^ calculated_ecc[0];// Calculated ecc = received ecc? b = received_ecc[1] ^ calculated_ecc[1]; c = received_ecc[2] ^ calculated_ecc[2]; if ((a | b | c) == 0) return (ECC_OK);// If so, no error; return. if ((((a^(a>>1)) & 0x55) == 0x55) && // Does each pair of parity bits contain (((b^(b>>1)) & 0x55) == 0x55) && // one error and one match? (((c^(c>>1)) & 0x54) == 0x54)) { x = if if if if if if if (a (a (a (a (b (b (b (b & & & & & & & & 0x80); 0x20) x 0x08) x 0x02) x 0x80) x 0x20) x 0x08) x 0x02) x |= |= |= |= |= |= |= 0x40; 0x20; 0x10; 0x08; 0x04; 0x02; 0x01; // If so, there's a one-bit error in data[]. // Find which byte is in error... y = 0; if (c & 0x80) y |= 0x04; if (c & 0x20) y |= 0x02; if (c & 0x08) y |= 0x01; // ... and which bit... data[x] ^= (1 << y); // ... and correct it. return (ECC_DATA_FIXED); // Return with one bit fixed. } y = 0xFF; if ((a | b) == 0) y = c; if ((a | c) == 0) y = b; if ((b | c) == 0) y = a; if ((y & (y-1)) == received_ecc[0] received_ecc[1] received_ecc[2] // // // // If each pair didn't contain one error and one match, check to see if only one bit is in error (which would mean that the received ecc is erroneous). 0) { // If so... = calculated_ecc[0];// Replace the received ecc with our = calculated_ecc[1];// calculated ecc. = calculated_ecc[2]; return (ECC_ECC_FIXED); // Return with received ecc fixed. } 284 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F XAUTODATx E67A return (ECC_ERROR); // Uncorrectable error in data or received ecc; // return with data[] and received_ecc[] // unchanged. } ----------------------------------------------------------------------------------// // ECC Check/Correct for 512-byte ECC. // // Enter with 512 bytes of received data in data[], 3 bytes of received ECC in // received_ecc[]. // UINT8 received_ecc[3]; UINT8 checkECC (void) { UINT8 a,b,c,y; UINT16 x; a = received_ecc[0] ^ ecc1B0; // Calculated ecc = received ecc? b = received_ecc[1] ^ ecc1B1; c = received_ecc[2] ^ ecc1B2; if ((a | b | c) == 0) return (ECC_OK);// If so, no error; return. if ((((a^(a>>1)) & 0x55) == 0x55) &&// Does each pair of parity bits contain (((b^(b>>1)) & 0x55) == 0x55) &&// one error and one match? (((c^(c>>1)) & 0x55) == 0x55)) { x = if if if if if if if if (a (a (a (a (b (b (b (b (c & & & & & & & & & 0x80); 0x20) x 0x08) x 0x02) x 0x80) x 0x20) x 0x08) x 0x02) x 0x02) x |= |= |= |= |= |= |= |= // If so, there's a one-bit error in data[]. 0x40; // Find which byte is in error... 0x20; 0x10; 0x08; 0x04; 0x02; 0x01; 0x100; y = 0; // ... and which bit... if (c & 0x80) y |= 0x04; if (c & 0x20) y |= 0x02; if (c & 0x08) y |= 0x01; data[x] ^= (1 << y);// ... and correct it. return (ECC_DATA_FIXED);// Return with one bit fixed. } y = 0xFF; // If each pair didn't contain one error if ((a | b) == 0) y = c;// and one match, check to see if only if ((a | c) == 0) y = b;// one bit is in error (which would mean if ((b | c) == 0) y = a;// that the received ecc is erroneous). if ((y & (y-1)) == 0) { // If so... received_ecc[0] = ecc1B0;// Replace the received ecc with our received_ecc[1] = ecc1B1;// calculated ecc. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 285 XAUTODATx E67A received_ecc[2] = ecc1B2; return (ECC_ECC_FIXED);// Return with received ecc fixed. } return (ECC_ERROR); // Uncorrectable error in data or received ecc; // return with data[] and received_ecc[] // unchanged. } 286 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F ECCCFG E628 15.9.4 ECCCFG ECC Configuration Register ECCCFG ECC Configuration b7 b6 b5 b4 b3 E628 b2 b1 b0 0 0 0 0 0 0 0 ECCM R R R R R R R R/W 0 0 0 0 0 0 0 0 Bit Name Description Bit 0 ECCM Select ECC Block Size. ECCM selects the ECC block size mode. 0 The ECC logic operates on two blocks of 256 bytes each. 1 The ECC calculator operates on one block of 512 bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 287 ECCRESET E629 15.9.5 ECCRESET ECC Reset Register ECCRESET b7 ECC Reset b6 b5 b4 E629 b3 b2 b1 b0 x x x x x x x x W W W W W W W W 0 0 0 0 0 0 0 0 Writing any value to this register resets the ECC logic. After ECCRESET is written, ECC is calculated on the next 512 bytes passed across the GPIF or Slave FIFO interface. 288 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F ECC1B0 E62A 15.9.6 ECC1B0 ECC 1 Byte 0 Register ECC1B0 ECC 1 Byte 0 E62A b7 b6 b5 b4 b3 b2 b1 b0 LINE15 LINE14 LINE13 LINE12 LINE11 LINE10 LINE9 LINE8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:0 LINE[15:8] Bits 8-15 of the line parity. See the SmartMedia Specification. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 289 ECC1B1 E62B 15.9.7 ECC1B1 ECC 1 Byte 1 Register ECC1B1 ECC 1 Byte 1 E62B b7 b6 b5 b4 b3 b2 b1 b0 LINE7 LINE6 LINE5 LINE4 LINE3 LINE2 LINE1 LINE0 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:0 LINE[7:0] Bits 0-7 of the line parity. See the SmartMedia Specification. 290 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F ECC1B2 E62C 15.9.8 ECC1B2 ECC 1 Byte 2 Register ECC1B2 ECC 1 Byte 2 E62C b7 b6 b5 b4 b3 b2 b1 b0 COL5 COL4 COL3 COL2 COL1 COL0 LINE17 LINE16 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:2 COL[5:0] 6-bit column parity. See the SmartMedia Specification. 1:0 LINE[17:16] If ECCM = 0, these bits are set to ‘11’ per the SmartMedia Specification. If ECCM = 1, these bits hold bits 16 and 17 of the line parity. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 291 ECC2B0 E62D 15.9.9 ECC2B0 ECC 2 Byte 0 Register ECC2B0 ECC 2 Byte 0 E62D b7 b6 b5 b4 b3 b2 b1 b0 LINE15 LINE14 LINE13 LINE12 LINE11 LINE10 LINE9 LINE8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:0 LINE[15:8] Bits 8-15 of the line parity. See the SmartMedia Specification. 292 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F ECC2B1 E62E 15.9.10 ECC2B1 ECC 2 Byte 1 Register ECC2B1 ECC 2 Byte 1 E62E b7 b6 b5 b4 b3 b2 b1 b0 LINE7 LINE6 LINE5 LINE4 LINE3 LINE2 LINE1 LINE0 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:0 LINE[7:0] Bits 0-7 of the line parity. See the SmartMedia Specification. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 293 ECC2B2 E62F 15.9.11 ECC2B2 ECC 2 Byte 2 Register ECC2B2 ECC 2 Byte 2 E62F b7 b6 b5 b4 b3 b2 COL5 COL4 COL3 COL2 COL1 COL0 1 1 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7;2 COL[5:0] This is the 6-bit column parity. See the SmartMedia Specification. 294 b1 b0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F UDMACRCx E67D 15.10 UDMA CRC Registers 15.10.1 UDMACRCx UDMA CRC Registers UDMACRCH see Section 15.15 b7 E67D b6 b5 b4 b3 b2 b1 b0 CRC[15:8] RW RW RW RW RW RW RW RW 0 1 0 0 1 0 1 0 UDMACRCL see Section 15.15 b7 E67E b6 b5 b4 b3 b2 b1 b0 CRC[7:0] RW RW RW RW RW RW RW RW 1 0 1 1 1 0 1 0 These two registers are strictly for debug purposes. The CRC represented by these registers is calculated based on the rules defined in the ATAPI specification for UDMA transfers. It is calculated automatically by the GPIF as data is transferred on FD[15:0]. These registers return the live calculation of the CRC at any point in the transfer, but are reset to the seed value of 0x4ABA upon the GPIF entering the IDLE state. These registers are writable, therefore, the currently calculated CRC including the seed value can be overwritten at any time. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 295 UDMACRCQUALIFIER E67F 15.10.2 UDMACRCQUALIFIER UDMA Qualifier Register UDMACRCQUALIFIER b7 E67F b6 b5 b4 b3 b2 b1 b0 QENABLE 0 0 0 QSTATE RW R R R RW RW QSIGNAL[2:0] RW RW 0 0 0 0 0 0 0 0 This register only applies to UDMA IN transactions that are host terminated. Otherwise, this register can be completely ignored. This register covers a very specific and potentially nonexistent (from a typical system implementation standpoint*) UDMA CRC situation. However rare the situation may be, it is still allowed by the ATAPI specification and thus must be considered and solved by this register. The ATAPI specification says that if the host (in this case the GPIF) terminates a UDMA IN transaction, that the device (e.g., the disk drive) is allowed to send up to three more words after the host deactivates the HDMARDY signal. These ‘dribble’ words may not be of interest to the host and thus may be discarded. However, CRC must still be calculated on them since the host and the device must compare and match the CRC at the end of the transaction to consider the transfer error-free. The GPIF normally only calculates CRC on words that are written into the FIFO (and not discarded). This poses a problem since, in this case, some words are discarded but still must be included in the CRC calculation. This register gives a way to have the GPIF calculate CRC on the extra discarded words as well. The user would program this register in the following way. The QENABLE bit would be set to ‘1’. The QSIGNAL[2:0] field would be programmed to select the CTL pin that coincides with the UDMA STOP signal. The QSTATE bit would be programmed to be ‘0’. This instructs the GPIF to calculate CRC on any DSTROBE edges from the device when STOP=0, which solves the problem. Bit Name Description 7 QENABLE This bit enables the CRC qualifier feature, and thus the other bits in this register. 3 QSTATE This bit determines what state the CRC qualifier signal (selected by QSIGNAL[2:0] below) must be in to allow CRC to be calculated on words being written into the GPIF. 2:0 QSIGNAL[2:0] These bits select which of the CTL[5:0] pins is the CRC qualifier signal. Note A typical UDMA system has the device, instead of the host, terminate UDMA IN transfers thus completely avoiding this situation. 296 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F USBCS E680 15.11 USB Control 15.11.1 USBCS USB Control and Status Register USBCS USB Control and Status b7 b6 b5 E680 b4 b3 b2 b1 b0 HSM 0 0 0 DISCON NOSYNSOF RENUM SIGRSUME R R R R R/W R/W R/W R/W x 0 0 0 0 0 0 0 Bit Name Description 7 HSM High-Speed Mode. If HSM = 1, the FX2LP SIE is operating in High-Speed Mode, 480 bits/s. Zero-to-one transition of this bit causes a HSGRANT interrupt request. 3 DISCON Signal a Disconnect on the DISCON Pin. DISCON is one of the EZ-USB control bits in the USBCS (USB Control and Status) register that control the ReNumeration process. Setting this bit to ‘1’ causes a disconnect from the USB bus by removing the internal 1.5K pull up resistor from the D+. A boot EEPROM may be used to default this bit to ‘1’ at startup time. This bit also resets several registers. See the Resets chapter on page 83 for details. 2 NOSYNSOF Disable Synthesizing Missing SOFs. 1 1 RENUM Renumerate. This bit controls whether USB device requests are handled by firmware or automatically by the EZUSB. When RENUM=0, the USB core handles all device requests. When RENUM=1, the firmware handles all device requests except Set_Address. Set RENUM=1 during a bus disconnect to transfer USB control to the firmware. The EZ-USB automatically sets RENUM=1 under two conditions. ■ ■ 0 SIGRSUME Disable synthesizing missing SOFs. Completion of a ‘C2’ boot load When external memory is used (EA=1) and no boot EEPROM is used Signal Remote Device Resume. Set SIGRSUME=1 to drive the ‘K’ state onto the USB bus. This should be done only by a device that is capable of remote wakeup, and then only during the SUSPEND state. To signal RESUME, set SIGRSUME=1, wait 10-15 ms, then set SIGRSUME=0. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 297 SUSPEND E681 15.11.2 SUSPEND Enter Suspend State Register SUSPEND b7 Put Chip into SUSPEND State b6 b5 b4 b3 E681 b2 b1 b0 x x x x x x x x W W W W W W W W x x x x x x x x Bit Name Description 7:0 Suspend Enable Suspend Regardless of Bus State. Write any value to this register to prepare the chip for standby without having to wait for a bus suspend. 298 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F WAKEUPCS E682 15.11.3 WAKEUPCS Wakeup Control and Status Register WAKEUPCS b7 Wakeup Control and Status b6 b5 b4 WU2 WU WU2POL R/W R/W R/W x x 0 E682 b3 b2 b1 b0 WUPOL 0 DPEN WU2EN WUEN R/W R R/W R/W R/W 0 0 1 0 1 EZ-USB has two pins that can be activated by external logic to take EZ-USB out of standby. These pins are called WAKEUP and WU2. Bit Name Description 7 WU2 Wakeup Initiated from WU2 Pin. The EZ-USB sets this status bit to ‘1’ when wakeup was initiated by the WU2 pin. Write a ‘1’ to this bit to clear it. 6 WU Wakeup Initiated from WU Pin. The EZ-USB sets this bit to ‘1’ when wakeup was initiated by the WU pin. Write a ‘1’ to this bit to clear it. 5 WU2POL Polarity of the WU2 Pin. 0 Active low 1 Active high 4 WUPOL Polarity of the WU Pin. 0 Active low 1 Active high 2 DPEN Enable/Disable DPLUS Wakeup. Activity on the USB DPLUS signal normally initiates a USB wakeup sequence. 0 Disable 1 Enable 1 WU2EN Enable WU2 Wakeup. 1 Enable wakeup from WU2 pin 0 WUEN Enable WU Wakeup. 1 Enable wakeup from the WAKEUP pin EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 299 TOGCTL E683 15.11.4 TOGCTL Data Toggle Control Register TOGCTL Data Toggle Control b7 b6 b5 b4 b3 E683 b2 b1 b0 Q S R IO EP3 EP2 EP1 EP0 R R R R/W R/W R/W R/W R/W x 0 0 0 0 0 0 0 Bit Name Description 7 Q Data Toggle Value. 0 1 Indicates DATA0 and Indicates DATA1, for the endpoint selected by the IO and EP3:0 bits. Write the endpoint select bits (IO and EP3:0), before reading this value. 6 S Set Data Toggle to DATA1. After selecting the desired endpoint by writing the endpoint select bits (IO and EP3:0), set S=1 to set the data toggle to DATA1. Do not change the endpoint selection bits while this bit is being written. 5 R Set Data Toggle to DATA0. 1 Set the data toggle to DATA0. Do not change the endpoint selection bits while this bit is being written. 4 IO Select IN or OUT Endpoint. Set this bit to select an endpoint direction prior to setting its ‘R’ or ‘S’ bit. 0 Selects an OUT endpoint 1 Selects an IN endpoint 3:0 EP[3:0] Select Endpoint. Set these bits to select an endpoint prior to setting its ‘R’ or ‘S’ bit. Valid values are 0, 1, 2, 4, 6, and 8. 300 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F USBFRAMEH E684 15.11.5 USBFRAMEH USB Frame Count High Register USBFRAMEH b7 USB Frame Count High b6 b5 b4 E684 b3 b2 b1 b0 0 0 0 0 0 FC10 FC9 FC8 R R R R R R R R 0 0 0 0 0 x x x Bit Name Description 2:0 FC[10:8] High Bits for USB Frame Count. Every millisecond the host sends a SOF token indicating ‘Start Of Frame,’ along with an 11 bit incrementing frame count. The EZ-USB copies the frame count into these registers at every SOF. One use of the frame count is to respond to the USB SYNC_FRAME Request. If the USB core detects a missing or garbled SOF, it generates an internal SOF and increments USBFRAMEL-USBRAMEH. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 301 USBFRAMEL E685 15.11.6 USBFRAMEL USB Frame Count Low Register USBFRAMEL USB Frame Count Low E685 b7 b6 b5 b4 b3 b2 b1 b0 FC7 FC6 FC5 FC4 FC3 FC2 FC1 FC0 R R R R R R R R x x x x x x x x Bit Name Description 7:0 FC[7:0] Low Byte for USB Frame Count. Every millisecond the host sends a SOF token indicating ‘Start Of Frame,’ along with an 11 bit incrementing frame count. The EZ-USB copies the frame count into these registers at every SOF. One use of the frame count is to respond to the USB SYNC_FRAME Request. If the USB core detects a missing or garbled SOF, it generates an internal SOF and increments USBFRAMEL-USBRAMEH. 302 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F MICROFRAME E686 15.11.7 MICROFRAME USB Microframe Count Register MICROFRAME b7 USB Microframe Count, 0-7 b6 b5 b4 E686 b3 b2 b1 b0 0 0 0 0 0 MF2 MF1 MF0 R R R R R R R R 0 0 0 0 0 x x x Bit Name Description 2:0 MF[2:0] Last Occurring Microframe. MICROFRAME contains a count 0-7 which indicates which of the eight 125-µs microframes last occurred. This register is active only when FX2LP is operating at high speed (480 Mbps). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 303 FNADDR E687 15.11.8 FNADDR USB Function Address Register FNADDR USB Function Address E687 b7 b6 b5 b4 b3 b2 b1 b0 0 FA6 FA5 FA4 FA3 FA2 FA1 FA0 R R R R R R R R 0 x x x x x x x Bit Name Description 6:0 FA[6:0] USB Function Address. During the USB enumeration process, the host sends a device a unique 7 bit address, which the USB core copies into this register. There is normally no reason for the CPU to know its USB device address because the USB Core automatically responds only to its assigned address. 304 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP0BCH E68A 15.12 Endpoints 15.12.1 EP0BCH Endpoint 0 (Byte Count High) Register EP0BCH Endpoint 0 Byte Count High E68A b7 b6 b5 b4 b3 b2 b1 b0 (BC15) (BC14) (BC13) (BC12) (BC11) (BC10) (BC9) (BC8) R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 BC[15:8] High Order Byte Count. Even though the EP0 buffer is only 64 bytes, the EP0 byte count is expanded to 16 bits to allow using the SUDPTR with a custom length, instead of USB-dictated length (from Setup Data Packet and number of requested bytes). The byte count bits in parentheses apply only when SDPAUTO (SUDPTRCTL.0) = 0. The SIE normally determines how many bytes to send over EP0 in response to a device request by taking the smaller of (a) the wLength field in the SETUP packet, and (b) the number of bytes available for transfer (byte count). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 305 EP0BCL E68B 15.12.2 EP0BCL Endpoint 0 Control and Status (Byte Count Low) Register EP0BCL Endpoint 0 Byte Count Low E68B b7 b6 b5 b4 b3 b2 b1 b0 (BC7) BC6 BC5 BC4 BC3 BC2 BC1 BC0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 BC[7:0] Low Order Byte Count. Even though the EP0 buffer is only 64 bytes, the EP0 byte count is expanded to 16 bits to allow using the SUDPTR with a custom length, instead of USB-dictated length (from Setup Data Packet and number of requested bytes). The byte count bits in parentheses apply only when SDPAUTO (SUDPTRCTL.0) = 0. 306 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP1OUTBC E68D 15.12.3 EP1OUTBC Endpoint 1 OUT Byte Count Register EP1OUTBC Endpoint 1 OUT Byte Count E68D b7 b6 b5 b4 b3 b2 b1 b0 0 BC6 BC5 BC4 BC3 BC2 BC1 BC0 R/W R/W R/W R/W R/W R/W R/W R/W 0 x x x x x x x Bit Name Description 6:0 BC[6:0] Endpoint 1 OUT Byte Count. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 307 EP1INBC E68F 15.12.4 EP1INBC Endpoint 1 IN Byte Count Register EP1INBC Endpoint 1 IN Byte Count b6 b5 b4 b3 b2 b1 b0 0 BC6 BC5 BC4 BC3 BC2 BC1 BC0 R/W R/W R/W R/W R/W R/W R/W R/W 0 x x x x x x x Bit Name Description 6:0 BC[6:0] Endpoint 1 IN Byte Count. 308 E68F b7 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP2BCH E690 15.12.5 EP2BCH Endpoint 2 Byte Count High Register EP2BCH see Section 15.15 Endpoint 2 Byte Count High E690 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 BC10 BC9 BC8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 x x x Bit Name Description 2:0 BC[10:8] Endpoint 2 Byte Count High. EP2 can be maximum of either 512 or 1024 bytes. These are the high 3 bits of the byte count. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 309 EP6BCH E698 15.12.6 EP6BCH Endpoint 6 Byte Count High Register EP6BCH see Section 15.15 Endpoint 6 Byte Count High E698 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 BC10 BC9 BC8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 x x x Bit Name Description 2:0 BC[10:8] Endpoint 6 Byte Count High. EP6 can be maximum of either 512 or 1024 bytes. These are the high 3 bits of the byte count. 310 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP4BCH E694 15.12.7 EP4BCH Endpoint 4 Byte Count High Register EP4BCH see Section 15.15 Endpoint 4 Byte Count High E694 b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 BC9 BC8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 x x Bit Name Description 1:0 BC[9:8] Endpoint 4 Byte Count High. EP4 can be 512 bytes only. These are the high 2 bits of the byte count. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 311 EP8BCH E69C 15.12.8 EP8BCH Endpoint 8 Byte Count High Register EP8BCH see Section 15.15 Endpoint 8 Byte Count High E69C b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 BC9 BC8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 x x Bit Name Description 1:0 BC[9:8] Endpoint 8 Byte Count High. EP8 can be 512 bytes only. These are the high 2 bits of the byte count. 312 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxBCL E691 15.12.9 EPxBCL Endpoint 2, 4, 6, 8 Byte Count Low Registers EP2BCL see Section 15.15 Endpoint 2 Byte Count Low E691 EP4BCL see Section 15.15 Endpoint 4 Byte Count Low E695 EP6BCL see Section 15.15 Endpoint 6 Byte Count Low E699 EP8BCL see Section 15.15 Endpoint 8 Byte Count Low E69D b7 b6 b5 b4 b3 b2 b1 b0 BC7/SKIP BC6 BC5 BC4 BC3 BC2 BC1 BC0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 BC[7:0] Byte Count. Low byte count for Endpoints 2, 4, 6, and 8. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 313 EP0CS E6A0 15.12.10 EP0CS Endpoint 0 Control and Status Register EP0CS Endpoint 0 Control and Status b7 b6 b5 b4 b3 E6A0 b2 b1 b0 HSNAK 0 0 0 0 0 BUSY STALL R/W R/W R/W R/W R/W R/W R R/W 1 0 0 0 0 0 0 0 Bit Name Description 7 HSNAK Hand Shake w/NAK. The STATUS stage consists of an empty data packet with the opposite direction of the data stage, or an IN if there was no data stage. This empty data packet gives the device a chance to ACK, NAK, or STALL the entire CONTROL transfer. Write a ‘1’ to the NAK (handshake NAK) bit to clear it and instruct the USB core to ACK the STATUS stage. The HSNAK bit holds off completing the CONTROL transfer until the device has had time to respond to a request.Clear the HSNAK bit (by writing ‘1’ to it) to instruct the USB core to ACK the status stage of the transfer. 1 BUSY EP0 Buffer Busy. BUSY is a read only bit that is automatically cleared when a SETUP token arrives. The BUSY bit is set by writing a byte count to EP0BCL. 0 STALL EP0 Stalled. STALL is a read/write bit that is automatically cleared when a SETUP token arrives. The STALL bit is set by writing a ‘1’ to the register bit. While STALL=1, the USB core sends the STALL PID for any IN or OUT token. This can occur in either the data or handshake phase of the CONTROL transfer. Note To indicate an endpoint stall on endpoint zero, set both the STALL and HSNAK bits. Setting the STALL bit alone causes endpoint zero to NAK forever because the host keeps the control transfer pending. 314 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP1OUTCS E6A1 15.12.11 EP1OUTCS Endpoint 1 OUT Control and Status Register EP1OUTCS b7 Endpoint 1 OUT Control and Status b6 b5 b4 b3 E6A1 b2 b1 b0 0 0 0 0 0 0 BUSY STALL R/W R/W R/W R/W R/W R/W R R/W 0 0 0 0 0 0 0 0 Bit Name Description 1 BUSY OUT Endpoint Busy. The BUSY bit indicates the status of the endpoint’s OUT Buffer EP1OUTBUF. The USB core sets BUSY=0 when the host data is available in the OUT buffer. The firmware sets BUSY=1 by loading the endpoint’s byte count register. When BUSY=1, endpoint RAM data is invalid—the endpoint buffer has been emptied by the firmware and is waiting for new OUT data from the host, or it is the process of being loaded over the USB. BUSY=0 when the USB OUT transfer is complete and endpoint RAM data in EP1OUTBUF is available for the firmware to read. USB OUT tokens for the endpoint are NAK’d while BUSY=1 (the firmware is still reading data from the OUT endpoint). A 1-to-0 transition of BUSY (indicating that the firmware can access the buffer) generates an interrupt request for the OUT endpoint. After the firmware reads the data from the OUT endpoint buffer, it loads the endpoint’s byte count register with any value to re-arm the endpoint, which automatically sets BUSY=1. This enables the OUT transfer of data from the host in response to the next OUT token. The CPU should never read endpoint data while BUSY=1. 0 STALL OUT Endpoint Stalled. Each bulk endpoint (IN or OUT) has a STALL bit in its Control and Status register (bit 0). If the CPU sets this bit, any requests to the endpoint return a STALL handshake rather than ACK or NAK. The Get Status-Endpoint Request returns the STALL state for the endpoint indicated in byte four of the request. Note that bit seven of the endpoint number EP (byte 4) specifies direction. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 315 EP1INCS E6A2 15.12.12 EP1INCS Endpoint 1 IN Control and Status Register EP1INCS Endpoint 1 IN Control and Status b7 b6 b5 b4 b3 E6A2 b2 b1 b0 0 0 0 0 0 0 BUSY STALL R/W R/W R/W R/W R/W R/W R R/W 0 0 0 0 0 0 0 0 Bit Name Description 1 BUSY IN Endpoint Busy. The BUSY bit indicates the status of the endpoint’s IN Buffer EP1INBUF. The USB core sets BUSY=0 when the endpoint’s IN buffer is empty and ready for loading by the firmware. The firmware sets BUSY=1 by loading the endpoint’s byte count register. When BUSY=1, the firmware should not write data to an IN endpoint buffer, because the endpoint FIFO could be in the act of transferring data to the host over the USB. BUSY=0 when the USB IN transfer is complete and endpoint RAM data is available for firmware access. USB IN tokens for the endpoint are NAK’d while BUSY=0 (the firmware is still loading data into the endpoint buffer). A 1-to-0 transition of BUSY (indicating that the firmware can access the buffer) generates an interrupt request for the IN endpoint. After the firmware writes the data to be transferred to the IN endpoint buffer, it loads the endpoint’s byte count register with the number of bytes to transfer, which automatically sets BUSY=1. This enables the IN transfer of data to the host in response to the next IN token. Again, the CPU should never load endpoint data while BUSY=1. The firmware writes a ‘1’ to an IN endpoint busy bit to disarm a previously armed endpoint. (This sets BUSY=0.) The firmware should do this only after a USB bus reset, or when the host selects a new interface or alternate setting that uses the endpoint. This prevents stale data from a previous setting from being accepted by the host’s first IN transfer that uses the new setting. 0 316 STALL IN Endpoint Stalled. Each bulk endpoint (IN or OUT) has a STALL bit in its Control and Status register (bit 0). If the CPU sets this bit, any requests to the endpoint return a STALL handshake rather than ACK or NAK. The Get Status-Endpoint Request returns the STALL state for the endpoint indicated in byte four of the request. Note that bit seven of the endpoint number EP (byte 4) specifies direction. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP2CS E6A3 15.12.13 EP2CS Endpoint 2 Control and Status Register EP2CS Endpoint 2 Control and Status E6A3 b7 b6 b5 b4 b3 b2 b1 b0 0 NPAK2 NPAK1 NPAK0 FULL EMPTY 0 STALL R R R R R R R R/W 0 0 1 0 1 0 0 0 Bit Name Description 6:4 NPAK[2:0] Number of Packets in FIFO. The number of packets in the FIFO. 0-4 Packets. 3 FULL Endpoint FIFO Full. 1 Indicates that the Endpoint FIFO is full. 2 EMPTY Endpoint FIFO Empty. 1 Indicates that the Endpoint FIFO is empty. 0 STALL Endpoint STALL. 1 Stall an endpoint 0 Clear a stall When the stall bit is ‘1,’ the USB core returns a STALL handshake for all requests to the endpoint. This notifies the host that something unexpected has happened. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 317 EP4CS E6A4 15.12.14 EP4CS Endpoint 4 Control and Status Register EP4CS Endpoint 4 Control and Status b7 E6A4 b6 b5 b4 b3 b2 b1 b0 0 0 NPAK1 NPAK0 FULL EMPTY 0 STALL R R R R R R R R/W 0 0 1 0 1 0 0 0 Bit Name Description 5:4 NPAK[1:0] Number of Packets in FIFO. The number of packets in the FIFO. 0-2 Packets. 3 FULL Endpoint FIFO Full. 1 Indicates that the Endpoint FIFO is full. 2 EMPTY Endpoint FIFO Empty. 1 Indicates that the Endpoint FIFO is empty. 0 STALL Endpoint STALL. 1 Stall an endpoint 0 Clear a stall When the stall bit is ‘1,’ the USB core returns a STALL handshake for all requests to the endpoint. This notifies the host that something unexpected has happened. 318 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP6CS E6A5 15.12.15 EP6CS Endpoint 6 Control and Status Register EP6CS Endpoint 6 Control and Status E6A5 b7 b6 b5 b4 b3 b2 b1 b0 0 NPAK2 NPAK1 NPAK0 FULL EMPTY 0 STALL R R R R R R R R/W 0 0 0 0 0 1 0 0 Bit Name Description 6:4 NPAK[2:0] Number of Packets in FIFO. The number of packets in the FIFO. 0-4 Packets. 3 FULL Endpoint FIFO Full. 1 Indicates that the Endpoint FIFO is full. 2 EMPTY Endpoint FIFO Empty. 1 Indicates that the Endpoint FIFO is empty. 0 STALL Endpoint STALL. 1 Stall an endpoint 0 Clear a stall When the stall bit is ‘1,’ the USB core returns a STALL handshake for all requests to the endpoint. This notifies the host that something unexpected has happened. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 319 EP8CS E6A6 15.12.16 EP8CS Endpoint 8 Control and Status Register EP8CS Endpoint 8 Control and Status b7 E6A6 b6 b5 b4 b3 b2 b1 b0 0 0 NPAK1 NPAK0 FULL EMPTY 0 STALL R R R R R R R R/W 0 0 0 0 0 1 0 0 Bit Name Description 5:4 NPAK[1:0] Number of Packets in FIFO. The number of packets in the FIFO. 0-2 Packets. 3 FULL Endpoint FIFO Full. 1 Indicates that the Endpoint FIFO is full. 2 EMPTY Endpoint FIFO Empty. 1 Indicates that the Endpoint FIFO is empty. 0 STALL Endpoint STALL. 1 Stall an endpoint 0 Clear a stall When the stall bit is ‘1,’ the USB core returns a STALL handshake for all requests to the endpoint. This notifies the host that something unexpected has happened. 320 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP2FIFOFLGS E6A7 15.12.17 EP2FIFOFLGS Endpoint 2 Slave FIFO Flags Register EP2FIFOFLGS b7 Endpoint 2 Slave FIFO Flags b6 b5 b4 E6A7 b3 b2 b1 b0 0 0 0 0 0 PF EF FF R R R R R R R R 0 0 0 0 0 0 1 0 Bit Name Description 2 PF Programmable Flag. State of the EP2 Programmable Flag. 1 EF Empty Flag. State of the EP2 Empty Flag. 0 FF Full Flag. State of the EP2 Full Flag. Note FIFOPINPOLAR settings do not affect the behavior of these bits. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 321 EP4FIFOFLGS E6A8 15.12.18 EP4FIFOFLGS Endpoint 4 Slave FIFO Flags Register EP4FIFOFLGS b7 Endpoint 4 Slave FIFO Flags b6 b5 b4 E6A8 b3 b2 b1 b0 0 0 0 0 0 PF EF FF R R R R R R R R 0 0 0 0 0 0 1 0 Bit Name Description 2 PF Programmable Flag. State of the EP4 Programmable Flag. 1 EF Empty Flag. State of the EP4 Empty Flag. 0 FF Full Flag. State of the EP4 Full Flag. Note FIFOPINPOLAR settings do not affect the behavior of these bits. 322 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP6FIFOFLGS E6A9 15.12.19 EP6FIFOFLGS Endpoint 6 Slave FIFO Flags Register EP6FIFOFLGS b7 Endpoint 6 Slave FIFO Flags b6 b5 b4 E6A9 b3 b2 b1 b0 0 0 0 0 0 PF EF FF R R R R R R R R 0 0 0 0 0 1 1 0 Bit Name Description 2 PF Programmable Flag. State of the EP6 Programmable Flag. Note The default value is different from EP2FIFOFLGS.PF and EP4FIFOFLGS.PF. 1 EF Empty Flag. State of the EP6 Empty Flag. 0 FF Full Flag. State of the EP6 Full Flag. Note FIFOPINPOLAR settings do not affect the behavior of these bits. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 323 EP8FIFOFLGS E6AA 15.12.20 EP8FIFOFLGS Endpoint 8 Slave FIFO Flags Register EP8FIFOFLGS b7 Endpoint 8 Slave FIFO Flags b6 b5 b4 E6AA b3 b2 b1 b0 0 0 0 0 0 PF EF FF R R R R R R R R 0 0 0 0 0 1 1 0 Bit Name Description 2 PF Programmable Flag. State of the EP8 Programmable Flag. Note The default value is different from EP2FIFOFLGS.PF and EP4FIFOFLGS.PF. 1 EF Empty Flag. State of the EP8 Empty Flag. 0 FF Full Flag. State of the EP8 Full Flag. Note FIFOPINPOLAR settings do not affect the behavior of these bits. 324 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP2FIFOBCH E6AB 15.12.21 EP2FIFOBCH Endpoint 2 Slave FIFO Total Byte Count High Register EP2FIFOBCH b7 Endpoint 2 Slave FIFO Total Byte Count High b6 E6AB b5 b4 b3 b2 b1 b0 0 0 0 BC12 BC11 BC10 BC9 BC8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 4:0 BC[12:8] Byte Count High Total number of bytes in Endpoint FIFO. Maximum of 4096 bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 325 EP6FIFOBCH E6AF 15.12.22 EP6FIFOBCH Endpoint 6 Slave FIFO Total Byte Count High Register EP6FIFOBCH b7 Endpoint 6 Slave FIFO Total Byte Count High b6 b5 b3 b2 b1 b0 0 0 0 0 BC11 BC10 BC9 BC8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 3:0 BC[11:8] Byte Count High. Total number of bytes in Endpoint FIFO. Maximum of 2048 bytes. 326 E6AF b4 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP4FIFOBCH E6AD 15.12.23 EP4FIFOBCH Endpoint 4 Slave FIFO Total Byte Count High Register EP4FIFOBCH b7 Endpoint 4 Slave FIFO Total Byte Count High b6 b5 b4 E6AD b3 b2 b1 b0 0 0 0 0 0 BC10 BC9 BC8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 2:0 BC[10:8] Byte Count High. Total number of bytes in Endpoint FIFO. Maximum of 1024 bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 327 EP8FIFOBCH E6B1 15.12.24 EP8FIFOBCH Endpoint 8 Slave FIFO Total Byte Count High Register EP8FIFOBCH b7 Endpoint 8 Slave FIFO Total Byte Count High b6 b5 b4 b2 b1 b0 0 0 0 0 0 BC10 BC9 BC8 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 2:0 BC[10:8] Byte Count High. Total number of bytes in Endpoint FIFO. Maximum of 1024 bytes. 328 E6B1 b3 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxFIFOBCL E6AC 15.12.25 EPxFIFOBCL Endpoint 2, 4, 6, 8 Slave FIFO Byte Count Low Registers EP2FIFOBCL Endpoint 2 Slave FIFO Total Byte Count Low E6AC EP4FIFOBCL Endpoint 4 Slave FIFO Total Byte Count Low E6AE EP6FIFOBCL Endpoint 6 Slave FIFO Total Byte Count Low E6B0 EP8FIFOBCL Endpoint 8 Slave FIFO Total Byte Count Low E6B2 b7 b6 b5 b4 b3 b2 b1 b0 BC7 BC6 BC5 BC4 BC3 BC2 BC1 BC0 R R R R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7:0 BC[7:0] Byte Count High. Low byte for number of bytes in Endpoint FIFO. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 329 SUDPTRx E6B3 15.12.26 SUDPTRx Setup Data Pointer High and Low Address Registers SUDPTRH b7 Setup Data Pointer High Address Byte b6 b5 b4 b3 E6B3 b2 b1 b0 A15 A14 A13 A12 A11 A10 A9 A8 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x b6 b5 b2 b1 b0 SUDPTRL b7 Setup Data Pointer Low Address Byte b4 b3 E6B4 A7 A6 A5 A4 A3 A2 A1 A0 R/W R/W R/W R/W R/W R/W R/W R x x x x x x x 0 Bit Name Description 15:0 A[15:0] Setup Data Pointer. This buffer is used as a target or source by the Setup Data Pointer and it must be WORD (2-byte) aligned. This 16-bit pointer, SUDPTRH:L provides hardware assistance for handling CONTROL IN transfers. When the firmware loads SUDPTRL, the SIE automatically responds to IN commands with the appropriate data. If SDPAUTO=1, the length field is taken from the packet or descriptor. If SDPAUTO=0, SUDPTRL triggers a send to the host and the length is taken from the EP0BCH and EP0BCL bytes. 330 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F SUDPTRCTL E6B5 15.12.27 SUDPTRCTL Setup Data Pointer Auto Register SUDPTRCTL b7 Setup Data Pointer AUTO Mode b6 b5 b4 b3 E6B5 b2 b1 b0 0 0 0 0 0 0 0 SDPAUTO R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 1 Bit Name Description 0 SDPAUTO Setup Data Pointer Auto Mode. To send a block of data using the Setup Data Pointer, the block’s starting address is loaded into SUDPTRH:L. The block length must previously have been set; the method for accomplishing this depends on the state of the SDPAUTO bit. 0 Manual Mode. Used for general purpose block transfers. Firmware writes the block length to EP0BCH:L. 1 Auto Mode. Used for sending Device, Configuration, String, Device Qualifier, and Other Speed Configuration descriptors only. The block length is automatically read from the length field of the descriptor itself; no explicit loading of EP0BCH:L is necessary. Writing to SUDPTRL starts the transfer; the EZ-USB automatically sends the entire block, packetizing as necessary. Note When SDPAUTO = 0, writing to EP0BCH:L only sets the block length; it does not arm the transfer (the transfer is armed by writing to SUDPTRL). Therefore, before performing an EP0 transfer which does not use the Setup Data Pointer (such as, one which is meant to be armed by writing to EP0BCL), SDPAUTO must be set to ‘1’. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 331 SETUPDAT E6B8- 15.12.28 SETUPDAT Setup Data - Eight Bytes Registers SETUPDAT 8 Bytes of Setup Data E6B8-E6BF b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R R R R x x x x x x x x The setup data bytes are defined as follows: SETUPDAT[0] = bmRequestType SETUPDAT[1] = bmRequest SETUPDAT[2:3] = wValue SETUPDAT[4:5] = wIndex SETUPDAT[6:7] = wLength This buffer contains the eight bytes of SETUP packet data from the most recently received CONTROL transfer. The data in SETUPBUF is valid when the SUDAV (Setup Data Available) interrupt request bit is set. 332 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFWFSELECT E6C0 15.13 General Programmable Interface 15.13.1 GPIFWFSELECT GPIF Waveform Selector Register GPIFWFSELECT Waveform Selector E6C0 b7 b6 b5 b4 b3 b2 b1 b0 SINGLEWR1 SINGLEWR0 SINGLERD1 SINGLERD0 FIFOWR1 FIFOWR0 FIFORD1 FIFORD0 R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 0 0 1 0 0 Bit Name Description 7:6 SINGLEWR[1:0] Single Write Waveform Index. Index to the Waveform program to run when a ‘Single Write’ is triggered by the firmware. 5:4 SINGLERD[1:0] Single Read Waveform Index. Index to the Waveform program to run when a ‘Single Read’ is triggered by the firmware. 3:2 FIFOWR[1:0] FIFO Write Waveform Index. Index to the Waveform program to run when a ‘FIFO Write’ is triggered by the firmware. 1:0 FIFORD[1:0] FIFO Read Waveform Index. Index to the Waveform program to run when a ‘FIFO Read’ is triggered by the firmware. Select waveform 0 [00], 1 [01], 2 [10] or 3 [11]. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 333 GPIFIDLECS E6C1 15.13.2 GPIFIDLECS GPIF Done and Idle Drive Mode Register GPIFIDLECS b7 GPIF Done, GPIF Idle Drive Mode b6 b5 b4 b3 E6C1 b2 b1 b0 DONE 0 0 0 0 0 0 IDLEDRV R/W R/W R/W R/W R/W R/W R/W R/W 1 0 0 0 0 0 0 0 Bit Name Description 7 DONE GPIF Idle State. 0 Transaction in progress. 1 Transaction Done (GPIF is idle, hence GPIF is ready for next transaction). Fires IRQ4 if enabled. 0 IDLEDRV Set Data Bus when GPIF Idle. When the GPIF is idle: 0 Tri-state the Data Bus. 1 Drive the Data Bus. 334 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFIDLECTL E6C2 15.13.3 GPIFIDLECTL CTL Output in Idle Register GPIFIDLECTL CTL Output States in Idle b7 b6 0/‘CTLOE3 0/CTLOE2 b5 E6C2 b4 b3 b2 b1 b0 CTL3 CTL2 CTL1 CTL0 CTL5/ CTL4/ CTLOE1 CTLOE0 R/W R/W R/W R/W R/W R/W R/W R/W 1 1 1 1 1 1 1 1 Bit Name Description 7:4 CTLOE[3:0] CTL Output Enables. 5:0 CTL[5:0] CTL Output States. See GPIFCTLCFG register on page 336. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 335 GPIFCTLCFG E6C3 15.13.4 GPIFCTLCFG CTL Output Drive Type Register GPIFCTLCFG CTL Output Drive Type b7 E6C3 b6 b5 b4 b3 b2 b1 b0 TRICTL 0 CTL5 CTL4 CTL3 CTL2 CTL1 CTL0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7 TRICTL Number Active Outputs/Tri-stating. 5:0 CTL[5:0] CTL Output Drive Type The GPIF Control pins (CTL[5:0]) have several output modes: ■ ■ CTL[3:0] can act as CMOS outputs (optionally tri-statable) or open-drain outputs. CTL[5:4] can act as CMOS outputs or open-drain outputs. If CTL[3:0] are configured to be tri-statable, CTL[5:4] are not available. TRICTL (GPIFCTLCFG.7) GPIFCTLCFG[5:0] 0 0 CMOS, Not Tri-statable CMOS, Not Tri-statable 0 1 Open-Drain Open-Drain 1 X CMOS, Tri-statable Not Available CTL[3:0] CTL[5:4] During the IDLE State, the state of CTL[5:0] depends on register bits: TRICTL (GPIFCTLCFG.7) GPIFCTLCFG[5:0] GPIFIDLECTL[5:0] The combination of these bits defines CTL5:0 during IDLE as follows: ■ If TRICTL is 0, GPIFIDLECTL[5:0] directly represent the output states of CTL5:0 during the IDLE State. The GPIFCTLCFG[5:0] bits determine whether the CTL5:0 outputs are CMOS or opendrain: If GPIFCTLCFG.x = 0, CTLx is CMOS; if GPIFCTLCFG.x = 1, CTLx is open drain. ■ If TRICTL is 1, GPIFIDLECTL[7:4] are the output enables for the CTL[3:0] signals, and GPIFIDLECTL[3:0] are the output values for CTL[3:0]. CTL4 and CTL5 are unavailable in this mode. (continued on next page) 336 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFCTLCFG E6C3 15.13.4 GPIFCTLCFG (continued) TRICTL Control Output Output State CTL0 GPIFIDLECTL.0 CTL1 GPIFIDLECTL.1 CTL2 GPIFIDLECTL.2 0 Output Enable N/A (CTL Outputs are always CTL3 GPIFIDLECTL.3 CTL4 GPIFIDLECTL.4 CTL5 GPIFIDLECTL.5 CTL0 GPIFIDLECTL.0 GPIFIDLECTL.4 CTL1 GPIFIDLECTL.1 GPIFIDLECTL.5 CTL2 GPIFIDLECTL.2 GPIFIDLECTL.6 CTL3 GPIFIDLECTL.3 GPIFIDLECTL.7 enabled when TRICTL = 0) 1 CTL4 N/A CTL5 (CTL4 and CTL5 are not available when TRICTL = 1) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 337 GPIFADRH E6C4 15.13.5 GPIFADRH GPIF Address High Register GPIFADRH see Section 15.15 GPIF Address High b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 0 GPIFA8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 0 GPIFA8 High Bit of GPIF Address. See GPIFADRL register on page 339. 338 E6C4 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFADRL E6C5 15.13.6 GPIFADRL GPIF Address Low Register GPIFADRL see Section 15.15 GPIF Address Low E6C5 b7 b6 b5 b4 b3 b2 b1 b0 GPIFA7 GPIFA6 GPIFA5 GPIFA4 GPIFA3 GPIFA2 GPIFA1 GPIFA0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 7:0 GPIFA[7:0] Lower eight bits of GPIF Address. Data written to this register immediately appears as the bus address on the ADR[7:0] pins. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 339 FLOWSTATE E6C6 15.13.7 FLOWSTATE GPIF Flow State Register FLOWSTATE b7 E6C6 b6 b5 b4 b3 b2 b1 b0 FSE 0 0 0 0 RW R R R R RW FS[2:0] RW RW 0 0 0 0 0 0 0 0 Any one (and only one) of the seven GPIF states in a waveform can be programmed to be the flow state. This register defines which state, if any, in the next invoked GPIF waveform will be the flow state. Bit Name Description 7 FSE Global Flow State Enable. Global enable for the flow state. When it is disabled all flow state registers are don’t care and the next waveform invocation does not cause a flow state to be used. 2:0 FS[2:0] Flow State Selection. Defines which GPIF state is the flow state. Valid values are 0-6. 340 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FLOWLOGIC E6C7 15.13.8 FLOWLOGIC GPIF Flow State Logic Register FLOWLOGIC b7 E6C7 b6 b5 RW RW RW 0 0 0 b4 LFUNC[1:0] b3 b2 RW RW RW RW RW 0 0 0 0 0 TERMA[2:0] b1 b0 TERMB[2:0] The bit definitions for this register are analogous to the bit definitions in the RDY LOGIC opcode in a waveform descriptor. Except, instead of controlling the branching for a decision point, it controls the freezing or flowing of data on the bus in a flow state. The user defines the states of CTL[5:0] for when the flow logic equals ‘0’ and ‘1’ (see FLOWEQ0_CTL and FLOWEQ1_CTL). This is useful in activating or deactivating protocol ready signals to hold off an external master (where the GPIF is acting like a slave) in response to internal FIFO flags warning of an impending underflow or overflow situation. In the case where the GPIF is the master, the user also defines whether Master strobe (a CTL pin in this case; see FLOWSTB) toggles (reads or writes data on the bus) when the flow logic evaluates to a ‘1’ or a ‘0’. This is useful for the GPIF to consider protocol ready signals from the slave as well as FIFO flags to decide when to clock data out of or into the FIFOs and when to freeze the data flow instead. It should be noted that this flow logic does not replace the decision point logic defined in a waveform descriptor. The decision point logic in a waveform descriptor is still used to decide when to branch out of the flow state. The decision point logic can use an entirely different pair of ready signals than the flow logic in making its decisions. Bit Name Description 7:6 LFUNC[1:0] Flow State Logic Function. 00 A AND B 01 A OR B 10 A XOR B 11 !A AND B Since the flow logic decision can be based on the output being a ‘1’ or a ‘0’, NAND, NOR, XNOR and !(!A AND B) operations can be achieved as well. Note that !(!A AND B) is the same as (A OR !B). 5:3 TERMA[2:0] Flow State Logic Function Arguments. 2:0 TERMB[2:0] 0 1 2 3 4 5 6 7 RDY[0] RDY[1] RDY[2] RDY[3] RDY[4] RDY[5] or TC-Expiration (depending on GPIF_READYCFG.5) FIFO Flag (PF, EF, or FF depending on GPIF_EPxFLGSEL) 8051 RDY (GPIF_READYCFG.7) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 341 FLOWEQxCTL E6C8 15.13.9 FLOWEQxCTL GPIF Flow Logic CTL Output Drive Registers FLOWEQ0CTL E6C8 b7 b6 b5 b4 b3 b2 b1 b0 CTLOE3 CTLOE2 CTLOE1/ CTL5 CTLOE0/ CTL4 CTL3 CTL2 CTL1 CTL0 RW RW RW RW RW RW RW RW 0 0 0 0 0 0 0 0 b7 b6 b5 b4 b3 b2 b1 b0 CTLOE3 CTLOE2 CTLOE1/ CTL5 CTLOE0/ CTL4 CTL3 CTL2 CTL1 CTL0 RW RW RW RW RW RW RW RW 0 0 0 0 0 0 0 0 FLOWEQ1CTL E6C9 FLOWEQ0CTL defines the state of the CTL5:0 pins when the output of the flow logic equals zero; FLOWEQ1CTL defines the state when the logic output equals one. During a flow state, the CTL opcode in the waveform descriptor is completely ignored and the behavior of the CTL[5:0] pins are defined by these two registers instead. Bit Name CTLOEx Description If TRICTL = 1, CTL5:4 are unused and CTLOE3:0 specifies whether the corresponding CTL3:0 output signals are tri-stated. 0 Tri-state CTLx 1 CTLx Drive CTLx Specifies the state to set each CTLx signal to during this entire State. 1 High level If the CTLx bit in the GPIFCTLCFG register is set to ‘1’, the output driver is an open drain. If the CTLx bit in the GPIFCTLCFG register is set to ‘0’, the output driver is driven to CMOS levels. 0 Low level Defined by FLOWEQxCTL and these bits, instead: TRICTL (GPIFCTLCFG.7), as described in section 10.2.3.1 Control Output Modes on page 124. GPIFCTLCFG[5:0]. The combination of these bits defines CTL5:0 during a Flow State as follows: ■ If TRICTL is ‘0’, FLOWEQxCTL[5:0] directly represent the output states of CTL5:0 during the Flow State. The GPIFCTLCFG[5:0] bits determine whether the CTL5:0 outputs are CMOS or open drain: If GPIFCTLCFG.x = 0, CTLx is CMOS; if GPIFCTLCFG.x = 1, CTLx is open drain. ■ If TRICTL is ‘1’, FLOWEQxCTL[7:4] are the output enables for the CTL[3:0] signals, and FLOWEQxCTL[3:0] are the output values for CTL[3:0]. CTL4 and CTL5 are unavailable in this mode. (continued on next page) 342 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FLOWEQxCTL E6C8 15.13.9 FLOWEQxCTL (continued) Drive Type TRICTL Control Output Output State Output Enable (0 = CMOS, 1 = Open-Drain) CTL0 FLOWEQxCTL.0 GPIFCTLCFG.0 CTL1 FLOWEQxCTL.1 GPIFCTLCFG.0 CTL2 FLOWEQxCTL.2 GPIFCTLCFG.0 CTL3 FLOWEQxCTL.3 GPIFCTLCFG.0 CTL4 FLOWEQxCTL.4 GPIFCTLCFG.0 CTL5 FLOWEQxCTL.5 GPIFCTLCFG.0 CTL0 FLOWEQxCTL.0 CTL1 FLOWEQxCTL.1 CTL2 FLOWEQxCTL.2 CTL3 FLOWEQxCTL.3 0 N/A (CTL Outputs are always 1 N/A (CTL Outputs are always tri-statable CMOS when TRICTL = 1) enabled when TRICTL = 0) FLOWEQxCTL.4 FLOWEQxCTL.5 FLOWEQxCTL.6 FLOWEQxCTL.7 CTL4 N/A CTL5 (CTL4 and CTL5 are not available when TRICTL = 1) EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 343 FLOWSTB E6CB 15.13.10 FLOWSTB GPIF Flow Master Strobe Register FLOWSTB E6CB b7 b6 b5 b4 b3 b2 b1 b0 SLAVE RDYASYNC CTLTOGL SUSTAIN 0 RW RW RW RW R RW RW RW 0 0 1 0 0 0 0 0 MSTB[2:0] Based on suggested FLOW_LOGIC settings. This register defines the Master strobe that causes data to be read or written during a flow state. For transactions where GPIF is the slave on the bus, the Master strobe is one of the RDY[5:0] pins. This includes external masters that can either write data into GPIF (for example, UDMA IN) or read data out of GPIF. For transactions where GPIF is the master on the bus, the Master strobe is one of the CTL[5:0] pins. This includes cases where the GPIF writes data out to a slave (for example, UDMA OUT) or reads data from a slave. Bit Name Description 7 SLAVE 0 GPIF is the master of the bus transaction. This means that one of the CTL[5:0] pins is the Master strobe and the particular one is selected by MSTB[2:0]. 1 GPIF is the slave of the bus transaction. This means that one of the RDY[5:0] pins is the Master strobe and the particular one is selected by MSTB[2:0]. 6 RDYASYNC If SLAVE is ‘0’ then this bit is ignored, otherwise: 0 1 Master strobe (which is a RDY pin in this case) is synchronous to IFCLK. Master strobe (which is a RDY pin in this case) is asynchronous to IFCLK. 5 CTLTOGL If SLAVE is ‘1’ then this bit is ignored. Otherwise, this bit defines which state of the flow logic (see FLOWLOGIC) causes Master strobe (which is a CTL pin in this case) to toggle. For example, if this bit is set to ‘1’, then if the output of the flow logic equals ‘1’ then Master strobe toggles causing data to flow on the bus. If in the same example the output of the flow logic equals ‘0’ then Master strobe freezes causing data flow to halt on the bus. 4 SUSTAIN If SLAVE is ‘1’ then this bit is ignored. Upon exiting a flow state in which SLAVE is ‘0’, Master strobe (which is a CTL pin in this case) normally goes back to adhering to the CTL opcodes defined in the waveform descriptor. 2:0 MSTB[2:0] If SLAVE is ‘0’ then these bits select which CTL[5:0] pin is the Master strobe. If SLAVE is ‘1’ then these bits select which RDY[5:0] pin is the Master strobe. 344 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FLOWHOLDOFF E6CA 15.13.11 FLOWHOLDOFF GPIF Flow Holdoff Register FLOWHOLDOFF E6CA b7 b6 b5 b4 RW RW RW RW RW RW 0 RW RW 0 0 1 0 0 1 0 HOPERIOD[3:0] b3 b2 HOSTATE b1 b0 HOCTL[2:0] For flow state transactions that meet the following criteria: 1. 1. 2. 3. The interface is asynchronous. GPIF is acting like a slave (FLOWSTB.SLAVE = 1), and thus Master strobe is a RDY pin. Data is being written into the GPIF. The rate at which data is being written in exceeds 96 MB/s for a word wide data bus or 48 MB/s for a byte wide data bus. Bit Name Description 7:4 HOPERIOD[3:0] Defines how many IFCLK cycles to assert not ready (HOCTL) to the external master in order to allow the synchronization interface to catch up. 3 HOSTATE Defines what the state of the HOCTL signal should be in to assert not ready. 2:0 HOCTL[2:0] Defines which of the six CTL[5:0] pins is the HOCTL signal that asserts not ready to the external master when the synchronization detects a potential overflow coming. It should coincide with the CTL[5:0] pin that is picked as the ‘not ready’ signal for the (macro-level) endpoint FIFO overflow protection. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 345 FLOWSTBEDGE E6CC 15.13.12 FLOWSTBEDGE GPIF Flow Master Strobe Edge Register FLOWSTBEDGE b7 E6CC b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 FALLING RISING R R R R R R R/W RW 0 0 0 0 0 0 0 1 This register defines whether the Master strobe (see FLOWSTB) causes data to read or write on the falling edge, the rising edge, or both (double edge). Bit Name Description 1 FALLING 0 1 0 RISING 0 Data is not transferred on the rising edge of Master strobe 1 Data is transferred on the rising edge of Master strobe To cause data to transfer on both edges of Master strobe, set both bits to ‘1’. 346 Data is not transferred on the falling edge of Master strobe Data is transferred on the falling edge of Master strobe EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F FLOWSTBHPERIOD E6CD 15.13.13 FLOWSTBHPERIOD GPIF Flow Master Strobe Half Period Register FLOWSTBHPERIOD b7 E6CD b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 RW RW RW RW RW RW RW RW 0 0 0 0 0 0 1 0 If the flow state is such that the GPIF is the master on the bus (FLOWSTB.SLAVE = 0) then Master strobe is one of the CTL[5:0] pins (see FLOWSTB). While in the flow state, if the flow logic (see FLOWLOGIC) evaluates in such a way that Master strobe toggles (see FLOWSTB.CTLTOGL), then this register defines the frequency at which it toggles. More precisely, this register defines the half period of the Master strobe toggling frequency. Furthermore, to give the user a high degree of resolution this Master strobe, half period is defined in terms of half IFCLK periods. Therefore, if IFCLK is running at 48 MHz, this gives a resolution of 10.4 ns. Bit Name Description 7:0 D[7:0] Master Strobe Half-Period. Number of half IFCLK periods that define the half period of Master strobe (if it is a CTL pin). The value must be at least ‘2’, meaning that the minimum half period for Master strobe is one full IFCLK cycle. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 347 GPIFHOLDAMOUNT E60C 15.13.14 GPIFHOLDAMOUNT GPIF Hold Amount Register GPIFHOLDAMOUNT b7 E60C b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 R R R R R R RW HOLDTIME[1:0] RW 0 0 0 0 0 0 0 0 For any transaction where the GPIF writes data onto FD[15:0], this register determines how long the data is held. Valid choices are 0, ½ or 1 IFCLK cycle. This register applies to any data written by the GPIF to FD[15:0], whether through a flow state or not. For non-flow states, the hold amount is really just a delay of the normal (non-held) presentation of FD[15:0] by the amount specified in HOLDTIME[1:0]. For flow states in which the GPIF is the master on the bus (FLOWSTB.SLAVE = 0), the hold amount is with respect to the activating edge (see FLOW_MASTERSTB_EDGE) of Master strobe (which is a CTL pin in this case). For flow states in which the GPIF is the slave on the bus (FLOWSTB.SLAVE = 1), the hold amount is really just a delay of the normal (non-held) presentation of FD[15:0] by the amount specified in HOLDTIME[1:0] in reaction to the activating edge of Master strobe (which is a RDY pin in this case). Note that the hold amount is NOT ‘directly with respect to’ the activating edge of Master strobe in this case; it is with respect to when the data normally comes out in response to Master strobe including any latency to synchronize Master strobe. In all cases, the data is held for the desired amount even if the ensuing GPIF state calls for the data bus to be tri-stated. In other words the FD[15:0] output enable is held by the same amount as the data itself. Bit Name Description 1:0 HOLDTIME[1:0] GPIF Hold Time. 00 0 IFCLK cycles 01 ½ IFCLK cycle 10 1 IFCLK cycle 11 Reserved 348 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFTCBx E6CE 15.13.15 GPIFTCBx GPIF Transaction Count Byte Registers GPIFTCB3 see Section 15.15 GPIF Transaction Count Byte 3 E6CE b7 b6 b5 b4 b3 b2 b1 b0 TC31 TC30 TC29 TC28 TC27 TC26 TC25 TC24 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 GPIFTCB2 see Section 15.15 GPIF Transaction Count Byte 2 E6CF b7 b6 b5 b4 b3 b2 b1 b0 TC23 TC22 TC21 TC20 TC19 TC18 TC17 TC16 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 GPIFTCB1 see Section 15.15 GPIF Transaction Count Byte 1 E6D0 b7 b6 b5 b4 b3 b2 b1 b0 TC15 TC14 TC13 TC12 TC11 TC10 TC9 TC8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 GPIFTCB0 see Section 15.15 GPIF Transaction Count Byte 0 E6D1 b7 b6 b5 b4 b3 b2 b1 b0 TC7 TC6 TC5 TC4 TC3 TC2 TC1 TC0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 1 Bit Name Description 31:0 TC31:0 GPIF Transaction Count. Note Registers GPIFTCB3, GPIFTCB2, GPIFTCB1, and GPIFTCB0 represent the live update of GPIF transactions. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 349 EPxGPIFFLGSEL E6D2 15.13.16 EPxGPIFFLGSEL Endpoint 2, 4, 6, 8 GPIF Flag Select Registers EP2GPIFFLGSEL see Section 15.15 Endpoint 2 GPIF Flag Select E6D2 EP4GPIFFLGSEL see Section 15.15 Endpoint 4 GPIF Flag Select E6DA EP6GPIFFLGSEL see Section 15.15 Endpoint 6 GPIF Flag Select E6E2 EP8GPIFFLGSEL see Section 15.15 Endpoint 8 GPIF Flag Select E6EA b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 FS1 FS0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 1:0 FS[1:0] GPIF Flag Select. 00 Programmable 01 Empty 10 Full 11 Reserved Only one FIFO flag at a time may be made available to the GPIF as a control input. The FS1:FS0 bits select which flag is made available. 350 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EPxGPIFPFSTOP E6D3 15.13.17 EPxGPIFPFSTOP Endpoint 2, 4, 6, and 8 GPIF Stop Transaction Registers EP2GPIFPFSTOP Endpoint 2 GPIF Stop Transaction E6D3 EP4GPIFPFSTOP Endpoint 4 GPIF Stop Transaction E6DB EP6GPIFPFSTOP Endpoint 6 GPIF Stop Transaction E6E3 EP8GPIFPFSTOP Endpoint 8 GPIF Stop Transaction E6EB b7 b6 b5 b4 b3 b2 b1 b0 0 0 0 0 0 0 0 FIFO[2,4,6,8]FLAG R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Bit Name Description 0 EP[2,4,6,8]PF Stop on Endpoint Programmable Flag. 1 GPIF transitions to ‘DONE’ state when the flag selected by EPxGPIFFLGSEL is asserted. 0 When transaction count has been met. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 351 EPxGPIFTRIG E6D4 15.13.18 EPxGPIFTRIG Endpoint 2, 4, 6, and 8 Slave FIFO GPIF Trigger Registers EP2GPIFTRIG see Section 15.15 Endpoint 2 Slave FIFO GPIF Trigger E6D4 EP4GPIFTRIG see Section 15.15 Endpoint 4 Slave FIFO GPIF Trigger E6DC EP6GPIFTRIG see Section 15.15 Endpoint 6 Slave FIFO GPIF Trigger E6E4 EP8GPIFTRIG see Section 15.15 Endpoint 8 Slave FIFO GPIF Trigger E6EC b7 b6 b5 b4 b3 b2 b1 x x x x x x x b0 x W W W W W W W W x x x x x x x x Write 0xFF to this register to initiate a GPIF write. Read from this register to initiate a GPIF read. 352 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F XGPIFSGLDATH E6F0 15.13.19 XGPIFSGLDATH GPIF Data High (16 Bit Mode) Register XGPIFSGLDATH b7 GPIF Data HIGH (16 Bit Mode) b6 b5 b4 b3 E6F0 b2 b1 b0 D15 D14 D13 D12 D11 D10 D9 D8 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 D[15:8] GPIF Data High. Contains the data written to or read from the FD[15:8] (PORTD) pins using the GPIF waveform. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 353 XGPIFSGLDATL E6F1 15.13.20 XGPIFSGLDATL Read/Write GPIF Data Low and Trigger Transaction Register XGPIFSGLDATLX b7 Read/Write GPIF Data Low and Trigger Transaction b6 b5 b4 b3 b2 E6F1 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W x x x x x x x x Bit Name Description 7:0 D[7:0] GPIF Data Low /Trigger GPIF Transaction. Contains the data written to or read from the FD[7:0] (PORTB) pins. Reading or writing low-byte triggers a GPIF transaction. 354 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F XGPIFSGLDATLNOX E6F2 15.13.21 XGPIFSGLDATLNOX Read GPIF Data Low, No Transaction Trigger Register XGPIFSGLDATLNOX E6F2 Read GPIF Data Low, No Transaction Trigger b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R R R R x x x x x x x x Bit Name Description 7:0 D[7:0] GPIF Data Low / Do Not Trigger GPIF Transaction. Contains the data written to or read from the FD[7:0] (PORTB) pins. Read or write low byte does not trigger GPIF transaction. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 355 GPIFREADYCFG E6F3 15.13.22 GPIFREADYCFG GPIF RDY Pin Configuration Register GPIFREADYCFG GPIF RDY Pin Configuration b4 b3 E6F3 b7 b6 b5 b2 b1 b0 INTRDY SAS TCXRDY5 0 0 0 0 0 R/W R/W R/W R R R R R 0 0 0 0 0 0 0 0 Bit Name Description 7 INTRDY Force Ready Condition. Internal RDY. Functions as a sixth RDY input, controlled by the firmware instead of a RDY pin. 6 SAS RDY Signal Connection to GPIF Input Logic. Synchronous/Asynchronous RDY signals. This bit controls how the RDY signals connect to the GPIF input logic. If the internal IFCLK is used to clock the GPIF, the RDY signals can make transitions in an asynchronous manner, i.e. not referenced to the internal clock. Setting SAS=0 causes the RDY inputs to pass through two flip-flops for synchronization purposes. If the RDY signals are synchronized to IFCLK, and obey the setup and hold times with respect to this clock, the user can set SAS=1, which causes the RDY signals to pass through a single flip flop. 5 356 TCXRDY5 TC Expiration Replaces RDY5. To use the transaction count expiration signal as a ready input to a waveform, set this bit to ‘1’. Setting this bit takes the place of the pin RDY5 in the decision point of the waveform. The default value of the bit is zero (in other words, the RDY5 from the pin prevails). EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F GPIFREADYSTAT E6F4 15.13.23 GPIFREADYSTAT GPIF RDY Pin Status Register GPIFREADYSTAT b7 E6F4 GPIF RDY Pin Status b6 b5 b4 b3 b2 b1 b0 0 0 RDY5 RDY4 RDY3 RDY2 RDY1 RDY0 R R R R R R R R 0 0 x x x x x x Bit Name Description Bit 5-0 RDY5:0 Current State of Ready Pins. RDYx. Instantaneous states of the RDY pins. The current state of the RDY[5:0] pins, sampled at each rising edge of the GPIF clock. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 357 GPIFABORT E6F4 15.13.24 GPIFABORT Abort GPIF Cycles Register GPIFABORT b7 Abort GPIF b6 b5 b4 E6F5 b3 b2 b1 b0 x x x x x x x x W W W W W W W W x x x x x x x x Write 0xFF to immediately abort a GPIF transaction and transition to the Idle State. 358 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP0BUF E740- 15.14 Endpoint Buffers 15.14.1 EP0BUF EP0 IN-OUT Buffer Register EP0BUF EP0 IN/OUT Buffer E740-E77F b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP0 Data. EP0 Data buffer (IN/OUT). 64 bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 359 EP1OUTBUF E780- 15.14.2 EP1OUTBUF Endpoint 1-OUT Buffer Register EP1OUTBUF EP1-OUT Buffer b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP1-Out Data. EP1-Out Data buffer. 64 bytes. 360 E780-E7BF b7 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP1INBUF E7C0- 15.14.3 EP1INBUF Endpoint 1-IN Buffer Register EP1INBUF EP1-IN Buffer E7C0-E7FF b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP1-IN Buffer. EP1-IN Data buffer. 64 bytes. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 361 EP2FIFOBUF F000- 15.14.4 EP2FIFOBUF Endpoint 2/Slave FIFO Buffer Register EP2FIFOBUF 512/1024-byte EP2/Slave FIFO Buffer b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:]0 EP2 Data. 512/1024-byte EP2 buffer. 362 F000-F3FF b7 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP4FIFOBUF F400- 15.14.5 EP4FIFOBUF 512-byte Endpoint 4/Slave FIFO Buffer Register EP4FIFOBUF 512-byte EP4/Slave FIFO Buffer F400-F5FF b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP4 Data. 512 byte EP4 buffer. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 363 EP6FIFOBUF F800- 15.14.6 EP6FIFOBUF 512/1024-byte Endpoint 6/Slave FIFO Buffer Register EP6FIFOBUF 512/1024-byte EP6/Slave FIFO Buffer b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP6 Data. 512/1024 byte EP6 buffer. 364 F800-FBFF b7 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP8FIFOBUF FC00- 15.14.7 EP8FIFOBUF 512-byte Endpoint 8/Slave FIFO Buffer Register EP8FIFOBUF 512-byte EP8/Slave FIFO Buffer FC00-FDFF b7 b6 b5 b4 b3 b2 b1 b0 D7 D6 D5 D4 D3 D2 D1 D0 R/W R/W R/W R/W R/W R/W R/W R/W X X X X X X X X Bit Name Description 7:0 D[7:0] EP8 Data. 512 byte EP8 buffer. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 365 Registers 15.15 Synchronization Delay Under certain conditions, some read and write accesses to EZ-USB registers must be separated by a synchronization delay. The delay is necessary only under the following conditions: ■ Between a write to any register in the 0xE600-0xE6FF range and a write to one of the registers in Table 15-6. ■ Between a write to one of the registers in Table 15-6 and a read from any register in the 0xE600-0xE6FF range. Table 15-6. Registers that Require a Synchronization Delay: FIFORESET FIFOPINPOLAR ECCCFG INPKTEND EPxBCH:L ECCRESET EPxFIFOPFH:L EPxAUTOINLENH:L ECC1B0 EPxFIFOCFG EPxGPIFFLGSEL ECC1B1 PINFLAGSAB PINFLAGSCD ECC1B2 EPxFIFOIE EPxFIFOIRQ ECC2B0 GPIFIE GPIFIRQ ECC2B1 UDMACRCH:L GPIFADRH:L ECC2B2 GPIFTRIG EPxGPIFTRIG OUTPKTEND REVCTL GPIFTCB3 GPIFTCB2 GPIFTCB1 GPIFTCB0 The minimum delay length is a function of the IFCLK and CLKOUT (CPU Clock) frequencies, and is determined by the equation: IFCLK Period - + 1 1.5 --------------------------------------- CLKOUT Period Minimum Sync Delay, in CPU cycles = Note n means “round n upward” Equation 1 The required delay length is smallest when the CPU is running at its slowest speed (12 MHz, 83.2 ns/cycle) and IFCLK is running at its fastest speed (48 MHz, 20.8 ns/cycle). Under those conditions, the minimum required delay is: 1.5 20.8 ---------- + 1 83.2 = 1.5 1.25 = 1.875 = 2 CPU Cycles Equation 2 The longest delay is required when the CPU is running at its fastest speed (48MHz, 20.8 ns/cycle) and IFCLK is running much slower (e.g., 5.2 MHz, 192 ns/cycle): 192- + 1 1.5 -------- 20.8 = 1.5 10.23 = 15.3 = 16 CPU Cycles Equation 3 The most typical EZ-USB configuration, IFCLK and CLKOUT both running at 48 MHz, requires a minimum delay of: : 1.5 20.8 ---------- + 1 20.8 = 1.5 2 = 3 = 3 CPU Cycles Equation 4 The Frameworks firmware supplied with the EZ-USB Development Kit includes a macro, called SYNCDELAY, which implements the synchronization delay. The macro is in the file fx2sdly.h. These delay cycles are in addition to the two clocks used by the MOVX instruction. 366 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Appendix A. Descriptors for FullSpeed Mode Table A-1 through Table A-25 show the descriptor data built into the EZ-USB logic. The tables are presented in the order that the bytes are stored. Table A-1. Default USB Device Descriptor Offset Field Description Value 0 bLength Length of this Descriptor = 18 bytes 12h 1 bDescriptorType Descriptor Type = Device 01h 2 bcdUSB (L) USB Specification Version 2.00 (L) 00h 3 bcdUSB (H) USB Specification Version 2.00 (H) 02h 4 bDeviceClass Device Class (FF is Vendor Specific) FFh 5 bDeviceSubClass Device Sub-class (FF is Vendor Specific) FFh 6 bDeviceProtocol Device Protocol (FF is Vendor Specific) FFh 7 bMaxPacketSize0 Maximum Packet Size for EP0 = 64 bytes 40h 8 idVendor (L) Vendor ID (L) B4h 9 idVendor (H) Vendor ID (H) 10 idProduct (L) Product ID (L) 11 idProduct (H) Product ID (H) 86h 12 bcdDevice (L) Device Release Number (BCD,L) (see individual data sheet) xxh 13 bcdDevice (H) Device Release Number (BCD,H) (see individual data sheet) xxh 14 iManufacturer Manufacturer Index String = None 00h 15 iProduct Product Index String = None 00h 16 iSerialNumber Serial number Index String = None 00h 17 bNumConfigurations Number of Configurations in this Interface = 1 01h Cypress Semi = 04B4H 04h FX2LP = 8613H, FX1 = 6473H 13h The Device Descriptor specifies a MaxPacketSize of 64 bytes for endpoint 0, contains Cypress Semiconductor Vendor, Product and Release Number IDs, and uses no string indices. Release Number IDs (XX and YY) are found in individual Cypress Semiconductor data sheets. The EZ-USB logic returns this information response to a Get_Descriptor/Device host request. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 367 Descriptors for Full-Speed Mode Table A-2. Device Qualifier Offset Field Description Value 0 bLength Length of this Descriptor = 10 bytes 0Ah 1 bDescriptorType Descriptor Type = Device Qualifier 06h 2 bcdUSB (L) USB Specification Version 2.00 (L) 00h 3 bcdUSB (H) USB Specification Version 2.00 (H) 02h 4 bDeviceClass Device Class (FF is Vendor Specific) FFh 5 bDeviceSubClass Device Sub-class (FF is Vendor Specific) FFh 6 bDeviceProtocol Device Protocol (FF is Vendor Specific) FFh 7 bMaxPacketSize0 Maximum Packet Size for other speed = 64 bytes 40h 8 bNumConfigurations Number of other Configurations = 1 01h 9 bReserved Must be set to zero 00h Table A-3. USB Default Configuration Descriptor Offset Field Description Value 0 bLength Length of this Descriptor = 9 bytes 09h 1 bDescriptorType Descriptor Type = Configuration 02h 2 wTotalLength (L) Total Length (L) Including Interface and Endpoint Descriptors (171 total) ABh 3 wTotalLength (H) Total Length (H) 00h 4 bNumInterfaces Number of Interfaces in this Configuration 01h 5 bConfigurationValue Configuration Value Used by Set_Configuration Request to Select this interface 01h 6 iConfiguration Index of String Describing this Configuration = None 00h 7 bmAttributes Attributes - Bus Powered, No Wakeup 80h 8 MaxPower Maximum Power - 100 mA 32h The configuration descriptor includes a total length field (offset 2-3) that encompasses all interface and endpoint descriptors that follow the configuration descriptor. This configuration describes a single interface (offset 4). The host selects this configuration by issuing a Set_Configuration requests specifying configuration #1 (offset 5). Table A-4. USB Default Interface 0, Alternate Setting 0 Offset 368 Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 0 00h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 0 00h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for Full-Speed Mode Table A-5. USB Default Interface 0, Alternate Setting 1 Offset Field Description Value 0 bLength Length of this Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 1 01h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h Table A-6. Endpoint Descriptor (EP1 out) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = Bulk 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for ISO) 00h Table A-7. Endpoint Descriptor (EP1 in) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table A-8. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 369 Descriptors for Full-Speed Mode Table A-9. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table A-10. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table A-11. Endpoint Descriptor (EP8) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table A-12. Interface Descriptor (Alt. Setting 2) Offset 370 Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 2 02h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for Full-Speed Mode Table A-13. Endpoint Descriptor (EP1 out) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-14. Endpoint Descriptor (EP1 in) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-15. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-16. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 371 Descriptors for Full-Speed Mode Table A-17. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-18. Endpoint Descriptor (EP8) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table A-19. Interface Descriptor (Alt. Setting 3) Offset 372 Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 3 03h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for Full-Speed Mode Table A-20. Endpoint Descriptor (EP1 out) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-21. Endpoint Descriptor (EP1 in) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 0Ah Table A-22. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = ISO, No Synchronization, Data endpoint 01h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table A-23. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 373 Descriptors for Full-Speed Mode Table A-24. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = ISO, No Synchronization, Data Endpoint 01h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table A-25. Endpoint Descriptor (EP8) Offset 374 Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Appendix B. Descriptors for HighSpeed Mode Table B-1 through Table B-25 show the descriptor data built into the FX2LP logic. The tables are presented in the order that the bytes are stored. Table B-1. Device Descriptor Offset Field Description Value 0 bLength Length of this Descriptor = 18 bytes 12h 1 bDescriptorType Descriptor Type = Device 01h 2 bcdUSB (L) USB Specification Version 2.00 (L) 00h 3 bcdUSB (H) USB Specification Version 2.00 (H) 02h 4 bDeviceClass Device Class (FF is Vendor-Specific) FFh 5 bDeviceSubClass Device Sub-class (FF is Vendor-Specific) FFh 6 bDeviceProtocol Device Protocol (FF is Vendor-Specific) FFh 7 bMaxPacketSize0 Maximum Packet Size for EP0 = 63 bytes 40h 8 idVendor (L) Vendor ID (L) B4h 9 idVendor (H) Vendor ID (H) 10 idProduct (L) Product ID (L) 11 idProduct (H) Product ID (H) 86h 12 bcdDevice (L) Device Release Number (BCD,L) (see individual data sheet) xxh 13 bcdDevice (H) Device Release Number (BCD,H) (see individual data sheet) xxh 14 iManufacturer Manufacturer Index String = None 00h 15 iProduct Product Index String = None 00h 16 iSerialNumber Serial Number Index String = None 00h 17 bNumConfigurations Number of Configurations in this Interface = 1 01h Cypress Semi = 04B4H 04h FX2LP = 8613H 13h The Device Descriptor specifies a MaxPacketSize of 64 bytes for endpoint 0, contains Cypress Semiconductor Vendor, Product and Release Number IDs, and uses no string indices. Release Number IDs (XX and YY) are found in individual Cypress Semiconductor data sheets. The FX2LP logic returns this information response to a Get_Descriptor/Device host request. Table B-2. Device Qualifier Offset Field Description Value 0 bLength Length of this Descriptor = 10 bytes 0Ah 1 bDescriptorType Descriptor Type = Device Qualifier 06h 2 bcdUSB (L) USB Specification Version 2.00 (L) 00h 3 bcdUSB (H) USB Specification Version 2.00 (H) 02h 4 bDeviceClass Device Class (FF is vendor specific) FFh 5 bDeviceSubClass Device Sub-class (FF is vendor specific) FFh 6 bDeviceProtocol Device Protocol (FF is vendor specific) FFh 7 bMaxPacketSize0 Maximum Packet Size for other speed = 64 bytes 40h 8 bNumConfigurations Number of other Configurations = 1 01h 9 bReserved Must be set to Zero 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 375 Descriptors for High-Speed Mode Table B-3. Configuration Descriptor Offset Field Description Value 0 bLength Length of this Descriptor = 9 bytes 1 bDescriptorType Descriptor Type = Configuration 09h 02h 2 wTotalLength (L) Total length (L) including Interface and Endpoint descriptors (171 total) ABh 3 wTotalLength (H) Total Length (H) 00h 4 bNumInterfaces Number of Interfaces in this Configuration 01h 5 bConfigurationValue Configuration value used by Set_Configuration Request to select this interface 01h 6 iConfiguration Index of String Describing this Configuration = None 00h 7 bmAttributes Attributes - Bus Powered, No Wakeup 80h 8 MaxPower Maximum Power - 100 mA 32h Table B-4. Interface Descriptor (Alt. Setting 0) Offset Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 0 00h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 0 00h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h Table B-5. Interface Descriptor (Alt. Setting 1) Offset 376 Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 1 01h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for High-Speed Mode Table B-6. Endpoint Descriptor (EP1 out) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-7. Endpoint Descriptor (EP1 in) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-8. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-9. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 377 Descriptors for High-Speed Mode Table B-10. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-11. Endpoint Descriptor (EP8) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-12. Interface Descriptor (Alt. Setting 2) Offset Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 2 02h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h Table B-13. Endpoint Descriptor (EP1 out) Offset 378 Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for High-Speed Mode Table B-14. Endpoint Descriptor (EP1 in) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table B-15. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table B-16. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-17. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 379 Descriptors for High-Speed Mode Table B-18. Endpoint Descriptor (EP8) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-19. Interface Descriptor (Alt. Setting 3) Offset Field Description Value 0 bLength Length of the Interface Descriptor 09h 1 bDescriptorType Descriptor Type = Interface 04h 2 bInterfaceNumber Zero based index of this interface = 0 00h 3 bAlternateSetting Alternate Setting Value = 3 03h 4 bNumEndpoints Number of endpoints in this interface (not counting EP0) = 6 06h 5 bInterfaceClass Interface Class = Vendor Specific FFh 6 bInterfaceSubClass Interface Sub-class = Vendor Specific FFh 7 bInterfaceProtocol Interface Protocol = Vendor Specific FFh 8 iInterface Index to string descriptor for this interface = None 00h Table B-20. Endpoint Descriptor (EP1 out) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT1 01h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table B-21. Endpoint Descriptor (EP1 in) Offset 380 Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN1 81h 3 bmAttributes XFR Type = INT 03h 4 wMaxPacketSize (L) Maximum Packet Size = 64 bytes 40h 5 WMaxPacketSize (H) Maximum Packet Size - High 00h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Descriptors for High-Speed Mode Table B-22. Endpoint Descriptor (EP2) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT2 02h 3 bmAttributes XFR Type = ISO, No Synchronization, Data endpoint 01h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table B-23. Endpoint Descriptor (EP4) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = OUT4 04h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h Table B-24. Endpoint Descriptor (EP6) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN6 86h 3 bmAttributes XFR Type = ISO, No Synchronization, Data endpoint 01h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 01h Table B-25. Endpoint Descriptor (EP8) Offset Field Description Value 0 bLength Length of this Endpoint Descriptor 07h 1 bDescriptorType Descriptor Type = Endpoint 05h 2 bEndpointAddress Endpoint Direction (1 is in) and address = IN8 88h 3 bmAttributes XFR Type = BULK 02h 4 wMaxPacketSize (L) Maximum Packet Size = 512 bytes 00h 5 WMaxPacketSize (H) Maximum Packet Size - High 02h 6 bInterval Polling Interval in Milliseconds (1 for iso) 00h EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 381 Descriptors for High-Speed Mode 382 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Appendix C. Device Register Summary The following table is a summary of all the device registers. In the ‘b7-b0’ columns, bit positions that contain a ‘0’ or a ‘1’ cannot be written to and, when read, always return the value shown (‘0’ or ‘1’). Bit positions that contain ‘-’ are available but unused. The ‘Default’ column shows each register’s hard reset value (‘x’ indicates ‘undefined’). The ‘Access’ column indicates each register’s read or write, or both accessibility. EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 383 Device Register Summary Register Summary Table C-1. EZ-USB® Registers and Buffers Hex E400 E480 E600 Size Name Description GPIF Waveform Memories 128 WAVEDATA GPIF Waveform Descriptor 0, 1, 2, 3 data 128 reserved GENERAL CONFIGURATION 1 CPUCS CPU Control and Status b7 b6 b5 b4 b3 b2 b1 b0 Default Access D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW 0 0 PORTCSTB CLKSPD1 CLKSPD0 CLKINV CLKOE 8051RES 00000010 rrbbbbbr E601 1 IFCONFIG Interface Configuration (Ports, GPIF, slave IFCLKSRC FIFOs) 3048MHZ IFCLKOE IFCLKPOL ASYNC GSTATE IFCFG1 IFCFG0 10000000 RW E602 1 FLAGB2 FLAGB1 FLAGB0 FLAGA3 FLAGA2 FLAGA1 FLAGA0 00000000 RW 1 Slave FIFO FLAGA and FLAGB Pin Configuration Slave FIFO FLAGC and FLAGD Pin Configuration FLAGB3 E603 PINFLAGSAB see Section 15.15 PINFLAGSCD see Section 15.15 FLAGD3 FLAGD2 FLAGD1 FLAGD0 FLAGC3 FLAGC2 FLAGC1 FLAGC0 00000000 RW E604 1 FIFORESET see Section 15.15 Restore FIFOS to default state NAKALL 0 0 0 EP3 EP2 EP1 EP0 xxxxxxxx W E605 E606 E607 E608 1 1 1 1 BREAKPT BPADDRH BPADDRL UART230 Breakpoint Control Breakpoint Address H Breakpoint Address L 230K baud internally generated reference clock 0 A15 A7 0 0 A14 A6 0 0 A13 A5 0 0 A12 A4 0 BREAK A11 A3 0 BPPULSE A10 A2 0 BPEN A9 A1 230UART1 0 A8 A0 230UART0 00000000 xxxxxxxx xxxxxxxx 00000000 rrrrbbbr RW RW rrrrrrbb E609 1 Slave FIFO Interface pins polarity 0 0 PKTEND SLOE SLRD SLWR EF FF 00000000 rrbbbbbb E60A 1 FIFOPINPOLAR see Section 15.15 REVID rv7 rv6 rv5 rv4 rv3 rv2 rv1 rv0 E60B 1 REVCTL Chip Revision Control 0 0 0 0 0 0 dyn_out enh_pkt RevA 00000001 00000000 rrrrrrbb 384 Chip Revision R Notes Associated / pointed to by GPIFWFSELECT PORTCSTB=1: reads/writes to PORTC generate RD# and WR# strobes CLKSPD1:0=8051 clock speed: 00=12, 01-24, 10=48, 11=X CLKINV=1 to invert CLKOUT signal CLKOE=1 to drive CLKOUT pin 8051RES=1 to reset 8051 IFCLKSRC: FIFO/GPIF Clock Source: 0:external (IFGCLK pin); 1:internal 3048MHZ: Internal FIFO/GPIF clock freq: 0=30 MHz, 1=48 MHz IFCLKOE: FIFO/GPIF Clock Output Enable (on IFCLK pin) IFCLKPOL: FIFO/GPIF clock polarity (on IFCLK pin) ASYNC: 1=Slave FIFOs operate in asynchronous mode; 0=Slave FIFOs operate in synchronous mode GSTATE: 1:drive GSTATE[0:2] on PORTE[0:2] IFCFG[1:0]: 00: ports; 01: reserved; 10: GPIF; 11: Slave FIFO (ext master) FLAGx[3:0] where x = A,B,C or D FIFO Flag: 0000: PF for FIFO selected by FIFOADR[1:0] pins. 0001-0011: reserved 0100: EP2 PF, 0101: EP4PF, 0110: EP6PF, 0111: EP8 PF 1000: EP2 EF, 1001: EP4EF, 1010: EP6EF, 1011: EP8 EF 1100: EP2 FF, 1101: EP4FF, 1110: EP6FF, 1111: EP8FF Set flags and byte counts to default values; write 0x80 to NAK all transfers, then write NAKALL OR’ed with FIFO number, then write 0x00 to restore normal operation If ‘1’, overrides timer inputs to UART. 230 rate valid for any CPU clock rate. 0=active low, 1=active high Chip revision number EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E60C Size Name UDMA 1 GPIFHOLDAMOUNT 3 reserved Description MSTB Hold Time (for UDMA) b7 b6 b5 b4 b3 b2 0 0 0 0 0 0 b1 b0 Default HOLDTIME1 HOLDTIME0 00000000 Access rrrrrrbb TYPE[00] = Illegal; 01=ISO, 10=BULK, 11=INT. dir=0:OUT; dir=1:IN BUF1:0: 00=quad, 01=illegal, 10=double, 11=triple SIZE=0: 512 bytes, SIZE=1: 1024 bytes ENDPOINT CONFIGURATION E610 E611 E612 1 1 1 EP1OUTCFG EP1INCFG EP2CFG Endpoint 1-OUT Configuration Endpoint 1-IN Configuration Endpoint 2 Configuration VALID VALID VALID 0 0 DIR TYPE1 TYPE1 TYPE1 TYPE0 TYPE0 TYPE0 0 0 SIZE 0 0 0 0 0 BUF1 0 0 BUF0 10100000 10100000 10100010 E613 1 EP4CFG Endpoint 4 Configuration VALID DIR TYPE1 TYPE0 0 0 0 0 10100000 E614 1 EP6CFG Endpoint 6 Configuration VALID DIR TYPE1 TYPE0 SIZE 0 BUF1 BUF0 11100010 E615 1 EP8CFG Endpoint 8 Configuration VALID DIR TYPE1 TYPE0 0 0 0 0 11100000 E618 2 1 reserved EP2FIFOCFG see Section 15.15 EP4FIFOCFG see Section 15.15 EP6FIFOCFG see Section 15.15 EP8FIFOCFG see Section 15.15 reserved Endpoint 2 / slave FIFO configuration 0 INFM1 OEP1 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 00000101 rbbbbbrb Endpoint 4 / slave FIFO configuration 0 INFM1 OEP1 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 00000101 rbbbbbrb Endpoint 6 / slave FIFO configuration 0 INFM1 OEP1 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 00000101 rbbbbbrb Endpoint 8 / slave FIFO configuration 0 INFM1 OEP1 AUTOOUT AUTOIN ZEROLENIN 0 WORDWIDE 00000101 rbbbbbrb E619 1 E61A 1 E61B 1 E61C 4 E620 1 E621 1 E622 1 E623 1 E624 1 E625 1 E626 1 E627 1 EP2AUTOINLENH see Section 15.15 EP2AUTOINLENL see Section 15.15 EP4AUTOINLENH see Section 15.15 EP4AUTOINLENL see Section 15.15 EP6AUTOINLENH see Section 15.15 EP6AUTOINLENL see Section 15.15 EP8AUTOINLENH see Section 15.15 EP8AUTOINLENL see Section 15.15 Notes brbbrrrr Default: BULK OUT 64 brbbrrrr Default: BULK IN 64 bbbbbrbb Default: BULK OUT 512 double buffered bbbbrrrr Default: BULK OUT (512 double buffered only choice) bbbbbrbb Default: BULK IN 512 double buffered bbbbrrrr Default: BULK IN (512 double buffered only choice) Endpoint 2 AUTOIN Packet Length H 0 0 0 0 0 PL10 PL9 PL8 00000010 rrrrrbbb Endpoint 2 AUTOIN Packet Length L PL7 PL6 PL5 PL4 PL3 PL2 PL1 PL0 00000000 RW Endpoint 4 AUTOIN Packet Length H 0 0 0 0 0 0 PL9 PL8 00000010 rrrrrrbb Endpoint 4 AUTOIN Packet Length L PL7 PL6 PL5 PL4 PL3 PL2 PL1 PL0 00000000 RW Endpoint 6 AUTOIN Packet Length H 0 0 0 0 0 PL10 PL9 PL8 00000010 rrrrrbbb Endpoint 6 AUTOIN Packet Length L PL7 PL6 PL5 PL4 PL3 PL2 PL1 PL0 00000000 RW Endpoint 8 AUTOIN Packet Length H 0 0 0 0 0 0 PL9 PL8 00000010 rrrrrrbb Endpoint 8 AUTOIN Packet Length L PL7 PL6 PL5 PL4 PL3 PL2 PL1 PL0 00000000 RW EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F INFM1 (In FULL flag minus 1): 0=normal, 1=flags active one byte early OEP1 (Out EMPTY flag plus 1): 0=normal, 1=flags active one byte early AUTOOUT=1--valid OUT packet automatically becomes part of OUT FIFO AUTOOUT=0--8051 decides if to commit data to the OUT FIFO AUTOIN=1--SIE packetizes/dispatches IN-FIFO data using EPxAUTOINLEN AUTOIN=0--8051 dispatches an IN packet by writing byte count WORDWIDE=1: PB=FD[0:7], PD=FD[8:15]; =1: PB=FD[0:7], PD=PD ZEROLENIN: 0=disable; 1=send zero len pkt on PKTEND - If any of the four WORDWIDE bits=1, core configures PD as FD15:8 Default is 512 byte packets; can set smaller IN packets. SIE divides IN-FIFO data into thislength packets when AUTOIN=1. When AUTOIN=0, 8051 loads a byte count for every packet (in EPxBCH/L). EP2,6 can have 1024 max bytes, EP4,8 can have 512 max bytes. these registers only used for AUTOIN 385 Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E628 Size Name 1 ECCCFG Description ECC Configuration b7 0 b6 0 b5 0 b4 0 b3 0 b2 0 b1 0 b0 ECCM Default 00000000 x x x x x x x x 00000000 Access rrrrrrrb Notes ECCM selects the ECC block size mode. W ECC RESET: This is an action register; it resets the ecc calculation R LINE [15:8] This is the second eight bits of the line parity R LINE[7:0] This is the lower eight bits of the line parity R COL[5:0]: This is the 6 bit column parity LINE[17:16]: This is the upper two bits of the line parity R LINE[15:8]: This is the second eight bits of the line parity R LINE[7:0]: This is the lower eight bits of the line parity R COL[5:0]: This is the 6-bit column parity bbbbbrbb For complete details about this register, refer to Section . E629 1 ECCRESET ECC Reset E62A 1 ECC1B0 ECC1 Byte 0 LINE15 LINE14 LINE13 LINE12 LINE11 LINE10 LINE9 LINE8 00000000 E62B 1 ECC1B1 ECC1 Byte 1 LINE7 LINE6 LINE5 LINE4 LINE3 LINE2 LINE1 LINE0 00000000 E62C 1 ECC1B2 ECC1 Byte 2 COL5 COL4 COL3 COL2 COL1 COL0 LINE17 LINE16 00000000 E62D 1 ECC2B0 ECC2 Byte 0 LINE15 LINE14 LINE13 LINE12 LINE11 LINE10 LINE9 LINE8 00000000 E62E 1 ECC2B1 ECC2 Byte 1 LINE7 LINE6 LINE5 LINE4 LINE3 LINE2 LINE1 LINE0 00000000 E62F 1 ECC2B2 ECC2 Byte 2 COL5 COL4 COL3 COL2 COL1 COL0 0 0 00000000 E630 H.S. 1 EP2FIFOPFH see Section 15.15 Endpoint 2 / slave FIFO Programmable Flag H DECIS PKTSTAT 0 PFC9 PFC8 10001000 0 PFC9 10001000 bbbbbrbb 00000000 RW E630 F.S. E631 H.S. E631 F.S E632 H.S. E632 F.S E633 H.S. E633 F.S E634 H.S. E634 F.S E635 H.S. E635 F.S E636 H.S. E636 F.S E637 H.S. E637 F.S 1 1 1 1 1 1 1 1 E640 8 1 EP6FIFOPFH see Section 15.15 EP6FIFOPFL see Section 15.15 EP6FIFOPFL see Section 15.15 EP8FIFOPFH see Section 15.15 EP8FIFOPFH see Section 15.15 EP8FIFOPFL see Section 15.15 EP8FIFOPFL see Section 15.15 reserved EP2ISOINPKTS E641 E642 1 1 EP4ISOINPKTS EP6ISOINPKTS 386 1 EP2FIFOPFH see Section 15.15 EP2FIFOPFL see Section 15.15 EP2FIFOPFL see Section 15.15 EP4FIFOPFH see Section 15.15 EP4FIFOPFH see Section 15.15 EP4FIFOPFL see Section 15.15 EP4FIFOPFL see Section 15.15 EP6FIFOPFH see Section 15.15 1 1 1 1 1 1 Endpoint 2 / slave FIFO Programmable Flag H Endpoint 2 / slave FIFO Programmable Flag L Endpoint 2 / slave FIFO Programmable Flag L Endpoint 4 / slave FIFO Programmable Flag H Endpoint 4 / slave FIFO Programmable Flag H Endpoint 4 / slave FIFO Programmable Flag L Endpoint 4 / slave FIFO Programmable Flag L Endpoint 6 / slave FIFO Programmable Flag H IN:PKTS[2] IN:PKTS[1] IN:PKTS[0] OUT:PFC12 OUT:PFC11 OUT:PFC10 PFC11 PFC10 PFC9 OUT:PFC12 OUT:PFC11 OUT:PFC10 DECIS PKTSTAT PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC8 IN:PKTS[2] OUT:PFC8 PFC0 IN:PKTS[1] OUT:PFC7 DECIS IN:PKTS[0] OUT:PFC6 PKTSTAT PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 00000000 RW 0 0 PFC8 10001000 bbrbbrrb Maximum 1024 DECIS PKTSTAT 0 0 0 PFC8 10001000 bbrbbrrb Maximum 1024 PFC7 PFC6 PFC5 PFC2 PFC1 PFC0 00000000 RW PFC2 PFC1 PFC0 00000000 RW 0 PFC9 PFC8 00001000 0 PFC9 00001000 0 IN: PKTS[1] IN: PKTS[0] OUT:PFC10 OUT:PFC9 OUT:PFC10 OUT:PFC9 PFC4 PFC3 IN: PKTS[1] IN: PKTS[0] PFC5 PFC4 PFC3 OUT:PFC7 OUT:PFC6 DECIS PKTSTAT IN:PKTS[2] IN:PKTS[1] IN:PKTS[0] OUT:PFC12 OUT:PFC11 OUT:PFC10 PFC11 PFC10 PFC9 DECIS PKTSTAT OUT:PFC12 OUT:PFC11 OUT:PFC10 bbbbbrbb For complete details about this register, refer to “Endpoint 2, 6/Slave FIFO Programmable Level Flag bbbbbrbb High Registers” on page 244. PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC8 IN:PKTS[2] OUT:PFC8 PFC0 00000000 RW IN:PKTS[1] OUT:PFC7 DECIS IN:PKTS[0] OUT:PFC6 PKTSTAT PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 00000000 RW 0 0 PFC8 00001000 bbrbbrrb Maximum 1024 DECIS PKTSTAT 0 0 0 PFC8 00001000 bbrbbrrb Maximum 1024 PFC7 PFC6 PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 00000000 RW PFC5 PFC4 PFC3 PFC2 PFC1 PFC0 00000000 RW 0 0 0 0 0 INPPF1 INPPF0 00000001 brrrrrbb 0 0 0 0 0 0 0 0 0 0 INPPF1 INPPF1 INPPF0 INPPF0 00000001 00000001 brrrrrrr brrrrrbb Endpoint 6 / slave FIFO Programmable Flag H Endpoint 6 / slave FIFO Programmable Flag L Endpoint 6 / slave FIFO Programmable Flag L Endpoint 8 / slave FIFO Programmable Flag H Endpoint 8 / slave FIFO Programmable Flag H Endpoint 8 / slave FIFO Programmable Flag L Endpoint 8 / slave FIFO Programmable Flag L EP2 (if ISO) IN Packets per frame (1-3) AADJ EP4 (if ISO) IN Packets per frame (1) EP6 (if ISO) IN Packets per frame (1-2) AADJ AADJ IN: PKTS[1] IN: PKTS[0] OUT:PFC7 OUT:PFC6 0 IN: PKTS[1] IN: PKTS[0] OUT:PFC10 OUT:PFC9 OUT:PFC10 OUT:PFC9 INPPF1:0: 00=illegal, 01=1 per frame, 10=2 per frame, 11=3 per frame EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E643 E644 Size Name 1 EP8ISOINPKTS 4 reserved Description EP8 (if ISO) IN Packets per frame (1) b7 AADJ b6 0 b5 0 b4 0 b3 0 b2 0 b1 INPPF1 b0 INPPF0 Default 00000001 Access brrrrrrr Notes Same function as slave interface PKTEND pin, but 8051 controls dispatch of IN, Typically used after a GPIF FIFO transaction completes to send jagged edge pkt, user needs to check status of FIFO full flag for available buffer before doing PKTEND REVCTL.0=1 to enable this feature E648 1 INPKTEND see Section 15.15 Force IN Packet End Skip 0 0 0 EP3 EP2 EP1 EP0 xxxxxxxx W E649 7 Force OUT Packet End Skip 0 0 0 EP3 EP2 EP1 EP0 xxxxxxxx W E650 1 0 0 0 0 EDGEPF PF EF FF 00000000 RW E651 1 0 0 0 0 0 PF EF FF 00000000 rrrrrbbb E652 1 0 0 0 0 EDGEPF PF EF FF 00000000 RW E653 1 0 0 0 0 0 PF EF FF 00000000 rrrrrbbb E654 1 0 0 0 0 EDGEPF PF EF FF 00000000 RW E655 1 0 0 0 0 0 PF EF FF 00000000 rrrrrbbb E656 1 0 0 0 0 EDGEPF PF EF FF 00000000 RW E657 1 0 0 0 0 0 PF EF FF 00000000 rrrrrbbb E658 E659 1 1 OUTPKTEND INTERRUPTS EP2FIFOIE see Section 15.15 EP2FIFOIRQ see Section 15.15 EP4FIFOIE see Section 15.15 EP4FIFOIRQ see Section 15.15 EP6FIFOIE see Section 15.15 EP6FIFOIRQ see Section 15.15 EP8FIFOIE see Section 15.15 EP8FIFOIRQ see Section 15.15 IBNIE IBNIRQ 0 0 0 0 EP8 EP8 EP6 EP6 EP4 EP4 EP2 EP2 EP1 EP1 EP0 EP0 00000000 00xxxxxx RW rrbbbbbb E65A 1 NAKIE EP6 EP4 EP2 EP1 EP0 0 IBN 00000000 1 NAKIRQ EP8 EP6 EP4 EP2 EP1 EP0 0 IBN xxxxxx0x E65C E65D 1 1 USBIE USBIRQ Endpoint Ping-NAK / IBN Interrupt Enable Endpoint Ping-NAK / IBN Interrupt Request USB Int Enables USB Interrupt Requests EP8 E65B 0 0 EP0ACK EP0ACK HSGRANT HSGRANT URES URES SUSP SUSP SUTOK SUTOK SOF SOF SUDAV SUDAV 00000000 0xxxxxxx E65E E65F 1 1 EPIE EPIRQ Endpoint Interrupt Enables Endpoint Interrupt Requests EP8 EP8 EP6 EP6 EP4 EP4 EP2 EP2 EP1OUT EP1OUT EP1IN EP1IN EP0OUT EP0OUT EP0IN EP0IN 00000000 00000000 E660 1 GPIF Interrupt Enable 0 0 0 0 0 0 GPIFWF GPIFDONE 00000000 E661 1 GPIF Interrupt Request 0 0 0 0 0 0 GPIFWF GPIFDONE 000000xx E662 1 GPIFIE see Section 15.15 GPIFIRQ see Section 15.15 USBERRIE USB Error Interrupt Enables ISOEP8 ISOEP6 ISOEP4 ISOEP2 0 0 0 ERRLIMIT 00000000 RW E663 E664 E665 E666 E667 1 1 1 1 1 USBERRIRQ ERRCNTLIM CLRERRCNT INT2IVEC INT4IVEC USB Error Interrupt Requests USB Error counter and limit Clear Error Counter EC3:0 Interrupt 2 (USB) Autovector Interrupt 4 (slave FIFO and GPIF) Autovector ISOEP8 EC3 x 0 1 ISOEP6 EC2 x I2V4 0 ISOEP4 EC1 x I2V3 I4V3 ISOEP2 EC0 x I2V2 I4V2 0 LIMIT3 x I2V1 I4V1 0 LIMIT2 x I2V0 I4V0 0 LIMIT1 x 0 0 ERRLIMIT LIMIT0 x 0 0 0000000x xxxx0100 xxxxxxxx 00000000 10000000 bbbbrrrb rrrrbbbb W R R Endpoint 2 slave FIFO Flag Interrupt Enable Endpoint 2 slave FIFO Flag Interrupt Request Endpoint 4 slave FIFO Flag Interrupt Enable Endpoint 4 slave FIFO Flag Interrupt Request Endpoint 6 slave FIFO Flag Interrupt Enable Endpoint 6 slave FIFO Flag Interrupt Request Endpoint 8 slave FIFO Flag Interrupt Enable Endpoint 8 slave FIFO Flag Interrupt Request IN-BULK-NAK Interrupt Enable IN-BULK-NAK interrupt Request EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EDGEPF=0; Rising edge EDGEPF=1; Falling edge Note: Can only reset, can not set Note: Can only reset, can not set Note: Can only reset, can not set Note: Can only reset, can not set 1 = clear request, 0= no effect, note: can only reset, can not set RW OUT endpoint was pinged and NAK'd bbbbbbrb note: can only reset, can not set RW rbbbbbbb 1 = clear request, 0= no effect, note: can only reset, can not set RW RW 1 = clear request, 0= no effect, note: can only reset, can not set RW WF--8051 ‘hook’ in waveform, DONE-returned to IDLE state RW Write ‘1’ to clear ISO endpoint error: PID sequence error or dropped packet (no available buffer) Note: Can only reset, can not set Default limit count is 4 387 Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E668 Size Name 1 INTSETUP E669 7 E670 E671 E672 E673 E678 1 1 1 1 1 reserved INPUT / OUTPUT PORTACFG PORTCCFG PORTECFG reserved I2CS E679 1 I2DAT E67A 1 I2CTL E67B 1 XAUTODAT1 E67C 1 XAUTODAT2 E67D 1 E67E 1 E67F 1 E680 E681 E682 E683 E684 E685 E686 E687 E688 1 1 1 1 1 1 1 1 2 E68A E68B E68C E68D E68E E68F 1 1 1 1 1 1 388 UDMA CRC UDMACRCH see Section 15.15 UDMACRCL see Section 15.15 UDMACRCQUALIFIER USB CONTROL USBCS SUSPEND WAKEUPCS TOGCTL USBFRAMEH USBFRAMEL MICROFRAME FNADDR reserved ENDPOINTS EP0BCH EP0BCL reserved EP1OUTBC reserved EP1INBC Description Interrupt 2 and4 Setup b7 0 b6 0 b5 0 b4 0 b3 AV2EN b2 0 b1 INT4SRC b0 AV4EN Default 00000000 Access RW I/O PORTA Alternate Configuration I/O PORTC Alternate Configuration I/O PORTE Alternate Configuration FLAGD GPIFA7 GPIFA8 SLCS GPIFA6 T2EX 0 GPIFA5 INT6 0 GPIFA4 RXD1OUT 0 GPIFA3 RXD0OUT 0 GPIFA2 T2OUT INT1 GPIFA1 T1OUT INT0 GPIFA0 T0OUT 00000000 00000000 00000000 RW RW RW I2C-Compatible Bus Control and Status I2C-Compatible Bus Data I2C-Compatible Bus Control Autoptr1 MOVX access, when APTREN=1 Autoptr2 MOVX access, when APTREN=1 START STOP LASTRD ID1 ID0 BERR ACK DONE 000xx000 bbbrrrrr d7 d6 d5 d4 d3 d2 d1 d0 xxxxxxxx RW 0 0 0 0 0 0 STOPIE 400KHZ 00000000 RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW UDMA CRC MSB CRC15 CRC14 CRC13 CRC12 CRC11 CRC10 CRC9 CRC8 01001010 RW UDMA CRC LSB CRC7 CRC6 CRC5 CRC4 CRC3 CRC2 CRC1 CRC0 10111010 RW QENABLE 0 0 0 QSTATE QSIGNAL2 QSIGNAL1 QSIGNAL0 00000000 brrrbbbb HSM x WU2 Q 0 FC7 0 0 0 x WU S 0 FC6 0 FA6 0 x WU2POL R 0 FC5 0 FA5 0 x WUPOL IO 0 FC4 0 FA4 DISCON x 0 EP3 0 FC3 0 FA3 NOSYNSOF x DPEN EP2 FC10 FC2 MF2 FA2 RENUM x WU2EN EP1 FC9 FC1 MF1 FA1 SIGRSUME x WUEN EP0 FC8 FC0 MF0 FA0 x0000000 xxxxxxxx xx000101 x0000000 00000xxx xxxxxxxx 00000xxx 0xxxxxxx rrrrbbbb W Write any value to suspend bbbbrbbb rrrbbbbb R R R R (BC15) (BC7) (BC14) BC6 (BC13) BC5 (BC12) BC4 (BC11) BC3 (BC10) BC2 (BC9) BC1 (BC8) BC0 xxxxxxxx xxxxxxxx RW RW Endpoint 1 OUT Byte Count 0 BC6 BC5 BC4 BC3 BC2 BC1 BC0 0xxxxxxx RW Endpoint 1 IN Byte Count 0 BC6 BC5 BC4 BC3 BC2 BC1 BC0 0xxxxxxx RW UDMA CRC Qualifier USB Control and Status Put chip into suspend Wakeup Control and Status Toggle Control USB Frame count H USB Frame count L Microframe count, 0-7 USB Function address Endpoint 0 Byte Count H Endpoint 0 Byte Count L Notes INT4IN=0: INT4 from pin; 1: INT4 from FIFO/GPIF interrupts GSTATE bit =1 overrides bits 2:0. AUTOPTRSETUP bit APTREN=1: off-chip access use this reg - code-space hole at this location AUTOPTRSETUP bit APTREN=0: on-chip access use duplicate SFR @ 9C, no codespace hole Even though the EP0 buffer is only 64 bytes, the EP0 byte count is expanded to 16-bits to allow using the Autoptr with a custom length, instead of USB-dictated length (from Setup Data Packet and number of requested bytes). The byte count bits in parentheses apply only when SDPAUTO = 0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E690 E691 E692 E694 E695 E696 E698 E699 E69A E69C E69D E69E E6A0 E6A1 E6A2 E6A3 E6A4 E6A5 E6A6 Size Name 1 EP2BCH see Section 15.15 1 EP2BCL see Section 15.15 2 reserved 1 EP4BCH see Section 15.15 1 EP4BCL see Section 15.15 2 reserved 1 EP6BCH see Section 15.15 1 EP6BCL see Section 15.15 2 reserved 1 EP8BCH see Section 15.15 1 EP8BCL see Section 15.15 2 reserved 1 EP0CS 1 EP1OUTCS 1 EP1INCS 1 EP2CS 1 EP4CS 1 EP6CS 1 EP8CS Description Endpoint 2 Byte Count H b7 0 b6 0 b5 0 b4 0 b3 0 b2 BC10 b1 BC9 b0 BC8 Default 00000xxx Access RW Endpoint 2 Byte Count L BC7/SKIP BC6 BC5 BC4 BC3 BC2 BC1 BC0 xxxxxxxx RW Endpoint 4 Byte Count H 0 0 0 0 0 0 BC9 BC8 000000xx RW Endpoint 4 Byte Count L BC7/SKIP BC6 BC5 BC4 BC3 BC2 BC1 BC0 xxxxxxxx RW Endpoint 6 Byte Count H 0 0 0 0 0 BC10 BC9 BC8 00000xxx RW Endpoint 6 Byte Count L BC7/SKIP BC6 BC5 BC4 BC3 BC2 BC1 BC0 xxxxxxxx RW Endpoint 8 Byte Count H 0 0 0 0 0 0 BC9 BC8 000000xx RW Endpoint 8 Byte Count L BC7/SKIP BC6 BC5 BC4 BC3 BC2 BC1 BC0 xxxxxxxx RW HSNAK 0 0 0 0 0 0 0 0 0 NPAK2 0 NPAK2 0 0 0 0 NPAK1 NPAK1 NPAK1 NPAK1 0 0 0 NPAK0 NPAK0 NPAK0 NPAK0 0 0 0 FULL FULL FULL FULL 0 0 0 EMPTY EMPTY EMPTY EMPTY BUSY BUSY BUSY 0 0 0 0 STALL STALL STALL STALL STALL STALL STALL 10000000 00000000 00000000 00101000 00101000 00000100 00000100 bbbbbbrb bbbbbbrb bbbbbbrb rrrrrrrb rrrrrrrb rrrrrrrb rrrrrrrb 0 0 0 0 0 BC7 0 BC7 0 BC7 0 BC7 A15 A7 0 0 0 0 0 BC6 0 BC6 0 BC6 0 BC6 A14 A6 0 0 0 0 0 BC5 0 BC5 0 BC5 0 BC5 A13 A5 0 0 0 0 BC12 BC4 0 BC4 0 BC4 0 BC4 A12 A4 0 0 0 0 BC11 BC3 0 BC3 BC11 BC3 0 BC3 A11 A3 PF PF PF PF BC10 BC2 BC10 BC2 BC10 BC2 BC10 BC2 A10 A2 EF EF EF EF BC9 BC1 BC9 BC1 BC9 BC1 BC9 BC1 A9 A1 FF FF FF FF BC8 BC0 BC8 BC0 BC8 BC0 BC8 BC0 A8 0 00000010 00000010 00000110 00000110 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 xxxxxxxx xxxxxxx0 R R R R R R R R R R R R RW bbbbbbbr 0 0 0 0 0 0 0 SDPAUTO 00000001 RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx R Endpoint 0 Control and Status Endpoint 1 OUT Control and Status Endpoint 1 IN Control and Status Endpoint 2 Control and Status Endpoint 4 Control and Status Endpoint 6 Control and Status Endpoint 8 Control and Status E6A7 E6A8 E6A9 E6AA E6AB E6AC E6AD E6AE E6AF E6B0 E6B1 E6B2 E6B3 E6B4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 EP2FIFOFLGS EP4FIFOFLGS EP6FIFOFLGS EP8FIFOFLGS EP2FIFOBCH EP2FIFOBCL EP4FIFOBCH EP4FIFOBCL EP6FIFOBCH EP6FIFOBCL EP8FIFOBCH EP8FIFOBCL SUDPTRH SUDPTRL Endpoint 2 slave FIFO Flags Endpoint 4 slave FIFO Flags Endpoint 6 slave FIFO Flags Endpoint 8 slave FIFO Flags Endpoint 2 slave FIFO total byte count H Endpoint 2 slave FIFO total byte count L Endpoint 4 slave FIFO total byte count H Endpoint 4 slave FIFO total byte count L Endpoint 6 slave FIFO total byte count H Endpoint 6 slave FIFO total byte count L Endpoint 8 slave FIFO total byte count H Endpoint 8 slave FIFO total byte count L Setup Data Pointer high address byte Setup Data Pointer low address byte E6B5 1 SUDPTRCTL Setup Data Pointer Auto Mode E6B8 2 8 reserved SETUPDAT 8 bytes of SETUP data EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Notes EP2,6 can be 512 or 1024 EP4,8 are 512 only NPAK2:0=number of packets in the FIFO, 0-4. NPAK1:0=number of packets in the FIFO, 0-2 OUT: Packets received from USB. IN: Packets loaded and armed. FULL / EMPTY status bits duplicated in SFR space, EP2468STAT Not affected by FIFOPINPOLAR bits.duplicated in SFR space, EP24FIFOFLGS and EP68FIFOFLGS OUT: full byte count; IN: bytes in current packet EP2 max 4096 EP4 max 1024 EP6 max 2048 EP* max 1024 Must be word-aligned (i.e., must point to even-numbered addresses) Clear b0 to supply SUDPTR length (override USB length) 389 Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex Size Name Description SETUPDAT[0] = bmRequestType b7 b6 b5 b4 b3 b2 b1 b0 Default Access FIFOWR1 0 CTL3 FIFOWR0 0 CTL2 FIFORD1 0 CTL1 FIFORD0 IDLEDRV CTL0 11100100 10000000 11111111 RW RW RW SETUPDAT[1] = bmRequest SETUPDAT[2:3] = wValue SETUPDAT[4:5] = wIndex SETUPDAT[6:7] = wLength GPIF GPIFWFSELECT GPIFIDLECS GPIFIDLECTL E6C0 E6C1 E6C2 1 1 1 E6C3 E6C4 1 1 E6C5 1 E6C6 E6C7 E6C8 1 1 1 GPIFCTLCFG GPIFADRH see Section 15.15 GPIFADRL see Section 15.15 FLOWSTATE FLOWSTATE FLOWLOGIC FLOWEQ0CTL E6C9 1 FLOWEQ1CTL E6CA E6CB E6CC 1 1 1 FLOWHOLDOFF FLOWSTB FLOWSTBEDGE E6CD E6CE E6CF E6D0 E6D1 1 1 1 1 1 2 E6D2 1 FLOWSTBPERIOD GPIFTCB3 GPIFTCB2 GPIFTCB1 GPIFTCB0 reserved reserved reserved EP2GPIFFLGSEL see Section 15.15 E6D3 1 EP2GPIFPFSTOP E6D4 1 EP2GPIFTRIG see Section 15.15 reserved reserved reserved 3 390 Waveform Selector GPIF Done, GPIF IDLE drive mode Inactive Bus, CTL states SINGLEWR1 SINGLEWR0 SINGLERD1 SINGLERD0 DONE 0 0 0 0 0 CTL5 CTL4 Notes D7: Data Transfer Direction; 0=host-to-device, 1=device-to-host D6…5 Type; 0=standard, 1=class, 2=vendor, 3=reserved D4…0 Recipient; 0=device, 1=interface, 2=endpoint, 3=other, 4…31=reserved Specific request Word-sized field that varies according to request Word-sized field that varies according to request; typically used to pass an index or offset Number of bytes to transfer if there is a data stage Select waveform DONE=1: GPIF done (IRQ4). IDLEDRV=1: drive bus, 0:TS DONE duplicated in SFR space, GPIFTRIG bit 7 0=CMOS, 1=open drn. GPIFADRH/L active immediately when written to CTL Drive Type GPIF Address H TRICTL 0 0 0 CTL5 0 CTL4 0 CTL3 0 CTL2 0 CTL1 0 CTL0 GPIFA8 00000000 00000000 RW RW GPIF Address L GPIFA7 GPIFA6 GPIFA5 GPIFA4 GPIFA3 GPIFA2 GPIFA1 GPIFA0 00000000 RW FS2 TERMB2 CTL2 FS1 TERMB1 CTL1 FS0 TERMB0 CTL0 00000000 00000000 00000000 brrrrbbb RW RW CTL2 CTL1 CTL0 00000000 RW HOCTL2 MSTB2 0 HOCTL1 MSTB1 FALLING HOCTL0 MSTB0 RISING 00010010 00100000 00000001 RW RW rrrrrrbb D2 TC26 TC18 TC10 TC2 D1 TC25 TC17 TC9 TC1 D0 TC24 TC16 TC8 TC0 00000010 00000000 00000000 00000000 00000001 00000000 RW RW RW RW RW RW In units of IFCLK/2. Must be >= 2 Reading these registers give you the live Transaction Count. Default=1 FS0 00000000 RW FIFO2FLAG 00000000 RW 00: Programmable flag; 01: Empty, 10: Full, 11: reserved 1=override TC value, stop on FIFO Prog. Flag. Start GPIF transactions, duplicated in SFR - GPIFTRIG Flowstate Enable and Selector FSE 0 0 0 0 Flowstate Logic LFUNC1 LFUNC0 TERMA2 TERMA1 TERMA0 CTL Pin States in Flowstate CTL0E3 CTL0E2 CTL0E1/ CTL0E0/ CTL3 (when Logic = 0) CTL5 CTL4 CTL Pin States in Flowstate CTL0E3 CTL0E2 CTL0E1/ CTL0E0/ CTL3 (when Logic = 1) CTL5 CTL4 Holdoff Configuration HOPERIOD3 HOPERIOD2 HOPERIOD1 HOPERIOD0 HOSTATE Flowstate Strobe Configuration SLAVE RDYASYNC CTLTOGL SUSTAIN 0 Flowstate Rising/Falling Edge Configura0 0 0 0 0 tion Master-Strobe Half-Period D7 D6 D5 D4 D3 GPIF Transaction Count Byte 3 TC31 TC30 TC29 TC28 TC27 GPIF Transaction Count Byte 2 TC23 TC22 TC21 TC20 TC19 GPIF Transaction Count Byte 1 TC15 TC14 TC13 TC12 TC11 GPIF Transaction Count Byte 0 TC7 TC6 TC5 TC4 TC3 Endpoint 2 GPIF Flag select 0 0 0 0 0 0 FS1 Endpoint 2 GPIF stop transaction on program flag Endpoint 2 GPIF Trigger 0 0 0 0 0 0 0 x x x x x x x x xxxxxxxx W EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex E6DA Size Name 1 EP4GPIFFLGSEL see Section 15.15 E6DB 1 EP4GPIFPFSTOP E6DC 1 EP4GPIFTRIG see Section 15.15 reserved reserved reserved EP6GPIFFLGSEL see Section 15.15 3 E6E2 1 E6E3 1 EP6GPIFPFSTOP E6E4 1 EP6GPIFTRIG see Section 15.15 reserved reserved reserved EP8GPIFFLGSEL see Section 15.15 3 Description Endpoint 4 GPIF Flag select b7 0 b6 0 b5 0 b4 0 b3 0 b2 0 b1 FS1 Endpoint 4 GPIF stop transaction on GPIF Flag Endpoint 4 GPIF Trigger 0 0 0 0 0 0 0 x x x x x x x x xxxxxxxx W Endpoint 6 GPIF Flag select 0 0 0 0 0 0 FS1 FS0 00000000 RW Endpoint 6 GPIF stop transaction on prog. flag Endpoint 6 GPIF Trigger 0 0 0 0 0 0 0 FIFO6FLAG 00000000 RW x x x x x x x x xxxxxxxx W Endpoint 8 GPIF Flag select 0 0 0 0 0 0 FS1 FS0 00000000 RW Endpoint 8 GPIF stop transaction on prog. flag Endpoint 8 GPIF Trigger 0 0 0 0 0 0 0 FIFO8FLAG 00000000 RW x x x x x x x x xxxxxxxx W Start GPIF transactions, duplicated in SFR - GPIFTRIG GPIF Data H (16-bit mode only) D15 D14 D13 D12 D11 D10 D9 D8 xxxxxxxx RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx R INTRDY SAS TCXRDY5 0 0 0 0 0 00000000 bbbrrrrr 0 x 0 x RDY5 x RDY4 x RDY3 x RDY2 x RDY1 x RDY0 x 00xxxxxx xxxxxxxx R W Duplicated in SFR space, SGLDATH / SGLDATLX / SGLDATLNOX 8051read or write triggers GPIF transaction 8051 reads data w/o GPIF transaction trig. (e.g. last byte) INTRDY is 8051 'ready', like RDYn pins. RDYn indicate pin states SAS=1: synchronous, 0:asynchronous (2-flops) RDYn inputs RDYn indicate pin states Go To GPIF IDLE state. Data is don’t care EP0-IN/-OUT buffer EP1-OUT buffer EP1-IN buffer D7 D7 D7 D6 D6 D6 D5 D5 D5 D4 D4 D4 D3 D3 D3 D2 D2 D2 D1 D1 D1 D0 D0 D0 xxxxxxxx xxxxxxxx xxxxxxxx 512/1024-byte EP 2 / slave FIFO buffer (IN or OUT) 512 byte EP 4 / slave FIFO buffer (IN or OUT) D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW RW RW RW RW D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW 512/1024-byte EP 6 / slave FIFO buffer (IN or OUT) D7 D6 D5 D4 D3 D2 D1 D0 xxxxxxxx RW E6EA 1 E6EB 1 EP8GPIFPFSTOP E6EC 1 E6F0 3 1 EP8GPIFTRIG see Section 15.15 reserved XGPIFSGLDATH E6F1 1 XGPIFSGLDATLX E6F2 1 XGPIFSGLDATLNOX Read/Write GPIF Data L and trigger transaction Read GPIF Data L, no transaction trigger E6F3 1 GPIFREADYCFG Internal RDY, Sync/Async, RDY pin states E6F4 E6F5 1 1 GPIFREADYSTAT GPIFABORT GPIF Ready Status Abort GPIF Waveforms E6F6 2 F000 reserved ENDPOINT BUFFERS 64 EP0BUF 64 EP10UTBUF 64 EP1INBUF 2048 reserved 1024 EP2FIFOBUF F400 512 EP4FIFOBUF F600 F800 512 reserved 1024 EP6FIFOBUF E740 E780 E7C0 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F b0 FS0 Default 00000000 FIFO4FLAG 00000000 Access RW Notes 00: Programmable level; 01: Empty, 10: Full, 11: reserved RW Start GPIF transactions, duplicated in SFR - GPIFTRIG 00: Programmable flag; 01: Empty, 10: Full, 11: reserved (PF) Start GPIF transactions, duplicated in SFR - GPIFTRIG 00: Programmable flag; 01: Empty, 10: Full, 11: Reserved (PF) For 512 use only 0xF000-0xF1FF For 512 use only 0xF800-0xF9FF 391 Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex FC00 Size Name 512 EP8FIFOBUF FE00 512 reserved xxxx Description 512 byte EP 8 / slave FIFO buffer (IN or OUT) I²C Compatible Configuration Byte b7 D7 b6 D6 b5 D5 b4 D4 b3 D3 b2 D2 b1 D1 b0 D0 Default xxxxxxxx Access RW 0 DISCON 0 0 0 0 0 400KHZ xxxxxxxx 00000000 If no EPROM detected n/a Notes DISCON = copied into DISCON bit (USBCS.3) for power-on USB connect state 400KHZ = 1 for 400 KHz I2C compatible bus operation Note: If no EEPROM is connected all bits default to register default values. Special Function Registers (SFRs) 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 IOA(1) SP DPL0 DPH0 DPL1(1) DPH1(1) DPS(1) PCON TCON TMOD TL0 TL1 TH0 TH1 CKCON(1) reserved IOB(1) EXIF(1) MPAGE(1) 93 98 99 9A 9B 9C 9D 9E 5 1 1 1 1 1 1 1 reserved SCON0 SBUF0 AUTOPTRH1(1) AUTOPTRL1(1) reserved AUTOPTRH2(1) AUTOPTRL2(1) 392 Port A (bit addressable) Stack Pointer Data Pointer 0 L Data Pointer 0 H Data Pointer 1 L Data Pointer 1 H Data Pointer 0/1 select Power Control Timer/Counter Control (bit addressable) Timer/Counter Mode Control Timer 0 reload L Timer 1 reload L Timer 0 reload H Timer 1 reload H Clock Control Port B (bit addressable) External Interrupt Flags Upper Addr Byte of MOVX using @R0 / @R1 Serial Port 0 Control (bit addressable) Serial Port 0 Data Buffer Autopointer 1 Address H Autopointer 1 Address L Autopointer 2 Address H Autopointer 2 Address L D7 D7 A7 A15 A7 A15 0 SMOD0 TF1 GATE D7 D7 D15 D15 x D6 D6 A6 A14 A6 A14 0 x TR1 CT D6 D6 D14 D14 x D5 D5 A5 A13 A5 A13 0 1 TF0 M1 D5 D5 D13 D13 T2M D4 D4 A4 A12 A4 A12 0 1 TR0 M0 D4 D4 D12 D12 T1M D3 D3 A3 A11 A3 A11 0 x IE1 GATE D3 D3 D11 D11 T0M D2 D2 A2 A10 A2 A10 0 x IT1 CT D2 D2 D10 D10 MD2 D1 D1 A1 A9 A1 A9 0 x IE0 M1 D1 D1 D9 D9 MD1 D0 D0 A0 A8 A0 A8 SEL IDLE IT0 M0 D0 D0 D8 D8 MD0 xxxxxxxx 00000111 00000000 00000000 00000000 00000000 00000000 00110000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW D7 IE5 A15 D6 IE4 A14 D5 I²CINT A13 D4 USBNT A12 D3 1 A11 D2 0 A10 D1 0 A9 D0 0 A8 xxxxxxxx 00001000 00000000 RW RW RW SM0_0 D7 A15 A7 SM1_0 D6 A14 A6 SM2_0 D5 A13 A5 REN_0 D4 A12 A4 TB8_0 D3 A11 A3 RB8_0 D2 A10 A2 TI_0 D1 A9 A1 RI_0 D0 A8 A0 00000000 00000000 00000000 00000000 RW RW RW RW A15 A7 A14 A6 A13 A5 A12 A4 A11 A3 A10 A2 A9 A1 A8 A0 00000000 00000000 RW RW MOVX = 3 instr. cycles (default) Used with the indirect addressing instructions, i.e. MOVX @R0,A where MPAGE = upper addr byte and R0 contains lower addr byte an app. example would be to copy EP1 out/in data to a buffer EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex 9F A0 A1 A2 A3 A8 A9 AA Size 1 1 1 1 5 1 1 1 Name reserved IOC(1) INT2CLR(1) INT4CLR(1) reserved IE reserved EP2468STAT(1) Description b7 b6 b5 b4 b3 b2 b1 b0 Default Access Port C (bit addressable) Interrupt 2 clear Interrupt 4 clear D7 x x D6 x x D5 x x D4 x x D3 x x D2 x x D1 x x D0 x x xxxxxxxx xxxxxxxx xxxxxxxx RW W W Interrupt Enable (bit addressable) EA ES1 ET2 ES0 ET1 EX1 ET0 EX0 00000000 RW EP8F EP8E EP6F EP6E EP4F EP4E EP2F EP2E 01011010 R Endpoint 2,4,6,8 status flags AB 1 EP24FIFOFLGS(1) Endpoint 2,4 slave FIFO status flags 0 EP4PF EP4EF EP4FF 0 EP2PF EP2EF EP2FF 00100010 R AC 1 EP68FIFOFLGS(1) Endpoint 6,8 slave FIFO status flags 0 EP8PF EP8EF EP8FF 0 EP6PF EP6EF EP6FF 01100110 R AD AF 2 1 reserved AUTOPTRSETUP(1) Autopointer 1 and 2 Setup 0 0 0 0 0 APTR2INC APTR1INC APTREN 00000110 RW B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA 1 1 1 1 1 1 1 1 1 1 1 IOD(1) IOE(1) OEA(1) OEB(1) OEC(1) OED(1) OEE(1) reserved IP reserved EP01STAT(1) Port D (bit addressable) Port E (NOT bit addressable) Port A Output Enable Port B Output Enable Port C Output Enable Port D Output Enable Port E Output Enable D7 D7 D7 D7 D7 D7 D7 D6 D6 D6 D6 D6 D6 D6 D5 D5 D5 D5 D5 D5 D5 D4 D4 D4 D4 D4 D4 D4 D3 D3 D3 D3 D3 D3 D3 D2 D2 D2 D2 D2 D2 D2 D1 D1 D1 D1 D1 D1 D1 D0 D0 D0 D0 D0 D0 D0 xxxxxxxx xxxxxxxx 00000000 00000000 00000000 00000000 00000000 RW RW RW RW RW RW RW 1 PS1 PT2 PS0 PT1 PX1 PT0 PX0 10000000 RW EP0BSY 00000000 R BB 1 GPIFTRIG(1) see Section 15.15 Endpoint 2,4,6,8 GPIF slave FIFO Trigger EP0 10000xxx brrrrbbb BC BD 1 1 reserved GPIFSGLDATH(1) BE BF 1 1 GPIFSGLDATLX(1) C0 C1 C2 C8 1 1 6 1 SCON1(1) SBUF1(1) reserved T2CON C9 CA 1 1 reserved RCAP2L CB 1 RCAP2H CC CD CE 1 1 2 TL2 TH2 reserved GPIFSGLDATLNOX (1) Interrupt Priority (bit addressable) Endpoint 0 and 1 Status 0 0 0 0 0 DONE 0 0 0 0 GPIF Data H (16-bit mode only) D15 D14 D13 D12 D11 D10 D9 D8 xxxxxxxx RW GPIF Data L w/ Trigger GPIF Data L w/ No Trigger D7 D7 D6 D6 D5 D5 D4 D4 D3 D3 D2 D2 D1 D1 D0 D0 xxxxxxxx xxxxxxxx RW R SM0_1 D7 SM1_1 D6 SM2_1 D5 REN_1 D4 TB8_1 D3 RB8_1 D2 TI_1 D1 RI_1 D0 00000000 00000000 RW RW Timer/Counter 2 Control (bit addressable) TF2 EXF2 RCLK TCLK EXEN2 TR2 CT2 CPRL2 00000000 RW Capture for Timer 2, auto-reload, up-counter Capture for Timer 2, auto-reload, up-counter Timer 2 reload L Timer 2 reload H D7 D6 D5 D4 D3 D2 D1 D0 00000000 RW D7 D6 D5 D4 D3 D2 D1 D0 00000000 RW D7 D15 D6 D14 D5 D13 D4 D12 D3 D11 D2 D10 D1 D9 D0 D8 00000000 00000000 RW RW Serial Port 1 Control (bit addressable) Serial Port 1 Data Buffer EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F EP1INBSY EP1OUTBS Y RW EP1 Notes Check Empty/Full status of EP 2,4,6,8 using MOV Check Prg/Empty/Full status of EP 2,4 slave FIFO using MOV instr. Check Prg/Empty/Full status of EP 6,8 slave FIFO using MOV instr. APTRxINC=1 inc autopointers; APTRxINC=0 freeze autopointers APTREN=1 RD/WR strobes asserted when using MOVX version Check EP0 and EP1 status using MOV instruction RW=1 reads, RW=0 writes; EP[1:0] = 00 EP2, = 01 EP4, = 10 EP6, = 11 EP8 Efficient versions of their MOVX buddies Note: READ only, this should help you decide when to appropriately use it 393 Device Register Summary Table C-1. EZ-USB® Registers and Buffers (continued) Hex D0 D1 D8 Size 1 7 1 Name PSW reserved EICON(1) D9 E0 E1 E8 E9 F0 F1 F8 F9 7 1 7 1 7 1 7 1 7 reserved ACC reserved EIE(1) reserved B reserved EIP(1) reserved (1) Description Program Status Word (bit addressable) External Interrupt Control Accumulator (bit addressable) External Interrupt Enables B (bit addressable) External Interrupt Priority Control b7 CY b6 AC b5 F0 b4 RS1 b3 RS0 b2 OV b1 F1 b0 P Default 00000000 Access RW Notes SMOD1 1 ERESI RESI INT6 0 0 0 01000000 RW RESI - reflects D+ / WU / WU2 src while SUSPEND (PCON.1), clocks off D7 D6 D5 D4 D3 D2 D1 D0 00000000 RW 1 1 1 EX6 EX5 EX4 EI²C EUSB 11100000 RW D7 D6 D5 D4 D3 D2 D1 D0 00000000 RW 1 1 1 PX6 PX5 PX4 PI²C PUSB 11100000 RW SFRs not part of the standard 8051 architecture. 394 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Index # 100 pin package 22 128 pin package 22, 23 230 Kbaud clock register 228 56 pin SSOP 22 56 pin VFBGA 22 803x/805x feature comparison 171 8051 enhancements 170 A abort GPIF cycles register 358 aborting packets in FIFO 120 ACC register 179 access to endpoint data 89 access to IN packets 116 accessible memory spaces 96 accumulator 179 addressing an I2C peripheral 189 asynchronous FIFO IN data transfers 119 asynchronous FIFO reads 109, 110 asynchronous FIFO writes 108, 109 asynchronous mode 100 auto mode 118 auto-in initialization 117 auto-in mode 111 auto-out initialization 117 auto-out mode 111 autopointer setup registers 215 autopointers 96 AUTOPOINTERs 1 and 2 MOVX access registers 282 autovector coding 68 autovectoring 67 B B register 179 block diagram EZ-USB 21 simplified package 19 BPADDRx register 227 breakpoint address registers 227 breakpoint control register 226 BREAKPT register 226 bulk transfers 16 burst transactions 150 C C0 load format 53 C2 load format 53 chip revision control register 231 chip revision ID register 230 CKCON register 178, 179, 197 clear error count register 271 clear feature 43 clearing interrupt requests 65 CLRERRCNT register 271 code example aborting packets in FIFO in AUTOIN mode 120 asynchronous slave FIFO IN data transfers 119 AUTOIN = 1 115 AUTOOUT=0, commit packet 113 AUTOOUT=0, skip packet 114 AUTOOUT=0, source 114 committing a packet via INPKTEND 116 committing an OUT packet 165 committing packets via EPxBCL 156 committing packets via INPKTEND 155 committing packets via OUTPKTEND 163 configuring AUTOIN 112 configuring AUTOOUT 112, 113 configuring AUTOOUT = 1 164 ECC check/correct 284 editing a packet via EPxBCH 117 FIFO-read transaction code 156 FIFO-read transaction functions 154 FIFO-write transaction code 164 FIFO-write transaction functions 162 GPIF framework and functions 137 initialization code for AUTOOUT=0 165 initialization code for single-read 146 initialization code for single-write transactions 149 initialization for FIFO read transactions 155 initialization for FIFO-write transactions 163 OUT endpoint initialization 114 single-read transaction functions 145 single-write transaction functions 149 skipping a packet via INPKTEND 117 skipping an OUT packet 166 skipping out packets in AUTOOUT mode 119 sourcing an IN packet 116, 158 sourcing an OUT packet 166 synchronous slave FIFO IN data transfer 118 writing INPKTEND with EPx number 157 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 395 Index compatibility feature-by-feature 171 configuration descriptor high speed 376 control of endpoints 89 control transfers 16 CPU access to IN packets 115 CPU access to OUT packets 112 CPU control and status register 220 CPU reset 84 CPU reset effects 84 CPUCS register 220 CTL output drive type register 336 CTL output in idle register 335 CTL output states in idle 335 CY7C68013A and CY7C68015A differences 22 D data memory 76 data pointers 179 data toggle control register 300 default USB device 52 default USB device respond 56 descriptors for high speed mode 375 device descriptor full speed 367 high speed 375 device qualifier full speed 368 high speed 375 document history 35 DPH0 register 179 DPH1 register 179 DPL0 register 179 DPL1 register 179 DPS register 179 DPTR0 179 DPTR1 179 E ECC See error correcting codes ECC check/correct code example 284 ECC configuration register 287 ECC control and data registers 283–294 ECC generation 167 ECC reset register 288 ECC1B0 register 289 ECC1B1 register 290 ECC1B2 register 291 ECC2B0 register 292 ECC2B1 register 293 ECC2B2 register 294 ECCCFG register 287 ECCRESET register 288 EEPROM boot loader 192 396 EEPROM boot-load data format 52 EEPROM configuration byte 55 eight bytes of setup data 332 endpoint ’x’/slave FIFO programmable-level flag registers 244, 246, 247 endpoint 0 registers 305, 306 endpoint 1 IN byte count register 308 endpoint 1 OUT byte count register 307 endpoint 2 byte count registers 309, 313 endpoint 4 byte count registers 311, 313 endpoint 6 byte count registers 310, 313 endpoint 8 byte count registers 312, 313 endpoint buffer registers 359–365 endpoint buffers access to 87 how the CPU configures 88 large and small 87 endpoint configuration registers 233–255 endpoint descriptor full speed 369, 370, 371, 372, 373, 374 high speed 377, 378, 379, 380, 381 endpoint registers 305–332 endpoint x AUTOIN packet length registers 239, 240, 241, 242, 243 endpoint x configuration registers 235 endpoint x control and status registers 314, 315, 316, 317, 318, 319, 320 endpoint x GPIF flag select registers 350 endpoint x GPIF stop transaction registers 351 endpoint x ISO IN packets per Frame 251, 252, 253 endpoint x ISO IN packets per frame register 250 endpoint x slave FIFO flags registers 321, 322, 323, 324 endpoint x slave FIFO GPIF trigger registers 352 endpoint x slave FIFO total byte count registers 325, 326, 327, 328, 329 endpoint zero 37 endpoint/slave FIFO configuration registers 237 endpoints 89 EP0BCH 90 EP0BCL 90 IN 248 OUT 249 enter suspend state register 298 enumeration 16 enumeration and ReNumeration 51 EP01STAT 91 EP0BCH register 305 EP0BCL register 306 EP0BUF register 359 EP0CS 90 EP0CS register 314 EP1INBC 92 EP1INBC register 308 EP1INBUF register 361 EP1INCFG register 234 EP1INCS 91 EP1INCS register 316 EP1OUTBC 91 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Index EP1OUTBC register 307 EP1OUTBUF register 360 EP1OUTCFG register 233 EP1OUTCS 91 EP1OUTCS register 315 EP2468STAT 92 EP2AUTOINLENH registers 239 EP2BCH register 309 EP2CS register 317 EP2FIFOBCH register 325 EP2FIFOBUF register 362 EP2FIFOFLGS register 321 EP2ISOINPKTS register 250 EP4AUTOINLENH register 241 EP4BCH register 311 EP4CS register 318 EP4FIFOBCH register 327 EP4FIFOBUF register 363 EP4FIFOFLGS register 322 EP4ISOINPKTS register 251 EP6AUTOINLENH register 240 EP6BCH register 310 EP6CS register 319 EP6FIFOBCH register 326 EP6FIFOBUF register 364 EP6FIFOFLGS register 323 EP6ISOINPKTS register 252 EP8AUTOINLENH register 242 EP8BCH register 312 EP8CS register 320 EP8FIFOBCH register 328 EP8FIFOBUF register 365 EP8FIFOFLGS register 324 EP8ISOINPKTS register 253 EPIE register 264 EPIRQ register 265 EPx memories 111 EPxAUTOINLENL registers 243 EPxBCH low 93 EPxBCL registers 313 EPxCFG registers 235 EPxCS 92 EPxFIFOBCL registers 329 EPxFIFOCFG registers 237 EPxFIFOIE registers 256 EPxFIFOIRQ registers 257 EPxFIFOPFH registers 244 EPxFIFOPFL registers 247 EPxGPIFFLGSEL registers 350 EPxGPIFPFSTOP registers 351 EPxGPIFTRIG registers 352 EPxISOINPKTS 92 ERRCNTLIM register 270 error correcting codes 283 external data memory 71, 72 external FIFO interface 31 external program memory 71, 72 external program/data memory map 75 EZ-USB and DS80C320 differences 172 architecture 18 block diagram 21 CPU 169 differences with DS80C320 interrupts 172 endpoint buffers 30 endpoint FIFOs signals 23 feature summary 20 input output systems 181 instruction set 176 integrated microprocessor 20 internal RAM 172 IO ports 173 low-power mode implementation 173 package types 22 package types signal names 24 performance overview 170 register interface 172 registers 211 registers and buffers summary 384 software compatibility with 8051 171 supported interrupts 173 EZ-USB chips 100 pin 73 128 pin 73 56 pin 73 EZ-USB CPU Features 169 EZ-USB FIFOs in GPIF master mode 33 in slave FIFO mode 32 EZ-USB FX1 part numbers 34 EZ-USB FX2LP package diagrams 25 part numbers 34 F FIFO maximum sizes 249 FIFO cleared after a hard reset 167 FIFO data bus 101 FIFO flag pin functions 223 FIFO flag pins 103 FIFO programmable-level flag 111 FIFO reset register 225 FIFO/GPIF autovector coding 70 FIFO/GPIF interrupt 69 FIFOINPOLAR register 229 FIFO-read transaction 151 FIFO-read transaction waveform 152 FIFORESET register 225 FIFO-write transaction 159 firmware access to IN packets 156, 157 firmware access to OUT packets 164, 165 firmware FIFO access 110 firmware load 56 firmware ReNumeration 57 FLAGx pins 103 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 397 Index FLOWEQxCTL registers 342 FLOWHOLDOFF register 345 FLOWLOGIC register 341 FLOWSTATE register 340 FLOWSTB register 344 FLOWSTBEDGE register 346 FLOWSTBHPERIOD register 347 FNADDR register 304 force IN packet end register 254 force OUT packet end register 255 G general configuration registers 220–232 general programmable interface (GPIF) 121 get configuration 47 get descriptor 43 get interface 48 get status interface 42 Get_Descriptor requests 44 Get_Status request 41 GPIF 8/16-bit data path 125 address OUT signals 124 and the EZ-USB system 122 byte order for 16-bit transactions 125 connecting signal pins to hardware 126 control out signals 124 decision point (DP) 129, 130 default pins configuration 124 example hardware interconnect 126 external interface 124 flag selection 150 flag stop 150 framework and functions source code 137 GSTATE OUT signals 124 IDLE state 128 interrupt enable register 266 interrupt request register 267 non-decision point (NDP) 128 programming the waveforms 127 ready IN signals 124 re-executing a task within a DP state 131 registers 127, 333–358 registers associated with firmware 137 terminating a transfer 136 transaction waveform 123 waveform descriptor 219 GPIF address low 339 GPIF address registers 338, 339 GPIF data high (16 bit mode) register 353 GPIF done and idle drive mode register 334 GPIF done, GPIF idle drive mode 334 GPIF flow holdoff register 345 GPIF flow logic CTL output drive registers 342 GPIF flow master strobe edge register 346 GPIF flow master strobe half period register 347 GPIF flow master strobe register 344 GPIF flow state logic register 341 GPIF flow state register 340 398 GPIF hold amount register 348 GPIF hold time register 232 GPIF ready pin configuration register 356 GPIF ready pin status register 357 GPIF transaction count byte registers 349 GPIF waveform memories registers 219 GPIF waveform selector register 333 GPIFABORT register 358 GPIFADRH register 338 GPIFADRL register 339 GPIFCTLCFG register 336 GPIFHOLDAMOUNT register 232, 348 GPIFIDLECS register 334 GPIFIDLECTL register 335 GPIFIE register 266 GPIFIRQ register 267 GPIFREADYCFG register 356 GPIFREADYSTAT register 357 GPIFTCBx registers 349 GPIFWFSELECT register 333 H hard reset 83 high speed and full speed differences 87 I I/O PORTA alternate configuration register 275 I/O PORTC alternate configuration register 276 I/O PORTE alternate configuration register 277 I/O ports 181 I2C bus control and status register 278 control register 281 data register 280 interrupt 68 I2C bus controller 189 I2C bus usage 54 I2C registers 191 I2CDAT register 280 I2CS register 278 I2CTL register 281 IBNIE register 258 IBNIRQ register 259 IFCFG selection of port IO pin functions 188 IFCLK configuration 102 IFCONFIG register 221 initialization, auto-in/auto-out 117 INPKTEND register 254 input/output registers 275–282 instruction cycle 178 instruction set 175 instruction timing 178 INT 2 (USB) autovector register 272 INT 2 and INT 4 setup register 274 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Index INT 4 (slave FIFOs and GPIF) autovector register 273 int0_n 63, 194 int1_n 63, 194 INT2IVEC register 272 int4 63 INT4IVEC register 273 int5_n 63 interface clock 102 interface clock (IFCLK) 125 interface configuration register 221 interface descriptor full speed 370, 372 high speed 376, 378, 380 interface modes 23 interface pins polarity register 229 interfacing to I2C peripherals 189 internal data memory 71 internal data RAM 71 lower 128 72 special function register 72 upper 128 72 interrupt compatibility 61 enabling 62 latency 63 masking 62 priorities 62 processing 62 sampling 62 service routine 62 transfers 16 wakeup 81 interrupt enable registers endpoint 264 endpoint ping-NAK/IBN 260 endpoint x slave FIFO flag 256 GPIF 266 IN-BULK-NAK 258 USB 262 USB error 268 interrupt registers 256–274 interrupt request registers endpoint 265 endpoint ping-NAK/IBN 261 endpoint x slave FIFO flag 257 GPIF 267 IN-BULK-NAK 259 USB 263 USB error 269 interrupts 59 endpoint interrupts 66 EP0ACK interrupt 66 EPxISOERR interrupt 67 EPxPING interrupt 66 ERRLIMIT interrupt 67 FIFO/GPIF 69 high speed 66 in-bulk-NAK 66 start of frame 66 SUDAV 66 suspend 66 SUTOK 66 USB bus reset 66 introduction to USB 13 INTSETUP register 274 IO port alternate functions 183 isochronous transfers 16 J jump instruction and autovectoring 67 M memory external data 72 external data memory 71 external program 72 EZ-USB 72 internal data RAM 71 standard 8051 72 memory maps 74 MICROFRAME register 303 N NAKIE register 260 NAKIRQ register 261 non-decision point state instruction 134 O off chip program memory 76 on chip data memory 76 OUTPKTEND register 255 P pin assignment 100 pin TQFP 26 128 pin TQFP 25 56 pin QFN 28 56 pin SSOP 27 56 pin VFBGA 29 PINFLAGSxx register 223 PKTEND 104 port A alternate functions 185 port B and port D alternate functions 186 port C alternate functions 187 port E alternate functions 188 PORTACFG register 275 PORTCCFG register 276 PORTECFG register 277 ports, GPIF, slave FIFOs register 221 power management 77 program status word 179 programmable-level flag 111 PSW register 179, 180 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 399 Index R S RCAP2H register 197 RCAP2L register 197 read GPIF data low, no transaction trigger register 355 read/write GPIF data low and trigger transaction register 354 receive data 191 register summary endpoint buffers 391 endpoint configuration 385 endpoints 388 flowstate 390 general configuration 384 GPIF 390 GPIF waveform memories 384 I2C compatible configuration byte 392 input/output 388 interrupts 387 special function registers (SFR) 392 UDMA 385 UDMA CRC 388 USB control 388 registers conventions 211 endpoint configuration 233–255 general configuration 220–232 GPIF waveform memories 219 special function 212–218 registers associated with EP0 control transfers 39 registers that control all endpoints CLRERRCNT 94 EPIE 94 EPIRQ 94 ERRCNTLIM 94 IBNIE 93 IBNIRQ 93 NAKIE 93 TOGCTL 95 USBERRIE 94 registers that control EP2, EP4, EP6, and EP8 92 registers that require a synchronization delay 366 remote wakeup 81 RENUM bit 56 ReNumeration 18 resets 83 CPU reset 84 EZ-USB disconnect 85 hard reset 83 summary 85 USB bus reset 85 REVCTL register 231 REVID register 230 rxd0_in 202, 207 rxd0_out 202 rxd1_in 202 rxd1_out 202 SBUF0 register 201 SBUF1 register 201 SCON0 register 201 SCON1 register 201 send data 191 serial interface description 201 serial interface engine (SIE) 17 serial port 0/1 description 201 mode 0 202 mode 1 205 mode 2 208 mode 3 210 modes 201 set address 48 set descriptor 46 set interface 47 setup data pointer 95 setup data pointer address registers 330 setup data pointer AUTO mode register 331 setup data registers 332 SETUPDAT registers 332 SFR registers and external RAM equivalent 218 single-read transactions 143 single-write transaction waveform 147 single-write transactions 147 skipping a packet 157 skipping out packets while in AUTOOUT mode 119 slave FIFO chip select (SLCS#) 104 control pins 103 firmware 110–120 hardware 99–110 pins 100 slave FIFO’s 99, 101 SOF interrupt 66 SP register 179 special function register space 72 special function registers 59, 174, 212–218 stack pointer 179 start of frame Interrupt 66 startup modes 51 SUDAV interrupt 66 SUDPTRCTL register 331 SUDPTRx registers 330 summary of interrupt sources 62 suspend interrupt 66 SUSPEND register 298 suspend register 79 suspend state 298 suspend-resume control logic 78 SUTOK interrupt 66 switching between manual-out and auto-out 120 sync frame request 49 synchronization delay 366 synchronization delay registers 366 synchronous FIFO IN data transfer 118 400 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F Index synchronous FIFO reads 107 synchronous FIFO writes 105, 106 synchronous mode 100 T t0 194 t0_out 194 t1 194 t1_out 194 t2 198 t2_out 198 T2CON register 197 t2ex 198 TCON register 193 TH0 register 193 TH1 register 193 TH2 register 193, 197 Timer 0/1 mode 0 194 mode 1 195 mode 2 196 mode 3 196 modes 193 rate control 197 Timer 1 serial port baud rate generator 205 Timer 2 auto-reload mode 199 baud rate generator mode 200 capture mode 198 timer/counter mode 198 timer/counters 193 TL0 register 193 TL1 register 193 TL2 register 193, 197 TMOD register 193 TOGCTL register 300 tokens and PIDs 14 transaction counter 150 transfer length fields 96 txd0 207 txd1 202, 207 typical GPIF interface 123 control and status register 57, 297 control and status register bit definition 297 control registers 297–304 control transfer 38 default configuration descriptor 368 default device descriptor 367 default interface 0, alternate setting 0 368 default interface 0, alternate setting 1 369 direction 14 error counter limit register 270 frame count registers 301, 302 function address register 304 interrupt enable register 262 interrupt request register 263 interrupt sources 63 interrupts 64 microframe count register 303 requests 39 resume 81 specification 14 suspend 79 transfer types 15 USB frame count low 302 USB frames 15 USB microframe count 303 USBCS register 297 USBERRIE register 268, 269 USBERRIRQ 94 USBFRAMEH register 301 USBFRAMEL register 302 USBIE 91 USBIRQ 91 USB-specific interrupts 63 W wakeup control and status register 299 wakeup control register 80 wakeup interrupt 81 wakeup/resume sequence 80 WAKEUPCS register 299 WAVEDATA register 219 waveform descriptor structure 136 WORDWIDE bits 125 WU2 function 81 U X UART230 register 228 UDMA CRC registers 295–296 UDMA interface 167 UDMA qualifier register 296 UDMA transfers 295 UDMACRCQUALIFIER register 296 UDMACRCx register 295 USB about frames 49 about STALL 42 bus reset 85 XAUTODATx register 282 XGPIFSGLDATH register 353 XGPIFSGLDATL register 354 XGPIFSGLDATLNOX register 355 Z zero length isochronous data packet 250 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F 401 Index 402 EZ-USB® Technical Reference Manual, Document # 001-13670 Rev. *F
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : Yes Author : shea Create Date : 2017:05:10 10:40:25Z Modify Date : 2017:05:10 11:38:21Z XMP Toolkit : Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26 Creator Tool : FrameMaker 10.0.2 Format : application/pdf Title : EZ-USB_TRM.book Creator : shea Producer : Acrobat Distiller 10.1.16 (Windows) Document ID : uuid:10111210-3e93-4224-b5c2-5996b458916a Instance ID : uuid:5f76f0b3-b950-43a3-b116-8cf2bc624c18 Page Mode : UseOutlines Page Count : 402EXIF Metadata provided by EXIF.tools