EZ USB® FX3™ Technical Reference Manual 001 76074 USB FX3

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 670

DownloadEZ-USB® FX3™ Technical Reference Manual 001-76074 EZ-USB FX3
Open PDF In BrowserView PDF
EZ-USB® FX3™ Technical Reference Manual
Spec No.: 001-76074 Rev. *E
May 31, 2017

Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
www.cypress.com

Copyrights

Copyrights
© Cypress Semiconductor Corporation, 2012-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.
EZ-USB® is a registered trademark and FX3™ is a trademark of Cypress Semiconductor Corporation (Cypress), along with
Cypress® and Cypress Semiconductor™. All other trademarks or registered trademarks referenced herein are the property of
their respective owners.

2

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

1.

2.

Introduction to EZ-USB FX3

19

1.1

Overview of USB 3.0 ..............................................................................................................19
1.1.1 Physical Layer.............................................................................................................19
1.1.2 Link Layer....................................................................................................................20
1.1.3 Protocol Layer .............................................................................................................21
1.1.3.1 Unicast Transactions ...................................................................................21
1.1.3.2 Token/ Data/Handshake Sequences...........................................................21
1.1.3.3 Data Bursting...............................................................................................23
1.1.3.4 End-to-End Flow Control .............................................................................24
1.1.3.5 Streams .......................................................................................................25

1.2

SuperSpeed Power Management...........................................................................................25
1.2.1 Function Power Management .....................................................................................26

1.3

FX3/FX3S Features ................................................................................................................26
1.3.1 FX3 Block Diagram .....................................................................................................28
1.3.2 FX3S Block Diagram...................................................................................................29

1.4

Functional Overview ...............................................................................................................29
1.4.1 CPU.............................................................................................................................29
1.4.2 DMA ............................................................................................................................30
1.4.3 USB Interface..............................................................................................................30
1.4.4 GPIF II.........................................................................................................................30
1.4.5 UART Interface ...........................................................................................................31
1.4.6 I2C Interface................................................................................................................31
1.4.7 I2S Interface................................................................................................................31
1.4.8 SPI Interface ...............................................................................................................31
1.4.9 JTAG Interface ............................................................................................................31
1.4.10 Storage Interface.........................................................................................................31
1.4.10.1 SD/MMC Clock Stop....................................................................................32
1.4.10.2 SD_CLK Output Clock Stop ........................................................................32
1.4.10.3 Card Insertion and Removal Detection........................................................32
1.4.10.4 Write Protection (WP)..................................................................................32
1.4.10.5 SDIO Interrupt .............................................................................................32
1.4.10.6 SDIO Read-Wait Feature ............................................................................32
1.4.10.7 Boot Options................................................................................................32
1.4.11 Clocking ......................................................................................................................33

FX3 CPU Subsystem

35

2.1

Features..................................................................................................................................35

2.2

Block Diagram ........................................................................................................................36

2.3

Functional Overview ...............................................................................................................36
2.3.1 ARM926EJ-S CPU......................................................................................................36

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

3

Contents

2.3.1.1
2.3.1.2
2.3.1.3
2.3.1.4
2.3.1.5
2.3.1.6
2.3.1.7
2.3.1.8
2.3.1.9
2.3.1.10
2.3.1.11

3.

4.

5.

4

Processor Modes ........................................................................................ 37
Processor Registers .................................................................................... 38
Exception Vectors ....................................................................................... 39
MMU............................................................................................................ 39
Cache Memories ......................................................................................... 40
Tightly Coupled Memories........................................................................... 40
JTAG Interface ............................................................................................ 41
Vectored Interrupt Controller ....................................................................... 41
CPU Operating Frequency .......................................................................... 43
CPU Power Modes...................................................................................... 43
Timers ......................................................................................................... 44

Memory and System Interconnect

45

3.1

Features ................................................................................................................................. 45

3.2

Block Diagram ........................................................................................................................ 45

3.3

Functional Overview ............................................................................................................... 46
3.3.1 Memory Regions......................................................................................................... 46
3.3.2 System Interconnect ................................................................................................... 48
3.3.3 Low-Power Operations ............................................................................................... 48
3.3.4 Cache Operations ....................................................................................................... 49
3.3.4.1 Cache Coherency........................................................................................ 49
3.3.5 Memory Usage ...........................................................................................................50

Global Controller (GCTL)

53

4.1

GPIO Pins............................................................................................................................... 53
4.1.1 I/O Matrix Configuration ..............................................................................................53
4.1.2 I/O Drive Strength ....................................................................................................... 55
4.1.3 GPIO Pull-up and Pull-down ....................................................................................... 55
4.1.4 Simple GPIO Override ................................................................................................ 55
4.1.5 Complex GPIO Override ............................................................................................. 55
4.1.6 I/O Power Observability ..............................................................................................56
4.1.6.1 GCTL_IOPOWER ....................................................................................... 56
4.1.6.2 GCTL_IOPWR_INTR .................................................................................. 56
4.1.6.3 GCTL_IOPWR_INTR_MASK ...................................................................... 56

4.2

Clock Management................................................................................................................. 56

4.3

Power Management ............................................................................................................... 58
4.3.1 Power Domains .......................................................................................................... 58
4.3.2 Power Modes .............................................................................................................. 59
4.3.3 Reset .......................................................................................................................... 59
4.3.4 Hard Reset.................................................................................................................. 59
4.3.5 Soft Reset ................................................................................................................... 59

FX3 DMA Subsystem

61

5.1

DMA Introduction.................................................................................................................... 61

5.2

DMA Features ........................................................................................................................ 61

5.3

DMA Block Diagram ............................................................................................................... 61

5.4

DMA Overview........................................................................................................................ 62

5.5

DMA Subsystem Components ............................................................................................... 63
5.5.1 Clocking ...................................................................................................................... 63

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

5.5.2
5.5.3
5.5.4

5.5.5

5.5.6
5.5.7
5.5.8
5.5.9

6.

Descriptors Buffers, and Sockets ................................................................................64
DMA Descriptors .........................................................................................................64
DMA Buffer..................................................................................................................66
5.5.4.1 Implications of Data Cache Usage ..............................................................66
5.5.4.2 Memory Corruption Due to Cache Line Overlap .........................................67
5.5.4.3 Safe Usage of Data Cache..........................................................................67
5.5.4.4 ALIGNMENT REQUIREMENT - How Not To Share Cache Lines ..............68
Sockets .......................................................................................................................68
5.5.5.1 Software Manipulation of Sockets ...............................................................71
5.5.5.2 Initializing a Socket......................................................................................71
5.5.5.3 Terminating a Socket...................................................................................71
5.5.5.4 Modifying or Suspending a Socket ..............................................................71
5.5.5.5 Inspecting a Socket .....................................................................................72
5.5.5.6 Wrapping Up a Socket.................................................................................72
Illustration of Descriptor, Buffer and Socket Usage.....................................................72
Understanding DMA Operation: Peripheral to Peripheral ...........................................72
Interrupt Requests.......................................................................................................74
DMA Interrupts ............................................................................................................74

5.6

Programming Sequence .........................................................................................................75
5.6.1 Initialization .................................................................................................................75
5.6.1.1 Producer Half...............................................................................................75
5.6.1.2 Consumer Half.............................................................................................75
5.6.2 Peripheral to Peripheral Transfer ................................................................................76

5.7

CPU Intervention In Between Ingress and Egress .................................................................79

5.8

Concept of DMA Channels .....................................................................................................80

Universal Serial Bus (USB)

81

6.1

Introduction .............................................................................................................................81

6.2

Features..................................................................................................................................81

6.3

Block Diagram ........................................................................................................................81

6.4

Overview.................................................................................................................................82
6.4.1 USB Interface Block ....................................................................................................82
6.4.2 USB 3.0 Function Controller .......................................................................................82
6.4.3 USB 2.0 Function Controller .......................................................................................82
6.4.4 USB 2.0 Embedded Host ............................................................................................82
6.4.5 USB OTG Controller ...................................................................................................83
6.4.6 Charger Detect Controller ...........................................................................................83
6.4.7 End-Point Memory ......................................................................................................83
6.4.8 DMA Adapters.............................................................................................................83
6.4.9 USB I/O System ..........................................................................................................83
6.4.9.1 USB 2.0 OTG PHY ......................................................................................83
6.4.9.2 USB 3.0 PHY...............................................................................................84

6.5

UIB Top-Level Register Interface ...........................................................................................84

6.6

USB Function Controllers .......................................................................................................86
6.6.1 USB 3.0 Function ........................................................................................................86
6.6.1.1 Clocking.......................................................................................................86
6.6.1.2 Interrupt Requests .......................................................................................87
6.6.1.3 USB 3.0 Functional Description...................................................................87
6.6.2 Physical Layer.............................................................................................................88

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

5

Contents

6.6.3
6.6.4

Link Layer ................................................................................................................... 89
Protocol Layer............................................................................................................. 90

6.7

USB 2.0 Function ................................................................................................................... 92
6.7.1 Clocking ...................................................................................................................... 92
6.7.2 Interrupt Requests ...................................................................................................... 92
6.7.3 USB 2.0 Functional Description .................................................................................. 92
6.7.3.1 Serial Interface Engine ................................................................................ 92
6.7.3.2 Token Processor ......................................................................................... 92
6.7.4 USB 2.0 Function Registers ....................................................................................... 93
6.7.5 USB Reset .................................................................................................................. 93
6.7.6 USB Suspend ............................................................................................................. 93
6.7.7 USB Resume .............................................................................................................. 93
6.7.8 Start of Frame ............................................................................................................. 93
6.7.9 SETUP Packet ............................................................................................................ 93
6.7.10 IN Packet .................................................................................................................... 94
6.7.11 OUT Packet ................................................................................................................ 94

6.8

USB 3.0 and USB 2.0 Function Coordination......................................................................... 94

6.9

USB Function Programming Model ........................................................................................ 95
6.9.1 USB 3.0 Initialization................................................................................................... 95
6.9.2 USB 3.0 Enable .......................................................................................................... 96
6.9.3 USB 3.0 Fallback to USB 2.0...................................................................................... 97
6.9.4 USB Reset .................................................................................................................. 98
6.9.5 USB Connect .............................................................................................................. 99
6.9.6 USB Disconnect........................................................................................................101
6.9.7 Control Request ........................................................................................................102
6.9.8 USB Embedded Host................................................................................................109
6.9.8.1 Clocking.....................................................................................................109
6.9.9 Interrupt Requests ....................................................................................................109
6.9.10 Functional Description .............................................................................................. 110
6.9.10.1 Embedded Host.........................................................................................110
6.9.10.2 Scheduler Memory ....................................................................................110
6.9.11 Embedded Host Programming Model....................................................................... 112
6.9.11.1 Host Connect.............................................................................................112
6.9.11.2 Host Disconnect ........................................................................................112
6.9.11.3 Managing Transfers ..................................................................................113

6.10 USB OTG Controller.............................................................................................................115
6.10.1 Interrupt Requests .................................................................................................... 115
6.10.2 USB OTG Programming Model ................................................................................ 115
6.10.2.1 USB OTG Start and Stop ..........................................................................115
6.10.2.2 Session Request Protocol .........................................................................119
6.10.2.3 Host Negotiation Protocol..........................................................................121
6.11 USB Charger Detect Controller ............................................................................................122
6.11.1 USB Charger Detect Register Interface....................................................................122
6.11.2 Battery Charger Detection ........................................................................................122
6.11.3 USB ID Signal Detection...........................................................................................123

7.

6

General Programmable Interface II (GPIF II)

125

7.1

Features ...............................................................................................................................125

7.2

Block Diagram ......................................................................................................................126

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

7.3

Typical GPIF II interface .......................................................................................................126

7.4

Functional Overview .............................................................................................................127
7.4.1 Actions ......................................................................................................................127
7.4.1.1 Action - IN_DATA ......................................................................................129
7.4.1.2 Action - IN_ADDR......................................................................................130
7.4.1.3 Action - DR_DATA.....................................................................................130
7.4.1.4 Action - DR_ADDR ....................................................................................131
7.4.1.5 Action - COMMIT.......................................................................................132
7.4.1.6 Action - DR_GPIO .....................................................................................132
7.4.1.7 Action - LD_ADDR_COUNT......................................................................133
7.4.1.8 Action - LD_DATA_COUNT ......................................................................133
7.4.1.9 Action - LD_CTRL_COUNT.......................................................................134
7.4.1.10 Action - COUNT_ADDR ............................................................................135
7.4.1.11 Action - COUNT_DATA .............................................................................135
7.4.1.12 Action - COUNT_CTRL .............................................................................135
7.4.1.13 Action - CMP_ADDR .................................................................................135
7.4.1.14 Action - CMP_DATA..................................................................................136
7.4.1.15 Action - CMP_CTRL ..................................................................................136
7.4.1.16 Action - INTR_CPU ...................................................................................137
7.4.1.17 Action - INTR_HOST .................................................................................137
7.4.1.18 Action - DR_DRQ ......................................................................................137
7.4.2 Triggers .....................................................................................................................138
7.4.3 Transition Conditions ................................................................................................138
7.4.4 GPIF II Designer Tool................................................................................................139
7.4.5 GPIF II Hardware Resources ....................................................................................139
7.4.5.1 Comparators..............................................................................................139
7.4.5.2 Counters ....................................................................................................140
7.4.5.3 GPIF II Interrupt.........................................................................................140
7.4.6 Threads and Sockets ................................................................................................140
7.4.6.1 Difference Between PP_MODE=0 and PP_MODE=1...............................140
7.4.7 Addressing ................................................................................................................142
7.4.7.1 Number of Address Lines ..........................................................................142
7.4.7.2 Assigning Sockets to Threads ...................................................................142
7.4.7.3 Addressing Methods..................................................................................142
7.4.8 Async/Sync ...............................................................................................................143
7.4.9 Configuration of Flags ...............................................................................................143
7.4.10 Developing the GPIF II State Machine ......................................................................143

7.5

Designing a GPIF II Interface ...............................................................................................143

7.6

GPIF II State Machine Implementation.................................................................................146
7.6.1 Add a State................................................................................................................146
7.6.2 Add Actions to a State...............................................................................................147
7.6.3 Draw Transitions Between Actions ...........................................................................147
7.6.4 Add a Transition Equation .........................................................................................148
7.6.5 Set State Properties ..................................................................................................148
7.6.6 Analyzing the Signal Timing of the GPIF II Interface ................................................149
7.6.6.1 Selection of Time Frame ...........................................................................149
7.6.6.2 Automatic Timing Scale Selection .............................................................149
7.6.7 Scenario Entry...........................................................................................................149
7.6.8 Macro ........................................................................................................................151

7.7

GPIF II Constraints ...............................................................................................................151

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

7

Contents

7.7.1
7.7.2
7.7.3
7.7.4
7.7.5

Mirror States .............................................................................................................151
Mirror State Rules .....................................................................................................152
Mirror State Example ................................................................................................153
Guidelines for Transition Equation Entry ..................................................................154
Intermediate States ...................................................................................................155

7.8

Initialization and Configuration of GPIF II Block ...................................................................156
7.8.1 GPIF II State Machine Control ..................................................................................156

7.9

Performing Read and Write Operations Using GPIF II.........................................................156

7.10 DMA Channel Creation in FX3 Firmware to Perform GPIF II to USB Data Transfers..........158
7.11 GPIF II State Machine to Read Data into a Socket ..............................................................158
7.12 DMA Channel Creation in FX3 Firmware to Perform USB to GPIF II Data Transfers..........159
7.13 GPIF II State Machine to Drive Data from Socket as Data Source ......................................159
7.13.1 Alpha Values .............................................................................................................160
7.14 GPIF II Read and Write over Registers ................................................................................161
7.15 Implementing Synchronous Slave FIFO Interface................................................................162
7.16 Synchronous Slave FIFO Access Sequence and Interface Timing......................................166
7.16.1 Synchronous Slave FIFO Read Sequence Description ............................................167
7.16.2 Synchronous Slave FIFO Write Sequence Description ............................................169
7.16.3 Slave FIFO Interface Logical Diagram......................................................................170
7.16.4 GPIF II State Machine of Slave FIFO Interface ........................................................170

8.

8

Low Performance Peripherals (LPP)

173

8.1

I2C Interface .........................................................................................................................174
8.1.1 I2C Block Features ...................................................................................................174
8.1.2 I2C Interface Overview .............................................................................................175

8.2

FX3 I2C Operations Overview..............................................................................................176
8.2.1 Reset and Initialization..............................................................................................176
8.2.2 Preamble ..................................................................................................................176
8.2.3 Data Transfer ............................................................................................................176
8.2.3.1 Programming Model ..................................................................................176
8.2.3.2 Register-Based I2C Transfers...................................................................177
8.2.3.3 DMA-Based I2C Transfers ........................................................................177
8.2.3.4 Starting a Transaction ...............................................................................177
8.2.3.5 Terminating Transactions: Software and Hardware Aborts.......................178
8.2.3.6 Multimaster Arbitration ..............................................................................178
8.2.3.7 Error Conditions ........................................................................................178
8.2.4 Examples ..................................................................................................................178
8.2.4.1 Initialize I2C Block .....................................................................................178
8.2.4.2 Configure I2C Block ..................................................................................179
8.2.4.3 Reads and Writes Using Register Transfers .............................................179
8.2.4.4 Reads and Writes Using DMA Transfers ..................................................180

8.3

Serial Peripheral Interface ....................................................................................................181
8.3.1 SPI Block Features ...................................................................................................181
8.3.2 SPI Interface Overview .............................................................................................182
8.3.3 FX3 SPI Operations Overview ..................................................................................183
8.3.3.1 Reset and Initialization ..............................................................................183
8.3.3.2 Modes Governing Transfers......................................................................183
8.3.4 SSN Control Configurations......................................................................................183

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

8.3.5

Data Transfers...........................................................................................................184

8.4

Programming Model .............................................................................................................184
8.4.1 Register-Based Transfers .........................................................................................184
8.4.2 DMA-Based Transfers...............................................................................................184

8.5

Examples ..............................................................................................................................185
8.5.1 Initialize SPI Block.....................................................................................................185
8.5.2 Configure SPI Block ..................................................................................................185
8.5.3 Reads and Writes Using Register Transfers .............................................................186
8.5.4 Reads and Writes Using DMA Transfers ..................................................................187

8.6

Universal Asynchronous Receiver Transmitter.....................................................................189
8.6.1 UART block features .................................................................................................189
8.6.2 UART Overview ........................................................................................................189

8.7

FX3 UART Operations Overview..........................................................................................190
8.7.1 Reset and Initialization ..............................................................................................190
8.7.2 Programming Model..................................................................................................190
8.7.3 Register-Based Transfers .........................................................................................190
8.7.3.1 DMA-Based Transfers ...............................................................................190
8.7.3.2 Error Conditions.........................................................................................191
8.7.4 Examples ..................................................................................................................191
8.7.4.1 Initialize UART Block .................................................................................191
8.7.4.2 FX3 Firmware to Send UART Messages and to Receive Fixed Bytes of Text
191

8.8

Integrated Interchip Sound Interface ....................................................................................193
8.8.1 I2S Block Features....................................................................................................193
8.8.2 I2S Overview.............................................................................................................193
8.8.3 FX3 I2S Operations Overview...................................................................................194
8.8.4 Programming Model..................................................................................................194
8.8.4.1 Start Transmission.....................................................................................194
8.8.4.2 Mute Condition ..........................................................................................194
8.8.4.3 Pause Condition ........................................................................................194
8.8.4.4 Buffer Underflow........................................................................................195
8.8.4.5 Stop Event .................................................................................................195
8.8.4.6 Fixed Clock Mode......................................................................................195
8.8.4.7 Data Shift Mode.........................................................................................195
8.8.4.8 Padding .....................................................................................................195
8.8.4.9 Error Conditions.........................................................................................195
8.8.4.10 Examples...................................................................................................195
8.8.4.11 Initialize I2S Block .....................................................................................196
8.8.4.12 Configure I2S Interface..............................................................................196
8.8.4.13 Transferring Data from USB Interface to I2S Interface Using DMA Transfers
196

8.9

GPIO.....................................................................................................................................198
8.9.1 GPIO Features ..........................................................................................................198
8.9.2 GPIO Overview .........................................................................................................198
8.9.3 Programming Model..................................................................................................198
8.9.3.1 Reset and Initialization ..............................................................................198
8.9.4 Examples ..................................................................................................................199
8.9.4.1 Initialize GPIO Block..................................................................................199
8.9.4.2 Configure GPIO[45] as Input Pin and GPIO[21] as Output Pin .................200
8.9.4.3 Configure GPIO[50] to Generate PWM Output .........................................202

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

9

Contents

9.

Storage Ports

203

9.1

Storage Interface Block Features .........................................................................................203

9.2

Block Diagram ......................................................................................................................203

9.3

Storage Interface (S-Port) ....................................................................................................205

9.4

SD/ MMC/ SDIO Interface ....................................................................................................207
9.4.1 SD/MMC Interface Overview ....................................................................................207
9.4.2 SDIO Interface Overview ..........................................................................................209

9.5

FX3S S-Port Operations Overview.......................................................................................209
9.5.1 S-port Initialization and Configuration .......................................................................210
9.5.1.1 Configuring the FX3S I/O Matrix ...............................................................210
9.5.1.2 Setting S-Port Interface Parameters .........................................................210
9.5.1.3 Starting the Storage Driver........................................................................211
9.5.1.4 Setting the S-Port Clock ............................................................................212
9.5.1.5 Sending SD/MMC/SDIO Commands ........................................................212
9.5.1.6 Handling SIB Events .................................................................................214
9.5.2 Reads and Writes to SD/ MMC Using DMA Transfers .............................................216
9.5.2.1 Sending Vendor Commands to SD/ MMC.................................................218
9.5.2.2 Setting the Granularity of Write Operations...............................................218
9.5.2.3 Checking Card Status ...............................................................................218
9.5.2.4 Aborting Ongoing Transaction to S-Port ...................................................218
9.5.3 Working with SDIO Cards .........................................................................................219
9.5.3.1 Configuration and Initialization ..................................................................219
9.5.3.2 Reads and Writes from SDIO Card Registers...........................................219
9.5.3.3 IO_RW_DIRECT Command (CMD52) ......................................................219
9.5.3.4 Setting Function Block Size.......................................................................224
9.5.3.5 Initialization and Operation of SDIO Functions .........................................224
9.5.3.6 SDIO Interrupts .........................................................................................224
9.5.3.7 Enabling and Disabling SDIO Interrupts....................................................225
9.5.3.8 Handling SDIO Interrupts ..........................................................................225

9.6

FX3S-Specific Features........................................................................................................226
9.6.1 Card Insertion and Removal Detection Mechanism .................................................226
9.6.2 Handling Card Detection in Software........................................................................227
9.6.3 Write Protection ........................................................................................................228
9.6.4 SD/MMC CLOCK STOP ...........................................................................................228
9.6.5 SD_CLK Output Clock Stop......................................................................................228
9.6.6 SDIO Read-Wait/ Suspend-Resume Feature ...........................................................228
9.6.6.1 Read-Wait .................................................................................................228
9.6.6.2 Suspend-Resume Feature ........................................................................229
9.6.6.3 SD3.0 Host Tuning Feature.......................................................................229
9.6.6.4 Normal and Alternate eMMC4.4 Boot .......................................................230

10. Registers

235

10.1 Introduction...........................................................................................................................235
10.2 Register Conventions ...........................................................................................................236
10.3 Vectored Interrupt Controller (VIC) Registers.......................................................................237
10.3.1
VIC_IRQ_STATUS ..............................................................................................237
10.3.2
VIC_FIQ_STATUS ...............................................................................................238
10.3.3
VIC_RAW_STATUS ............................................................................................239
10.3.4
VIC_INT_SELECT ...............................................................................................240

10

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

10.3.5
10.3.6
10.3.7
10.3.8
10.3.9
10.3.10

VIC_INT_ENABLE ...............................................................................................241
VIC_INT_CLEAR .................................................................................................242
VIC_PRIORITY_MASK ........................................................................................243
VIC_VEC_ADDRESS ..........................................................................................244
VIC_VECT_PRIORITY .........................................................................................245
VIC_ADDRESS ....................................................................................................246

10.4 Global Controller Registers...................................................................................................247
10.4.1
GCTL_IOMATRIX ................................................................................................247
10.4.2
GCTL_GPIO_SIMPLE .........................................................................................248
10.4.3
GCTL_GPIO_COMPLEX .....................................................................................250
10.4.4
GCTL_DS .............................................................................................................252
10.4.5
GCTL_WPU_CFG ................................................................................................254
10.4.6
GCTL_WPD_CFG ................................................................................................256
10.4.7
GCTL_IOPOWER ................................................................................................258
10.4.8
GCTL_IOPOWER_INTR ......................................................................................260
10.4.9
GCTL_IOPOWER_INTR_MASK ..........................................................................262
10.4.10 GCTL_SW_INT ....................................................................................................264
10.4.11 GCTL_PLL_CFG ..................................................................................................265
10.4.12 GCTL_CPU_CLK_CFG .......................................................................................267
10.4.13 GCTL_UIB_CORE_CLK ......................................................................................268
10.4.14 GCTL_PIB_CORE_CLK ......................................................................................269
10.4.15 GCTL_GPIO_FAST_CLK ....................................................................................270
10.4.16 GCTL_GPIO_SLOW_CLK ...................................................................................272
10.4.17 GCTL_I2C_CORE_CLK .......................................................................................273
10.4.18 GCTL_UART_CORE_CLK ..................................................................................274
10.4.19 GCTL_SPI_CORE_CLK ......................................................................................275
10.4.20 GCTL_I2S_CORE_CLK .......................................................................................276
10.5 Global Controller Always On Registers ................................................................................277
10.5.1
GCTL_WAKEUP_EN ...........................................................................................277
10.5.2
GCTL_WAKEUP_POLARITY ..............................................................................279
10.5.3
GCTL_WAKEUP_EVENT ....................................................................................281
10.5.4
GCTL_FREEZE ...................................................................................................283
10.5.5
GCTL_WATCHDOG_CS .....................................................................................284
10.5.6
GCTL_WATCHDOG_TIMER0 .............................................................................286
10.5.7
GCTL_WATCHDOG_TIMER1 .............................................................................287
10.6 PIB Registers........................................................................................................................288
10.6.1
PIB_CONFIG .......................................................................................................288
10.6.2
PIB_INTR .............................................................................................................290
10.6.3
PIB_INTR_MASK .................................................................................................292
10.6.4
PIB_CLOCK_DETECT .........................................................................................294
10.6.5
PIB_RD_MAILBOX ..............................................................................................295
10.6.6
PIB_WR_MAILBOX .............................................................................................297
10.6.7
PIB_ERROR ........................................................................................................299
10.6.8
PIB_EOP_EOT ....................................................................................................301
10.6.9
PIB_DLL_CTRL ...................................................................................................302
10.6.10 PIB_WR_THRESHOLD .......................................................................................304
10.6.11 PIB_RD_THRESHOLD ........................................................................................305
10.6.12 PIB_ID ..................................................................................................................306

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

11

Contents

10.6.13 PIB_POWER ........................................................................................................307
10.7 GPIF Registers .....................................................................................................................308
10.7.1
GPIF_CONFIG .....................................................................................................308
10.7.2
GPIF_BUS_CONFIG ...........................................................................................310
10.7.3
GPIF_BUS_CONFIG2 .........................................................................................312
10.7.4
GPIF_AD_CONFIG ..............................................................................................313
10.7.5
GPIF_STATUS ....................................................................................................315
10.7.6
GPIF_INTR ..........................................................................................................317
10.7.7
GPIF_INTR_MASK ..............................................................................................319
10.7.8
GPIF_CTRL_BUS_DIRECTION ..........................................................................321
10.7.9
GPIF_CTRL_BUS_DEFAULT .............................................................................322
10.7.10 GPIF_CTRL_BUS_POLARITY ............................................................................323
10.7.11 GPIF_CTRL_BUS_TOGGLE ...............................................................................324
10.7.12 GPIF_CTRL_BUS_SELECT ................................................................................325
10.7.13 GPIF_CTRL_COUNT_CONFIG ..........................................................................326
10.7.14 GPIF_CTRL_COUNT_RESET ............................................................................327
10.7.15 GPIF_CTRL_COUNT_LIMIT ...............................................................................328
10.7.16 GPIF_ADDR_COUNT_CONFIG ..........................................................................329
10.7.17 GPIF_ADDR_COUNT_RESET ............................................................................330
10.7.18 GPIF_ADDR_COUNT_LIMIT ..............................................................................331
10.7.19 GPIF_STATE_COUNT_CONFIG ........................................................................332
10.7.20 GPIF_STATE_COUNT_LIMIT .............................................................................333
10.7.21 GPIF_DATA_COUNT_CONFIG ..........................................................................334
10.7.22 GPIF_DATA_COUNT_RESET ............................................................................335
10.7.23 GPIF_DATA_COUNT_LIMIT ...............................................................................336
10.7.24 GPIF_CTRL_COMP_VALUE ...............................................................................337
10.7.25 GPIF_CTRL_COMP_MASK ................................................................................338
10.7.26 GPIF_DATA_COMP_VALUE ..............................................................................339
10.7.27 GPIF_DATA_COMP_MASK ................................................................................340
10.7.28 GPIF_ADDR_COMP_VALUE ..............................................................................341
10.7.29 GPIF_ADDR_COMP_MASK ...............................................................................342
10.7.30 GPIF_DATA_CTRL ..............................................................................................343
10.7.31 GPIF_INGRESS_DATA .......................................................................................344
10.7.32 GPIF_EGRESS_DATA ........................................................................................345
10.7.33 GPIF_INGRESS_ADDRESS ...............................................................................346
10.7.34 GPIF_EGRESS_ADDRESS ................................................................................347
10.7.35 GPIF_THREAD_CONFIG ....................................................................................348
10.7.36 GPIF_LAMBDA_STAT .........................................................................................350
10.7.37 GPIF_ALPHA_STAT ............................................................................................351
10.7.38 GPIF_BETA_STAT ..............................................................................................352
10.7.39 GPIF_WAVEFORM_CTRL_STAT .......................................................................353
10.7.40 GPIF_WAVEFORM_SWITCH .............................................................................355
10.7.41 GPIF_WAVEFORM_SWITCH_TIMEOUT ...........................................................357
10.7.42 GPIF_CRC_CONFIG ...........................................................................................358
10.7.43 GPIF_CRC_DATA ...............................................................................................359
10.7.44 GPIF_BETA_DEASSERT ....................................................................................360
10.7.45 GPIF_FUNCTION ................................................................................................361
10.7.46 GPIF_LEFT_WAVEFORM ...................................................................................362
10.7.47 GPIF_RIGHT_WAVEFORM ................................................................................365

12

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

10.8 P-Port Registers ...................................................................................................................368
10.8.1
PP_ID ...................................................................................................................368
10.8.2
PP_INIT ................................................................................................................369
10.8.3
PP_CONFIG ........................................................................................................370
10.8.4
PP_INTR_MASK ..................................................................................................372
10.8.5
PP_DRQR5_MASK ..............................................................................................373
10.8.6
PP_SOCK_MASK ................................................................................................374
10.8.7
PP_ERROR .........................................................................................................375
10.8.8
PP_DMA_XFER ...................................................................................................376
10.8.9
PP_DMA_SIZE ....................................................................................................377
10.8.10 PP_WR_MAILBOX ..............................................................................................378
10.8.11 PP_MMIO_ADDR ................................................................................................380
10.8.12 PP_MMIO_DATA .................................................................................................381
10.8.13 PP_MMIO .............................................................................................................382
10.8.14 PP_EVENT ..........................................................................................................383
10.8.15 PP_RD_MAILBOX ...............................................................................................385
10.8.16 PP_SOCK_STAT .................................................................................................387
10.8.17 PP_BUF_SIZE_CNT ............................................................................................388
10.9 USB Port Registers...............................................................................................................389
10.9.1
UIB_INTR .............................................................................................................389
10.9.2
UIB_INTR_MASK .................................................................................................391
10.9.3
UIB_ID ..................................................................................................................393
10.9.4
UIB_POWER ........................................................................................................394
10.10 USB2 HS/FS/LS PHY Registers...........................................................................................395
10.10.1 PHY_CLK_AND_TEST ........................................................................................395
10.10.2 PHY_CONF ..........................................................................................................397
10.10.3 PHY_CHIRP .........................................................................................................399
10.11 USB2 Device Controller Registers........................................................................................400
10.11.1 DEV_CS ...............................................................................................................400
10.11.2 DEV_FRAMECNT ................................................................................................402
10.11.3 DEV_PWR_CS ....................................................................................................403
10.11.4 DEV_SETUPDAT .................................................................................................404
10.11.5 DEV_TOGGLE .....................................................................................................406
10.11.6 DEV_EPI_CS .......................................................................................................408
10.11.7 DEV_EPI_XFER_CNT .........................................................................................410
10.11.8 DEV_EPO_CS .....................................................................................................411
10.11.9 DEV_EPO_XFER_CNT .......................................................................................413
10.11.10 DEV_CTRL_INTR_MASK ....................................................................................414
10.11.11 DEV_CTRL_INTR ................................................................................................415
10.11.12 DEV_EP_INTR_MASK ........................................................................................416
10.11.13 DEV_EP_INTR .....................................................................................................417
10.12 USB Controller Miscellaneous Registers..............................................................................418
10.12.1 CHGDET_CTRL ...................................................................................................418
10.12.2 CHGDET_INTR ....................................................................................................420
10.12.3 CHGDET_INTR_MASK .......................................................................................421
10.12.4 OTG_CTRL ..........................................................................................................422
10.12.5 OTG_INTR ...........................................................................................................424
10.12.6 OTG_INTR_MASK ...............................................................................................425

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

13

Contents

10.12.7 OTG_TIMER ........................................................................................................426
10.13 USB End Point Manager Registers ......................................................................................427
10.13.1 EEPM_CS ............................................................................................................427
10.13.2 IEPM_CS .............................................................................................................429
10.13.3 IEPM_MULT ........................................................................................................430
10.13.4 EEPM_ENDPOINT ..............................................................................................431
10.13.5 IEPM_ENDPOINT ................................................................................................432
10.13.6 IEPM_FIFO ..........................................................................................................433
10.14 USB2 Host Controller Registers ...........................................................................................434
10.14.1 HOST_CS ............................................................................................................434
10.14.2 HOST_EP_INTR ..................................................................................................435
10.14.3 HOST_EP_INTR_MASK ......................................................................................436
10.14.4 HOST_TOGGLE ..................................................................................................437
10.14.5 HOST_SHDL_CS ................................................................................................439
10.14.6 HOST_SHDL_SLEEP ..........................................................................................441
10.14.7 HOST_RESP_BASE ............................................................................................442
10.14.8 HOST_RESP_CS ................................................................................................443
10.14.9 HOST_ACTIVE_EP .............................................................................................444
10.14.10 OHCI_REVISION .................................................................................................445
10.14.11 OHCI_CONTROL ................................................................................................446
10.14.12 OHCI_COMMAND_STATUS ...............................................................................447
10.14.13 OHCI_INTERRUPT_STATUS .............................................................................448
10.14.14 OHCI_INTERRUPT_ENABLE .............................................................................449
10.14.15 OHCI_INTERRUPT_DISABLE ............................................................................450
10.14.16 OHCI_FM_INTERVAL .........................................................................................451
10.14.17 OHCI_FM_REMAINING ......................................................................................452
10.14.18 OHCI_FM_NUMBER ...........................................................................................453
10.14.19 OHCI_PERIODIC_START ...................................................................................454
10.14.20 OHCI_LS_THRESHOLD .....................................................................................455
10.14.21 OHCI_RH_PORT_STATUS .................................................................................456
10.14.22 OHCI_EOF ...........................................................................................................458
10.14.23 EHCI_HCCPARAMS ...........................................................................................459
10.14.24 EHCI_USBCMD ...................................................................................................460
10.14.25 EHCI_USBSTS ....................................................................................................461
10.14.26 EHCI_USBINTR ...................................................................................................462
10.14.27 EHCI_FRINDEX ...................................................................................................463
10.14.28 EHCI_CONFIGFLAG ...........................................................................................464
10.14.29 EHCI_PORTSC ...................................................................................................465
10.14.30 EHCI_EOF ...........................................................................................................467
10.14.31 SHDL_CHNG_TYPE ...........................................................................................468
10.14.32 SHDL_STATE_MACHINE ...................................................................................469
10.14.33 SHDL_INTERNAL_STATUS ...............................................................................471
10.14.34 SHDL_OHCI ........................................................................................................473
10.14.35 SHDL_EHCI .........................................................................................................477
10.15 USB3 Link Controller Registers............................................................................................481
10.15.1 LNK_CONF ..........................................................................................................481
10.15.2 LNK_INTR ............................................................................................................482
10.15.3 LNK_INTR_MASK ...............................................................................................484

14

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

10.15.4
10.15.5
10.15.6
10.15.7
10.15.8
10.15.9
10.15.10
10.15.11
10.15.12
10.15.13
10.15.14
10.15.15
10.15.16
10.15.17
10.15.18
10.15.19
10.15.20
10.15.21
10.15.22
10.15.23
10.15.24

LNK_ERROR_CONF ...........................................................................................486
LNK_ERROR_STATUS .......................................................................................488
LNK_ERROR_COUNT ........................................................................................490
LNK_ERROR_COUNT_THRESHOLD ................................................................491
LNK_PHY_CONF .................................................................................................492
LNK_PHY_MPLL_STATUS .................................................................................493
LNK_PHY_TX_TRIM ...........................................................................................494
LNK_PHY_ERROR_CONF ..................................................................................495
LNK_PHY_ERROR_STATUS ..............................................................................496
LNK_DEVICE_POWER_CONTROL ....................................................................498
LNK_LTSSM_STATE ...........................................................................................500
LNK_LFPS_OBSERVE ........................................................................................501
LNK_COMPLIANCE_PATTERN_0 ......................................................................502
LNK_COMPLIANCE_PATTERN_1 ......................................................................503
LNK_COMPLIANCE_PATTERN_2 ......................................................................504
LNK_COMPLIANCE_PATTERN_3 ......................................................................505
LNK_COMPLIANCE_PATTERN_4 ......................................................................506
LNK_COMPLIANCE_PATTERN_5 ......................................................................507
LNK_COMPLIANCE_PATTERN_6 ......................................................................508
LNK_COMPLIANCE_PATTERN_7 ......................................................................509
LNK_COMPLIANCE_PATTERN_8 ......................................................................510

10.16 USB3 Protocol Layer Registers ............................................................................................511
10.16.1 PROT_CS ............................................................................................................511
10.16.2 PROT_INTR .........................................................................................................513
10.16.3 PROT_INTR_MASK .............................................................................................515
10.16.4 PROT_FRAMECNT .............................................................................................517
10.16.5 PROT_ITP_TIME .................................................................................................518
10.16.6 PROT_ITP_TIMESTAMP .....................................................................................519
10.16.7 PROT_SETUP_DAT ............................................................................................520
10.16.8 PROT_SEQ_NUM ...............................................................................................522
10.16.9 PROT_EP_INTR ..................................................................................................524
10.16.10 PROT_EP_INTR_MASK ......................................................................................525
10.16.11 PROT_EPI_CS1 ..................................................................................................526
10.16.12 PROT_EPI_CS2 ..................................................................................................528
10.16.13 PROT_EPI_UNMAPPED_STREAM ....................................................................529
10.16.14 PROT_EPI_MAPPED_STREAM .........................................................................530
10.16.15 PROT_EPO_CS1 .................................................................................................531
10.16.16 PROT_EPO_CS2 .................................................................................................533
10.16.17 PROT_EPO_UNMAPPED_STREAM ..................................................................534
10.16.18 PROT_EPO_MAPPED_STREAM .......................................................................535
10.17 USB Port - SuperSpeed Ingress Socket Registers...............................................................536
10.17.1 UIBIN_ID ..............................................................................................................536
10.17.2 UIBIN_POWER ....................................................................................................537
10.18 I2S Registers ........................................................................................................................538
10.18.1 I2S_CONFIG ........................................................................................................538
10.18.2 I2S_STATUS ........................................................................................................540
10.18.3 I2S_INTR .............................................................................................................542
10.18.4 I2S_INTR_MASK .................................................................................................543

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

15

Contents

10.18.5
10.18.6
10.18.7
10.18.8
10.18.9
10.18.10

I2S_EGRESS_DATA_LEFT ................................................................................544
I2S_EGRESS_DATA_RIGHT ..............................................................................545
I2S_COUNTER ....................................................................................................546
I2S_SOCKET .......................................................................................................547
I2S_ID ..................................................................................................................548
I2S_POWER ........................................................................................................549

10.19 I2C Registers........................................................................................................................550
10.19.1 I2C_CONFIG .......................................................................................................550
10.19.2 I2C_STATUS .......................................................................................................552
10.19.3 I2C_INTR .............................................................................................................554
10.19.4 I2C_INTR_MASK .................................................................................................555
10.19.5 I2C_TIMEOUT .....................................................................................................556
10.19.6 I2C_DMA_TIMEOUT ...........................................................................................557
10.19.7 I2C_PREAMBLE_CTRL ......................................................................................558
10.19.8 I2C_PREAMBLE_DATA ......................................................................................559
10.19.9 I2C_PREAMBLE_RPT .........................................................................................561
10.19.10 I2C_COMMAND ..................................................................................................562
10.19.11 I2C_EGRESS_DATA ...........................................................................................564
10.19.12 I2C_INGRESS_DATA ..........................................................................................565
10.19.13 I2C_CLOCK_LOW_COUNT ................................................................................566
10.19.14 I2C_BYTE_COUNT .............................................................................................567
10.19.15 I2C_BYTES_TRANSFERRED .............................................................................568
10.19.16 I2C_SOCKET .......................................................................................................569
10.19.17 I2C_ID ..................................................................................................................570
10.19.18 I2C_POWER ........................................................................................................571
10.20 UART Registers....................................................................................................................572
10.20.1 UART_CONFIG ...................................................................................................572
10.20.2 UART_STATUS ...................................................................................................574
10.20.3 UART_INTR .........................................................................................................576
10.20.4 UART_INTR_MASK .............................................................................................577
10.20.5 UART_EGRESS_DATA .......................................................................................578
10.20.6 UART_INGRESS_DATA .....................................................................................579
10.20.7 UART_SOCKET ..................................................................................................580
10.20.8 UART_RX_BYTE_COUNT ..................................................................................581
10.20.9 UART_TX_BYTE_COUNT ..................................................................................582
10.20.10 UART_ID ..............................................................................................................583
10.20.11 UART_POWER ....................................................................................................584
10.21 SPI Registers........................................................................................................................585
10.21.1 SPI_CONFIG .......................................................................................................585
10.21.2 SPI_STATUS .......................................................................................................587
10.21.3 SPI_INTR .............................................................................................................589
10.21.4 SPI_INTR_MASK .................................................................................................590
10.21.5 SPI_EGRESS_DATA ...........................................................................................591
10.21.6 SPI_INGRESS_DATA .........................................................................................592
10.21.7 SPI_SOCKET ......................................................................................................593
10.21.8 SPI_RX_BYTE_COUNT ......................................................................................594
10.21.9 SPI_TX_BYTE_COUNT ......................................................................................595
10.21.10 SPI_ID ..................................................................................................................596

16

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Contents

10.21.11 SPI_POWER ........................................................................................................597
10.22 General Purpose IO Block Registers....................................................................................598
10.22.1 GPIO_SIMPLE .....................................................................................................598
10.22.2 GPIO_INVALUE0 .................................................................................................600
10.22.3 GPIO_INVALUE1 .................................................................................................601
10.22.4 GPIO_INTR0 ........................................................................................................602
10.22.5 GPIO_INTR1 ........................................................................................................603
10.22.6 GPIO_INTR ..........................................................................................................604
10.22.7 GPIO_ID ...............................................................................................................605
10.22.8 GPIO_POWER .....................................................................................................606
10.23 General Purpose IO Registers (one pin) ..............................................................................607
10.23.1 PIN_STATUS .......................................................................................................607
10.23.2 PIN_TIMER ..........................................................................................................609
10.23.3 PIN_PERIOD .......................................................................................................610
10.23.4 PIN_THRESHOLD ...............................................................................................611
10.24 Low Performance Peripherals Registers ..............................................................................612
10.24.1 LPP_ID .................................................................................................................612
10.24.2 LPP_POWER .......................................................................................................613
10.25 DMA Socket and Descriptor Registers .................................................................................614
10.25.1 SCK_DSCR ..........................................................................................................614
10.25.2 SCK_SIZE ............................................................................................................616
10.25.3 SCK_COUNT .......................................................................................................617
10.25.4 SCK_STATUS ......................................................................................................618
10.25.5 SCK_INTR ...........................................................................................................621
10.25.6 SCK_INTR_MASK ...............................................................................................623
10.25.7 DSCR_BUFFER ...................................................................................................625
10.25.8 DSCR_SYNC .......................................................................................................626
10.25.9 DSCR_CHAIN ......................................................................................................628
10.25.10 DSCR_SIZE .........................................................................................................629
10.25.11 EVENT .................................................................................................................631
10.26 DMA Adapter Global Registers.............................................................................................632
10.26.1 SCK_INTR ...........................................................................................................632
10.26.2 ADAPTER_STATUS ............................................................................................638
10.26.3 SIB_ID ..................................................................................................................639
10.26.4 SIB_POWER ........................................................................................................640
10.26.5 SDMMC_CMD_IDX .............................................................................................641
10.26.6 SDMMC_CMD_ARG0 ..........................................................................................642
10.26.7 SDMMC_CMD_ARG1 ..........................................................................................643
10.26.8 SDMMC_RESP_IDX ............................................................................................644
10.26.9 SDMMC_RESP_REG0 ........................................................................................645
10.26.10 SDMMC_RESP_REG1 ........................................................................................646
10.26.11 SDMMC_RESP_REG2 ........................................................................................647
10.26.12 SDMMC_RESP_REG3 ........................................................................................648
10.26.13 SDMMC_RESP_REG4 ........................................................................................649
10.26.14 SDMMC_CMD_RESP_FMT ................................................................................650
10.26.15 SDMMC_BLOCK_COUNT ...................................................................................651
10.26.16 SDMMC_BLOCK_LEN ........................................................................................652
10.26.17 SDMMC_MODE_CFG .........................................................................................653

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

17

Contents

10.26.18
10.26.19
10.26.20
10.26.21
10.26.22
10.26.23
10.26.24
10.26.25
10.26.26
10.26.27

Revision History

18

SDMMC_DATA_CFG ..........................................................................................655
SDMMC_CS ........................................................................................................656
SDMMC_STATUS ...............................................................................................658
SDMMC_INTR .....................................................................................................660
SDMMC_INTR_MASK .........................................................................................662
SDMMC_NCR ......................................................................................................664
SDMMC_NCC_NWR ...........................................................................................665
SDMMC_NAC ......................................................................................................666
SDMMC_HW_CTRL ............................................................................................667
SDMMC_DLL_CTRL ...........................................................................................668

669

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

1. Introduction to EZ-USB FX3

EZ-USB® FX3™ is Cypress's high-bandwidth USB 3.0 peripheral controller that provides integrated and flexible features.
FX3 integrates the USB 3.0 and USB 2.0 physical layers (PHYs) along with a 32-bit ARM926EJ-S microprocessor for
powerful data processing and for building custom USB SuperSpeed applications.
To provide high-bandwidth access to USB 3.0 data, FX3 contains a hardware unit called General Programmable Interface,
Generation 2 (GPIF II). GPIF II is an enhanced version of the GPIF in FX2LP™, Cypress's USB 2.0 product. GPIF II provides
easy and glueless connectivity to popular interfaces such as asynchronous SRAM and asynchronous and synchronous
address and data multiplexed interfaces. FX3 implements a DMA-centric architecture that enables direct 375-MBps data
transfer from GPIF II to the USB interface without CPU intervention.
An integrated USB 2.0 USB On-The-Go (OTG) controller enables applications in which FX3 may serve dual high-speed roles;
for example, EZ-USB FX3 may function as a High-Speed On-The-Go (HS-OTG) host to USB Mass Storage Class (MSC)
devices and HID-class devices. FX3 contains 512 KB or 256 KB of on-chip SRAM for code and data. EZ-USB FX3 also
provides interfaces to connect to serial peripherals such as UART, SPI, I2C, and I2S. FX3 comes with application
development tools. The software development kit (SDK) provides application examples for accelerating the time to market.
FX3 complies with the USB 3.0 v1.0 specification and is also backward compatible with USB 2.0. It also complies with the
Battery Charging Specification v1.1 and USB 2.0 OTG Specification v2.0.
In addition to these features, FX3S has an integrated storage controller and can support up to two independent mass storage
devices. It can support SD 3.0 and eMMC 4.41 memory cards. It can also support SDIO on these ports.
This TRM describes the following functional blocks of the FX3/FX3S device: CPU subsystem, memory, global control, DMA,
USB, GPIF II, low-bandwidth (serial and GPIO) peripherals, and storage (storage block is specific to FX3S only). Registers
associated with these functional blocks are documented in the Registers chapter on page 235.
The following sections describe the details of USB 3.0 and briefly outline the EZ-USB FX3/FX3S architecture.

1.1

Overview of USB 3.0

This section gives an overview of USB 3.0 and describes the significant changes in each layer from the USB 2.0 specification,
including the new power management features provided in USB 3.0. Refer to AN57294 - USB 101: An Introduction to
Universal Serial Bus 2.0 for more details on USB 2.0. The USB 2.0 and 3.0 specifications can be downloaded from
http://www.usb.org/developers/docs.
The USB 3.0 specification, released in 2008, allows a maximum signaling rate of 5 Gbps (SuperSpeed), which is 10 times the
signaling rate of High Speed. The USB 3.0 architecture contains three layers: the physical layer, the link layer on top of the
physical layer, and the protocol layer on top of the link layer.
The additional bandwidth provided by USB SuperSpeed transactions can benefit applications like real-time audio and video
streaming that require a higher bus bandwidth at regular intervals. Mass storage applications can also benefit from the
SuperSpeed bandwidth. FX3 has also been used to implement a high-performance PC-based logic analyzer.

1.1.1

Physical Layer

The physical layer refers to the PHY part of the port and the cable connecting the upstream and downstream ports. USB 3.0
cables have separate shielded differential pairs of lines for transmitting and receiving data. These lines exist along with the
USB 2.0 signals. So a USB 3.0 cable contains a total of nine wires including the four wires that are part of the USB 2.0 cable

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

19

(see Figure 1-1). The SuperSpeed bus employs a dual-simplex approach that allows simultaneous transmission and
reception of packets. In many cases, a SuperSpeed device may be both transmitting and receiving data at the same time. For
example, during burst transactions, a device may be receiving data from the host and returning acknowledgements
associated with the data it already received.
Figure 1-1. Cross-Section of a USB 3.0 Cable

Coming to the power distribution via the USB 3.0 host, 150 mA is considered as the unit load. USB 3.0 host supplies one unit
load of current for unconfigured devices and six unit loads of current for configured devices. The USB 3.0 host detects the
device connection based on the receiver end termination, and the transmitter is responsible for detecting the device
connection. USB 3.0 uses spread-spectrum clocking on its signaling. If spread-spectrum clocking is enabled, then the energy
of the signal is spread over a larger frequency band rather concentrated over a small frequency band at a high level, helping
to reduce the EMI emissions. The USB 3.0 physical layer supports low-frequency periodic signaling (LFPS), which is used to
manage signal initiation and low-power management on the bus on an idle link to consume less power. Table 1-1 lists the
differences between the USB 3.0 and USB 2.0 physical layers.

Table 1-1. Differences Between Physical Layers of USB 3.0 and USB 2.0
Feature
Signaling rate

USB 3.0

USB 2.0

5 Gbps

480 Mbps

Data transfers

Dual simplex

Half duplex

Number of pins in the USB cable

9 (VBUS, Ground, D+, D-, SSRX+, SSRX-, SSTX+, SSTX-,
4 (VBUS, Ground, D+, D-)
Ground_Drain)

Data lines in the cable

Shielded differential pair (SDP, twisted, or twinax)

Unshielded twisted pair (UTP)

Current supplied by the host

150 mA for unconfigured devices, 900 mA for configured
devices

100 mA for unconfigured devices, 500 mA for configured devices

Device detection by the host

Receiver end termination

Pull-up resistor on D+ or D- lines

1.1.2

Link Layer

The link layer is responsible for maintaining a reliable and robust communication channel between the host and the device.
The Link Training and Status State Machine (LTSSM) at the core of the USB 3.0 link layer establishes the link connectivity

20

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

and link power management states and transitions. LTSSM consists of 12 states, including four operational link states (U0,
U1, U2, U3). The link layer offers these four link power states for better power management:
■

U0-Fully powered; link partners are fully powered and ready to send packets

■

U1-Standby with fast recovery; link is in a low-power state and is not ready to send packets but can transition back to U0
within microseconds

■

U2-Standby with slow recovery; link power saving is greater than U1 and transitioning back to U0 within microseconds to
milliseconds

■

U3-Suspend; greatest power savings and longest recovery back to U0 (milliseconds)

■

U1, U2, and U3 have increasingly longer wakeup times into U0 and thus allow transmitters to go into increasingly deeper
sleep.

■

Four link initialization and training states (Rx.Detect, Polling, Recovery, Hot Reset)

■

Two link test states (Loopback and Compliance mode)

■

SS.Inactive (link error state where USB 3.0 is nonoperable)

■

SS.Disabled (SuperSpeed bus is disabled and operates as USB 2.0 only)

Link commands are used to maintain the link flow control and to initiate a change in the link power state.

1.1.3

Protocol Layer

The protocol layer manages the communication rules between a host and device. The SuperSpeed protocol layer includes
the following improvements to enable better performance, efficiency, and power conservation. The information in this section
is provided as background material; the FX3 logic manages protocol details so the application program can deal directly with
USB data.

1.1.3.1

Unicast Transactions

SuperSpeed transactions are routed directly from a root port to the target device with the help of a route string in the packet
header. Therefore, only links in the direct path between the root port and target device see the traffic, which lets other links in
the topology enter or remain in a low-power state.

1.1.3.2

Token/ Data/Handshake Sequences

A USB 2.0 transaction consists of three packets: token, data, and handshake. A transaction is initiated with the token packet
and it is always from the host. Data packets deliver the payload data, which can be sourced by the host or device. The
handshake packet acknowledges the error-free receipt of data and is sent by the receiver of the data. But with SuperSpeed,
to save bandwidth, the token is incorporated into the data packet for OUT transactions; it is replaced by the handshake for IN
transactions. So an ACK packet acknowledges the previous data packet sent and requests the next data packet. The
following examples clarify the differences between USB 2.0 and USB 3.0 IN and OUT transactions.

1.1.3.2.1

IN Transaction Example

Figure 1-2 on page 22 illustrates the differences between USB 2.0 and SuperSpeed OUT transactions. The example on the
left in Figure 1-2 on page 22 shows the sequence of packets required to perform two USB 2.0 IN transactions that require six
packets:
1. Host broadcasts an IN token packet (1) to initiate the transaction.
2. Device returns the requested data packet (2).
3. Host acknowledges receipt of data with an ACK handshake packet (3).
4. Steps 1-3 are repeated.
The example on the right indicates the packet sequence necessary to perform two back-to-back SuperSpeed IN transactions,
which require only five packets to be exchanged:
1. SuperSpeed uses an ACK header (1) to initiate an IN transaction.
2. The SuperSpeed device returns the data packet (2).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

21

3. The second ACK header (3) both acknowledges receipt of the data and requests a second transaction.
4. The second data packet (4) is delivered by the device.
5. The final ACK header (5) acknowledges receipt of the data, but does not request additional data.
Figure 1-2. USB 2.0 IN Transaction Versus USB 3.0 IN Transaction

Host Controller

6

Host Controller

5

ACK
DATA

4

5

IN Token
3

3

4

DATA Header
+ Payload

2

2

IN Token

1

ACK Header

High-Speed Device

1.1.3.2.2

DATA Header
+ Payload
ACK Header

ACK
DATA

1

ACK Header

SuperSpeed Device

OUT Transaction Example

Figure 1-3 illustrates the differences between USB 2.0 and SuperSpeed OUT transactions. The example on the left shows
two back-to-back OUT transactions that require six packets:
1. Host broadcasts an OUT token packet (1) to initiate the transaction.
2. Host sends a data packet (2) to the device.
3. Device acknowledges receipt of data with an ACK handshake packet (3).
4. Steps 1-3 are repeated
The right side of Figure 1-3 shows the packet sequence required to perform two back-to-back SuperSpeed OUT transactions,
requiring only 4 packets to be exchanged:
1. SuperSpeed USB uses a data header (1) to initiate an OUT transaction and to deliver data to the device.
2. Device acknowledges receipt of data via an ACK packet (2).
3. The second data packet (3) initiates the second transaction and delivers data to the device.
4. Device acknowledges receipt of data via an ACK packet (4), completing the sequence.

22

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 1-3. USB 2.0 OUT Transaction Versus USB 3.0 OUT Transaction

Host Controller

Host Controller

ACK
5

4

6

4

ACK Header

2

DATA
3

OUT Token

ACK
2

DATA

1

OUT Token

DATA Header
+ Payload

3

1

DATA Header
+ Payload

High-Speed Device

1.1.3.3

ACK Header

SuperSpeed Device

Data Bursting

The SuperSpeed end-to-end protocol supports transmitting the data in bursts (multiple data packets) without receiving an
acknowledgement to improve latency and performance. The protocol allows efficient bus utilization by concurrently
transmitting and receiving over the bus. A transmitter (host or device) can burst multiple packets of data back to back, and the
receiver can transmit data acknowledgements without interrupting the burst of data packets. Also, the host may
simultaneously schedule multiple OUT bursts to be active at the same time as an IN burst. Devices report their ability to
support bursting in their device descriptors. The maximum burst size is 16, and the actual number to be used represents the
number of data packets that can be sent without receiving an acknowledgement.
This bursting approach is explained in Figure 1-3 with an IN endpoint that supports a burst size of four. The host initiates the
burst transfer and indicates the expected sequence number of the first data packet returned (Seq=0) and the number of
packets it wishes to receive (NumP=4). The target device responds with a burst sequence of four data packets without
receiving any handshakes. A fifth data packet cannot be returned until data packet zero is acknowledged and the host has
indicated a request for another data packet (that is, a second ACK packet with NumP=4). In this burst example, the host
continues to request additional data by keeping the NumP value at 4.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

23

Figure 1-4. Data Bursting in SuperSpeed

Host TX

Device TX

ACK Packet
Seq = 0; NumP = 4

DATA Packet
Seq = 0

DATA Packet
Seq = 1

DATA Packet
Seq = 2

DATA Packet
Seq = 3

ACK Packet
Seq = 1; NumP = 4

ACK Packet
Seq = 4; NumP = 4

1.1.3.4

End-to-End Flow Control

USB 2.0 uses polling and the NAK handshake packet for flow control. For example, USB keyboards must be constantly polled
by the host software to check for activity. When an IN token packet is delivered and no keyboard activity has occurred, the
keyboard returns a NAK packet. Subsequently, the host software will poll the device again and receive another NAK. This
process continues until there is renewed activity. SuperSpeed flow control uses a poll-once approach coupled with an
asynchronous ready notification. Consider the IN transaction shown in Figure 1-5. An ACK packet initiates the IN transaction
and if a device responds with "NRDY" (Not Ready), then the host stops talking to that device until the device sends the
"ERDY" (ready) packet saying that now it is ready to transmit the data. So the host does not need to continue polling. This can
significantly reduce SuperSpeed traffic and improve link power management.

24

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 1-5. End-to-End Flow Control in SuperSpeed

Host TX

Device TX

ACK Packet
Seq = 0; NumP = 4

NRDY Packet

ERDY Packet
ACK Packet
Seq = 0; NumP = 4

DATA Packet
Seq = 0

ACK Packet
Seq = 1; NumP = 3 (Handshake)

1.1.3.5

Streams

USB 3.0 enhanced the bulk transfer capabilities by adding a concept called "streams." This allows a device to accept multiple
commands on a pipe from the host and to complete them out of order using the stream IDs.
Table 1-2 lists the differences between the USB 3.0 and USB 2.0 protocol layers:

Table 1-2. Differences Between USB 3.0 and USB 2.0 Protocol Layers
Feature

Bus transaction protocol

Data transfer types

USB 3.0

USB 2.0

Host directly routes the packet to the targeted device with the help of Host broadcasts the packets to all devices-no route
route string; exception-isochronous timestamp packet
string
Asynchronous traffic flow

Polled traffic flow

Simultaneous IN/OUTs

IN or Out

USB 2.0 types with SuperSpeed constraints; bulk has streams capaFour types: Control, interrupt, bulk, isochronous
bility

Maximum packet size
Control

512

64

Interrupt

1024

1024

Bulk
Isochronous

1.2

1024
Supports streaming functionality

Does not support

1024

1024

SuperSpeed Power Management

SuperSpeed USB provides a much improved mechanism for entering and exiting low-power states. USB 2.0 implements a
feature known as "Suspend" that forces devices to limit current consumption to 2.5 mA. Entry into the low-power state
requires a minimum of 3 ms, and exit requires more than 20 ms. SuperSpeed power management provides finer granularity
when entering low-power states and reduces entry and exit times. The device can also initiate the low-power link states when
it is idle.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

25

Power management features are implemented at all layers:
The physical layer supports the remote wakeup signaling.
The link layer supports low-power link state entry and exit with the help of LTSSM and link commands. It offers four link power
states (U0, U1, U2, and U3) for better power management. The following architectural features aid in SuperSpeed link power
management:
■

The much higher transmission rates mean that SuperSpeed transactions complete very quickly, leaving links in the idle
state for a longer period of time.

■

The Unicast approach involves only the links in the direct path between the originating root port and target device, leaving
other links idle.

■

The "poll once and notify" mechanism used in SuperSpeed end-to-end flow control reduces overall link traffic.

Protocol layer supports endpoint busy/ready notifications.

1.2.1

Function Power Management

SuperSpeed power management includes the ability to place a specific function (an interface or a set of interfaces) into a
suspended state. This means that a multifunction device can have some functions suspended while others remain fully
operational. Functions are placed into suspend under software control. The asynchronous Function Wake notification tells
software that a suspended function or device is requesting a remote wakeup.

1.3

FX3/FX3S Features

EZ-USB FX3/FX3S supports the following features.
■

■

■

■

■

■

Universal Serial Bus (USB) integration
❐

USB 3.0 and USB 2.0 peripherals compliant with USB 3.0 specification revision 1.0

❐

5-Gbps USB 3.0 PHY

❐

HS-OTG host and peripheral compliant with OTG Supplement version 2.0

❐

32 physical endpoints

❐

Support for Battery Charging Spec 1.1 and accessory charger adapter (ACA) detection

General Programmable Interface (GPIF II)*
❐

Programmable GPIF II, enabling connectivity to a wide range of external devices

❐

Interface frequency of up to 100 MHz

❐

8-, 16-, and 32-bit data bus

❐

As many as 16 configurable control signals

32-bit CPU
❐

ARM926EJ core with 200-MHz operation

❐

512 KB or 256 KB embedded SRAM

Additional connectivity to the following peripherals:
❐

I2C master controller up to 1 MHz

❐

I2S master (transmitter only) at sampling frequencies of 32 kHz, 44.1 kHz, and 48 kHz

❐

UART support of up to 4 Mbps

❐

SPI master at 33 MHz

Selectable clock input frequencies
❐

19.2, 26, 38.4, and 52 MHz

❐

19.2-MHz crystal input support

Ultra low-power in core power-down mode
❐

26

Less than 60 μA with VBATT on and 20 μA with VBATT off

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

❐

Independent power domains for core and interfaces

❐

Core and USB operation at 1.2 V

❐

GPIF II, I2S, UART, and SPI operation at 1.8 to 3.3 V

❐

I2C and JTAG operation at 1.2 to 3.3 V

Storage interfaces*
❐

Mass storage support

❐

SD 3.0 (SDXC) UHS-1

❐

eMMC 4.41

❐

Two ports that can support memory card sizes up to 2 TB

❐

Built-in RAID (implemented in firmware) with support for RAID0 and RAID1

■

System I/O expansion with two secure digital I/O (SDIO 3.0) ports

■

Support for USB-attached storage (UAS), mass-storage class (MSC), human interface device (HID), full, and TurboMTP™

*Storage interfaces are available only with FX3S and its GPIF data bus width is limited to 16 bits.

Table 1-3. Feature Differences Between FX3 and FX3S
Feature

EZ-USB FX3

EZ-USB FX3S

GPIF

8/16/32-bit

8/16-bit

Storage ports

No

1 or 2 ports (SD3.0, eMMC4.41, SDIO3.0)

USB 3.0, USB 2.0 Device

Yes

Yes

HS-OTG

Yes

Yes

CPU

ARM9, 200 MHz

ARM9, 200 MHz

Embedded SRAM

256 KB/512 KB

256 KB/512 KB

Serial Interfaces*

I2C, SPI, I2S, UART

I2C, SPI, I2S, UART

Boot Options

I2C, SPI, USB, GPIF based

All FX3 boot options + eMMC based boot options

Package

121-ball BGA, 10 x 10 mm, 0.8 mm pitch.
131-ball, WLCSP, 4.7 x 5.1 mm, 0.4 mm pitch

121-ball BGA, 10 x 10 mm, 0.8 mm pitch

*All serial interfaces might not be available under all configuration options. Refer to the pin description section in the
datasheet for details.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

27

1.3.1

FX3 Block Diagram

TDO

TCK

TRST#

TDI
FSLC[0]
FSLC[1]
FSLC[2]

TMS

Figure 1-6. FX3 Block Diagram

JTAG

CLKIN
CLKIN_32
XTALIN
XTALOUT

SRAM
(512kB/256kB)

ARM9

HS/FS/LS
OTGHost

DQ[31:0]/[15:0]
CTL[15:0]
PMODE[2:0]

GPIF™ II

32
EPs

DMA Interconnect

USB
HS/FS
Peripheral

INT#
RESET#

D+
D-

EZ-DtectTM
I2S

I2S_WS
I2S_MCLK

SPI

SSN
SCLK
MISO
MOSI
I2S_CLK
I2S_SD

UART

TX
RX
CTS
RTS

I2C_SCL

I2C_SDA

I2C

28

SS
Peripheral

OTG_ID
SSRX +
SSRX SSTX +
SSTX -

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

1.3.2

FX3S Block Diagram
TDO

TCK

TRST#

TDI
FSLC[0]
FSLC[1]
FSLC[2]

TMS

Figure 1-7. FX3S Block Diagram

JTAG

CLKIN
CLKIN_32
XTALIN
XTALOUT

SRAM
(512kB/256kB)

ARM9

HS/FS/LS
OTGHost

DQ[15:0]
DMA
Interconnect

CTL[15:0]
PMODE[2:0]

32
EPs

GPIF™ II

SS
Peripheral
USB
HS/FS
Peripheral

INT#
RESET#

OTG_ID
SSRX +
SSRX SSTX +
SSTX D+
D-

Charger
Detect
I2S

SD/MMC controller

SPI

S0S1_INS

S1_D[7:0]

S1_WP

S1_CMD

S1-port

S1_CLK

S0_WP

S0_D[7:0]

S0_CMD

S0-port

UART

S0_CLK

I2C_SDA

I2C_SCL

I2C

Note: For more details on pin mapping and their descriptions, refer to FX3 and FX3S datasheets.

1.4
1.4.1

Functional Overview
CPU

FX3 has an on-chip 32-bit, 200-MHz ARM926EJ-S core CPU. The core has direct access to 16 KB of instruction tightly
coupled memory (TCM) and 8 KB of data TCM. The ARM926EJ-S processor also has associated instruction cache (I-cache)
and data cache (D-cache) memories. Both the instruction and data caches are 8 KB.
FX3 integrates 512 KB or 256 KB (depending on the part number) of embedded SRAM for storing code and data. The
ARM926EJ-S core provides a JTAG interface for firmware debugging.
FX3 interrupts are managed through the standard ARM PrimeCell Vectored Interrupt Controller (PL192) block. This interrupt
controller provides vectored interrupt support with configurable priorities for all interrupt sources.
Examples of the FX3 firmware are available with the Cypress EZ-USB FX3 Development Kit.
For more information about the CPU subsystem, refer to the FX3 CPU Subsystem chapter on page 35.
For more information about the memory map, refer to the Memory and System Interconnect chapter on page 45.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

29

1.4.2

DMA

FX3 enables efficient and flexible DMA transfers between the various peripherals (such as USB, GPIF II, I2S, SPI, and
UART), requiring firmware only to configure data accesses between peripherals. The data transfers are managed by
distributed DMA controllers within each peripheral. For more information about the FX3 DMA interconnect, refer to the FX3
DMA Subsystem chapter on page 61.

1.4.3

USB Interface

The FX3 USB interface supports the following:
■

USB SuperSpeed and High-Speed peripheral functionality is compliant with USB 3.0 specification revision 1.0 and is
backward compatible with the USB 2.0 specification.

■

As a USB peripheral, FX3 supports SuperSpeed, High-Speed, and Full-Speed transfers. As a host, FX3 supports HighSpeed, Full-Speed, and Low-Speed transfers.

■

Complies with OTG Supplement revision 2.0, supporting dual-role operation. As an OTG host, FX3 supports

■

USB classes such as Mass Storage (MSC) and Human Interface Device (HID).

■

Carkit Pass-through UART functionality on USB D+/D- lines based on the CEA-936A specification

■

16 IN and 16 OUT endpoints

■

CONTROL, BULK, INTERRUPT, and ISOCHRONOUS endpoints

■

USB 3.0 BULK streams feature.

■

USB charger and accessory detection (EZ-DTECT).

The charger detection mechanism complies with the USB Battery Charging Specification revision 1.1. In addition to
supporting this version of the specification, FX3 provides hardware support to detect resistance values on the ID pin.
For more information about the USB block, refer to the Universal Serial Bus (USB) chapter on page 81.

1.4.4

GPIF II

The GPIF II is a programmable state machine that enables a flexible interface that may function either as a master or slave to
industry-standard or proprietary interfaces. The high-performance GPIF II interface provides functionality similar to, but more
advanced than, the FX2LP™ GPIF and Slave FIFO interfaces. Both parallel and serial interfaces may be implemented with
GPIF II.
The GPIF II implements an interface by creating a GPIF II state machine. GPIF II state transitions are based on input signals,
and the control output signals are driven as a result of the GPIF II state transitions. Some popular interfaces that can be
implemented with GPIF II are the Slave FIFO interface, SRAM, Address/Data bus interfaces, and Address Multiplexed
(ADMux) interfaces.
For more information about the synchronous Slave FIFO interface, refer to the application note AN65974 - Designing with the
EZ-USB FX3 Slave FIFO Interface.
The key features of GPIF II are:
■

Functions as a master or slave

■

Provides 256 firmware programmable states

■

Supports 8-bit, 16-bit, 24-bit, and 32-bit parallel data buses

■

Enables interface frequencies up to 100 MHz

■

Supports 14 configurable control pins when a 32-bit data bus is used. All control pins can be either input or outputor bidirectional.

■

Supports 16 configurable control pins when a 16- or 8-bit data bus is used. All control pins can be either input or output or
bidirectional.

30

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Cypress's GPIF II Designer tool enables GPIF II designs to be developed quickly and includes examples of common
interfaces. For more information about the GPIF II block, refer to the General Programmable Interface II (GPIF II) chapter on
page 125.

1.4.5

UART Interface

FX3 UART supports full-duplex communication and consists of the TX, RX, CTS, and RTS signals. The UART is capable of
generating a range of baud rates, from 300 bps to 4608 Kbps, selectable by the firmware. If flow control is enabled, then the
FX3 UART transmits data when the CTS input is asserted. In addition, the FX3 UART asserts the RTS output signal when it is
ready to receive data.

1.4.6

I2C Interface

The FX3 I2C interface is compatible with the I2C Bus Specification revision 3. This I2C interface is capable of operating only
as an I2C master; therefore, it may be used to communicate with other I2C slave devices. For example, FX3 may boot from
an EEPROM connected to the I2C interface, as a selectable boot option.
The FX3 I2C master controller also supports multimaster functionality. The FX3 I2C controller is powered by a dedicated
power pin, VIO5, which also powers the JTAG interface. This gives the I2C interface the flexibility to operate at a different
voltage than other serial interfaces.
The I2C controller supports bus frequencies of 100 kHz, 400 kHz, and 1 MHz. When VIO5 is 1.2 V, the maximum operating
frequency is 100 kHz. When VIO5 is 1.8 V, 2.5 V, or 3.3 V, the operating frequencies supported are 400 kHz and 1 MHz. The
I2C controller supports the clock-stretching feature to enable slower devices to exercise flow control. The I2C interface's SCL
and SDA signals require external pull-up resistors, which must be connected to VIO5.

1.4.7

I2S Interface

FX3 has an I2S port to support external audio codec devices. FX3 functions as an I2S master as a transmitter only.
The I2S interface consists of four signals: clock (I2S_CLK), serial data (I2S_SD), word select (I2S_WS), and master system
clock (I2S_MCLK). FX3 can generate the system clock as an output on I2S_MCLK or accept an external system clock input
on I2S_MCLK.
The sampling frequencies supported by the I2S interface are 32 kHz, 44.1 kHz, and 48 kHz.

1.4.8

SPI Interface

FX3 provides an SPI master interface. The maximum operation frequency is 33 MHz. The SPI controller supports four modes
of SPI communication. This controller is a single master controller with a single automated Slave Select, Negative-true (SSN)
control. It supports transaction sizes ranging from 4 bits to 32 bits.
For more information about the UART, I2C, I2S, and SPI interfaces, refer to the Low Performance Peripherals (LPP) chapter
on page 173.

1.4.9

JTAG Interface

The FX3 JTAG interface is a standard five-pin interface to connect to a JTAG debugger to debug the firmware through the
CPU core's on-chip-debug circuitry. Industry-standard debugging tools for the ARM926EJ-S core can be used for FX3
application development.

1.4.10

Storage Interface

FX3S has two independent storage ports (S0-Port and S1-Port). Both storage ports support the following specifications:
■

MMC system specification, MMCA Technical Committee, version 4.41

■

SD specification, version 3.0

■

SDIO host controller compliant with SDIO Specification version 3.00

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

31

Both storage ports support the following features:

1.4.10.1

SD/MMC Clock Stop

FX3S supports the stop clock feature, which can save power if the internal buffer is full when receiving data from the SD/
MMC/SDIO.

1.4.10.2

SD_CLK Output Clock Stop

During the data transfer, the SD_CLK clock can be enabled (on) or disabled (stopped) at any time by the internal flow control
mechanism.
SD_CLK output frequency is dynamically configurable using a clock divider from a system clock. The clock choice for the
divisor is user-configurable through a register. For example, the following frequencies may be configured:
■

400 kHz - For the SD/MMC card initialization

■

20 MHz - For a card with 0- to 20-MHz frequency

■

24 MHz - For a card with 0- to 26-MHz frequency

■

48 MHz - For a card with 0- to 52-MHz frequency (48-MHz frequency on SD_CLK is supported when the clock input to
FX3S is 19.2 MHz or 38.4 MHz)

■

52 MHz - For a card with 0- to 52-MHz frequency (52-MHz frequency on SD_CLK is supported when the clock input to
FX3S is 26 MHz or 52 MHz)

■

100 MHz - For a card with 0- to 100-MHz frequency If the DDR mode is selected, data is clocked on both the rising and
falling edge of the SD clock. DDR clocks run up to 52 MHz.

1.4.10.3

Card Insertion and Removal Detection

FX3S supports the following two card insertion and removal detection mechanisms:
■

Use of SD_D[3] data

■

Use of the S0S1_INS pin

1.4.10.4

Write Protection (WP)

The S0_WP/S1_WP (SD Write Protection) on S-Port is used to connect to the WP microswitch of the SD/MMC card
connector. This pin internally connects to a CPU-accessible GPIO for firmware to detect the SD card write protection.

1.4.10.5

SDIO Interrupt

The SDIO interrupt functionality is supported as specified in the SDIO specification version 2.00 (January 30, 2007).

1.4.10.6

SDIO Read-Wait Feature

FX3S supports the optional read-wait and suspend-resume features as defined in the SDIO specification version 2.00
(January 30, 2007).

1.4.10.7

Boot Options

FX3 integrates 32 KB of ROM, which contains a bootloader, allowing FX3 to load boot images from various sources. The boot
mode is selected by the configuration of the PMODE pins as shown in Table 1-3 on page 27
The FX3 boot options are:
■

Boot from USB

■

Boot from I2C

■

Boot from SPI

■

Boot from GPIF II Async ADMux mode

■

Boot from GPIF II Sync ADMux mode

32

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Boot from GPIF II Async SRAM mode

Please refer to the application note AN76405 - EZ-USB FX3 Boot Options.
In addition to these FX3 boot options, FX3S supports the following:
■

Boot from eMMC (Storage port)

■

Boot from PMMC (Processor port)

Table 1-4. Boot Mode Selection Based on PMODE Pins
PMODE[2:0] Pins

Boot Option

PMODE[2]

PMODE[1]

PMODE[0]

Z

0

0

Sync ADMUX (16-bit)

Z

0

1

Async ADMUX (16-bit)

Z

0

Z

Async SRAM (16-bit)

Z

1

1

USB Boot

1

Z

Z

I2C

Z

1

Z

I2C; on failure, USB Boot is enabled

0

Z

1

SPI; on failure, USB Boot is enabled

FX3S Specific Boot Options
Z

1

0

PMMC Legacy

0

0

0

S0-port (eMMC); On Failure, USB Boot is enabled

1

0

0

S0-port (eMMC)

Z = Pin is floating; left unconnected.

1.4.11

Clocking

FX3 allows either connecting a crystal between the XTALIN and XTALOUT pins or connecting an external clock to the CLKIN
pin. The XTALIN, XTALOUT, CLKIN, and CLKIN_32 pins can be left unconnected if they are not used.
The crystal frequency supported is 19.2 MHz, while the external clock frequencies supported are 19.2, 26, 38.4, and 52 MHz.
FX3 has an on-chip oscillator circuit that uses an external 19.2-MHz (±100 ppm) crystal (when the crystal option is used).
Please refer to the application note AN70707 - EZ-USB FX3/FX3S Hardware Design Guidelines and Schematic Checklist for
guidelines on crystal selection. An appropriate load capacitance is required with a crystal. The FSLC[2:0] pins must be
configured appropriately to select the crystal- or clock-frequency option. The configuration options are listed in Table 1-4.

Table 1-5. Crystal and Clock Frequency Selection
FSLC[2]

FSLC[1]

FSLC[0]

Crystal/Clock Frequency

0

0

0

19.2-MHz Crystal

1

0

0

19.2-MHz Input CLK

1

0

1

26-MHz Input CLK

1

1

0

38.4-MHz Input CLK

1

1

1

52-MHz input CLK

Clock inputs to FX3 must meet the phase noise and jitter requirements specified in the EZ-USB FX3 datasheet.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

33

34

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

2. FX3 CPU Subsystem

The EZ-USB FX3 device has an embedded 32-bit ARM926EJ-S core that delivers a processing capability up to 220 MIPS.
This ARM core is coupled with instruction and data caches, Tightly Coupled Memories (TCM), and a PL192 vectored interrupt
controller (VIC). FX3 also implements the standard ARM JTAG Test Access Point (TAP), which allows you to use standard
JTAG debuggers to debug firmware applications.
The ARM926EJ-S processor is targeted at multitasking applications and can support high-performance and low-power
requirements.
Interrupts in the FX3 device are managed through the standard ARM PL192 VIC block.

2.1

Features

The ARM9 core in the FX3 device supports the following features:
■

Operation at frequencies up to 200 MHz

■

Support for both 32-bit ARM and 16-bit thumb instructions

■

Integrated data and instruction caches of 8 KB each

■

Dedicated instruction and data TCMs for guaranteed low-latency memory access

■

VIC capable of managing 32 internal interrupt sources with programmable interrupt priorities

■

Standard ARM JTAG interface for debugging

■

Clock frequency control for power saving

■

System RAM on FX3 device serves as main storage for code and data

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

35

2.2

Block Diagram
Figure 2-1. CPU Subsystem in FX3 Device

FX3 System Interconnect (AHB)

AHB Bridge
Instruction AHB
(32 bit x 200 MHz)

Data AHB
(32 bit x 200 MHz)

nIRQ

JTAG
Interface

JTAG
TAP

Instruction
Cache
(8 KB)

Data
Cache
(8 KB)

PL192
VIC

Interrupt
Requests

nFIQ

ARM926EJ-S Core
Single Cycle ARM TCM Access
(32 bit x 200 MHz)

ITCM
(16 KB)

2.3

DTCM
(8 KB)

Functional Overview

Figure 2-1 shows the ARM9 core and the associated blocks in the FX3 device. The CPU is associated with TCM blocks that
enable zero-latency accesses to performance-critical instructions and data, and it provides separate instruction and data
caches for other memory accesses. The PL192 VIC manages interrupts raised by the FX3 hardware blocks.

2.3.1

ARM926EJ-S CPU

The FX3 device has an embedded 32-bit ARM926EJ-S CPU core. This makes the device capable of implementing
multitasking applications where high performance and low power consumption are important.
This ARM9 core supports both 32-bit ARM instructions and 16-bit thumb instructions. The processor has separate advanced
high-performance bus (AHB) interfaces for internal instruction and data accesses. It also has separate instruction and data
TCM interfaces.
Note: The 32-bit ARM instruction set is commonly used in the FX3 SDK from Cypress, as this makes it more convenient to
address all of the available device memory.

36

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The following subsections provide information for programming the FX3 device. The FX3 SDK takes care of these aspects
and initializes the ARM core and memory blocks on the FX3 device. The following detail is only required if you are making any
modifications to the base SDK source code. For more details on the ARM CPU architecture, instruction set, and so on, refer
to the ARM926EJ-S Technical Reference Manual.

2.3.1.1

Processor Modes

The ARM architecture supports seven operating modes, as shown in Table 2-1.

Table 2-1. ARM9 CPU Operating Modes
Processor Mode
User

Abbreviation
Usr

Description
Normal program execution mode

FIQ

Fiq

Fast interrupt mode; used for a performance-critical interrupt

IRQ

Irq

General-purpose interrupt handling mode

Supervisor

Svc

Protected mode used by operating systems

Abort

Abt

Instruction/data abort handling mode; used for virtual memory implementation

Undefined

Und

Undefined instruction mode; used to support software emulation of hardware coprocessors; generally not useful
on FX3 device.

System

Sys

Runs privileged operating system tasks

All of the modes except the user mode are privileged modes that have full access to all system resources and can freely
change modes.
The FIQ, IRQ, supervisor, abort, and undefined modes are entered when specific exceptions occur. These modes have a
separate register set, so that the user mode registers are not corrupted when the exception occurs.
The system mode uses the same set of registers as the user mode and is used to execute OS tasks that do not need a
separate register set.
Run-time stack regions need to be set up for all these modes at system startup. The following code snippet shows how this
can be done using ARM assembly language code. This code is provided by the Cypress FX3 firmware library, and rarely
needs to be modified.
#define
#define
#define
#define
#define
#define
#define

FX3_STACK_BASE
FX3_SVC_STACK_SIZE
FX3_FIQ_STACK_SIZE
FX3_IRQ_STACK_SIZE
FX3_SYS_STACK_SIZE
FX3_ABT_STACK_SIZE
FX3_UND_STACK_SIZE

0x10000000
0x1000
0x0200
0x0400
0x0800
0x0100
0x0100

/*
/*
/*
/*
/*
/*
/*

D-TCM area ( 8KB ) */
SVC stack size */
FIQ stack size */
IRQ stack size */
SYS stack size */
ABT stack size */
UND stack size */

#define
#define
#define
#define
#define
#define

ARM_FIQ_MODE
ARM_IRQ_MODE
ARM_SVC_MODE
ARM_ABT_MODE
ARM_UND_MODE
ARM_SYS_MODE

0xD1
0xD2
0xD3
0xD7
0xDB
0xDF

/*
/*
/*
/*
/*
/*

Disable
Disable
Disable
Disable
Disable
Disable

Interrupts
Interrupts
Interrupts
Interrupts
Interrupts
Interrupts

+
+
+
+
+
+

FIQ
IRQ
SVC
ABT
UND
SYS

mode
mode
mode
mode
mode
mode

*/
*/
*/
*/
*/
*/

/* Stack pointers are placed at the top address as the stack grows downwards */
SetupStackPtrs:
ldr r1, =FX3_STACK_BASE
/* Load the stack base address */
sub r1, r1, #8
/* Prevent overflow */
ldr
mov
msr
add

r2, =FX3_SYS_STACK_SIZE
r3, #ARM_SYS_MODE
CPSR_cxsf, r3
r1, r1, r2

/*
/*
/*
/*

Pickup stack size */
Build SYS mode CPSR */
Enter SYS mode */
Calculate start of SYS stack */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

37

bic
mov
mov
mov

r1, r1, #7
sp, r1
r10, #0
r11, #0

/*
/*
/*
/*

Ensure 8-byte alignment */
Setup SYS stack pointer */
Clear SYS mode sl */
Clear SYS fp */

ldr
mov
msr
add
bic
mov
mov
mov

r2, =FX3_ABT_STACK_SIZE
r3, #ARM_ABT_MODE
CPSR_cxsf, r3
r1, r1, r2
r1, r1, #7
sp, r1
r10, #0
r11, #0

/*
/*
/*
/*
/*
/*
/*
/*

Pickup stack size */
Build ABT mode CPSR */
Enter ABT mode */
Calculate start of ABT stack */
Ensure 8-byte alignment */
Setup ABT stack pointer */
Clear ABT mode sl */
Clear ABT fp */

ldr
mov
msr
add
bic
mov
mov
mov

r2, =FX3_UND_STACK_SIZE
r3, #ARM_UND_MODE
CPSR_cxsf, r3
r1, r1, r2
r1, r1, #7
sp, r1
r10, #0
r11, #0

/*
/*
/*
/*
/*
/*
/*
/*

Pickup stack size */
Build UND mode CPSR */
Enter UND mode */
Calculate start of UND stack */
Ensure 8-byte alignment */
Setup UND stack pointer */
Clear UND mode sl */
Clear UND fp */

ldr
mov
msr
add
bic
mov
mov
mov

r2, =FX3_FIQ_STACK_SIZE
r0, #ARM_FIQ_MODE
CPSR_c, r0
r1, r1, r2
r1, r1, #7
sp, r1
sl, #0
fp, #0

/*
/*
/*
/*
/*
/*
/*
/*

Pickup stack size */
Build FIQ mode CPSR */
Enter FIQ mode */
Calculate start of FIQ stack */
Ensure 8-byte alignment */
Setup FIQ stack pointer */
Clear sl */
Clear fp */

ldr
mov
msr
add
bic
mov

r2, =FX3_IRQ_STACK_SIZE
r0, #ARM_IRQ_MODE
CPSR_c, r0
r1, r1, r2
r1, r1, #7
sp, r1

/*
/*
/*
/*
/*
/*

Pickup IRQ stack size */
Build IRQ mode CPSR */
Enter IRQ mode */
Calculate start of IRQ stack */
Ensure 8-byte alignment */
Setup IRQ stack pointer */

ldr
mov
msr
add
bic
mov

r2, =FX3_SVC_STACK_SIZE
r0, #ARM_SVC_MODE
CPSR_c, r0
r1, r1, r2
r1, r1, #7
sp, r1

/*
/*
/*
/*
/*
/*

Pickup System stack size */
Build SVC mode CPSR */
Enter SVC mode */
Calculate start of SVC stack */
Ensure 8-byte alignment */
Setup SVC stack pointer */

Hint: The 8-KB D-TCM region can be used for the run-time stack regions if there is no other performance-critical data that
needs to be placed there.

2.3.1.2

Processor Registers

Table 2-2 shows the registers provided by the ARM9 processor core. The CPSR register is used to switch between various
processor modes.

38

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Table 2-2. ARM9 Processor Registers
Register

Description

Attributes

R0-R7

General-purpose registers

These are not banked registers, which means that the same physical register is
used in all processor modes.

R8-R12

General-purpose registers

Two copies of these registers exist. One copy is used only in FIQ mode, and the
other copy is used in all other processor modes.

R13

Stack pointer (SP)

Six copies of this register exist. The user and system modes share one register,
and all other modes have their own SP register.

R14

Link register (LR), used to hold return address when execut- Six copies of this register exist. The user and system modes share one register,
ing branch instructions
and all other modes have their own LR register.

R15

Used to read/write the program counter

Single register that is used across all processor modes.

CPSR

Current program status register, provides status flags,
global interrupt enable control, and so on

The CPSR register reflects the current program status in each of the processor
modes.

SPSR

Saved program status register, provides saved program sta- Separate copies of this register exist for each of the FIQ, IRQ, supervisor, abort,
tus for each exception mode
and undefined modes.

2.3.1.3

Exception Vectors

The exception vectors that serve as the entry point for each of the exception modes are stored in a table in the main system
memory. These vectors can be placed at one of two addresses: 0x00000000 or 0xFFFF0000. The selection of the exception
vector table location is based on the ARM standard system control coprocessor (CP15) configuration.
As shown in Table 2-3, the normal exception vectors are located in the address range from 0x0 onward, which falls in the
instruction TCM (ITCM) region. The high exception vectors are located in the address range from 0xFFFF0000, which is part
of the BootROM on the FX3 device. As the high-exception vectors are hard-wired to vector to the bootloader on the FX3
device, the normal (user-definable) exception vectors are used when running user applications.

Table 2-3. ARM Exception Vector Locations
Exception Type

Processor Mode

Exception Vector 1 (normal)
0x00000000

Exception Vector 2 (high)

Reset

Supervisor

0xFFFF0000

Undefined instruction

Undefined

0x00000004

0xFFFF0004

Software interrupt (SWI)

Supervisor

0x00000008

0xFFFF0008

Prefetch abort

Abort

0x0000000C

0xFFFF000C

Data abort

Abort

0x00000010

0xFFFF0010

IRQ (interrupt)

IRQ

0x00000018

0xFFFF0018

FIQ (interrupt)

FIQ

0x0000001C

0xFFFF001C

The following code snippet shows the procedure to move the exception vectors to address 0x0. This step is done by the FX3
firmware library as part of device initialization.
MRC
MOV
AND
MCR

p15, 0, r1, c1, c0, 0/* Read the CP15 register value */
r2, #0xFFFFDFFF
r1, r1, r2/* Mask off the vector location bit. */
p15, 0, r1, c1, c0, 0/* Write back to CP15 register. */

2.3.1.4

MMU

The MMU in the ARM926EJ-S processor is an ARM architecture v5 implementation, which supports the virtual memory
features required by standard embedded operating systems. The MMU uses a set of two-level page tables located in the
main memory to control the address translation, permission checks, and so on.
The data cache on the ARM core can be enabled only if the MMU is enabled. However, most FX3 designs do not use any
secondary storage and do not need a virtual memory system. FX3 provides a fixed set of page tables that maps each physical
address to the equivalent virtual address.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

39

2.3.1.5

Cache Memories

The ARM926EJ-S processor has associated instruction and data cache memories. The RAM on the FX3 device holds DMA
data buffers in addition to code and data. The DMA driver and APIs in the FX3 library ensure cache coherency by using the
cache clean and invalidate operations.
The instruction and data caches on FX3 are 8 KB. The caches are four-way set associative with eight word (32-byte) cache
lines. The data cache implements two dirty bits per cache line and is typically configured for write-back operations.
The ARM926EJ-S processor supports the following operations using the CP15 coprocessor interface:
■

Invalidating the entire D-cache or I-cache

■

Invalidating (flushing) regions of the D-cache or I-cache

■

Cleaning the entire D-cache

■

Cleaning regions of the D-cache

■

Locking specified memory regions into the D-cache or I-cache

The CPU also provides a write buffer that is used for writes to regions that are not cacheable or bufferable, and for writethrough operations. It is also used for write misses during write-back operations. A separate write buffer is provided as part of
the D-cache for holding write-back data during cache line eviction or clean operations. Instructions are provided to drain both
write buffers, and the CPU ensures data coherency when read operations are addressed to data that is sitting in the write
buffer.
The following code snippet shows the procedure to enable the caches and the MMU on the FX3 device. Please refer to the
FX3 Memories chapter for more information on cache operations.
MRC
ORR
BIC
ORR
MCR

p15, 0,
r1, r1,
r1, r1,
r1, r1,
p15, 0,

2.3.1.6

r1, c1, c0, 0/* Read CP15 register value */
#0x1000/* Update I-Cache enable bit. */
#0x4000/* Select random replacement. */
#0x05/* Enable MMU and D-Cache. */
r1, c1, c0, 0/* Write modified value back */

Tightly Coupled Memories

Some operations, such as interrupt handlers, may not be able to tolerate the added latency created by a cache miss. The
ARM9 CPU provides a zero wait state TCM interface to facilitate quick access to such instructions and data. Firmware
applications can locate performance-critical code and data sections in the TCM regions using the appropriate linker settings.
The FX3 SDK provides a linker script that sets up the recommended memory map for FX3 applications.
As in memory and cache access, separate paths are used for instruction and data access from the TCMs. FX3 implements 16
KB of instruction TCM (ITCM) and 8 KB of data TCM (DTCM). The ITCM area can also be accessed by the data side of the
ARM core. This is required to facilitate loading the code into the ITCM region.
The ITCM region on FX3 is located in the address range 0x0000-0x3FFF, and the DTCM region is located in the address
range 0x10000000-0x10001FFF. The ITCM region is typically used to store the ARM exception vectors and the interrupt
service routine (ISR) code. The DTCM region is typically used to store performance-critical data and the run-time stacks for
various processor modes.
The TCMs must be configured as non-cacheable memories, and any instruction or data movement between the TCM and the
main memory must be performed by the CPU. The TCMs are disabled when the device is reset, and they need to be enabled
by the firmware. This is done by the FX3 library as part of device initialization.
MOV r1, #0x15 /* ITCM address is 0x0 and size is 16 KB. */
MCR
p15, 0, r1, c9, c1, 1 /* Initialize the ITCM */
MOV r1, 0x10000011 /* DTCM address is 0x10000000 and size is 8 KB. */
MCR
p15, 0, r1, c9, c1, 0 /* Initialize the DTCM */

40

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

2.3.1.7

JTAG Interface

FX3 makes the standard ARM JTAG TAP available for users to connect a JTAG debugger. Only the 5-pin JTAG mode of
debugging is supported, and 2-pin serial wire debug (SWD) mode is not supported by the FX3 device. The JTAG pins are
directly connected to the ARM CPU, and they do not support boundary scan.
The JTAG interface allows the use of industry-standard ARM debug probes to debug the firmware running on FX3. No
Cypress custom software tools are required to enable the debugging.
The JTAG instruction register (IR) length for the ARM926EJ-S device is 4 bits. If multiple devices are connected on the JTAG
chain, the offset and length for the FX3 device have to be set correctly to achieve JTAG connection. Refer to Section 5.10.3 of
the Segger J-Link User Guide for instructions on how to do this when using the J-Link debugger.

2.3.1.8

Vectored Interrupt Controller

The FX3 device provides a number of interrupt notifications for the ARM CPU to handle. Interrupts in the FX3 system are
managed through the standard ARM PrimeCell Vectored Interrupt Controller (PL192) block. This interrupt controller provides
vectored interrupt support with configurable priorities for all interrupt sources.
The PL192 controller supports up to 32 interrupt sources and generates the nIRQ and nFIQ signals to the ARM CPU based
on the configuration. The controller is connected to the CPU on the AHB bus and allows you to perform the interrupt
configuration through a set of memory mapped registers.
Table 2-4 shows the various interrupt sources on the FX3 device, along with their vector numbers.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

41

Table 2-4. FX3 Interrupt Sources
Vector
Number

Interrupt Source

Description

0

GCTL_CORE

Interrupt raised on FX3 waking up from suspend or standby
low-power modes.

1

SW_INTR

Software interrupt

2

UNUSED

3

UNUSED

Comments

This is a custom implementation of the software
interrupt scheme.
Do not enable.
Do not enable.

Watchdog timer interrupt; the watchdog timer functions on
the basis of a 32-kHz clock signal with a user-configured
period

This is commonly used for OS scheduling on the
FX3 device.

4

WATCHDOG_TIMER

5

UNUSED

6

GPIF_DMA

DMA socket interrupt from the GPIF block

7

GPIF_CORE

General-purpose GPIF interrupts; indicates conditions such
as state machine interrupt, GPIF errors, mailbox register
access, and so on

8

USB_DMA

DMA socket interrupt from the USB block

9

USB_CORE

General-purpose USB interrupts; indicates various conditions triggered during device or host operation of the USB
block

10

UNUSED

11

STORAGE_DMA

DMA socket interrupt from the storage (SD/MMC) interface Applies only to the FX3S™ devices.

12

STORAGE0_CORE

General-purpose interrupt from storage interface 0

Applies only to the FX3S™ devices.

13

STORAGE1_CORE

General purpose interrupt from storage interface 1.

Applies only to the FX3S™ devices.

14

UNUSED

Do not enable.

Applies to both USB device and host mode operation.

Do not enable.

Do not enable.

15

I2C_CORE

General-purpose I2C interrupt; indicates conditions such as
transfer completion, error detect, and so on

16

I2S_CORE

General-purpose I2S interrupt

17

SPI_CORE

General-purpose SPI interrupt

18

UART_CORE

General-purpose UART interrupt

19

GPIO_CORE

General-purpose GPIO interrupt; common for both simple
and complex GPIOs

20

PERIPH_DMA

DMA socket interrupt from any serial peripheral block (I2C,
I2S, SPI, or UART).

21

GCTL_POWER

Power detect interrupt; indicates voltage changes on any
power inputs that can be dynamically changed during
device operation.

22-31

UNUSED

This is commonly used for VBus voltage detection.
Do not enable.

You can configure any of the 32 interrupt sources as fast interrupt request (FIQ), which takes the highest priority among the
interrupts. The rest of the interrupts are prioritized by user code through the VIC_VECT_PRIORITY registers. If two or more
interrupts are programmed with the same priority value, the source with the lower vector number assumes the higher priority.
The PL192 controller allows each of the interrupt sources to be independently masked (disabled) or unmasked (enabled) and
provides registers that report the raw interrupt status and the interrupt status after masking. The vector addresses for various
interrupt sources are programmed through the VIC_VEC_ADDRESS registers. When one or more interrupt sources are
active, the controller identifies the highest priority interrupt, stores the corresponding vector address in the VIC_ADDRESS
register, and then asserts the nIRQ signal to interrupt the ARM CPU.
Refer to section TBD on for information about the various configuration and status registers associated with the VIC.
Some interrupts in the FX3 system need to be prioritized over others to ensure that the application can meet all the USB spec
requirements and transfer rates. In particular, the USB core interrupt must be handled at the highest priority (can be selected
as FIQ), and all the DMA interrupts should be allotted the next high priority level.
To enable a specific interrupt source, the firmware has to do the following:
■

Point the VIC_VEC_ADDRESS register to the ISR.

■

Set the VIC_VECT_PRIORITY register value as desired.

42

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Enable the interrupt by setting the corresponding bit in the VIC_INT_ENABLE register.

The following code snippet shows the procedure for setting up Fx3IntHandler as the ISR for interrupt vector i:
CY_U3P_VIC_VEC_ADDRESS[i]
= Fx3IntHandler;/* ISR address. */
CY_U3P_VIC_VECT_PRIORITY[i] = 2;/* Set the priority to 2. */
CY_U3P_VIC_INT_ENABLE
|= (1 << i);/* Enable the interrupt. */

The VIC sets the VIC_ADDRESS register to point to the vector for the active interrupt with the highest priority before making
the nIRQ signal active. The IRQ exception vector is designed to jump to the address pointed by the VIC_ADDRESS register.
The ISR is responsible for saving all the necessary context information, including the non-banked registers, while executing.
Nesting of interrupts is not allowed by the VIC. The ISR needs to clear the interrupt by writing any value to the
VIC_ADDRESS register before the next interrupt can be raised.
As direct interrupt nesting is not supported by the VIC, it is recommended that the handling of low-priority interrupts be
deferred to allow higher priority interrupts to run with bounded latency. The firmware needs to mask out the deferred interrupts
until the source of the interrupt has been cleared to avoid repeated interrupt calls. This can be done by setting the
corresponding bit in the VIC_INT_CLEAR register.
CY_U3P_VIC_INT_CLEAR = (1 << i);/* Mask out interrupt vector i. */
Note: The ARM CPU uses the ARM instruction set when starting to execute any interrupt handlers. If the ISR uses the thumb
instruction set, the firmware needs to ensure that the switch to thumb mode is done before entering the ISR.

Refer to the PL192 Technical Reference Manual for more details on the interrupt controller and its use.

2.3.1.9

CPU Operating Frequency

The operating clock for the FX3 CPU is derived from the input clock or crystal frequency.
First, the input clock is multiplied to generate the FX3 system clock. The system clock frequency is 384 MHz when the FX3
device is clocked using a 19.2-MHz crystal or a 38.4-MHz clock input. The system clock frequency is 416 MHz when the FX3
device is clocked using a 26-MHz or 52-MHz input clock.
The CPU clock is then derived from the system clock using a programmable divider. The minimum divisor supported is 2,
which means that the maximum CPU clock frequency is 192 MHz or 208 MHz, depending on the clock source.
Note: While the multipliers used to derive the system clock are programmable, Cypress strongly recommends the use of the
previously mentioned default frequencies. The device has not been tested for proper functioning at other frequencies.

The CPU clock frequency can be reduced by specifying divisor values greater than 2. As the clocks used by the DMA engine
and the memory mapped I/O (MMIO) register interface are derived from the CPU clock, reducing the CPU clock frequency
will also reduce them and result in reduced data transfer throughput. Reducing the clock frequency will also increase the
effective interrupt latency and can cause USB specification compliance errors. Therefore, Cypress recommends that you use
a reduced clock rate only when USB 3.0 connections are not active.
Refer to the chapter on FX3 Global Control (GCTL) for details on how to configure the device clocks.

2.3.1.10

CPU Power Modes

The FX3 CPU supports low-power modes, which can be used when the device is not active. The CPU supports the following
power modes:
Normal mode: The CPU operates at a clock frequency determined by the programmed dividers.
Suspend mode: This applies to both the L1 and L2 modes of the FX3 device. The clock to the CPU is gated in this mode,
and the CPU is placed in the wait for interrupt state. Firmware execution resumes from the next instruction, once the device
wakes from the L1/L2 mode.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

43

Standby mode: This applies to the L3 mode of the FX3 device. The CPU is powered down, while the program RAM content
is retained. Firmware execution starts from the reset vector once the device wakes from the L3 mode.

2.3.1.11

Timers

The ARM CPU does not have any associated timer blocks. The FX3 device provides a pair of general-purpose timers that can
also provide the watchdog functionality. These timers are provided as part of the Global Control block on the FX3 device.
These timers operate on a 32-kHz input clock and can be configured in one of the free running counter, timer with interrupt, or
watchdog reset modes.
Note: If the system provides a clock input through the CLKIN_32 pin of the FX3 device, the timer uses this clock. If not, the
32-kHz clock is derived from the system clock, which runs at about 200 MHz.

The WATCHDOG_CS register in the GCTL block controls the operation of these timers. The relevant bits in this register are
shown in Table 2-5.

Table 2-5. Watchdog Timer Control Register
Field Name

Bit Range

Description
0-Free running mode; counter wraps around after reaching 0xFFFFFFFF.

MODE0

1:0

INTR0

2

1-Interrupt mode; raises WATCHDOG_TIMER interrupt when lowest significant BITS0 bits of the counter are cleared
2-Reset mode; resets the FX3 when lowest significant BITS0 bits of the counter are cleared
3-Disabled
Interrupt status for timer 0

BITS0

7:3

Number of bits to be considered when checking for counter limit

MODE1

9:8

Timer mode for timer 1

INTR1

10

Interrupt status for timer 1

BITS1

15:11

Number of bits to be considered when checking for counter limit

The actual counter values for the timers are stored in the WATCHDOG_TIMER0 and WATCHDOG_TIMER1 registers. When
the timer is configured in reset mode, the firmware is expected to restore this register to its initial value before the counter limit
(lowest BITS bits getting set) is reached.
Hint: As a single interrupt vector is used for both timers, the ISR needs to check the INTR bits in the WATCHDOG_CS register
to identify the timer that triggered the interrupt.

44

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

3. Memory and System Interconnect

The memory subsystem on the FX3 device comprises the system RAM that forms the main memory, SRAM controller, and
AHB-based interconnect that allows the ARM CPU and the hardware blocks to access these memories. The MMIO
interconnect provides access to registers in various peripheral blocks.
Because USB data moves through the system RAM (where USB endpoint buffers are implemented), FX3 implements a
specialized memory controller to arbitrate between the various types of traffic with high throughput and predictable latency.
Details on the arbitration mechanism and priorities are provided in System Interconnect on page 48.

3.1

Features

The FX3 memory and system interconnect supports the following:
■

512 KB or 256 KB of system memory, depending on the FX3 part number selected

■

16 KB of Instruction Tightly Couple Memory (I-TCM) and 8 KB of Data Tightly Couple Memory (D-TCM).

■

DMA architecture that can deliver 800 MBps bandwidth to memory

■

MMIO register access from CPU at up to 50 MBps (12.5 million 32-bit register accesses per second)

■

Guaranteed and bounded memory access latency for both CPU and DMA accesses

3.2

Block Diagram

Figure 3-1 shows a block diagram of the memory and system interconnect on the FX3 device.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

45

Figure 3-1. CPU Subsystem in the FX3 Device

FX3 System Interconnect (AHB)

AHB Bridge
Instruction AHB
(32 bit x 200 MHz)

Data AHB
(32 bit x 200 MHz)

nIRQ

JTAG
Interface

JTAG
TAP

Instruction
Cache
(8 KB)

Data
Cache
(8 KB)

PL192
VIC

Interrupt
Requests

nFIQ

ARM926EJ-S Core
Single Cycle ARM TCM Access
(32 bit x 200 MHz)

ITCM
(16 KB)

3.3
3.3.1

DTCM
(8 KB)

Functional Overview
Memory Regions

Figure 3-2 shows the memory map of the FX3 device.

46

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 3-2. FX3 Device Memory Map
0xFFFFF000

0xEFFFFFFF

VIC Registers
Unused

0xE000FFFF

Unused

Unused

0xE0008120

LPP DMA Regs
0xE0008000

0xE004FFFF

BootROM (32 KB)

GCTL Registers

LPP Common
0xE0040000

0xF0000000

USB Registers
MMIO Register
Space (256 MB)
0xE0000000

S-Port Registers
(FX3S only)
PIB (GPIF)
Registers

0xE0007F00

Unused
0xE0030000

0xE0001400

GPIO Registers
0xE0001000

0xE0020000

SPI Registers
0xE0010000

LPP Registers

0xE0000C00

UART Registers
0xE0000000

Page table (Opt.)

0x4007FFFF

Unused

0xE0000800

I2C Registers
0xE0000400

I2S Registers

DMA buffers

0xE0000000

Data
SYSTEM RAM
(512 KB*)
0x40000000

Code
DMA Descriptors

Unused

0x40003000
0x40000000
0x10001FFF

ISR Data,
Runtime stacks etc.
0x10000000
0x00003FFF

DTCM (8 KB)
0x10000000

Unused
ITCM (16 KB)
0x00000000

ISR Code
Exception Vectors

0x00000100
0x00000000

Note: Some FX3 parts (CYUSB3011,
CYUSB3012) only have 256 KB
of SYSTEM RAM available.

Note: The memory map shown is for the CYUSB3014 part, which implements 512 KB of system RAM. For other parts such
as CYUSB3011, the system RAM region is limited to 256 KB (from 0x40000000 to 0x4003FFFF).

The major memory regions on the FX3 device are the following:
■

ITCM-16 KB dedicated space for holding exception vectors and ISR code. While it is possible to read and write to the
ITCM memory region from the ARM CPU, it is not possible to use this memory region as a target for DMA transfers.

■

DTCM-8 KB memory region that can be used for holding frequently accessed data structures, ISR data, run-time stacks,
and more. It is not possible to use this region as a target for DMA transfers.

■

System RAM-The main SRAM region that is used for code and data storage as well as for buffering any data that is flowing through the FX3 device. The System RAM region can be 256 KB or 512 KB, depending on the FX3 part being used.
The first 12 KB of this region is reserved for storing DMA-related data structures (descriptors) that are used by the FX3
hardware. The remainder of the System RAM can be used as required by the application. Figure 3-2 shows the commonly
used subdivisions for the RAM region.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

47

■

MMIO-The register space that holds all the configuration and status registers implemented by all the blocks on the FX3
device. While a total memory region of 256 MB has been allocated for the registers, most of this memory is unused and
unimplemented. Refer to the chapters on each of the FX3 hardware blocks for information on the registers corresponding
to those blocks.

■

BootROM-A 32 KB ROM region that is preprogrammed with the FX3 device bootloader. The bootloader implements multiple boot modes such as USB boot, I2C boot, SPI boot, and GPIF boot. The desired boot mode is selected through a set
of pin straps. This memory region is not accessible to FX3 user applications.

■

VIC-Control and status registers for the VIC block. They are separate from the other MMIO registers and are located at
the address 0xFFFFF000.

3.3.2

System Interconnect

The FX3 device implements a hierarchical AHB-based interconnect system that allows the device interfaces and the ARM
CPU to access the system memory with high throughput and bounded latency. Different parts of the FX3 device function at
different clock rates. The ARM CPU typically runs on a 200 MHz clock and has separate 32-bit wide buses for instruction and
data access. The DMA interconnect runs at 100 MHz and has separate 64-bit buses for read and write accesses. The MMIO
interconnect runs at 100 MHz and has a single 32-bit bus for all register accesses. The system RAM is organized as 128-bit
wide memories and is clocked at 200 MHz.
As the DMA interconnect provides separate buses for read and write transfers, it can issue one read access and one write
access during each DMA clock cycle. This means that the DMA interconnect can simultaneously support DMA read and DMA
write traffic at 800 MBps each (100 MHz times 8 bytes in the 64-bit bus equals 800 MBps).
The system interconnect supports the following kinds of transfers:
■

CPU traffic to system RAM

■

DMA traffic to system RAM

■

CPU accesses to MMIO registers

■

DMA accesses to MMIO registers

Note: DMA access to MMIO registers is used to synchronize data transfers between a pair of communicating hardware
blocks.

A specialized FX3 memory controller arbitrates between all these accesses. The memory controller connects to the highspeed system interconnect, which has two 128-bit wide buses running at 200 MHz. The memory controller guarantees equal
SRAM bandwidth for CPU and DMA accesses. It also allows the DMA controller to use any unused CPU cycles so that typical
FX3 applications can sustain a higher bandwidth.

3.3.3

Low-Power Operations

FX3 supports low-power operating modes in which the device clocks can be turned off and most of the blocks can be
powered off. Table 3-1 shows the state of various FX3 blocks in the different power modes.

48

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Table 3-1. State of FX3 Blocks in Low-Power Modes
Device Block
ARM9 CPU

Normal Mode
ON

Suspend (L1) Mode
Waiting for interrupt

Suspend (L2) Mode
Waiting for interrupt

Standby (L3) Mode
OFF

System RAM

ON

Clock gated

Clock gated

Clock gated

USB block

ON

Clock gated

OFF

OFF

GPIF

ON

Clock gated

Clock gated

OFF

Serial peripherals
(UART, I2C, I2S and SPI)

ON

Clock gated

Clock gated

OFF

GPIO

ON

Holds previous state

Holds previous state

Holds previous state

The device supports two variants of suspend modes: L1 and L2. All the device blocks will be in the clock gated state in the L1
mode. This mode can be entered when the USB connection to the FX3 device has been suspended by the host, and the
device should be configured to wake up on any USB bus activity.
The USB block is powered off in the L2 suspend mode. This mode can be entered only if the VBus input to the device is
turned off. The device can be configured to wake up when the VBus input is detected.
In the standby mode, most of the blocks on the device are powered off. Only the system RAM and the logic required to detect
wakeup requests are left powered on. Since the CPU as well as all the blocks including USB are powered off in this mode,
firmware operation after wakeup is similar to that on a warm reset of the device.

3.3.4

Cache Operations

The FX3 device has dedicated instruction and data caches that improve access latencies to the SYSTEM RAM region. The
caches are not used for TCM, MMIO, and VIC access. TCMs guarantee single-cycle access for both instructions and data,
and they do not require a cache. The MMIO and VIC registers need to be updated atomically, and they are configured as not
cacheable.
The ARM9 architecture supports the following cache operations:
■

Flushing the entire I-cache or D-cache

■

Cleaning (writing back to memory) the entire D-cache

■

Flushing (evicting) a memory region from the I-cache or D-cache

■

Cleaning (writing back to memory) a memory region from the D-cache

■

Loading a specific memory region into the I-cache or D-cache

Please refer to the ARM926EJ-S Technical Reference Manual or the ARM System Developer's Guide for details on how to
perform these operations.
Enabling the instruction cache is recommended for all FX3 applications. Enabling the data cache helps improve performance
in applications where the FX3 CPU performs data manipulations.

3.3.4.1

Cache Coherency

Almost all FX3 applications involve transferring data in or out through one or more of the device interfaces. All these data
transfers are achieved through the distributed DMA fabric on the device and make use of a part of the system RAM for
buffering.
As the system RAM is used for DMA buffers as well as for code and data storage, there is a possibility of cache/memory
corruption when the D-cache is enabled. The firmware application needs to avoid this possibility using the following
guidelines. These steps are handled by the FX3 firmware library when the DMA APIs in the SDK are used.
1. As data is loaded or evicted from the cache one line at a time, it is likely that any data that shares a cache line with a DMA
data buffer will be corrupted. Ensure that no code/data shares a cache line with DMA buffers to avoid this possibility.
Hint: It is recommended that all DMA buffers be located in a separate memory region within the system RAM. It is also
recommended that each DMA buffer occupy an integral number of cache lines (32 bytes) to ensure that an adjacent DMA
buffer is not corrupted by a data transfer.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

49

2. Ensure that the memory region corresponding to a DMA buffer is cleaned from the D-cache before initiating any egress
(data output from FX3) data transfers.
3. Ensure that the memory region corresponding to a DMA buffer is flushed (evicted) from the D-cache before initiating any
ingress (data input into FX3) data transfers.

3.3.5

Memory Usage

The TCM and system RAM regions on the FX3 device are general purpose and can be used by the firmware application as
desired. The only constraints are as follows:
■

The initial part of the I-TCM (approximately 256 bytes starting at address 0) is reserved for setting up the ARM exception
vectors.

■

The initial part of the system RAM (12 KB starting from address 0x40000000) is reserved for setting up DMA transferrelated data structures.

■

The TCM regions cannot be used for direct data transfers, as the DMA engine does not support data transfers from/to
these regions.

This section provides guidelines on mapping out the firmware code, data, and DMA buffers within the available memory on
the device.
Table 3-2 shows the memory sections required by an FX3 firmware application. Figure 3-3 shows the mapping of these
sections to FX3 memory addresses in a typical application. The size of the sections other than exception vectors and DMA
descriptors can be set according to the needs of the application.

Table 3-2. Memory Regions Used by an FX3 Application
Section Name
Vectors

Description
ARM exception vectors; needs to be located at the beginning of the I-TCM region

Text

All executable code for the application

Data

Explicitly initiated global data used by the application

BSS

Uninitialized global data used by the application

Stacks

Stack regions for the ARM processor operating modes (supervisor, user, IRQ, FIQ, abort, and undefined)

Heap

Run-time heap for dynamic allocation (malloc or new) of variables used by the application; this section is optional and is only required
if dynamic memory allocation (malloc, free, new, delete) is used

DMA descriptors

Memory region reserved for DMA transfer-related data structures; these structures are used by the FX3 hardware and have to be
located at the beginning of the system RAM region

DMA buffer

Memory region reserved for DMA data buffers used by the application; as larger DMA buffers can improve data transfer throughput, it
is recommended that as much memory as is possible be allocated to this section

50

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 3-3. Memory Map for Typical FX3 Firmware Application
0x4007 FFFF

DMA Buffer Area

Runtime Heap (Optional)

BSS

SYSTEM RAM

Data Section

Text Section

0x4000 3000
DMA Descriptors (12 KB)

0x4000 0000
0x1000 1FFF
Runtime Stack
+
Frequently accessed data

D-TCM

0x1000 0000
0x0000 3FFF
Interrupt Service Routines
+
Other frequently executed code

I-TCM

0x0000 0100
Exception Vectors (256 Bytes)

0x0000 0000

The memory map for the firmware application is specified through a linker script file. The format of the linker script file used by
the standard GNU C compiler for ARM processors is documented here.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

51

52

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

4. Global Controller (GCTL)

The FX3 Global Controller (GCTL) supports I/O configuration, clock management, power management, and watchdog timer
configuration. The GCTL features include the following:
■

Can generate up to 500-MHz master clock

■

Serves as a clock source for various peripherals (like UIB, PIB, and LPP) in FX3

■

Supports simple and complex GPIO configuration

■

Supports special function (like SPI and GPIF II) I/O configuration

■

Supports watchdog timer configuration

■

Supports power mode control and various wakeup source configuration

4.1

GPIO Pins

All 60 GPIO pins in FX3 can function as GPIOs. Each is multiplexed to support other functions/peripheral blocks (like UART,
SPI, and so on). By default, the pins are allocated in groups to either one function block or the other, depending on the interface mode, in their respective power domains. In a typical application, all FX3 peripheral blocks are not used. Also, not all
pins of the blocks being used are utilized. Unused pins in each block may be overridden as simple or complex GPIO pins on
a pin-by-pin basis.
Simple GPIOs provide software-controlled and observable input and output capability only. In addition, they can also raise
interrupts. Complex GPIOs add three timer/counter registers for each group and support a variety of time-based functions.
They work off a slow or fast clock. Complex GPIOs can also be used as general-purpose timers by the firmware. There are
eight complex I/O pin groups, the elements of which are chosen in a modulo 8 fashion (complex I/O group 0: GPIO 0, 8, 16;
complex I/O group 1: GPIO 1, 9, 17, and so on). Each group can have different complex I/O functions (like PWM, one shot,
and so on). However, only one pin from a group can use the complex I/O functions. The rest of the pins in the group are used
as block I/O or simple GPIO. Refer to Table 7 in the EZ-USB FX3 datasheet for the GPIO configuration options.

4.1.1

I/O Matrix Configuration

I/O matrix configuration is used to configure the interface mode for I/O pins. The GCTL_IOMATRIX register must be configured before accessing any alternate function pins. Table 4-1 lists the I/O pin alternate functions.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

53

Table 4-1. I/O Pin Alternate Function(s)
Pin Names
GPIO[0] to GPIO[15]

Alternate Function

Comments

DQ[0] to DQ[15]

GPIF II data pins

GPIO[16]

PCLK or CLK

GPIF II clock pin

GPIO[17] to GPIO[29]

CTL[x]

GPIF II control pins

GPIO[30] to GPIO[32]

PMOD[x]

Boot mode

GPIO[33] to GPIO[44]*

DQ[16] to DQ[27]

GPIF II data pins

GPIO[45]

-

No alternate function

GPIO[46] to GPIO[49]**

DQ[28] to DQ[31] or UART

GPIF II data pins or UART pins

GPIO[50] to GPIO[52] and GPIO[57]

I2S

GPIO[53] to GPIO[56]**

SPI or UART

GPIO[58] to GPIO[59]

I2C

* 24- or 32-bit GPIF II bus width is not supported by all FX3 chips. If the FX3 chip does not support more than a 16-bit bus
width, then alternate functions are not applicable. Refer to the EZ-USB FX3 datasheet for more details.
** If the GPIF II bus width is configured to 8 or 16 bits, then UART lines are available on the GPIO[46] to GPIO[49] pins, and
SPI lines are available on the GPIO[53] to GPIO[56] pins. If the GPIF II bus width is configured to 24 or 32 bits, then UART
lines are available on the GPIO[53] to GPIO[56] pins, and SPI is not supported.
Table 4-2 lists the FX3 registers associated with GPIO pin control. These registers are described in detail in following tables.

Table 4-2. Registers Associated with GPIO Pins
GCTL_IOMATRIX

GCTL_DS

GCTL_WPU_CFG0

GCTL_WPU_CFG1

GCTL_WPD_CFG0

GCTL_WPD_CFG1

GCTL_GPIO_SIMPLE0

GCTL_GPIO_SIMPLE1

GCTL_GPIO_COMPLEX0

GCTL_GPIO_COMPLEX1

LPP_GPIO_ID

LPP_GPIO_POWER

LPP_GPIO_PIN_STATUS(n)

LPP_GPIO_PIN_TIMER(n)

LPP_GPIO_PIN_THRESHOLD(n)

LPP_GPIO_SIMPLE(n)

LPP_GPIO_DRIVE_LO_EN

LPP_GPIO_DRIVE_HI_EN

LPP_GPIO_INPUT_EN

LPP_GPIO_PIN_INTR

LPP_GPIO_INVALUE0

LPP_GPIO_INVALUE1

LPP_GPIO_INTR0_REG

LPP_GPIO_INTR1_REG

See I/O Matrix Configuration Register on page 247
The FX3 SDK API CyU3PDeviceConfigureIOMatrix configures the GCTL_IOMATRIX register. A code snippet to configure the
I/O matrix follows. Refer to the SDK firmware example for the complete details on the IOMATRIX configuration.
/* Configure the IO matrix for the device.
* 32 bit bus width is disabled.
* S0 port is disabled.
* S1 port is disabled.
* UART is enabled on S1 port.
* IOs 43, 45, 52 and 57 are chosen as GPIO. */
*/
io_cfg.isDQ32Bit
= CyFalse;
io_cfg.s0Mode
= CY_U3P_SPORT_INACTIVE;
io_cfg.s1Mode
= CY_U3P_SPORT_INACTIVE;
io_cfg.gpioSimpleEn[0] = 0;
io_cfg.gpioSimpleEn[1] = 0x02102800;
io_cfg.gpioComplexEn[0] = 0;
io_cfg.gpioComplexEn[1] = 0;

54

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

io_cfg.useUart
= CyTrue;
io_cfg.useI2C
= CyFalse;
io_cfg.useI2S
= CyFalse;
io_cfg.useSpi
= CyFalse;
io_cfg.lppMode
= CY_U3P_IO_MATRIX_LPP_UART_ONLY;
status = CyU3PDeviceConfigureIOMatrix (&io_cfg);
if (status != CY_U3P_SUCCESS)
{
goto handle_fatal_error;
}

4.1.2

I/O Drive Strength

The drive strength for I/O pins is programmable even if the pin is configured for an alternate function. The I/O pin drive
strength can be set to quarter strength, half strength, three-quarter strength, or full strength by configuring the appropriate bits
in the GCTL_DS register.
See I/O Drive Strength Configuration Register on page 252.
In the FX3 SDK, I/Os on the FX3 device are grouped based on function into multiple interfaces (GPIF, I2C, I2S, SPI, UART).
The I/O drive strength for each group can be separately configured using APIs.
■

CyU3PSetPportDriveStrength

■

CyU3PSetI2cDriveStrength

■

CyU3PSetGpioDriveStrength

■

CyU3PSetSerialIoDriveStrength

4.1.3

GPIO Pull-up and Pull-down

FX3 supports internal weak (50 K ohm) pull-up or pull-down I/O pins. A weak pull-up on I/O can be enabled by setting
GCTL_WPU_CFG registers. A weak pull-down on I/O can be enabled by setting the GCTL_WPD_CFGx registers. The
default state of the IOs at power-on and after reset is tristate.
See the following:
■

GCTL_WPU_CFG on page 254

■

GCTL_WPD_CFG on page 256

The FX3 SDK API CyU3PGpioSetIoMode is used to set pull-up or pull-down on an I/O pin.

4.1.4

Simple GPIO Override

FX3 supports the simple GPIO override option to configure any I/O as a simple GPIO pin. Register
CY_U3P_GCTL_GPIO_SIMPLE is used to set the simple GPIO override. Data pins DQ[0[ to DQ[31] can be configured as
Simple GPIOs using IO matrix configuration and the override is not needed whereas all other GPIO pins needs the override to
function as simple GPIO. Refer to GPIO on page 198 for more details on GPIO configuration.
See GCTL_GPIO_SIMPLE on page 248.
The FX3 SDK API CyU3PDeviceGpioOverride is used to configure the CY_U3P_GCTL_GPIO_SIMPLE register.

4.1.5

Complex GPIO Override

FX3 supports the complex GPIO override option to configure any I/O as a complex GPIO pin. Register
CY_U3P_GCTL_GPIO_COMPLEX is used to set the complex GPIO override. Refer to GPIO on page 198 for more details on
GPIO configuration.
See GCTL_GPIO_COMPLEX on page 250.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

55

The FX3 SDK API CyU3PDeviceGpioOverride is used to configure the CY_U3P_GCTL_GPIO_COMPLEX register.

4.1.6

I/O Power Observability

Three GCTL registers-GCTL_IOPOWER, GCTL_IOPWR_INTR, and GCTL_IOPWR_INTR_MASK-allow the firmware to
monitor the power status of various I/O blocks.

4.1.6.1

GCTL_IOPOWER

See GCTL_IOPOWER on page 258.

4.1.6.2

GCTL_IOPWR_INTR

See GCTL_IOPOWER_INTR on page 260.

4.1.6.3

GCTL_IOPWR_INTR_MASK

See GCTL_IOPOWER_INTR_MASK on page 262.

4.2

Clock Management

Clocks for FX3 peripherals can be configured using the GCTL registers. To enable an FX3 functional block (UART, SPI, and
so on), configure the corresponding clock. The clock can be disabled for the unused functional blocks to save power.
As shown in Figure 4-1, CLKIN and PLL clock are the two input clock sources to the GCTL block. CLKIN is the chip reference
clock provided by a 19.2-MHz, 26-MHz, 38.4-MHz, or 52-MHz external clock source or a 19.2-MHz crystal. It is used as the
source clock for the PLL, which generates a master clock at frequencies up to 500 MHz. This PLL output clock is used to generate all the core clocks in the system.
Programmable dividers generate clocks in GCTL (except the blocks that contain their own PLL, for example, USB block). All
generated clocks have a configurable divide capability and on/off programmability.

56

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 4-1. Clock System Block Diagram
GCTL BACKUP

CLKIN_32

Standby Clock

CSD

XTAL IN

XTAL
Osc

XTAL OUT

Reference Clock

CLKIN
Standby Edge

50 us
Delay

FSLC[2]

CSD

Standby GPIO Clock

GCTL
PLL

GCTL_PLL_CFG

Master(System) Clock

CSD
CSD

GCTL_GPIO_SLOW_CLK_CFG
GCTL_GPIO_FAST_CLK_CFG

CSD

GCTL_CPU_CLK_CFG

CSD

enable

GCTL_I2C_CLK_CFG

CSD

GCTL_UART_CLK_CFG

CSD

GCTL_SPI_CLK_CFG

CSD

GCTL_I2S_CLK_CFG

CSD

Fast GPIO Clock
CPU Clock

CSD
CSD

Simple GPIO Clock

enable

CSD

GCTL_PIB_CLK_CFG

Slow GPIO Clock

DMA Clock
MMIO Clock
PIB Clock
I2C Clock
UART Clock
SPI Clock

/4
I2S Clock

in
pad

oe_n
out

/4

Four system clocks are obtained by dividing the master clock by 1, 2, 4, and 16. The system clocks are then used to generate
clocks for most peripherals in the device through the respective Clock Select and Divide (CSD) block. A CSD block is used to
select one of the four system clocks and then divide it using the specified divider value. The depth of the divider is different for
different peripherals.
The CPU clock is derived by selecting and dividing one of the four system clocks by an integer factor between 1 and 16. The
bus clocks are derived from the CPU clock. Independent 4-bit dividers are provided for both the DMA and MMIO bus clocks.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

57

The frequency of the MMIO clock, however, must be an integer divide of the DMA clock frequency. It is not recommended to
drop the frequency of the CPU clock and DMA clock while the device is handling any data traffic.
A 32-kHz external clock source is used for low-power operation during standby. In the absence of a 32-kHz input clock
source, the application can derive it from the input reference clock.
Certain peripherals deviate from the clock derivation described above. The fast clock source of GPIO is derived from the system clocks using a CSD. The core clock is a fixed division of the fast clock. The slow clock source of GPIO is obtained directly
from the reference clock using a programmable divider. The standby clock is used to implement wakeup on GPIO. The I2S
block can be run off an internal clock derived from the system clocks or from an external clock sourced through the
I2S_MCLK pin of the device.
Exceptions to the general clock derivation strategy are blocks that contain their own PLL, because they include a PHY that
provides its clock reference, for example, the USB2PHY and the USB3PHY. Refer to Universal Serial Bus (USB) chapter on
page 81 for more details on the USB block clocking.
The CPU, DMA, and MMIO clock domains are synchronous to each other. However, every peripheral assumes its core clock
to be fully asynchronous from other peripheral core clocks, the computing clock, or the wakeup clock.

Table 4-3. Registers Associated with Clock Management
CY_U3P_GCTL_PLL_CFG

CY_U3P_GCTL_GPIO_FAST_CLK

CY_U3P_GCTL_CPU_CLK_CFG

CY_U3P_GCTL_GPIO_SLOW_CLK

CY_U3P_GCTL_UIB_CORE_CLK

CY_U3P_GCTL_I2C_CORE_CLK

CY_U3P_GCTL_PIB_CORE_CLK

CY_U3P_GCTL_UART_CORE_CLK

CY_U3P_GCTL_SIB0_CORE_CLK

CY_U3P_GCTL_SPI_CORE_CLK

CY_U3P_GCTL_SIB1_CORE_CLK

CY_U3P_GCTL_I2S_CORE_CLK

4.3

Power Management

Table 4-4. Registers Associated with Power Management
CY_U3P_GCTL_CONTROL

CY_U3P_GCTL_FREEZE

CY_U3P_GCTL_WAKEUP_EN

CY_U3P_GCTL_WATCHDOG_CS

CY_U3P_GCTL_WAKEUP_POLARITY

CY_U3P_GCTL_WATCHDOG_TIMER0

CY_U3P_GCTL_WAKEUP_EVENT

CY_U3P_GCTL_WATCHDOG_TIMER1

4.3.1

Power Domains

Power supply domains in FX3 can be classified in four categories: core power domain, memory power domain, I/O power
domain, and always-on power domain.
The core power domain encompasses a large section of the device, including the CPU, peripheral logic, and interconnect fabric. The system SRAM resides in the memory power domain. I/O logic dwells in the respective peripheral I/O power domain.
The peripheral I/O power domain includes the I2C-IO power domain, I2S-IO power domain, UART-IO power domain, SPI
power domain, IO-GPIO power domain, Clock IO power domain, USB IO power domain, and Processor Port IO power
domain. The always-on power domain hosts the power management controller, the wakeup sources, and their associated
logic.
Wakeup sources force a system in the suspend or standby state to switch to the normal power operation mode. These are
distributed across peripherals and configured in the always-on global configuration block. Some of them include level match
on level sensitive wakeup I/Os, toggle on edge sensitive wakeup I/Os, activity on the USB 2.0 data lines, OTG ID change,
LFPS detection on USB 3.0 RX lines, USB connect event, and watchdog timer-timeout event.
The always-on global configuration block runs off the standby clock and is turned off only in the lowest power state (core
power down).

58

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

4.3.2

Power Modes

At any instant, FX3 is in one of the four power modes: normal, suspend, standby, or core power down. When FX3 is actively
executing its tasks, the system is in normal mode. The clock gating techniques in peripherals minimize the overall power consumption.
On detecting prolonged periods of inactivity, the firmware can place FX3 in suspend mode. All ongoing port (peripheral) activities/transfers are completed, ports are disabled, and wakeup sources are set before entering the suspend state. In applications involving USB 3.0, the USB3 PHY is forced into the U3 state. USB2PHY, if used, is forced into suspend. The system
RAM transitions to a low-power mode in which read and write to RAM cannot be performed. The CPU is forced into the halt
state. The ARM core retains its state, including its program counter. All clocks except the 32-kHz standby are turned off by
disabling the system PLL through the global configuration block. In the absence of clocks, the I/O pins can be frozen to retain
their state as long as the I/O power domain is not turned off The INT# pin can be configured to indicate the presence of FX3
in low-power mode.
Further reduction in power is achieved by having the firmware place FX3 into the standby state, where in addition to disabling
clocks, the core power domain is turned off. As in suspend mode, the I/O states of powered peripheral I/O domains are frozen
and the ports are disabled. The essential configuration registers of logic blocks are first saved to the system RAM. Then the
system RAM itself is forced into the low-power memory retention only mode. The warm boot setting is enabled in the global
configuration block. Finally, the core is powered down. When FX3 comes out of standby, the CPU goes through a reset; the
bootloader senses the warm boot mode and restores the system to its original state after reloading the configuration values
(including the firmware resume point) from the system RAM.
Optionally, FX3 can be placed in core powered-down mode from standby mode, which also involves removing power from the
VDD pins. The contents of system SRAM are lost, and I/O pins retain their states, if suitably configured in the firmware. When
power is reapplied to the VDD pins, FX3 performs the normal power-on reset (POR) sequence.

4.3.3

Reset

Resets in FX3 are classified into two categories: hard reset and soft reset.

4.3.4

Hard Reset

A POR or a Reset# pin assertion initiates a hard reset. This sets all register bits to their default states and restarts the program but retains the states of all register bits.

4.3.5

Soft Reset

A soft reset is generated by setting the appropriate bits in the GCTL_CONTROL register. There are two types of soft resets:
CPU reset and whole device reset.
■

CPU resets the CPU program counter. The firmware does not need to be reloaded following a CPU reset.

■

Whole device reset is identical to hard reset. The firmware must be reloaded following a whole device reset.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

59

60

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

5. FX3 DMA Subsystem

5.1

DMA Introduction

At the heart of the FX3 is a sophisticated, distributed DMA controller that is capable of moving data at 800 MBps that allows
high-performance data transfers between memories and peripherals without CPU intervention. Multiple Advanced Highperformance Buses (AHB, as defined by the ARM System Architecture) are used to interconnect the system elements. The
EZ-USB FX3 device architecture includes a DMA fabric that is used to route data between various peripheral interfaces and/
or the system memory of the device.
This chapter focuses on FX3 DMA transfer basics and the registers FX3 firmware uses to initialize and initiate DMA transfers.
For a more advanced and practical DMA usage model, including types of DMA channels and common data transfer
scenarios, refer to the "DMA Engine" section in the "FX3 Firmware" chapter of the FX3 Programmers Manual.

5.2

DMA Features

The DMA subsystem in the FX3 device includes the following features:
■

Distributed DMA controllers

■

Data transfer support in either direction between:

■

Memory and peripheral

■

Peripheral and peripheral

■

Two gateways (virtual ports) of the same peripheral

■

Localized DMA adapter (local DMA controller) to each peripheral

5.3

DMA Block Diagram

Non-CPU-intervened data transfers between a peripheral and CPU (system memory) or between two different peripherals or
between two different gateways of the same peripheral are collectively referred to as DMA in FX3. All the data in the DMA
subsystem flows through the system memory.
The Advanced Microcontroller Bus Architecture - Advanced High Performance Bus (AMBA AHB) interconnect forms the
central nervous system of FX3. More details on AHB can be understood from the section "Interconnect Fabric" under chapter
"FX3 Overview" in FX3 Programmer's Manual. Figure 5-1 shows how the CPU accesses the System Memory using the
System AHB. All peripheral DMA paths connect to the DMA AHB. Bridges between the System bus and the DMA bus are
essential in routing the DMA traffic through the System memory. The width of a peripheral connection to the AHB determines
its throughput. The peripheral core implements the actual logic of the peripheral (I2C, GPIF, and USB).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

61

Figure 5-1. Block Diagram of FX3 DMA Subsystem
System AHB

I/O Pads

I/O Matrix

Peripheral 2 AHB
Bridge

Peripheral Core
logic

CPU

DMA Adapter

Peripheral 2

DMA AHB

Peripheral 1 AHB
System Memory
Peripheral 1
DMA Adapter

FX3

Peripheral Core
logic

I/O Matrix

I/O Pads

5.4

DMA Overview

FX3 contains a standard, configurable, DMA adapter that is replicated for each DMA-capable peripheral, as depicted in
Figure 5-2. This architecture provides the FX3 distributed DMA controllers. There is only one DMA adapter for all lowperformance peripherals. The DMA adapter is essentially a local DMA controller that initiates DMA transactions to and from
the system memory on behalf of the peripheral that it services. With hardware synchronization between DMA adapters, data
transfers can occur seamlessly between peripherals.

62

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 5-2. Distributed DMA Controllers

GPIO

I2C

SPI

I2S

UART

PIB

SIB

UIB

DMA
Adapter

DMA
Adapter

GCTL
DMA
Adapter

RD DMA
Adapter

WR DMA
Adapter

Main DMA Interconnect
(Accelerated AHB, 2x 100MHz x 64b, 800+800MB/s)
MMIO Interconnect
(AHB, 100MHz x 32b, ~50-100MB/s)
1cy bursts

AHB
100MHz x 32b

2cy bursts

AHB Bridge
(Synchronous)
1cy bursts

Acc AHB
2x 100 MHz x 64b

AHB Bridge
(Synchronous)

Acc AHB
2x 200MHz x 128b

1cy bursts

2cy bursts

Acc AHB (RD only)
100MHz x 64b

AHB Bridge
(Synchronous)

Acc AHB
2x 200 MHz x 128b

1cy bursts

2cy bursts

Acc AHB (WR only)
100 MHz x 64b

AHB Bridge
(Synchronous)

Acc AHB (RD only)
200MHz x 128 b

1cy bursts

AHB (WR only)
200 MHz x 128 b

High Speed System Interconnect
(Accelerated AHB, 2 x 128b x 200MHz, 3.2+3.2GB/s)
Acc AHB
2x 200MHz x 128b

1cy bursts

AHB Bridge
(Synchronous)
1,8cy bursts

2x AHB
200 MHz x 32b

Instr
Cache
(8KB)

1, 4,8cy bursts

Data
Cache
(8KB)

1cy accesses

Instr
TCM
(16KB)

5.5
5.5.1

Acc AHB
2x 200 MHz x 128b
Register Access

Memory Controller
3.2GB/s

ARM926EJ-S
ARM TCM
200MHz x 32b

1cy bursts

ARM TCM
200MHz x 32b

Data
TCM
(8KB)

(Up to 100 % Utilization)

1cy accesses

DMA Traffic
Registers & DMA
(Arrow points mast ter -to-slave)
Denotes async clock crossing
from bus to core clock domains

SRAM
200MHz x 128b

Main System SRAM
Instances Array
512KB, 128b, 200MHz, 0ws
3.2GB/s

Clock Sources :
Bus /CPU
SysPLL
SIB/PIB/LPP SysPLL
UIB

USB2PLL
USB3PLL

Locked 1:1 or 1:2, typ 100 /200MHz
Individual Diviers
Async coupled to bus /cpu
120 MHz (Adapter ), 30MHz (SIE/TP)
125 MHz (SuperSpeed mode only )

DMA Subsystem Components
Clocking

The FX3 DMA subsystem runs on an internal DMA bus clock, dma_bus_clk_i, that is divided down from the CPU clock. The
DMA bus clock divider value is determined by the DMA_DIV field of GCTL_CPU_CLK_CFG, as shown below:
DMA Bus clock divider = (GCTL_CPU_CLK_CFG.DMA_DIV + 1)
See GCTL_CPU_CLK_CFG register on page 267
Divide by 1 (i.e. GCTL_CPU_CLK_CFG.DMA_DIV = 0) is illegal and will result in undefined behavior. Thus, the range of
allowed divider values is 2 to 16 (GCTL_CPU_CLK_CFG.DMA_DIV => 1 to 15).
A typical dma_bus_clk_i frequency is set to one-half the CPU clock during device initialization. For example, if the CPU clock
is set to 192 MHz, the register setting GCTL_CPU_CLK_CFG.DMA_DIV=1 (divider = 2) will result in a 96 MHz of
dma_bus_clk_i frequency. Table 5-1 summarizes the DMA clock information.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

63

Note: The maximum DMA clock frequency is half of the CPU clock frequency, as the minimum allowed divider value is '2'.
Therefore, reducing the CPU clock frequency will result in reducing the DMA clock frequency and limit system performance.
The default clock settings for FX3 are:
■

CPU clock = System clock / 2

■

DMA clock = CPU clock / 2

It is recommended that the default clock settings be retained in all cases.

Table 5-1. DMA Clock
Domain
dma_bus_clk_i

Typ/ Max Freq
100 MHz

Configuration Register Source

Description

GCTL_CPU_CLK_CFG.DMA_DIV

DMA access clock

The CPU, DMA, and MMIO clock domains are synchronous to each other. However, every peripheral assumes its core clock
to be fully asynchronous from other peripheral core clocks, the computing clock, or the wakeup clock.
If the core (peripheral) clock is faster than the bus clock, the DMA adapter for the block runs in the core clock domain and the
DMA adapter reconciles the clocks on its interconnect side. If the core clock is slower than the bus clock, the DMA adapter for
that block runs in the bus clock domain and the DMA adapter reconciles the clocks on its core IP side. This is shown in
Figure 5-3.
Figure 5-3. DMA Adapter Clock
(a) Core Clock >Bus clock

(b) Bus clock>Core Clock

I/O
Matrix

Core Logic
Block XYZ

I/ O
Pads

System

DMA / Bus
Adapter

Block XYZ Power Domain

Interconnects

System

Interconnects

Block XYZ Power Domain

DMA / Bus
Adapter

Wake Up
Logic

5.5.2

Block XYZ
Clock Domain

Clock

I/ O
Pads

Wake Up
Logic

wakeup

Processor
/ Bus
Clock Domain

I/ O
Matrix

Core Logic
Block XYZ

Always
/ Power
/

- On
Reset Domain

Processor
/ Bus
Clock Domain

Block
XYZ
Clock
Domain

wakeup

Clock

Always
/ Power
/

- On
Reset Domain

Descriptors Buffers, and Sockets

DMA descriptors are DMA instructions in a set of registers allocated in the FX3 RAM. A DMA descriptor holds information
about the address and size of the DMA buffer as well as pointers to the next DMA Descriptor. These pointers create DMA
descriptor chains. Descriptors enable the synchronization between sockets as described below.
A DMA buffer is a section of RAM used for intermediate storage of data transferred through the FX3 device. DMA buffers are
allocated from the system RAM by the FX3 firmware; their addresses are stored as part of DMA descriptors. Every buffer
created in the system memory has a descriptor associated with it that contains buffer information such as its address, empty/
full status, and the next buffer/descriptor in the chain.
A socket is a point of connection between a peripheral hardware block and the FX3 RAM. Each peripheral hardware block on
FX3 such as USB, GPIF, UART, and SPI has a fixed number of sockets associated with it. The number of parallel data
channels through a peripheral is equal to the number of its sockets. The socket implementation includes a set of registers that
point to the active DMA descriptor and the enable or flag interrupts associated with the socket. Sockets can directly signal
each other through events or they can signal the FX3 CPU via interrupts. This signaling is configured by firmware.

5.5.3

DMA Descriptors

Descriptors are data structures that keep track of the resources (memory buffers and sockets) used for a DMA transfer. This
data structure is directly interpreted by the DMA hardware on FX3, and has to be located in a specific memory region of the

64

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

FX3 RAM as described in the Memory and System Interconnect chapter on page 45. During a transfer, descriptors are loaded
into the active socket one at a time for execution.
Figure 5-4. FX3 DMA Descriptor Structure
9

8

7

6

5

4

3

2

1

0

MARKER

EOP

BUFFER_SIZE

BUFFER_ERROR

BYTE_COUNT

Name
DSCR_BUFFER

DSCR_SYNC
DSCR_CHAIN

CONS_IP_NUM
CONS_SCK
CONS_NEXT_DSCR
BUFFER_OCCUPIED

0X0C

EN_CONS_EVT

PROD_IP_NUM
PROD_SCK
PROD_NEXT_DSCR

EN_CONS_INT

EN_PROD_EVT

0X04
0X08

EN_PROD_INT

Offset
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
0X00
BUFFER_ADDRESS

DSCR_SIZE

Each descriptor contains four 32-bit words. Figure 5-4 details the fields of the data structure.
DSCR_BUFFER provides the pointer of the buffer used for this transfer.
DSCR_SYNC defines the source and destination of this transfer. Depending on the use case, the event generation and
interrupt can be enabled for either or both the consumer and producer half. Events are used to signal the peer socket,
whereas interrupts are used to notify the CPU
A unique IP_NUM, which is assigned to each DMA-capable peripheral, is used for the source (producer) and destination
(consumer) of the transfer. A unique IP_NUM, which is assigned to each DMA-capable peripheral, is used for the source
(producer) and destination (consumer) of the transfer.
IP_NUM together with the socket number determines the actual socket identity. Table 5-2 details how sockets are identified
by IP identification and socket number.
DSCR_CHAIN contains the pointers to next descriptors for the producer and consumer respectively.
DSCR_SIZE defines the size of the buffer and transfer byte count. The specific transfer status can also be set or monitored
by the following bits:
■

BUFFER_OCCUPIED indicates that data is available in the associated buffer.

■

BUFFER_ERROR indicates whether the data is valid or in error.
❐

■

EOP marks this transfer with end-of-packet. The socket can use this to suspend an EOP condition.

MARKER is simply a software indicator for this specific transfer.

See the following register descriptions:
■

DSCR_BUFFER on page 625

■

DSCR_SYNC on page 626

■

DSCR_CHAIN on page 628

■

DSCR_SIZE on page 629

The following C code example is the DMA descriptor data structure used in the FX3 SDK.
/** \brief Descriptor data structure.
**Description**\n
This data structure contains the fields that make up a DMA descriptor on
the FX3 device.
Each structure member is composed of multiple fields as shown below. Refer
to the sock_regs.h header file for the definitions used.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

65

buffer: (CY_U3P_BUFFER_ADDR_MASK)
sync: (CY_U3P_EN_PROD_INT | CY_U3P_EN_PROD_EVENT | CY_U3P_PROD_IP_MASK |
CY_U3P_PROD_SCK_MASK | CY_U3P_EN_CONS_INT | CY_U3P_EN_CONS_EVENT |
CY_U3P_CONS_IP_MASK | CY_U3P_CONS_SCK_MASK)
chain: (CY_U3P_WR_NEXT_DSCR_MASK | CY_U3P_RD_NEXT_DSCR_MASK)
size: (CY_U3P_BYTE_COUNT_MASK | CY_U3P_BUFFER_SIZE_MASK | CY_U3P_BUFFER_OCCUPIED |
CY_U3P_BUFFER_ERROR | CY_U3P_EOP | CY_U3P_MARKER)
**\see\n
*\see CyU3PDmaDscrGetConfig
*\see CyU3PDmaDscrSetConfig
*/
typedef struct CyU3PDmaDescriptor_t
{
uint8_t
*buffer;
/**< Pointer to buffer used. */
uint32_t
sync;
/**< Consumer, Producer binding. */
uint32_t
chain;
/**< Next descriptor links. */
uint32_t
size;
/**< Current and maximum sizes of buffer. */
} CyU3PDmaDescriptor_t;

The actual DMA descriptors are maintained in the FX3 System RAM starting from address 0x40000010. The end of this
space is not defined by hardware and is determined by the firmware. There are a fixed number of fixed-size descriptors in a
fixed location in the main memory. Because of this, the hardware can directly access a descriptor with its descriptor number.
Firmware is responsible for setting up each of the descriptors and linking them to each other and to the sockets. DMA
adapters will load the content of the active DMA descriptor in the socket register region as and when required.

5.5.4

DMA Buffer

DMA buffers are data buffers allocated in the system memory used for DMA. They can be of any size within the memory
region and byte aligned. However, if the ARM data cache is enabled, it requires that the full buffer must be 32-byte aligned
and of a size that is a multiple of 32 bytes.
A data packet contained in the buffer may be smaller than one buffer or even of zero size. A packet may be split over multiple
buffers, or multiple packets can be in one buffer.
Every buffer created in the System memory has a descriptor associated with it. Descriptors are thus associated with buffers
and have a producer, a consumer or both, or neither. A descriptor without a producer and consumer is called "free".
Synchronization between producers and consumers happens at the level of descriptors and buffers. Multiple descriptors may
refer to the same buffer. When more than one descriptor is used to describe the same buffer, it is the responsibility of
FIRMWARE to make sure that the descriptors are coherent and synchronized with respect to each other. Descriptors contain
meta-data about the data in the buffer (in addition to the location and size), in particular the number of valid bytes (refer to
Figure 5-4 and DSCR_SIZE on page 629).
Since a 12-bit field (DSCR_SIZE.BUFFER_SIZE) is used to indicate the size of the DMA buffers in multiples of 16 bytes, the
maximum size of an individual DMA buffer can be as much as 0xFFF0 bytes, as depicted below. Multiple such DMA buffers
can be allocated for a single DMA transfer.
Maximum DMA buffer size allowed = (2^14 - 1) * 16 = 64Kb - 16B = 0xFFF0 bytes

5.5.4.1

Implications of Data Cache Usage

FX3 uses the same 512 KB of system RAM for code and data storage as well as for memory buffers that are used for DMA
transfers into or out of the device. The ARM 926EJ-S core on the device also includes an 8 KB data cache. The data cache is
four-way set associative with a cache-line size of 32 bytes and two dirty bits (one for each 16-byte region) per cache line. The

66

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

use of the data cache will give a good performance boost to any application that involves firmware access of the data buffer
contents. However, this also leads to a risk of memory corruption in the cases where a cache line contains both software data
structures and DMA data content. The following three sub-sections deal with this issue.

5.5.4.2

Memory Corruption Due to Cache Line Overlap

Consider the scenario represented in Figure 5-5. In this case, both cache lines 0 and 3 have an overlap of firmware data
along with the DMA buffer space. If the DMA buffer is being filled with data by any of the hardware blocks on the device, and
the firmware needs to access this data, memory corruption can happen as described below.
1. If the firmware tries to access the data in the buffer directly, stale memory content from the cache will be retrieved.
2. If the firmware flushes the cache line(s) and then accesses the data in the buffer, any updates to the firmware data structures will be lost.
3. If the firmware cleans the cache line(s) and then accesses the data buffer, the part of DMA buffer that shares a cache line
with the firmware data will get corrupted.
Figure 5-5. Unsafe Overlap of Firmware Data with DMA Buffer

Cache Line 0

FW Data

Cache Line 1

DMA Buffer

Cache Line 2
Cache Line 3

FW Data

Unused
Cache Line N
The firmware needs to ensure that the software data structures and DMA buffers do not share cache lines to prevent these
problems.

5.5.4.3

Safe Usage of Data Cache

Consider the scenario in Figure 5-6. In this case, the DMA buffer does not share any cache lines with the firmware data.
Figure 5-6. Safe Overlap of Firmware Data with DMA Buffer

Cache Line 0

FW Data

Unused

Cache Line 1
Cache Line 2

DMA Buffer

Cache Line 3
Cache Line 4
FW Data
Cache Line N

Unused

In this case, there is no possibility of the CPU and/or hardware seeing bad data due to the data cache. Whenever the CPU
wants to read a data buffer that has been filled by the DMA hardware, it can flush the corresponding region from the cache
and then initiate a read. Whenever the CPU wants to commit a buffer containing data for an egress DMA operation, it can
clean the region from the cache and then initiate the DMA operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

67

5.5.4.4

ALIGNMENT REQUIREMENT - How Not To Share Cache Lines

The basic requirement is that DMA buffers that may be modified by the hardware should not share a cache line with software
data elements. This translates to a requirement that all DMA buffers which may be used for ingress (data coming in to FX3
and being written into memory by the DMA hardware) transfers should be 32-byte aligned and occupy an integral number of
cache lines (32 bytes each).
This restriction only applies to DMA buffers that may be used for ingress data transfers. The restriction does not apply to DMA
buffers that are used only as a source of egress data.

5.5.5

Sockets

A socket is the unidirectional virtual port (gateway) used by a peripheral (IP) block to transfer data to/ from the system SRAM.
Each DMA transfer involves one or two sockets. A socket represents either the consuming or the producing half of a transfer.
For a transfer from one peripheral to another, two sockets are involved. A socket is either a consuming socket or a producing
socket at any point in time-not both at the same time.
An FX3 DMA-capable peripheral has multiple sockets in the DMA adapter. The number of sockets and their properties
depend on the specific DMA adapter to the peripheral. Each peripheral block (IP block) in the device can support a predefined
number of sockets which is the maximum number of independent data flows that can be done through that IP at a given point
of time. A producer (ingress) socket is one which moves data from the IP block to the system SRAM. A consumer (egress)
socket is one which takes data from the system SRAM and moves it out through the IP block. Each socket can be identified
with the IP number and the socket number. Table 5-2 is the socket summary for each FX3 peripheral.
Note: Separate DMA adapters are used for USB IN and OUT endpoints to allow greater USB data bandwidth. Interrupts from
both adapters are combined into a single interrupt vector.

Table 5-2. Peripheral DMA Sockets
FX3 Peripheral/
IP block

IP_NUM

Socket Count

Specific Property

Notes

Socket 0-15: Bidirectional Socket

GPIF II

0x01

32

USB

0x03

16

Socket 0-15 for USB Egress: Egress Only

This maps to IN endpoints where FX3 sends
data out.

USB-IN

0x04

16

Socket 0-15 for USB Ingress: Ingress Only

This maps to OUT endpoints where FX3
receives data.

Storage

0x02

8

All are Bidirectional

FX3S Only

16-31: Ingress only

Socket 0-1 for I2S: Egress only
Socket 2 for I2C data out: Egress only
Serial Peripherals
(UART, I2C, I2S, SPI)

Socket 3 for UART data out: Egress only
0x00

8

Socket 4 for SPI data out: Egress only
Socket 5 for I2C data in: Ingress only

The purpose of each socket in this adapter
is fixed and cannot be changed.

Socket 6 for UART data in: Ingress only
Socket 7 for SPI data in: Ingress only
CPU

0x3F

2

Socket 0 for CPU data in
Socket 1 for CPU data out

Each socket has its own register set that the firmware uses to control the DMA operations. The socket register base address
is located at offset 0x8000 from the base address of the peripheral.
Each register set occupies a 128-byte address space with some gaps in between. Figure 5-7 details the socket registers and
their field definitions.
SCK_DSCR on page 614 describes the current descriptor to be loaded for this socket.
SCK_SIZE on page 616 sets the amount of data to be transferred. A zero value in this register means the data amount is
infinite.

68

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

SCK_COUNT on page 617 reports the amount of data transferred.
SCK_STATUS on page 618 is the socket control and status register.
SCK_INTR on page 621 is the interrupt request register that indicates the status of the interrupt source. The same register is
used to clear the interrupt status.
SCK_INTR_MASK on page 623 is used to enable the interrupt source to CPU.
DSCR_BUFFER on page 625, DSCR_SYNC on page 626, DSCR_CHAIN on page 628, and DSCR_SIZE on page 629
indicate the currently loaded active descriptor in the socket. Figure 5-4 details the field definition of the descriptor.
EVENT is the socket-event communication register. FX3 DMA supports two possible events:
■

Consume event: Data has been read out of the buffer.

■

Produce event: Data has been filled into the buffer.

When a DMA transfer involves two sockets, the producer socket sends a produce event to the peer consumer socket after
data is written to the buffer. Similarly, the consumer socket sends a consume event to the peer producer socket after the data
is read from the buffer. The event signaling between the two sockets is usually handled by hardware, and the CPU is not
involved through the entire transfer. However, there are situations when the firmware needs to generate the event manually
by writing the appropriate event in the EVENT register.
Figure 5-7. FX3 DMA Socket Registers
3

2

0

Name
SCK_DSCR
SCK_SIZE
SCK_COUNT

AVL_MIN

SCK_STAUS

PARTIAL_BUF

TRANS_DONE

ERROR

SUSPEND

STALL

DSCR_NOT_AVL

DSCR_IS_LOW

0x14
0x18
0x1C
0x20
0x24
0x28
0x2C
0x30
…
0x78

Reserved

TRANS_DONE

ERROR

SUSPEND

STALL

DSCR_NOT_AVL

DSCR_IS_LOW

PRODUCE_EVENT PRODUCE_EVENT

Reserved

PARTIAL_BUF

AVL_COUNT

0x10

SCK_INTR

SCK_INTR_MASK

Reserved
DSCR_BUFFER
DSCR_SYNC
DSCR_CHAIN
DSCR_SIZE

Currently loaded active descriptor

Reserved

Reserved

EVENT_Type

0x7C

1

CONSUME_EVENT CONSUME_EVENT

AVL_ENABLE

Reserved

4

LAST_BUF

STATE

5

LAST_BUF

ZLP_RCVD

SUSPENDED

ENABLED

TRUNCATE

EN_PROD_EVENTS

EN_CONS_EVENTS

SUSP_PARTIAL

SUSP_LAST

SUSP_TRANS

SUSP_EOP

WRAPUP

UNIT

0x0C

GO_SUSPEND

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6
BUFFER_ADDRESS
0x00
DSCR_LOW
DSCR_NUMBER
DSCR_COUNT
0x04
TRANS_SIZE
0x08
TRANS_COUNT

GO_ENABLE

Offset

ACTIVE_DSCR

EVENT

For detailed field description, see the following:
■

SCK_DSCR on page 614

■

SCK_SIZE on page 616

■

SCK_COUNT on page 617

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

69

■

SCK_STATUS on page 618

■

SCK_INTR on page 621

■

SCK_INTR_MASK on page 623

Each socket can be identified to be in one of the states listed in Table 5-2. The SCK_STATUS.STATE field can be read to
understand the socket state. More on the socket states will be discussed later.

Table 5-3. Socket States
Socket State

SCK_STATUS.STATE
Value

Description

DESCR

0

Descriptor state. This is the default initial state indicating the descriptor registers are NOT valid in the
adapter. The adapter will start loading the descriptor from the memory if the socket becomes enabled and
not suspended. Suspend has no effect on any other state.

STALL

1

Stall state. The socket is stalled, waiting for data to be loaded into the Fetch Queue or waiting for an event.

ACTIVE

2

Active state. The socket is available for core data transfers.

EVENT

3

Event state. Core transfer is done. The descriptor is being written back into the memory and an event is
being generated if enabled.

CHECK1

4

Check states. An active socket gets here based on the core's EOP request to check the transfer size and
determine whether the buffer should be wrapped up. Depending on result, the socket will either go back to
the Active state or move to the Event state.

SUSPENDED

5

The socket is suspended

CHECK2

6

Check states. An active socket gets here based on the core's EOP request to check the transfer size and
determine whether the buffer should be wrapped up. Depending on result, the socket will either go back to
the Active state or move to the Event state.

WAITING

7

Waiting for confirmation that the event was sent.

The following C code example shows the DMA socket data structure used in the FX3 SDK.
/** \brief DMA socket register structure.
**Description**\n
Each hardware block on the FX3 device implements a number of DMA sockets through
which it handles data transfers with the external world. Each DMA socket serves as
an endpoint for an independent data stream going through the hardware block.
Each socket has a set of registers associated with it, that reflect the configuration
and status information for that socket. The CyU3PDmaSocket structure is a replica
of the config/status registers for a socket and is designed to perform socket configuration
and status checks directly from firmware.
See the sock_regs.h header file for the definitions of the fields that make up each
of these registers.
**\see
*\see CyU3PDmaSocketConfig_t
*/
typedef struct CyU3PDmaSocket_t
{
uvint32_t dscrChain;
*/
uvint32_t xferSize;
size can

/**< The descriptor chain associated with the socket
/**< The transfer size requested for this socket. The
be specified in bytes or in terms of number of

buffers,
uvint32_t xferCount;
uvint32_t status;

70

depending on the UNIT field in the status value. */
/**< The completed transfer count for this socket. */
/**< Socket configuration and status register. */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

uvint32_t intr;
uvint32_t intrMask;
uvint32_t unused2[2];
CyU3PDmaDescriptor_t activeDscr;
cyu3descriptor.h for definition. */
uvint32_t unused19[19];
uvint32_t sckEvent;
} CyU3PDmaSocket_t;

5.5.5.1

/**<
/**<
/**<
/**<

Interrupt status register. */
Interrupt mask register. */
Reserved register space. */
Active descriptor information. See

/**< Reserved register space. */
/**< Generate event register. */

Software Manipulation of Sockets

Sockets are to be initialized, inspected, and modified by firmware as described in this section.

5.5.5.2

Initializing a Socket

Sockets can be initialized only when in the IDLE state, that is, SCK_STATUS.ENABLED=0. If this is not the case, the socket
must first be terminated (see 5.5.5.3 Terminating a Socket on page 71).
The general procedure is as follows:
1. Descriptors are allocated or located and initialized in memory. These descriptors are chained appropriately.
2. The SCK_xxx registers are initialized with the proper configuration values. This includes SCK_DSCR, which contains the
number of the first descriptor to be loaded. DSCR_xxx registers are not initialized - the DMA adapter will load those by
itself.
3. SCK_STATUS.GO_ENABLE is set to '1' to activate the socket (if so desired).

5.5.5.3

Terminating a Socket

Sockets can be terminated at any time. If a socket is active, its activities will be aborted after an unspecified amount of time.
The general procedure is as follows:
1. SCK_STATUS.GO_ENABLE is cleared to '0'. The IP will continue to perform an unspecified amount of its pending activity.
2. It is permissible to write '0' multiple times to SCK_STATUS.GO_ENABLE while the socket is being terminated, but it is illegal to write '1' to it during this time.
3. SCK_STATUS.ENABLED is read back until its value changes to '0'. No further activity emanates from this socket after
SCK_STATUS.enabled is observed as cleared.

5.5.5.4

Modifying or Suspending a Socket

Sockets are normally modified safely only when in the suspend state. A socket that is active or stalled must first be
suspended. A socket that is suspended will not complete an ongoing transfer, but rather go into the suspended state almost
immediately. It is possible though, that going into the suspend state safely takes a noticeable (but small) number of cycles.
The general procedure is as follows:
1. SCK_STATUS.GO_SUSPEND is set to '1'.
2. SCK_STATUS.SUSPENDED is read back until its value changes to '1' or SCK_INTR.SUSPEND is used as the interrupt
source to indicate the the suspend status.
3. Any changes are made to SCK_xxx or DSCR_xxx registers.
4. SCK_STATUS.GO_SUSPEND is cleared. If SCK_DSCR.active_dscr was modified, the socket will load the new descriptor from the memory[ otherwise it will resume the operation using the current contents of DSCR_xxx.
Note that SCK_STATUS.SUSPENDED will only take effect after the transfer of the current buffer completes. This may take a
long time.
Note that it is also possible to modify sockets that are in the stalled state, provided that it is known that no synchronization
EVENT(s) will occur. This is normally the case when the socket is waiting for firmware to generate an event, that is, the socket
is not coupled to another socket in another adapter. In this case it is not necessary to first suspend the socket.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

71

5.5.5.5

Inspecting a Socket

Sockets can be inspected at any time. When a socket is active, values are not guaranteed to be accurate due to the activity
and clock domain crossing issues. The general procedure is as follows:
1. Any value in SCK_xxx or DSCR_xxx registers is read twice in succession.
2. If the values of two reads match they are accurate. If they are different, go back to step 1.

5.5.5.6

Wrapping Up a Socket

A socket that is in the Active state, but that is not expected to send/receive any more data can be forcibly wrapped up by
asserting SCK_STATUS.WRAPUP. This should never be done for sockets that are not in the Active state or that may send/
receive data. This option is normally used when the core IP has transitioned into an error or partial completion state and the
firmware is required to clean up the remaining, unexecuted, portion of the transfer.

5.5.6

Illustration of Descriptor, Buffer and Socket Usage

Figure 5-8 below sums up the concepts discussed in sections 5.5.2 Descriptors Buffers, and Sockets on page 64 to 5.5.5
Sockets on page 68.
Figure 5-8. Sockets, Descriptors, and Buffers
Sockets
* Each IP block has its own sockets
* Sockets can use same or different descriptors
* Sockets use circular or linear list of descriptors
* Unlimited number of descriptors per socket

IP Block A
Socket #0
Descriptor #0

IP Block B
Socket #0
Descriptor #0

Descriptor #5

Descriptor #7

Descriptor #9

Descriptor #9

Descriptor #315

Descriptor #278

Socket #M
Descriptors
* Descriptors point to exactly one buffer
* Descriptors are either consuming or producing
* Multiple descriptors can point to the same buffer
* Synchronization is done by using same descriptor
* Descriptors have status (free/occupied, #bytes, ...)

5.5.7

Buffer #0
Buffer #0
Buffer #0
Buffer #0

Socket #N
Buffers
* Buffers are regions in main memory
* Buffers can have any size (in bytes)
* Buffers can be anywhere (byte aligned)
* Buffer pool is managed in software
* Multiple descriptors can use the same buffer
* Buffers may contain packets smaller than its size
* Buffers may contain zero length packets

Understanding DMA Operation: Peripheral to Peripheral

This section explains in a high level how DMA descriptors, buffers, and sockets are tied together to achieve the required DMA
operation, with the help of an example peripheral-to-peripheral DMA operation.

72

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 5-9. FX3's DMA System

PL192
VIC

Arm

DMA descriptor 0

DMA descriptor 0

DMA descriptor 1

DMA descriptor 1

DMA descriptor 2

DMA descriptor 2

DMA descriptor 3

DMA descriptor 3

Peripheral 1
Socket

Peripheral 2
DMA
Engine

System

DMA
Engine

Socket

The producer behaves in the following way:
1. When a producer has filled a buffer (an end-of-packet or a buffer-full event occurred - note that packets can be empty), it
updates the descriptor associated with the buffer in the main memory to indicate that the buffer is full (DMA-to-memory
write transaction).
2. The producer then sends a produce event to the consuming socket of its descriptor (DMA-to-MMIO write transaction).
This event contains the number of the descriptor to which it relates.
3. The producer then loads the next descriptor for the socket and makes it active (DMA-to-memory read transaction).
4. If the new descriptor indicates its buffer space is occupied, the socket stalls. If a consume event is received for the current
descriptor, the descriptor is either updated using the data in the event or reloaded from the memory. (DMA-to-memory
read transaction). DMA data write transfers may resume. Go to step (1)
5. If no descriptor is available (next_dscr=0xFFFF), the socket is suspended. When the software extends the descriptor list
and explicitly 'resumes', the IP block operation continues. Go to step (3).
The consumer behavior is exactly symmetric:
1. When a consumer has emptied a buffer (an end-of-packet or a buffer empty event occurred), it updates the descriptor
associated with the buffer in the main memory to indicate that the buffer is empty and available (DMA-to memory write
transaction).
2. The consumer then sends a consume event to the producing socket of its descriptor (DMA-to-MMIO write transaction).
This event contains the number of the descriptor to which it relates.
3. The consumer then loads the next descriptor for the socket and makes it active (DMA-to-memory read transaction).
4. If the new descriptor indicates its buffer is empty, the socket stalls. If a produce event is received for the current descriptor,
the descriptor is either updated using the data from the event or reloaded from the memory. (DMA-to-memory read transaction). DMA data read transfers may resume. Go to step (1)
5. If no descriptor is available the socket is suspended. When the software extends the descriptor list and explicitly
'resumes', the IP block operation continues. Go to step (3).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

73

Refer to the section "Setting up the DMA System" in AN75779, where it is explained graphically in a high-level how the
socket, descriptor, and buffers are tied together in the FX3 DMA system.

5.5.8

Interrupt Requests

Each DMA-capable peripheral block has dedicated global interrupt request lines to the PL192 VIC. Refer to 2.3.1.8 Vectored
Interrupt Controller on page 41 for more details. Table 2-4 on page 42 in 2.3.1.8 Vectored Interrupt Controller on page 41 lists
the various FX3 interrupt sources. Table 5-4 describes the DMA interrupt lines.

Table 5-4. Global DMA Interrupt Request to VIC
Interrupt

VIC Line

Interrupt Source

Description

GPIF_DMA

6

GPIF DMA adapter

DMA socket interrupt from the GPIF block

USB_DMA

8

USB DMA adapter

Applies to both USB device and host mode operation

STORAGE_DMA

11

Storage (SD/MMC) interface DMA adapter

Applies only to FX3S devices

PERIPH_DMA

20

Serial peripheral block DMA adapter

5.5.9

DMA Interrupts

Although DMA transfer takes place independently from CPU execution, the CPU may need to be notified when certain
transfer conditions are met, when an error has occurred, or when the transfer is complete. See SCK_INTR on page 632.
Each peripheral has a global SCK_INTR register, in which each bit represents the socket number that generates the interrupt.
The bit description is as described above. There is also a per-socket SCK_INTR in which each bit represents the interrupt
source from the corresponding socket. Bit description is explained in 5.5.5 Sockets on page 68. The logical OR of all socket
interrupts presented in the per-socket SCK_INTR register represents the corresponding bit in the peripheral global
SCK_INTR register. This is illustrated in Figure 5-10.
Figure 5-10. Global and Per-Socket SCK_INTR Register
GLOBAL SCK_INTR
int n

Socket 0
……..

int1

src x

int0

……..

src1

src0

SCK_INTR

……..

src1

src0

SCK_INTR

int0

Socket 1
src x

int1
.
.
.
.
.
Socket n
src x

……..

src1

src0

SCK_INTR

int n

Peripheral Block A
When a DMA interrupt occurs, the CPU is notified by VIC with the DMA interrupt line specific to the peripheral, as shown in
Table 5-4. Then the CPU can check the peripheral's global SCK_INTR register to find the socket number that needs attention.

74

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The Global SCK_INTR register is read-only and the interrupt bits are cleared by clearing the interrupt cause or bit in the persocket SCK_INTR register itself. Once the CPU finds the socket number, it can find the source of the interrupt from the persocket SCK_INTR register of the corresponding socket.

5.6
5.6.1

Programming Sequence
Initialization

The default state of most sockets is indicated in the register map. Briefly, in the default state the socket is disabled and holds
no descriptor. Sockets are initialized as described in the 5.5.5.2 Initializing a Socket on page 71 .The same steps are detailed
below.
1. Initialize and allocate descriptor(s) in the main memory. The base address for descriptor allocation starts at 0x40000010.
In addition to specifying where the data buffer is located, each descriptor data structure must be configured properly with
its associated peripherals, sockets, and event/interrupt flags for both consumer and producer halves. If a list of descriptors
is used, descriptors can be chained with DSCR_CHAIN field of the descriptor structure. The DSCR_CHAIN specifies the
next descriptor number in the chain for both consumer and producer. A value of 0xFFFF terminates the descriptor chain.
2. Initialize sockets with SCK_xxx registers. In addition to specifying the associated descriptor (or top of the descriptor chain)
for the socket, these registers control how the socket behaves during the transfer, that is, ., interrupt/event generation and
current status of the socket.
3. Enable socket(s). Sockets can be enabled by writing the SCK_STATUS.go_enable bit. Once socket is enabled, it loads
the descriptor specified in SCK_DSCR register (top of descriptor chain) and starts the transfer accordingly.

5.6.1.1

Producer Half

When the socket for the producer half is enabled, it loads the descriptor specified in the SCK_DSCR register and makes it
active. With a valid buffer specified by the active descriptor, the socket goes to the active state and starts to fill the data buffer.
When the producer socket has filled the buffer, it updates the active descriptor associated with the buffer in main memory and
then sends a produce event to its peer consuming socket defined in the dscr_sync field of the descriptor structure along with
the descriptor number itself.
If there is a valid peripheral consumer socket specified in the descriptor, the producer notifies the consumer socket by writing
to the EVENT register in the consumer socket. The EVENT value will indicate the DMA descriptor that has been updated and
specify that a PRODUCE event is being sent.
If the descriptor does not specify a valid consumer socket, it is the firmware's responsibility to identify and work on the
descriptor that has been produced. The SCK_INTR_MASK.PRODUCE_EVENT bit can be set to enable notification of
produce events to the CPU through the DMA interrupt. The firmware can then take appropriate actions to use the data that
has been received.
The producer socket then loads the next descriptor in the chain and makes it active. If the descriptor indicates its buffer space
is not available, the socket goes to the stall state. When the buffer is available as indicated from the socket's EVENT register,
the socket becomes active again and starts to fill the buffer pointed by the active descriptor.
If a consume event is received for the current descriptor, the descriptor is either updated using data in the EVENT register or
reloaded from memory.
If no descriptor is available (next_dscr=0xFFFF), the socket goes to the suspend state.
A DMA transfer from a peripheral to the system memory involves only the producer half.

5.6.1.2

Consumer Half

Similar to the producer half, when the socket for the consumer half is enabled, it loads the descriptor specified in the
SCK_DSCR register and makes it active. If the consumer socket is enabled at the same time as the producer socket, most
likely the buffer is waiting to be filled by the producer and is not available for the consumer socket. In this case, the consumer
socket goes to the stall state and waits for the buffer to become available upon a produce event.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

75

When the buffer is available, it goes to the active state and starts consuming data in the buffer. When the consumer socket
has emptied a buffer, it updates the descriptor associated with the buffer in main memory and then sends a consume event to
its peer producer socket defined in the dscr_sync field of the descriptor structure, along with the descriptor number itself.
If the descriptor does not specify a valid producer socket, it is the firmware's responsibility to populate the data buffer in the
next descriptor in the descriptor chain. The SCK_INTR_MASK.CONSUME_EVENT bit can be set to enable notification of
consume events to the CPU through the DMA interrupt. The firmware can then take appropriate actions to populate the next
buffer.
The consumer socket then loads the next descriptor in the chain and makes it active. If the descriptor indicates its buffer
space is empty, the socket goes to the stall state. Until the buffer is filled as indicated from the socket's EVENT register, the
socket becomes active again and starts to empty the buffer pointed by the active descriptor.
If a produce event is received for the current descriptor, the descriptor is either updated using data from the event or reloaded
from memory.
If no descriptor is available (next_dscr=0xFFFF), the socket goes to the suspend state.
A DMA transfer from the system memory to a peripheral involves only the consumer half.

5.6.2

Peripheral to Peripheral Transfer

A DMA transfer from one peripheral to another peripheral involves both the producer and consumer halves. The sequence of
events for producer and consumer are identical to that when they are standalone, except when the producer half completes
the transfer, a produce event will be sent from the producer socket to the peer consumer socket to trigger the consumer half.
In this case, the whole peripheral to peripheral transfer can take place without CPU intervention in the transfer itself.
Figure 5-11 depicts the connection model used to describe peripheral to peripheral transfers. It also considers the software
drivers for the ingress and egress peripherals (that are mutually independent) and the higher level s/w that manages the
endpoint.
Figure 5-11. Peripheral - Peripheral DMA Transfer

76

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The example code shows how to setup transfers and process corresponding interrupts.
/* Summary:
A one shot dma setup and transfer function.
*/
CyFx3BootErrorCode_t
CyFx3BootUsbDmaXferData (
uint8_t epNum,
uint32_t address,
uint32_t length ,
uint32_t timeout
)
{
uint8_t direction = epNum & 0x80;
PSCK_T s;
uint16_t id, sc, ch;
PDSCR_T dscr = DSCR(0);
uint32_t size = length;
uint32_t *buf;
CyFx3BootErrorCode_t status;
if (((epNum & 0x0F) == 0) && (IsNewCtrlRqtReceived ()))
return CY_FX3_BOOT_ERROR_ABORTED;
buf = (uint32_t*)address;
if (direction)
s = (PSCK_T)&UIB->sck[epNum & 0x0F];
else
s = (PSCK_T)&UIBIN->sck[epNum & 0x0F];
/* Initializing socket */
id = ((uint32_t)s>>16) & 0x1f;
ch = ((uint32_t)s>>7) & 0x1f;
s->status = CY_U3P_LPP_SCK_STATUS_DEFAULT;

/* use bit16-20 to decode IP_NUM */
/* use bit7-11 to decode socket number */
/* Default SCK_STATUS register setting. Refer
SCK_STATUS register description */
/* checking if the socket is active */

while (s->status & CY_U3P_LPP_ENABLED)
__nop ();
s->status = CY_U3P_LPP_SCK_STATUS_DEFAULT | CY_U3P_LPP_UNIT; /* setting SCK_STATUS.unit
= 1*/
s->intr
= 0xFF;
/* clear all previous interrupt */
s->dscr
= DSCR_ADDR(dscr);
/* Loading the first descriptor (top of descriptor
chain) */
s->size
= 1;
s->count = 0;
dscr->buffer = (uint32_t)buf;
sc = (size & 0xf) ? (size & cSizeMask) + 0x10 : (size & cSizeMask);
if (sc == 0)
sc = 16;
if (direction) /* 1=TX: SYSMEM to device
*/
{
dscr->sync = ( (ch << CY_U3P_LPP_CONS_SCK_POS) | (id << CY_U3P_LPP_CONS_IP_POS) |
(CPU_SCK_NUM << CY_U3P_LPP_PROD_SCK_POS) | (CPU_IP_NUM <<
CY_U3P_LPP_PROD_IP_POS) |

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

77

(CY_U3P_LPP_EN_CONS_EVENT|CY_U3P_LPP_EN_CONS_INT)
|
(CY_U3P_LPP_EN_PROD_EVENT|CY_U3P_LPP_EN_PROD_INT)
);
dscr->size = ((size & (cTX_EN-1)) << CY_U3P_LPP_BYTE_COUNT_POS) | sc |
CY_U3P_LPP_BUFFER_OCCUPIED;
}
else
/* 0=RX: Device to SYSMEM
*/
{
dscr->sync = ( (CPU_SCK_NUM << CY_U3P_LPP_CONS_SCK_POS) | (CPU_IP_NUM <<
CY_U3P_LPP_CONS_IP_POS) |
(ch << CY_U3P_LPP_PROD_SCK_POS) | (id << CY_U3P_LPP_PROD_IP_POS) |
(CY_U3P_LPP_EN_CONS_EVENT|CY_U3P_LPP_EN_CONS_INT) |
(CY_U3P_LPP_EN_PROD_EVENT|CY_U3P_LPP_EN_PROD_INT)
);
dscr->size = sc;
}
dscr->chain = (0xFFFFFFFF);
s->status |= CY_U3P_LPP_GO_ENABLE;
status = CY_FX3_BOOT_ERROR_TIMEOUT;
do
{
if (s->intr & CY_U3P_LPP_ERROR)
{
status = CY_FX3_BOOT_ERROR_XFER_FAILURE;
break;
}
UsbDelayFunction (100);
if (direction)
{
if (s->intr & CY_U3P_LPP_CONSUME_EVENT)
{
status = CY_FX3_BOOT_SUCCESS;
break;
}
}
else
{
if (s->intr & CY_U3P_LPP_PRODUCE_EVENT)
{
status = CY_FX3_BOOT_SUCCESS;
break;
}
}
if ((timeout != CY_FX3_BOOT_NO_WAIT) && (timeout != CY_FX3_BOOT_WAIT_FOREVER))
{
timeout --;
}
if (((epNum & 0x0F) == 0) && (IsNewCtrlRqtReceived ()))
{
/* This request has been aborted due to a new control request. Just reset
the USB socket and return an error. */

78

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

s->status &= ~(CY_U3P_LPP_GO_ENABLE | CY_U3P_LPP_WRAPUP);
s->intr
= 0xFF;
while (s->status & CY_U3P_LPP_ENABLED)
__nop ();
/* Flush EP0-IN as well. */
UIB->eepm_endpoint[0] |= CY_U3P_UIB_SOCKET_FLUSH;
CyFx3BootBusyWait (10);
UIB->eepm_endpoint[0] &= ~CY_U3P_UIB_SOCKET_FLUSH;
status = CY_FX3_BOOT_ERROR_ABORTED;
break;
}
} while (timeout > 0);
return status;
}

5.7

CPU Intervention In Between Ingress and Egress

Although it is rarely needed, it is possible to interpose a CPU intervention in between an ingress and egress DMA adapter.
Conceptually, this means the CPU (the software component) acts as the consumer agent to the producing (ingress) adapter
and acts as the producer agent to the consuming (egress) adapter. This model is depicted in Figure 5-12.
Figure 5-12. CPU Intervention in DMA Transfer Path

This mode will have a significant negative performance impact on high-bandwidth transfers because the CPU gets into the
critical path of every buffer transferred. This mode should only be used to handle special case stream requirements or to
implement processing of the actual data by the CPU such as DSP applications.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

79

5.8

Concept of DMA Channels

A DMA channel is a software construct that encapsulates all of the DMA elements used (discussed so far in this chapter) in a
single data flow. The DMA manager in the FX3 firmware library introduces the notion of a DMA channel that encapsulates the
hardware resources such as sockets, buffers and descriptors used for handling a data flow through the device. The channel
concept is used to hide the complexity of configuring all of these resources in a consistent manner. The DMA manager
provides API functions that can be used to create data flows between any two interfaces on the FX3 device.
The DMA channel implementation where sockets can directly signal each other through events or can signal the FX3 CPU via
interrupts, when configured by firmware, is called automatic DMA channel. Alternatively, when there is CPU intervention as
explained in section DMA Features on page 61, it is called a manual DMA channel. For more details on DMA channels and
types of DMA channels supported, refer DMA Engine section in FX3 Programmer’s Manual.

80

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6. Universal Serial Bus (USB)

6.1

Introduction

USB is a successful peripheral interconnect defined and heavily adopted in consumer electronics and PC peripherals. The
first version of the specification, USB 1.0, released in 1996, defined two transfer speeds to address the different types of
devices available at that time: 1.5 Mbps (Low Speed) to address devices such as keyboards and joysticks; and 12 Mbps (Full
Speed) to address devices such as disk drives. The USB 2.0 specification, released in 2000, supports a maximum signaling
rate of 480 Mbps (High Speed), which is 40 times the signaling rate of Full Speed. With the introduction of USB OTG, USB
went beyond a peripheral interconnect. It enabled printers to use USB to directly connect to cameras and PDAs to use USBconnected keyboards and mice. The new generation USB 3.0 is the next revolution in device interconnect technology. It
features the same ease of use and flexibility that users expect, at a much higher (5-Gbps) data rate and advanced power
management.

6.2

Features

The FX3 USB subsystem features the following controllers to support many advanced features of the USB standard:
■

■

USB Interface Block (UIB)
❐

USB 3.0 function controller

❐

USB 2.0 function controller

❐

USB 2.0 embedded host controller

❐

USB 2.0 OTG controller

❐

USB charger detect controller

USB I/O system
❐

Dedicated USB 2.0 OTG PHY and USB 3.0 PHY

❐

Accessory Charger Adaptor (ACA) and integrated voltage regulator

The USB 3.0 and USB 2.0 subsystems have dedicated transceivers, but they share the same I/O interconnect in the back
end. This means that only one of the USB 3.0 or USB 2.0 controller can be active at a time.
The FX3 USB subsystem supports the following modes of operation:
■

USB 3.0 peripheral in SuperSpeed (5 Gbps)

■

USB 2.0 peripheral in High/Full Speed (480/12 Mbps, respectively)

■

USB 2.0 host in High/Full/Low Speed (480/12/1.5 Mbps respectively), with one downstream port; the hub is not supported

■

USB 2.0 OTG dual-role device (DRD), with Host Negotiation Protocol (HNP) and Session Request Protocol (SRP)
support

6.3

Block Diagram

Figure 6-1 shows the top-level block diagram of the FX3 USB subsystem.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

81

Figure 6-1. EZ-USB FX3 USB Subsystem
USB IO SYSTEM

USB 2.0 OTG PHY

EGRESS
END POINT
MANAGER

ADAPTER
INTERFACE
LAYER

DMA
ADAPTER #1

INGRESS
END POINT
MANAGER

ADAPTER
INTERFACE
LAYER

DMA
ADAPTER #2

SCHEDULER

TOKEN
PROCESSOR
TO KEN
PROCESSOR

SERIAL
INTERFACE
ENGI NE
SERIAL
INTERFACE
ENGI NE

USB2.0 PHY MUX

OTG
CONTROLLER
INTERRUPT/
CONFIG
REGISTERS

OTG

ID

DMA
AHB 2x64b
100MHz

USB2 OTG Host

LINK
LAYER

UTMI+
16b 30MHz

DM

UTMI

TX/RX

DP

480
MHz

30MHz

REFCLK
PLL

refclk
19. 2/26/
38.4/52
MHz

USB2 Device

EPM MUX

125MHz

SSC
REFCLK
PLL

TX-

PROTOCOL
LAYER

LINK
LAYER

TX+

USB Core

USB3 Device

PCS

SERDES

RX+
RX-

UIB
PIPE 3.0
32b 125MHz

10b
500MHz

USB 3.0 PHY

CHG DETECT
CONTROLLER

MMIO
AHB 32b
100MHz

ACA
2.5V
3.3V

Voltage
Regulator

VBUS
VBAT

6.4
6.4.1

Overview
USB Interface Block

The FX3 USB Interface Block (UIB) includes the following components:

6.4.2

USB 3.0 Function Controller

The USB 3.0 function controller implements both the link and protocol layers of the USB 3.0 specification.

6.4.3

USB 2.0 Function Controller

The USB 2.0 function controller implements the protocol layer of the USB 2.0 specification with an integrated serial interface
engine (SIE) and a token processor (TP).

6.4.4

USB 2.0 Embedded Host

The FX3 USB 2.0 embedded host is simpler than a full-featured PC-based controller. Embedded USB hosts are defined to
support a limited peripheral list and to operate with limited memory (compared to a PC). In essence, the host controller
functions like a device controller, with added scheduling capability to control and initiate data traffic on the bus. The USB 2.0
embedded host includes the following features:
■

82

EHCI-like interface in high-speed mode (EHCI is the PC-based Enhanced Host Controller Interface)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

OHCI-like interface in full- and low-speed modes (OHCI is the PC-based Open Host Controller Interface)

■

Support for point-to-point communications with one downstream port

■

Performance of all transaction scheduling in hardware

■

DMA adapter interface common to other FX3 peripherals

■

Fixed, one-to-one unidirectional endpoint to DMA socket mapping

■

Shared hardware endpoint managers (EPMs) among USB 2.0 device, USB 2.0 host, and USB 3.0 device controllers

6.4.5

USB OTG Controller

The FX3 USB subsystem is capable of supporting a USB 2.0 host, USB 2.0 peripheral, and a USB 3.0 peripheral. The FX3
OTG controller has global control of these functions. Dynamic role swapping is limited to USB 2.0 only by enabling the
appropriate USB 2.0 host or peripheral controller. The necessary control interface of the OTG controller facilitates:
■

Global control of the embedded host, and the USB 2.0 device function

■

Session Request Protocol (SRP) support per the OTG 2.0 specification

■

Host Negotiation Protocol (HNP) support per the OTG 2.0 specification

6.4.6

Charger Detect Controller

The FX3 charger detect controller provides a control interface to the USB Accessory Charger Adapter supporting:
■

EZ-Detect USB Battery Charging Revision 1.1

■

Selectable standard ACA mode or Motorola Enhanced Mini-USB mode

■

ID pin resistance value decoding

■

Car-kit pass through UART functionality

6.4.7

End-Point Memory

The end-point memory (EPM) supports data transfers through the USB 2.0 host controller, USB 2.0 function controller, and
USB 3.0 function controller blocks. It also supports the USB 3.0 bulk stream protocol. Two EPM units are available, dedicated
to each data direction.

6.4.8

DMA Adapters

The UIB has two dedicated DMA adapters that manage all DMA data flow in and out of the UIB block, one for each direction.
These DMA adapters are shared among the USB 3.0 device, USB 2.0 device, and USB 2.0 host controllers. Endpoint to DMA
socket mapping is fixed and unidirectional; that is, ingress endpoints 0 to 16 are mapped to UIB ingress DMA sockets 0 to 16,
and egress endpoints 0 to 16 are mapped to UIB DMA sockets 0 to 16. Hence the terms "socket" and "endpoint" are
interchangeable within the USB block. The DMA adapter is identical to those within other FX3 peripherals. Refer to the DMA
Subsystem chapter of this TRM to learn how the FX3 DMA works.

6.4.9
6.4.9.1

USB I/O System
USB 2.0 OTG PHY

Within USB 2.0 subsystems, FX3 has a USB 2.0 transceiver with a UTMI+ interface to the back-end, multiplexed between the
USB 2.0 function and USB 2.0 embedded host controllers. It contains the required transceiver and OTG functionality,
including:
■

Standard four-wire signaling (VBUS, D+, D-, GND)

■

USB 2.0 High-/Full-/Low-Speed data transmission rate

■

USB 2.0 test modes fully supported

■

VBUS sensing for connection detection

■

Sampling of the USB_ID input for detection of A-device or B-device connection

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

83

■

Charging and discharging of DP line for starting a session as B-device

6.4.9.2

USB 3.0 PHY

For USB 3.0, FX3 has a separate, dedicated USB 3.0 transceiver with a PIPE 3-compliant interface directly connected to the
back-end USB 3.0 function controller. It includes these features:
■

Dedicated, dual-simplex differential pairs for data transmit (SSTX+/-) and receive (SSRX+/-)

■

Sideband functionality (such as reset, wake) with Low Frequency Periodic Signaling (LFPS)

■

USB hot plug with receiver termination for connect/disconnect detection

■

5-Gbps SuperSpeed data transmission rate over 3-meter USB 3.0 cable

■

Integrated transmitter, receiver, spread-spectrum clock (SSC) generation, PLL and ESD protection

■

Full support for USB 3.0 test modes

6.5

UIB Top-Level Register Interface

FX3 features a common top-level register interface shared among all UIB functional blocks, as shown in the following code.
Some functional blocks may also have their own specific register interface, which is described in their respective sections.
/* FX3 UIB Top Level Register Interface */
#define UIB_BASE_ADDR
typedef struct
{
uvint32_t intr;
uvint32_t intr_mask;
uvint32_t rsrvd0[1024];
uvint32_t phy_clk_and_test;
uvint32_t reserved[2];
uvint32_t phy_chirp;
uvint32_t rsrvd1[250];
uvint32_t dev_cs;
uvint32_t dev_framecnt;
uvint32_t dev_pwr_cs;
uvint32_t dev_setupdat0;
uvint32_t dev_setupdat1;
uvint32_t dev_toggle;
uvint32_t dev_epi_cs[16];
uvint32_t dev_epi_xfer_cnt[16];
uvint32_t dev_epo_cs[16];
uvint32_t dev_epo_xfer_cnt[16];
uvint32_t dev_ctl_intr_mask;
uvint32_t dev_ctl_intr;
uvint32_t dev_ep_intr_mask;
uvint32_t dev_ep_intr;
uvint32_t rsrvd2[182];
uvint32_t chgdet_ctrl;
uvint32_t chgdet_intr;
uvint32_t chgdet_intr_mask;
uvint32_t otg_ctrl;
uvint32_t otg_intr;
uvint32_t otg_intr_mask;
uvint32_t otg_timer;
uvint32_t rsrvd3[249];
uvint32_t eepm_cs;

84

(0xe0030000)

/* 0xe0030000 */
/* 0xe0030004 */
/* 0xe0031008 */
/* 0xe0031014 */
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0031400
0xe0031404
0xe0031408
0xe003140c
0xe0031410
0xe0031414
0xe0031418
0xe0031458
0xe0031498
0xe00314d8
0xe0031518
0xe003151c
0xe0031520
0xe0031524

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

/*
/*
/*
/*
/*
/*
/*

0xe0031800
0xe0031804
0xe0031808
0xe003180c
0xe0031810
0xe0031814
0xe0031818

*/
*/
*/
*/
*/
*/
*/

/* 0xe0031c00 */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

uvint32_t iepm_cs;
uvint32_t iepm_mult;
uvint32_t rsrvd4[13];
uvint32_t eepm_endpoint[16];
uvint32_t iepm_endpoint[16];
uvint32_t iepm_fifo;
uvint32_t rsrvd5[207];
uvint32_t host_cs;
uvint32_t host_ep_intr;
uvint32_t host_ep_intr_mask;
uvint32_t host_toggle;
uvint32_t host_shdl_cs;
uvint32_t host_shdl_sleep;
uvint32_t host_resp_base;
uvint32_t host_resp_cs;
uvint32_t host_active_ep;
uvint32_t ohci_revision;
uvint32_t ohci_control;
uvint32_t ohci_command_status;
uvint32_t ohci_interrupt_status;
uvint32_t ohci_interrupt_enable;
uvint32_t ohci_interrupt_disable;
uvint32_t ohci_fm_interval;
uvint32_t ohci_fm_remaining;
uvint32_t ohci_fm_number;
uvint32_t ohci_periodic_start;
uvint32_t ohci_ls_threshold;
uvint32_t reserved1;
uvint32_t ohci_rh_port_status;
uvint32_t ohci_eof;
uvint32_t ehci_hccparams;
uvint32_t ehci_usbcmd;
uvint32_t ehci_usbsts;
uvint32_t ehci_usbintr;
uvint32_t ehci_frindex;
uvint32_t ehci_configflag;
uvint32_t ehci_portsc;
uvint32_t ehci_eof;
uvint32_t shdl_chng_type;
uvint32_t shdl_state_machine;
uvint32_t shdl_internal_status;
uvint32_t rsrvd6[222];
struct
{
uvint32_t shdl_ohci0;
uvint32_t shdl_ohci1;
uvint32_t shdl_ohci2;
} ohci_shdl[64];
uvint32_t rsrvd7[64];
struct
{
uvint32_t shdl_ehci0;
uvint32_t shdl_ehci1;
uvint32_t shdl_ehci2;
} ehci_shdl[64];
uvint32_t rsrvd8[5376];
uvint32_t id;
uvint32_t power;

/* 0xe0031c04 */
/* 0xe0031c08 */
/* 0xe0031c40 */
/* 0xe0031c80 */
/* 0xe0031cc0 */
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0032000
0xe0032004
0xe0032008
0xe003200c
0xe0032010
0xe0032014
0xe0032018
0xe003201c
0xe0032020
0xe0032024
0xe0032028
0xe003202c
0xe0032030
0xe0032034
0xe0032038
0xe003203c
0xe0032040
0xe0032044
0xe0032048
0xe003204c

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0032054
0xe0032058
0xe003205c
0xe0032060
0xe0032064
0xe0032068
0xe003206c
0xe0032070
0xe0032074
0xe0032078
0xe003207c
0xe0032080
0xe0032084

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

/* 0xe0032400 */
/* 0xe0032404 */
/* 0xe0032408 */

/* 0xe0032800 */
/* 0xe0032804 */
/* 0xe0032808 */

/* 0xe0037f00 */
/* 0xe0037f04 */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

85

uvint32_t rsrvd9[62];
struct
{
uvint32_t dscr;
uvint32_t size;
uvint32_t count;
uvint32_t status;
uvint32_t intr;
uvint32_t intr_mask;
uvint32_t rsrvd10[2];
uvint32_t dscr_buffer;
uvint32_t dscr_sync;
uvint32_t dscr_chain;
uvint32_t dscr_size;
uvint32_t rsrvd11[19];
uvint32_t event;
} sck[16];
uvint32_t rsrvd12[7616];
uvint32_t sck_intr0;
uvint32_t sck_intr1;
uvint32_t sck_intr2;
uvint32_t sck_intr3;
uvint32_t sck_intr4;
uvint32_t sck_intr5;
uvint32_t sck_intr6;
uvint32_t sck_intr7;
uvint32_t rsrvd13[56];
} UIB_REGS_T, *PUIB_REGS_T;
#define UIB

6.6

/*
/*
/*
/*
/*
/*

0xe0038000
0xe0038004
0xe0038008
0xe003800c
0xe0038010
0xe0038014

*/
*/
*/
*/
*/
*/

/*
/*
/*
/*

0xe0038020
0xe0038024
0xe0038028
0xe003802c

*/
*/
*/
*/

/* 0xe003807c */

/*
/*
/*
/*
/*
/*
/*
/*

0xe003ff00
0xe003ff04
0xe003ff08
0xe003ff0c
0xe003ff10
0xe003ff14
0xe003ff18
0xe003ff1c

*/
*/
*/
*/
*/
*/
*/
*/

((PUIB_REGS_T) UIB_BASE_ADDR)

USB Function Controllers

6.6.1

USB 3.0 Function

6.6.1.1

Clocking

There are five independent clock domains in the UIB block supporting the USB 3.0 function, as listed in Table 6-1.

Table 6-1. USB 3.0 Function Clocks
Domain

Typ Freq

Configuration Source

Description

dma_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.DMA_DIV

DMA access clock

mmio_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.MMIO_DIV

MMIO register access clock

uib_ssc_i

125 MHz

Driven from USB 3.0 PHY

USB 3.0 spread-spectrum clock

standby_clk_i

32 kHz

Always-on

Always-on clock for low-power modes

uib_ref_clk_i

19.2/26/38.4/52 MHz

External input clock

USB3.0 PHY reference clock

In addition, the EPM uses a clock, uib_epm_clk_i, that is 125 MHz when the USB 3.0 function controller is active. The
uib_epm_clk_i
configuration
source
is
from
GCTL_UIB_CORE_CLK.EPMCLK_SRC
and
enabled
by
GCTL_UIB_CORE_CLK.CLK_EN.

86

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6.6.1.2

Interrupt Requests

The UIB block has three global interrupt sources to the VIC, listed in Table 6-2, which are shared among USB 3.0, USB 2.0,
and OTG controllers.

Table 6-2. USB Global Interrupt Sources to VIC
Interrupt

VIC Line

Interrupt Source

Description

usbdma_int

8

UIB DMA sockets

UIB DMA interrupt

usbcore_int

9

USB 3.0 function, USB 2.0 function, USB 2.0 host, USB
2.0 OTG, charger detect, EPM

UIB core interrupt

usbep0_int

10

USB 3.0 device or USB 2.0 device

EP0 interrupt that is used only in device mode

UIB has a global interrupt register, UIB_INTR, which contains interrupt sources from the respective functional blocks (USB
3.0 function, USB 2.0 function, USB 2.0 host, USB 2.0 OTG, charger detect, EPM). The UIB core interrupt to VIC is the logical
OR of interrupt sources in UIB_INTR.
The USB 3.0 link layer interrupts are located in UIB_LNK_INTR. UIB_INTR.LNK_INT is the logical OR of the interrupt sources
in UIB_LNK_INTR.
USB 3.0 protocol layer interrupts are located in UIB_PROT_INTR. UIB_INTR.PROT_INT is the logical OR of the interrupt
sources in UIB_PROT_INTR.
USB 3.0 function endpoint interrupts are located in UIB_PROT_EP_INTR. UIB_INTR.PROT_EP_INT is the logical OR of the
interrupt sources in UIB_PROT_EP_INTR.

6.6.1.3

USB 3.0 Functional Description

The SuperSpeed bus is a layered communications architecture that comprises the following elements:
SuperSpeed interconnect: The SuperSpeed interconnect is the manner in which devices are connected to and communicate
with the host over the SuperSpeed bus. It includes the topology of devices connected to the bus, the communication layers,
the relationships between them, and how they interact to accomplish information exchanges between the host and devices.
Devices: Devices implement the required function end of SuperSpeed communication layers to provide a specific function of
the application, for example, a mass storage device. The terms "USB device" and "USB function" are interchangeable.
Host: The host implements the required host end of SuperSpeed communication layers to use the functions of the attached
devices. It owns the SuperSpeed data activity schedule and management of the SuperSpeed bus and all devices connected
to it.
As shown in Figure 6-2, the rows (device or host, protocol, link, physical) represent the communication layers of the
SuperSpeed interconnect, namely:
■

Physical (PHY) layer

■

Link layer

■

Protocol layer

■

The FX3 USB 3.0 function controller design follows the same basic SuperSpeed architecture.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

87

Figure 6-2. SuperSpeed (USB 3.0) Architecture

6.6.2

Physical Layer

The physical layer defines the PHY portion of the port and the physical connection between a downstream facing port (on a
host or hub) and an upstream facing port (on a device). The FX3 USB 3.0 function physical connection comprises two
differential data pairs, one transmit path and one receive path. The nominal signaling data rate is 5 Gbps. The electrical
aspects of each path are characterized as a transmitter, channel, and receiver; these collectively represent a unidirectional
differential link. Each differential link is AC-coupled with capacitors located on the transmitter side of the differential link. The
channel includes the electrical characteristics of the cables and connectors.
At an electrical level, each differential link is initialized by enabling its receiver termination. The transmitter is responsible for
detecting the far-end receiver termination as an indication of a bus connection and informing the link layer so the connect
status can be factored into link operation and management. When receiver termination is present but no signaling is occurring
on the differential link, it is considered to be in the electrical idle state. In this state, LFPS is used to signal initialization and
power management information. The LFPS is relatively simple to generate and detect and uses very little power.
FX3 USB 3.0 PHY has its own clock domain with Spread Spectrum Clock (SSC) modulation. The USB 3.0 cable does not
include a reference clock, so the clock domains on each end of the physical connection are not directly connected. Bit-level
timing synchronization relies on the local receiver aligning its bit recovery clock to the remote transmitter's clock by phaselocking to the signal transitions in the received bit stream. The receiver needs enough transitions to reliably recover clock and
data from the bit stream. To assure that adequate transitions occur in the bit stream independent of the data content being
transmitted, the transmitter encodes data and control characters into symbols using an 8b/10b code. Control symbols are
used to achieve byte alignment and are used for framing data and managing the link. Special characteristics make control
symbols uniquely identifiable from data symbols.
The signal (timing, jitter tolerance, and so on) and electrical (DC characteristics, channel capacitance, and so on.)
performance of SuperSpeed links is defined with compliance requirements specified in terms of transmit and receive signaling
eye diagrams. The FX3 USB 3.0 function physical layer receives 8-bit data from the link layer and scrambles the data to
reduce EMI emissions. It then encodes the scrambled 8-bit data into 10-bit symbols for transmission over the physical
connection. The resultant data is sent at a rate that includes spread spectrum to further lower the EMI emissions. The bit
stream is recovered from the differential link by the receiver, assembled into 10-bit symbols, and decoded and descrambled,
producing 8-bit data that is then sent to the link layer for further processing.

88

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

FX3 PHY carries out the physical layer control settings and operations via the PHY register interface, which is combined with
the link layer register interface for easy firmware implementation.

6.6.3

Link Layer

A SuperSpeed link is a logical and physical connection of two ports. The connected ports are called "link partners." A port has
a physical part and a logical part. The FX3 USB 3.0 function link layer defines the logical portion of a port and the
communications between link partners.
The logical portion of a port contains:
■

State machines for managing its end of the physical connection. These include physical layer initialization and event
management, that is, connect, removal, and power management.

■

State machines and buffering for managing information exchanges with the link partner. It implements protocols for flow
control, reliable delivery (port to port) of packet headers, and link power management.

■

Buffering for data and protocol layer information elements.

The logical portion of a port does the following:
■

Provides the correct framing of sequences of bytes into packets during transmission; for example, insertion of packet
delimiters

■

Detects received packets, including packet delimiters and error checks of received header packets (for reliable delivery)

■

Provides an appropriate interface to the protocol layer for pass-through of protocol-layer packet information exchanges

The FX3 USB 3.0 function physical layer provides the logical port with an interface through which it can do the following:
■

Manage the state of its PHY (that is, its end of the physical connection), including power management and events
(connection, removal, and wake).

■

Transmit and receive byte streams, with additional signals that qualify the byte stream as control sequences or data. The
physical layer includes discrete transmit and receive physical links; therefore, a port can simultaneously transmit and
receive control and data information.

The FX3 USB 3.0 function controller has a unified register interface for physical and link layers as in the following code. The
register level programming is managed by the USB driver block in the FX3 SDK.
/* FX3 USB 3.0 Function Physical Layer and Link Layer Register Interface */
#define USB3LNK_BASE_ADDR
typedef struct
{
uvint32_t lnk_conf;
uvint32_t lnk_intr;
uvint32_t lnk_intr_mask;
uvint32_t lnk_error_conf;
uvint32_t lnk_error_status;
uvint32_t lnk_error_count;
uvint32_t lnk_error_count_threshold;
uvint32_t lnk_phy_conf;
uvint32_t reserved0[3];
uvint32_t lnk_phy_mpll_status;
uvint32_t reserved1[3];
uvint32_t lnk_phy_tx_trim;
uvint32_t lnk_phy_error_conf;
uvint32_t lnk_phy_error_status;
uvint32_t reserved2[2];
uvint32_t lnk_device_power_control;
uvint32_t lnk_ltssm_state;

(0xe0033000)

/*
/*
/*
/*
/*
/*
/*
/*

0xe0033000
0xe0033004
0xe0033008
0xe003300c
0xe0033010
0xe0033014
0xe0033018
0xe003301c

*/
*/
*/
*/
*/
*/
*/
*/

/* 0xe003302c */
/* 0xe003303c */
/* 0xe0033040 */
/* 0xe0033044 */
/* 0xe0033050 */
/* 0xe0033054 */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

89

uvint32_t reserved3[3];
uvint32_t lnk_lfps_observe;
uvint32_t reserved4[52];
uvint32_t lnk_compliance_pattern_0;
uvint32_t lnk_compliance_pattern_1;
uvint32_t lnk_compliance_pattern_2;
uvint32_t lnk_compliance_pattern_3;
uvint32_t lnk_compliance_pattern_4;
uvint32_t lnk_compliance_pattern_5;
uvint32_t lnk_compliance_pattern_6;
uvint32_t lnk_compliance_pattern_7;
uvint32_t lnk_compliance_pattern_8;
} USB3LNK_REGS_T, *PUSB3LNK_REGS_T;
#define USB3LNK

6.6.4

/* 0xe0033064 */
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0033138
0xe003313c
0xe0033140
0xe0033144
0xe0033148
0xe003314c
0xe0033150
0xe0033154
0xe0033158

*/
*/
*/
*/
*/
*/
*/
*/
*/

((PUSB3LNK_REGS_T) USB3LNK_BASE_ADDR)

Protocol Layer

The FX3 USB 3.0 function protocol layer defines the "end-to-end" communication rules between a host and device. The
SuperSpeed protocol provides for application data information exchanges between a host and a device endpoint. This
communications relationship is called a "pipe." It is a host-directed protocol, which means the host determines when
application data is transferred between the host and the device. SuperSpeed is not a polled protocol, as a device can
asynchronously request service from the host on behalf of a particular endpoint.
All protocol layer communications are accomplished via the exchange of packets. Packets are sequences of data bytes with
specific control sequences that serve as delimiters managed by the link layer. Unlike USB 2.0 which uses a broadcast
mechanism, host-transmitted protocol packets are routed through intervening hubs directly to a peripheral device. A
peripheral device considers itself that targeted by any protocol layer packet it receives. Device transmitted protocol packets
simply flow upstream through hubs to the host.
Packet headers are the building blocks of the protocol layer. They are fixed-size packets with type and subtype field
encodings for specific purposes. A small record within a packet header is utilized by the link layer (port to port) to manage the
flow of the packet from port to port. Packet headers are delivered through the link layer (port to port) reliably. The remaining
fields are utilized by the end-to-end protocol.
Application data is transmitted within data packet payloads, which are preceded (in the protocol) by specifically encoded data
packet headers. Data packet payloads are not delivered reliably through the link layer (however, the accompanying data
packet headers are delivered reliably). The protocol layer supports the reliable delivery of data packets via explicit
acknowledgement (header) packets and the retransmission of lost or corrupt data. Not all data information exchanges utilize
data acknowledgements.
Data may be transmitted in bursts of back-to-back sequences of data packets (depending on the scheduling by the host). The
protocol allows efficient bus utilization by concurrently transmitting and receiving over the link. For example, a transmitter
(host or device) can burst multiple packets of data back to back, while the receiver can transmit data acknowledgements
without interrupting the burst of data packets. The number of data packets in a specific burst is scheduled by the host.
Furthermore, a host may simultaneously schedule multiple OUT bursts to be active at the same time as an IN burst.
The protocol provides flow control support for some transfer types. A device-initiated flow control is signaled by a device via a
defined protocol packet. A host-initiated flow control event is realized via the host schedule (host will simply not schedule
information flows for a pipe unless it has data or buffering available). On receipt of a flow control event, the host removes the
pipe from its schedule. Resumption of scheduling information flows for a pipe may be initiated by the host or device. A device
endpoint notifies a host of its readiness (to source or sink data) via an asynchronously transmitted "ready" packet. On receipt
of the "ready" notification, the host adds the pipe to its schedule, assuming that it still has data or buffering available.
Independent information streams can be explicitly delineated and multiplexed on the bulk transfer type. This means that
through a single pipe instance, more than one data stream can be tagged by the source and identified by the sink. The
protocol provides for the device to direct which data stream is active on the pipe.

90

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Devices may asynchronously transmit notifications to the host. These notifications are used to convey a change in the device
state. A host transmits a special packet header to the bus that includes the host's timestamp. The value in this packet is used
to keep devices in synchronization with the host. In contrast to other packet types, the timestamp packet is forwarded down all
paths not in a low-power state. The timestamp packet transmission is scheduled by the host at a specification-determined
period.
The FX3 USB 3.0 function controller has a dedicated register interface for the protocol layer as shown in the following code.
The register level programming and the interrupt handling is performed by the USB driver in the FX3 SDK.
/* FX3 USB 3.0 Function Protocol Layer Register Interface */
#define USB3PROT_BASE_ADDR
typedef struct
{
uvint32_t prot_cs;
uvint32_t prot_intr;
uvint32_t prot_intr_mask;
uvint32_t reserved0[3];
uvint32_t prot_lmp_port_capability_timer;
uvint32_t prot_lmp_port_configuration_timer;
uvint32_t reserved1[2];
uvint32_t prot_framecnt;
uvint32_t reserved2;
uvint32_t prot_itp_time;
uvint32_t prot_itp_timestamp;
uvint32_t prot_setupdat0;
uvint32_t prot_setupdat1;
uvint32_t prot_seq_num;
uvint32_t reserved3[6];
uvint32_t prot_lmp_received;
uvint32_t reserved4[5];
uvint32_t prot_ep_intr;
uvint32_t prot_ep_intr_mask;
uvint32_t rsrvd0[33];
uvint32_t prot_epi_cs1[16];
uvint32_t prot_epi_cs2[16];
uvint32_t prot_epi_unmapped_stream[16];
uvint32_t prot_epi_mapped_stream[16];
uvint32_t prot_epo_cs1[16];
uvint32_t prot_epo_cs2[16];
uvint32_t prot_epo_unmapped_stream[16];
uvint32_t prot_epo_mapped_stream[16];
uvint32_t prot_stream_error_disable;
uvint32_t prot_stream_error_status;
} USB3PROT_REGS_T, *PUSB3PROT_REGS_T;
#define USB3PROT

(0xe0033400)

/* 0xe0033400 */
/* 0xe0033404 */
/* 0xe0033408 */
/* 0xe0033418 */
/* 0xe003341c */
/* 0xe0033428 */
/*
/*
/*
/*
/*

0xe0033430
0xe0033434
0xe0033438
0xe003343c
0xe0033440

*/
*/
*/
*/
*/

/* 0xe003345c */
/* 0xe0033474 */
/* 0xe0033478 */
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0033500
0xe0033540
0xe0033580
0xe00335c0
0xe0033600
0xe0033640
0xe0033680
0xe00336c0
0xe0033700
0xe0033704

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

((PUSB3PROT_REGS_T) USB3PROT_BASE_ADDR)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

91

6.7

USB 2.0 Function

6.7.1

Clocking

There are five independent clock domains in the UIB block supporting the USB 2.0 function, as listed in Table 6-3.

Table 6-3. USB 2.0 Function Clocks
Domain

Typ Freq

Configuration Source

Description

dma_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.DMA_DIV

DMA access clock

mmio_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.MMIO_DIV

MMIO register access clock

uib_sieclock_i

30 MHz

Driven from USB 2.0 OTG PHY

USB 2.0 serial interface engine clock

standby_clk_i

32 kHz

Always-on

Always-on clock for low-power modes

uib_ref_clk_i

19.2/26/38.4/52 MHz

External input clock

USB 2.0 PHY reference clock

In addition, the EPM uses a clock uib_epm_clk_i that is 100 MHz when the USB 2.0 function controller is active. The
uib_epm_clk_i
configuration
source
is
from
GCTL_UIB_CORE_CLK.EPMCLK_SRC
and
enabled
by
GCTL_UIB_CORE_CLK.CLK_EN.

6.7.2

Interrupt Requests

The UIB block has three global interrupt sources to the VIC, listed in Table 6-2, which are shared among USB 3.0, USB 2.0
and OTG controllers.
UIB has a global interrupt register, UIB_INTR, which contains interrupt sources from the respective functional blocks (USB
3.0 function, USB 2.0 function, USB 2.0 host, USB 2.0 OTG, charger detect, EPM). The UIB core interrupt to VIC is the logical
OR of interrupt sources in UIB_INTR.
USB 2.0 function controller interrupts are located in UIB_DEV_CTL_INTR. UIB_INTR.DEV_CTL_INT is the logical OR of the
interrupt sources in UIB_DEV_CTL_INTR.
USB 2.0 function endpoint interrupts are located in UIB_DEV_EP_INTR. UIB_INTR.DEV_EP_INT is the logical OR of the
interrupt sources in UIB_DEV_EP_INTR.

6.7.3

USB 2.0 Functional Description

The USB 2.0 function controller hardware includes an a Serial Interface Engine (SIE) and Token Processor (TP). It does the
following:
■

Handles the handshake between the endpoint and the host device

■

Generates an interrupt when valid data packets are received

■

Generates an interrupt when an error in transmission occurs

■

Moves valid data to/from the endpoint

■

Handles all the bit stuffing required

6.7.3.1

Serial Interface Engine

The SIE is responsible for handling the USB traffic at the byte-level and for detecting the suspend, reset, and resume USB
bus states. It parses the traffic, decoding the types of packets that have been received and translating the packet types into
bytes for transmission back to the host on the USB bus.

6.7.3.2

Token Processor

The TP handles most of the protocol described in chapter 8 of the USB specification. It receives the USB basic protocol
commands from the host and generates the appropriate sequence of responses by synchronizing the frame timer, receiving/

92

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

transmitting data, or receiving/transmitting handshake responses to the commands themselves. It does all of this based on
the information provided by the SIE, which is responsible for decoding the bytes into those commands.

6.7.4

USB 2.0 Function Registers

The FX3 USB 2.0 function registers can be accessed directly from the UIB top-level register interface. These registers are
shown below and are programmed by the USB driver in the FX3 SDK.
/* FX3 USB 2.0 Function Register Interface */
/* These definitions extracted from the Top Level UIB register interface */
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t
uvint32_t

6.7.5

phy_clk_and_test;
phy_chirp;
dev_cs;
dev_framecnt;
dev_pwr_cs;
dev_setupdat0;
dev_setupdat1;
dev_toggle;
dev_epi_cs[16];
dev_epi_xfer_cnt[16];
dev_epo_cs[16];
dev_epo_xfer_cnt[16];
dev_ctl_intr_mask;
dev_ctl_intr;
dev_ep_intr_mask;
dev_ep_intr;

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0031008
0xe0031014
0xe0031400
0xe0031404
0xe0031408
0xe003140c
0xe0031410
0xe0031414
0xe0031418
0xe0031458
0xe0031498
0xe00314d8
0xe0031518
0xe003151c
0xe0031520
0xe0031524

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

USB Reset

USB 2.0 reset is detected by the SIE and is reported to the TP. The URESET bit in the DEV_CTL_INTR register is set, and
the corresponding interrupt is generated (if not masked).

6.7.6

USB Suspend

USB 2.0 suspend is detected by the SIE and is reported to the TP. The SUSP bit in the DEV_CTL_INTR register is set, and
the corresponding interrupt is generated (if not masked).

6.7.7

USB Resume

USB 2.0 resume is detected by the SIE and is reported to the TP. The SUSP bit in the DEV_CTL_INTR register is cleared,
and the corresponding interrupt is generated (if not masked). A resume by the device is generated by the firmware, setting
the SIGRSUME bit in the PWR_CS register. The firmware must also clear this bit to end the resume signaling.

6.7.8

Start of Frame

Start of frame (SOF) timer packets are received by the SIE and reported to the TP. The SOF bit in the UIB_DEV_CTL_INTR
register is set, and the corresponding interrupt is generated (if not masked). The frame number is stored in the FRAMECNT
register. The SIE is capable to generating synthetic SOF notifications to replace any SOF packets that get lost. The feature
can be controlled using the NOSYNSOF bit in the DEV_PWR_CS register.

6.7.9

SETUP Packet

SETUP packets (to endpoint 0) are received by the SIE and reported to the TP. The SETUP data is stored in registers
DEV_SETUPDAT0 and DEV_SETUPDAT0 1. The SUDAV bit in the DEV_CTL_INTR register is set, as is the SUTOK bit if the

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

93

packet is received correctly, and their corresponding interrupts are generated if not masked. Upon receipt of a SetAddress
command from the host, the DEV_CS register field DEVICEADDR is updated with the new device address.

6.7.10

IN Packet

IN packets are received by the SIE and reported to the TP, which generates the appropriate responses to the SIE and
updates the corresponding DEV_EPO_CS register for the endpoint to which the packet was sent.

6.7.11

OUT Packet

OUT packets are received by the SIE and reported to the TP, which generates the appropriate responses to the SIE and
updates the corresponding DEV_EPO_CS register for the endpoint to which the packet was sent.

6.8

USB 3.0 and USB 2.0 Function Coordination

When the FX3 is functioning as a USB device, the USB 3.0 PHY or the USB 2.0 PHY needs to be turned on based on the
capabilities of the USB host to which FX3 is connected. The USB 3.0 specification requires that only one of the PHY layers be
operational at most times during the USB device operation. The exception to this rule is a small time window in which the
device is attempting to move from USB 2.0 mode to USB 3.0 mode. The firmware application on FX3 is responsible for
identifying the host capabilities and setting the USB connection accordingly. The following procedure should be used by the
FX3 firmware for USB connection negotiation:
1. Wait for a valid VBus voltage (GCTL_IOPWR interrupt).
2. Turn on the USB 3.0 PHY to start 3.0 receiver detection.
a. If receiver detection succeeds, the LNK_LTSSM_CONNECT interrupt will be received. If this interrupt is received, the
device will proceed with enumeration in USB 3.0 mode.
3. If receiver detection fails, the LNK_LTSSM_DISCONNECT interrupt will be received. If this interrupt is received:
a. Turn off USB 3.0 PHY and turn on USB 2.0 PHY.
b. A USB 2.0 bus reset will be received as part of USB 2.0 connection startup.
c. The 3.0 PHY should be re-enabled on receiving the URESET interrupt that is triggered on a 2.0 bus reset. Both the 2.0
and 3.0 PHYs will be active at this time.
d. If the 3.0 receiver detection succeeds (LNK_LTSSM_CONNECT):
i.Turn off the USB 2.0 PHY.
ii.Proceed with enumeration as a USB 3.0 device.
e. If the 3.0 receiver detection fails (LNK_LTSSM_DISCONNECT):
i.Turn off the USB 3.0 PHY.
ii.Check number of times that 3.0 receiver detection has failed. If this count is greater than 3:
4. Proceed with enumeration as a USB 2.0 device.
5. There is no need to attempt 3.0 enumeration on any further bus resets.
Any PHYs that are enabled need to be disabled when the VBus voltage is removed. The entire previous procedure needs to
be repeated when valid VBus is detected again.
Note that USB 3.0 PHY on the FX3 needs to be turned off when VBus is removed or a host disconnect is discovered by other
means. If the 3.0 PHY is left turned on, the 3.0 link startup is liable to fail when connected again to the host.

94

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6.9

USB Function Programming Model

6.9.1

USB 3.0 Initialization

Before USB 3.0 is operational, the function controller needs to be initialized. The following code example from the FX3 SDK
implements the UIB initialization sequence for the USB 3.0 function.
static void
CyU3PUibInit (
void)
{
uint8_t ep = 0;
/* Enable the Power regulators*/
GCTLAON->wakeup_en
= 0;
GCTLAON->wakeup_polarity = 0;
/* Link_phy_conf enable Rx terminations */
USB3LNK->lnk_phy_conf
= 0xE0000001;
USB3LNK->lnk_error_conf = 0xFFFFFFFF;
USB3LNK->lnk_intr
= 0xFFFFFFFF;
USB3LNK->lnk_intr_mask = CY_U3P_UIB_LGO_U3 | CY_U3P_UIB_LTSSM_CONNECT |
CY_U3P_UIB_LTSSM_DISCONNECT | CY_U3P_UIB_LTSSM_RESET | CY_U3P_UIB_LTSSM_STATE_CHG;
USB3PROT->prot_ep_intr_mask = 0;
USB3PROT->prot_intr
= 0xFFFFFFFF;
USB3PROT->prot_intr_mask
= (CY_U3P_UIB_STATUS_STAGE |
CY_U3P_UIB_SUTOK_EN | CY_U3P_UIB_EP0_STALLED_EN |
CY_U3P_UIB_TIMEOUT_PORT_CAP_EN | CY_U3P_UIB_TIMEOUT_PORT_CFG_EN |
CY_U3P_UIB_LMP_RCV_EN |
CY_U3P_UIB_LMP_PORT_CAP_EN | CY_U3P_UIB_LMP_PORT_CFG_EN);

/* Disable all EPs except EP0 */
for (ep = 1; ep < 16; ep++)
{
UIB->dev_epo_cs[ep] &= ~CY_U3P_UIB_EPO_VALID;
USB3PROT->prot_epo_cs1[ep] = 0;
UIB->dev_epi_cs[ep] &= ~CY_U3P_UIB_EPI_VALID;
USB3PROT->prot_epi_cs1[ep] = 0;
}
/* Disable all UIB interrupts at this stage. */
UIB->intr_mask &= ~(CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT | CY_U3P_UIB_LNK_INT
|
CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
/* Enable the Vbus detection interrupt at this stage. */
GCTL->iopwr_intr
= 0xFFFFFFFF;
GCTL->iopwr_intr_mask = CY_U3P_VBUS;
CyU3PVicEnableInt (CY_U3P_VIC_GCTL_PWR_VECTOR);
}

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

95

6.9.2

USB 3.0 Enable

Once the USB 3.0 function controller is initialized, it needs to be enabled. The following code snippet from the FX3 SDK
implements the sequence to enable the USB 3.0 function controller.
static void
CyU3PUsbEnableUsb3 (
void)
{
UIB->intr_mask &= ~(CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT |
CY_U3P_UIB_LNK_INT | CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
/* Make sure that all relevant USB 3.0 interrupts are enabled. */
USB3LNK->lnk_intr = 0xFFFFFFFF;
USB3LNK->lnk_intr_mask = CY_U3P_UIB_LGO_U3 |
CY_U3P_UIB_LTSSM_CONNECT | CY_U3P_UIB_LTSSM_DISCONNECT | CY_U3P_UIB_LTSSM_RESET |
CY_U3P_UIB_LTSSM_STATE_CHG;
USB3PROT->prot_intr = 0xFFFFFFFF;
USB3PROT->prot_intr_mask = (CY_U3P_UIB_STATUS_STAGE | CY_U3P_UIB_SUTOK_EN |
CY_U3P_UIB_EP0_STALLED_EN |
CY_U3P_UIB_TIMEOUT_PORT_CAP_EN | CY_U3P_UIB_TIMEOUT_PORT_CFG_EN |
CY_U3P_UIB_LMP_RCV_EN |
CY_U3P_UIB_LMP_PORT_CAP_EN | CY_U3P_UIB_LMP_PORT_CFG_EN);
/* Set port config and capability timers to their initial values. */
USB3PROT->prot_lmp_port_capability_timer
= CY_U3P_UIB_PROT_LMP_PORT_CAP_TIMER_VALUE;
USB3PROT->prot_lmp_port_configuration_timer = CY_U3P_UIB_PROT_LMP_PORT_CFG_TIMER_VALUE;
/* Turn on AUTO response to LGO_U3 command from host. */
USB3LNK->lnk_compliance_pattern_8 |= CY_U3P_UIB_LFPS;
USB3LNK->lnk_phy_conf = 0xE0000001;
CyU3PSetUsbCoreClock (1, 0);
CyU3PBusyWait (10);
/* Force LTSSM into SS.Disabled state for 100us after the PHY is turned on. */
USB3LNK->lnk_ltssm_state = (CY_U3P_UIB_LNK_STATE_SSDISABLED <<
CY_U3P_UIB_LTSSM_OVERRIDE_VALUE_POS) |
CY_U3P_UIB_LTSSM_OVERRIDE_EN;
UIB->otg_ctrl |= CY_U3P_UIB_SSDEV_ENABLE;
CyU3PBusyWait (100);
USB3LNK->lnk_ltssm_state &= ~CY_U3P_UIB_LTSSM_OVERRIDE_EN;
USB3LNK->lnk_conf = (USB3LNK->lnk_conf & ~CY_U3P_UIB_EPM_FIRST_DELAY_MASK) |
(12 << CY_U3P_UIB_EPM_FIRST_DELAY_POS) | CY_U3P_UIB_LDN_DETECTION;
USB3LNK->lnk_phy_mpll_status
= 0x00310018 | CY_U3P_UIB_SSC_EN;
CyFx3UsbWritePhyReg (0x0030, 0x00C0);
CyU3PBusyWait (20);
UIB->intr_mask |= (CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT |
CY_U3P_UIB_LNK_INT | CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
}

96

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6.9.3

USB 3.0 Fallback to USB 2.0

When the USB 3.0 termination detection or link training fails, the FX3 UIB can fall back to USB 2.0 mode. The following
function implements this fallback mechanism.
static void
CyU3PUsbFallBackToUsb2 (
void)
{
CyFx3UsbWritePhyReg (0x1005, 0x0000);
/* Force the link state machine into SS.Disabled. */
USB3LNK->lnk_ltssm_state = (CY_U3P_UIB_LNK_STATE_SSDISABLED <<
CY_U3P_UIB_LTSSM_OVERRIDE_VALUE_POS) |
CY_U3P_UIB_LTSSM_OVERRIDE_EN;
/* Keep track of the number of times the 3.0 link training has failed. */
glUibDeviceInfo.tDisabledCount++;
/* Change EPM config to full speed */
CyU3PBusyWait (2);
CyU3PSetUsbCoreClock (2, 2);
CyU3PBusyWait (2);
/* Switch the
UIB->otg_ctrl
CyU3PBusyWait
UIB->otg_ctrl

EPM to USB 2.0 mode, turn off USB 3.0 PHY and remove Rx Termination. */
&= ~CY_U3P_UIB_SSDEV_ENABLE;
(2);
&= ~CY_U3P_UIB_SSEPM_ENABLE;

UIB->intr_mask &= ~(CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT | CY_U3P_UIB_LNK_INT
|
CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
USB3LNK->lnk_phy_conf
&= 0x1FFFFFFF;
USB3LNK->lnk_phy_mpll_status = glUsbMpllDefault;
/* Power cycle the PHY blocks. */
GCTLAON->control &= ~CY_U3P_GCTL_USB_POWER_EN;
CyU3PBusyWait (5);
GCTLAON->control |= CY_U3P_GCTL_USB_POWER_EN;
CyU3PBusyWait (10);
/* Clear USB 2.0 interrupts. */
UIB->dev_ctl_intr = 0xFFFFFFFF;
UIB->dev_ep_intr = 0xFFFFFFFF;
UIB->otg_intr
= 0xFFFFFFFF;
/* Reset the EP-0 DMA channels. */
CyU3PDmaChannelReset (&glUibChHandle);
CyU3PDmaChannelReset (&glUibChHandleOut);
/* Clear and disable USB
USB3LNK->lnk_intr_mask
USB3LNK->lnk_intr
USB3PROT->prot_intr_mask
USB3PROT->prot_intr

3.0 interrupts. */
= 0x00000000;
= 0xFFFFFFFF;
= 0x00000000;
= 0xFFFFFFFF;

UIB->intr_mask |= (CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT |

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

97

CY_U3P_UIB_LNK_INT | CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
/* Disable EP0-IN and EP0-OUT (USB-2). */
UIB->dev_epi_cs[0] &= ~CY_U3P_UIB_EPI_VALID;
UIB->dev_epo_cs[0] &= ~CY_U3P_UIB_EPO_VALID;
glUibDeviceInfo.usbSpeed = CY_U3P_FULL_SPEED;
glUibDeviceInfo.isLpmDisabled = CyFalse;
UIB->ehci_portsc = CY_U3P_UIB_WKOC_E;
/* Enable USB 2.0 PHY. */
CyU3PBusyWait (2);
UIB->otg_ctrl |= CY_U3P_UIB_DEV_ENABLE;
CyU3PBusyWait (100);
CyFx3Usb2PhySetup ();
UIB->phy_clk_and_test = (CY_U3P_UIB_DATABUS16_8 | CY_U3P_UIB_VLOAD |
CY_U3P_UIB_SUSPEND_N |
CY_U3P_UIB_EN_SWITCH);
CyU3PBusyWait (80);
CyU3PSetUsbCoreClock (2, 0);
/* For USB 2.0 connections, enable pull-up on D+ pin. */
CyU3PConnectUsbPins ();
}

6.9.4

USB Reset

The following code example implements the USB 3.0 reset handler to handle the USB reset event. The USB 3.0 reset event
is detected by the LTSSM_RESET bit of the LNK_INTR link layer interrupt register.
void CyU3PUsbSSReset(void)
{
uint8_t ep = 0;
/* Reset the EPM mux. */
UIB->iepm_cs |= (CY_U3P_UIB_EPM_FLUSH | CY_U3P_UIB_EPM_MUX_RESET);
CyU3PBusyWait (1);
UIB->iepm_cs &= ~(CY_U3P_UIB_EPM_FLUSH | CY_U3P_UIB_EPM_MUX_RESET);
CyU3PBusyWait (1);
CyU3PUsbFlushEp (0x00);
CyU3PUsbFlushEp (0x80);
/* Enable USB 3.0 control eps. */
USB3PROT->prot_epi_cs1[0] |= CY_U3P_UIB_SSEPI_VALID;
UIB->eepm_endpoint[0] = 0x200;
/* Control EP transfer size is 512
bytes. */
USB3PROT->prot_epo_cs1[0] |= CY_U3P_UIB_SSEPO_VALID;
UIB->iepm_endpoint[0] = 0x200;
/* Control EP transfer size is 512
bytes. */
CyU3PUsbResetEp
CyU3PUsbFlushEp
CyU3PUsbResetEp
CyU3PUsbFlushEp

98

(0x00);
(0x00);
(0x80);
(0x80);

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

UIB->eepm_endpoint[0] = 0x200;
bytes. */
UIB->iepm_endpoint[0] = 0x200;
bytes. */

/* Control EP transfer size is 512
/* Control EP transfer size is 512

for (ep = 1; ep < 16; ep++)
{
/* Reset, flush and clear stall condition on all valid endpoints. */
if (glPcktSizeIn[ep].valid == CyTrue)
{
CyU3PUsbFlushEp (ep | 0x80);
CyU3PUsbStall (ep | 0x80, CyFalse, CyTrue);
}
if (glPcktSizeOut[ep].valid == CyTrue)
{
CyU3PUsbFlushEp (ep);
CyU3PUsbStall (ep, CyFalse, CyTrue);
}
}
}

6.9.5

USB Connect

The following code example implements the USB connect handler to handle the USB connect event. This event is detected
by the LTSSM_CONNECT bit of the LNK_INTR link layer interrupt register.
void CyU3PUsbSSConnecthandler (void)
{
uint32_t state;
uint32_t glUsb3TxTrimVal = 0x0B569011;
/* hardware specific setting for USB 3.0 Phy */
USB3LNK->lnk_phy_tx_trim = glUsb3TxTrimVal;
CyFx3UsbWritePhyReg (0x1006, 0x180);
CyFx3UsbWritePhyReg (0x1024, 0x0080);
/* If USB 2.0 PHY is enabled, switch it off and take out the USB 2.0 pullup. */
if (UIB->otg_ctrl & CY_U3P_UIB_DEV_ENABLE)
{
state = USB3LNK->lnk_ltssm_state & CY_U3P_UIB_LTSSM_STATE_MASK;
while ((UIB->otg_ctrl & CY_U3P_UIB_SSDEV_ENABLE)
&& (state == CY_U3P_UIB_LNK_STATE_POLLING_LFPS))
{
CyU3PThreadRelinquish ();
state = USB3LNK->lnk_ltssm_state & CY_U3P_UIB_LTSSM_STATE_MASK;
}
if (state == CY_U3P_UIB_LNK_STATE_COMP)
{
if (!glUibDeviceInfo.ssCmdSeen)
{
CyU3PUsbAddToEventLog (CYU3P_USB_LOG_USBSS_DISCONNECT);
CyU3PUsbSSDisConnecthandler ();
}
return;

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

99

}
if ((UIB->otg_ctrl & CY_U3P_UIB_SSDEV_ENABLE) == 0)
{
return;
}
CyU3PDisconUsbPins ();
UIB->otg_ctrl &= ~CY_U3P_UIB_DEV_ENABLE;
UIB->dev_ctl_intr = UIB->dev_ctl_intr;

/* Disable USB 2.0 PHY. */

}
/* Switch EPM clock to USB 3.0 mode. */
CyU3PSetUsbCoreClock (1, 1);
USB3LNK->lnk_phy_conf = 0xE0000001;
glUibDeviceInfo.usbSpeed = CY_U3P_SUPER_SPEED;
UIB->otg_ctrl |= CY_U3P_UIB_SSEPM_ENABLE;

/* Remember connection speed. */
/* Switch EPMs for USB-SS. */

/* Reset the EPM mux. */
UIB->iepm_cs |= (CY_U3P_UIB_EPM_FLUSH | CY_U3P_UIB_EPM_MUX_RESET);
CyU3PBusyWait (1);
UIB->iepm_cs &= ~(CY_U3P_UIB_EPM_FLUSH | CY_U3P_UIB_EPM_MUX_RESET);
CyU3PBusyWait (1);
/* Update the PHY to not send spurious LFPS. */
CyFx3UsbWritePhyReg (0x0030, 0x00C0);
CyFx3UsbWritePhyReg (0x1010, 0x0080);
CyU3PUsbFlushEp (0x00);
CyU3PUsbFlushEp (0x80);
/* Enable USB 3.0 control eps. */
USB3PROT->prot_epi_cs1[0] |= CY_U3P_UIB_SSEPI_VALID;
UIB->eepm_endpoint[0] = 0x200;
/* Control EP transfer size is 512
bytes. */
USB3PROT->prot_epo_cs1[0] |= CY_U3P_UIB_SSEPO_VALID;
UIB->iepm_endpoint[0] = 0x200;
/* Control EP transfer size is 512
bytes. */
CyU3PUsbResetEp
CyU3PUsbFlushEp
CyU3PUsbResetEp
CyU3PUsbFlushEp

(0x00);
(0x00);
(0x80);
(0x80);

UIB->eepm_endpoint[0] = 0x200;
bytes. */
UIB->iepm_endpoint[0] = 0x200;
bytes. */

/* Control EP transfer size is 512
/* Control EP transfer size is 512

/* Propagate the event to the application. */
if (glUsbEvtCb != NULL)
{
glUsbEvtCb (CY_U3P_USB_EVENT_CONNECT, 0x01);
}
/* Configure the EPs for super-speed operation. */

100

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

CyU3PUsbEpPrepare (CY_U3P_SUPER_SPEED);
}

6.9.6

USB Disconnect

The following code example implements the USB disconnect handler to handle the USB disconnect event. This event is
detected by the LTSSM_DISCONNECT bit of the LNK_INTR link layer interrupt register.
static void
CyU3PUsbSSDisConnecthandler (
void)
{
/* If we still have VBUS, try to connect in USB 2.0 mode. */
if (CyU3PUsbCanConnect ())
{
if (UIB->otg_ctrl & CY_U3P_UIB_DEV_ENABLE)
{
/* If the 2.0 PHY is already on, simply turn off the USB 3.0 PHY. */
UIB->otg_ctrl &= ~(CY_U3P_UIB_SSDEV_ENABLE | CY_U3P_UIB_SSEPM_ENABLE);
CyU3PBusyWait (2);
/* Need to disable interrupts while updating the MPLL. */
UIB->intr_mask &= ~(CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT |
CY_U3P_UIB_LNK_INT |
CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT | CY_U3P_UIB_EPM_URUN);
CyU3PBusyWait (1);
USB3LNK->lnk_phy_conf
&= 0x1FFFFFFF;
USB3LNK->lnk_phy_mpll_status = glUsbMpllDefault;
CyU3PBusyWait (1);
UIB->intr_mask |= (CY_U3P_UIB_DEV_CTL_INT | CY_U3P_UIB_DEV_EP_INT |
CY_U3P_UIB_LNK_INT | CY_U3P_UIB_PROT_INT | CY_U3P_UIB_PROT_EP_INT |
CY_U3P_UIB_EPM_URUN);
CyU3PSetUsbCoreClock (2, 0);
}
else
{
glUibDeviceInfo.usbSpeed = CY_U3P_FULL_SPEED;
CyU3PUsbPhyDisable (CyTrue);
if (glUibDeviceInfo.usb2Disable)
{
glUibDeviceInfo.usbState
= CY_U3P_USB_CONFIGURED;
glUibDeviceInfo.usbSpeed
= CY_U3P_NOT_CONNECTED;
glUibDeviceInfo.isConnected
= CyFalse;
if (glUsbEvtCb != NULL)
glUsbEvtCb (CY_U3P_USB_EVENT_USB3_LNKFAIL, 0);
}
else
{
CyU3PUsbPhyEnable (CyFalse);
}
}
}
else
{
/* If no VBUS, disconnect and turn off PHYs. */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

101

CyU3PUibVbusChangeHandler ();
}
}

6.9.7

Control Request

The following code example implements the USB control request handler to handle setup commands from the host. Note that
this function is implemented for both USB 3.0 and USB 2.0 functions.
For USB 3.0, the control request event is detected by the SUTOK_EV bit of the PROT_INTR protocol layer interrupt register.
When the control event occurs, setup data from the host is stored in the protocol layer registers PROT_SETUPDAT0 and
PROT_SETUPDAT1.
For USB 2.0, the control request event is detected by the SUDAV bit of the USB 2.0 device register DEV_CTL_INTR. When
the control even occurs, setup data from host is stored in the USB 2.0 device registers DEV_SETUPDAT0 and
DEV_SETUPDAT1.
Once the function obtains the setup data from the host, it parses the command class and type and executes the command
accordingly.
/* Parses the USB setup command received. */
static void
CyU3PUsbSetupCommand (
void)
{
uint32_t setupdat0;
uint32_t setupdat1;
uint32_t status = 0;
CyBool_t isHandled = CyFalse;
uint8_t bRequest, bReqType;
uint8_t bType, bTarget;
uint16_t wValue, wIndex, wLength;
/* For super speed handling. */
if (glUibDeviceInfo.usbSpeed == CY_U3P_SUPER_SPEED)
{
setupdat0 = USB3PROT->prot_setupdat0;
setupdat1 = USB3PROT->prot_setupdat1;
glUibDeviceInfo.ssCmdSeen = CyTrue;
glUibStatusSendErdy
= CyFalse;
CyU3PTimerStop (&glUibStatusTimer);
/* Clear the status stage interrupt. We later check for this. */
USB3PROT->prot_intr = CY_U3P_UIB_STATUS_STAGE;
/* If the LTSSM is currently in U1/U2, set an event to trigger a wakeup. */
status = USB3LNK->lnk_ltssm_state & CY_U3P_UIB_LTSSM_STATE_MASK;
if ((status == CY_U3P_UIB_LNK_STATE_U1) || (status == CY_U3P_UIB_LNK_STATE_U2))
CyU3PEventSet (&glUibEvent, CY_U3P_UIB_EVT_TRY_UX_EXIT, CYU3P_EVENT_OR);
status = 0;
}
else
{
/* If USB-SS is enabled, set a flag indicating that the 3.0 PHY should
* be turned on at the next bus reset. */

102

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

if ((glUibDeviceInfo.enableSS) && (glUibDeviceInfo.tDisabledCount < 3))
{
glUibDeviceInfo.enableUsb3 = CyTrue;
}
setupdat0 = UIB->dev_setupdat0;
setupdat1 = UIB->dev_setupdat1;
}
status = CyU3PDmaChannelWaitForCompletion (&glUibChHandleOut, 100);
if ((status != CY_U3P_SUCCESS) && (status != CY_U3P_ERROR_NOT_STARTED))
{
/* The endpoint needs to be NAKed before the channel is reset. */
CyU3PUsbSetEpNak (0x00, CyTrue);
CyU3PBusyWait (100);
CyU3PDmaChannelReset (&glUibChHandleOut);
CyU3PUsbSetEpNak (0x00, CyFalse);
}
status = CyU3PDmaChannelWaitForCompletion (&glUibChHandle, 100);
if ((status != CY_U3P_SUCCESS) && (status != CY_U3P_ERROR_NOT_STARTED))
{
/* The endpoint needs to be NAKed before the channel is reset. */
CyU3PUsbSetEpNak (0x80, CyTrue);
CyU3PBusyWait (100);
CyU3PDmaChannelReset (&glUibChHandle);
CyU3PUsbFlushEp (0x80);
CyU3PUsbSetEpNak (0x80, CyFalse);
}
status = 0;
/* Decode the fields from the setup request. */
bReqType = ((setupdat0 & CY_U3P_UIB_SETUP_REQUEST_TYPE_MASK) >>
CY_U3P_UIB_SETUP_REQUEST_TYPE_POS);
bType
= (bReqType & CY_U3P_USB_TYPE_MASK);
bTarget = (bReqType & CY_U3P_USB_TARGET_MASK);
bRequest = ((setupdat0 & CY_U3P_UIB_SETUP_REQUEST_MASK) >>
CY_U3P_UIB_SETUP_REQUEST_POS);
wValue
= ((setupdat0 & CY_U3P_UIB_SETUP_VALUE_MASK) >> CY_U3P_UIB_SETUP_VALUE_POS);
wIndex
= ((setupdat1 & CY_U3P_UIB_SETUP_INDEX_MASK) >> CY_U3P_UIB_SETUP_INDEX_POS);
wLength = ((setupdat1 & CY_U3P_UIB_SETUP_LENGTH_MASK) >> CY_U3P_UIB_SETUP_LENGTH_POS);
if((setupdat0 & CY_U3P_UIB_SETUP_REQUEST_TYPE_MASK) & 0x80)
{
UIB->dev_epi_xfer_cnt[0] = wLength;
}
else
{
UIB->dev_epo_xfer_cnt[0] = wLength;
}
/* Default setting: Don't send status event notifications. */
glUibDeviceInfo.sendStatusEvent = CyFalse;
/* Clear the inReset flag. */
UIB->dev_ctl_intr_mask &= ~CY_U3P_UIB_URESET;
glUibDeviceInfo.inReset
= 0;
glUibDeviceInfo.newCtrlRqt = CyFalse;

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

103

UIB->dev_ctl_intr_mask |= CY_U3P_UIB_URESET;
/* Forward handling to the callback function iff it is not fast enumeration,
or if it is not a standard request.
*/
if ((glUibDeviceInfo.enumMethod == CY_U3P_USBENUM_PPORT) || (bType !=
CY_U3P_USB_STANDARD_RQT))
{
if ((bType == CY_U3P_USB_STANDARD_RQT) && (bRequest ==
CY_U3P_USB_SC_SET_CONFIGURATION))
{
if (wValue == 1)
{
/* Make sure that all EPs are cleared from stall condition and sequence numbers are cleared
at this stage. */
CyU3PUsbEpPrepare ((CyU3PUSBSpeed_t)glUibDeviceInfo.usbSpeed);
glUibDeviceInfo.usbState
= CY_U3P_USB_ESTABLISHED;
glUibDeviceInfo.usbActiveConfig = (uint8_t)wValue;
glUibDeviceInfo.usbDeviceStat
&= CY_U3P_USB_DEVSTAT_SELFPOWER;
}
else
{
glUibDeviceInfo.usbState = CY_U3P_USB_CONNECTED;
}
}
if (glUsbSetupCb != NULL)
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
}
if (isHandled == CyTrue)
{
/* If the request is already handled, then return from this function. */
glUibDeviceInfo.sendStatusEvent = CyTrue;
return;
}
}
/* Handle the standard requests iff: fast enumeration or if the callback
* failed to handle the request. */
if (bType == CY_U3P_USB_STANDARD_RQT)
{
/* Identify and handle setup request. */
switch (bRequest)
{
case CY_U3P_USB_SC_GET_STATUS:
{
/* Let the setup callback handle GET_STATUS requests addressed to the interface. */
if (bTarget == CY_U3P_USB_TARGET_INTF)
{
if (glUsbSetupCb)
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
break;

104

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

}
/* If the callback did not handle the request, fall back to the default
handler. */
}
isHandled = CyU3PUsbHandleGetStatus (bTarget, wIndex);
}
break;
case CY_U3P_USB_SC_CLEAR_FEATURE:
{
/* Handle device level feature requests implicitly. */
if (bTarget == CY_U3P_USB_TARGET_DEVICE)
{
CyU3PUsbHandleClearFeature ((uint8_t)wValue);
return;
}
isHandled = CyFalse;
/* Clear feature request is forwarded to the application regardless of the
enumeration mode.
If the application returns false, then the request is handled here. */
if ((glUibDeviceInfo.enumMethod == CY_U3P_USBENUM_WB) && (glUsbSetupCb !=
NULL))
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
glUibDeviceInfo.sendStatusEvent = CyTrue;
}
/* If the application has not handled this request and this is a clear feature
(EP HALT),
handle it here. */
if ((!isHandled) && (bTarget == CY_U3P_USB_TARGET_ENDPT) && (wValue ==
CY_U3P_USBX_FS_EP_HALT))
{
if (CyU3PUsbStall (wIndex, CyFalse, CyTrue) == CY_U3P_SUCCESS)
{
/* Reset the endpoint as well */
CyU3PUsbResetEp (wIndex);
CyU3PUsbAckSetup ();
isHandled = CyTrue;
break;
}
}
}
break;
case CY_U3P_USB_SC_SET_FEATURE:
{
/* Handle all Device specific SET Feature commands automatically. */
if (bTarget == CY_U3P_USB_TARGET_DEVICE)
{
/* All device level SET_FEATURE requests except for OTG requests are handled in firmware. */

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

105

if ((wValue != CY_U3P_USB2_OTG_B_HNP_ENABLE) && (wValue !=
CY_U3P_USB2_OTG_A_HNP_SUPPORT))
{
CyU3PUsbHandleSetFeature ((uint8_t)wValue);
return;
}
else
{
/* Send the request to the application. */
if ((glUibDeviceInfo.enumMethod == CY_U3P_USBENUM_WB) && (glUsbSetupCb
!= NULL))
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
{
glUibDeviceInfo.sendStatusEvent = CyTrue;
return;
}
}
}
break;
}
isHandled = CyFalse;
/* Set feature requests are forwarded to the application regardless of the
enumeration mode.
If the application returns false, then the request is handled here. */
if ((glUibDeviceInfo.enumMethod == CY_U3P_USBENUM_WB) && (glUsbSetupCb !=
NULL))
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
glUibDeviceInfo.sendStatusEvent = CyTrue;
}
/* If the application has not handled this request and this is a set feature
(EP HALT),
handle it here. */
if ((!isHandled) && (bTarget == CY_U3P_USB_TARGET_ENDPT) && (wValue ==
CY_U3P_USBX_FS_EP_HALT))
{
if ((CyU3PUsbStall (wIndex, CyTrue, CyFalse)) == CY_U3P_SUCCESS)
{
CyU3PUsbAckSetup ();
isHandled = CyTrue;
}
}
}
break;
case CY_U3P_USB_SC_GET_DESCRIPTOR:
{
isHandled = CyU3PUibSendDescr (setupdat0, setupdat1);
}
break;
case CY_U3P_USB_SC_GET_CONFIGURATION:

106

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

{
isHandled = CyTrue;
status
= CyU3PUsbSendEP0Data (1, (uint8_t *)&glUibDeviceInfo.usbActiveConfig);
}
break;
case CY_U3P_USB_SC_SET_CONFIGURATION:
{
{
isHandled = CyTrue;
switch (wValue)
{
case 1:
/* Make sure that all EPs are cleared from stall condition and sequence
numbers are cleared
at this stage. */
CyU3PUsbEpPrepare ((CyU3PUSBSpeed_t)glUibDeviceInfo.usbSpeed);
case 0:
glUibDeviceInfo.usbState
= (wValue == 0) ? CY_U3P_USB_CONNECTED
: CY_U3P_USB_ESTABLISHED;
glUibDeviceInfo.usbActiveConfig = (uint8_t)wValue;
glUibDeviceInfo.usbDeviceStat &= CY_U3P_USB_DEVSTAT_SELFPOWER;
if (glUsbEvtCb != NULL)
{
glUsbEvtCb (CY_U3P_USB_EVENT_SETCONF, wValue);
}
CyU3PUsbAckSetup ();
break;
default:
status = CY_U3P_ERROR_BAD_ARGUMENT;
break;
}
}
}
break;
case CY_U3P_USB_SC_GET_INTERFACE:
{
if (glUsbSetupCb)
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
break;
}
isHandled = CyTrue;
status
= CyU3PUsbSendEP0Data (1, (uint8_t *)&glUibDeviceInfo.usbAltSetting);
}
break;
case CY_U3P_USB_SC_SET_INTERFACE:

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

107

{
/* First send the command to the Setup callback. Accept the request if not
handled by the callback. */
if (glUsbSetupCb)
{
isHandled = glUsbSetupCb (setupdat0, setupdat1);
if (isHandled)
break;
}
glUibDeviceInfo.usbAltSetting = wValue;
if (glUsbEvtCb != NULL)
{
glUsbEvtCb (CY_U3P_USB_EVENT_SETINTF, CY_U3P_MAKEWORD ((uint8_t)wIndex,
(uint8_t)wValue));
}
isHandled = CyTrue;
CyU3PUsbAckSetup ();
}
break;
case CY_U3P_USB_SC_SYNC_FRAME:
{
isHandled = CyTrue;
CyU3PUsbAckSetup ();
}
break;
case CY_U3P_USB_SC_SET_SEL:
{
if ((CyU3PUsbGetSpeed () == CY_U3P_SUPER_SPEED) && (wValue == 0) && (wIndex
== 0) && (wLength == 6))
{
isHandled = CyTrue;
status = CyU3PUsbGetEP0Data (32, glUibSelBuffer, 0);
if ((glUsbEvtCb != NULL) && (status == CY_U3P_SUCCESS))
{
glUsbEvtCb (CY_U3P_USB_EVENT_SET_SEL, 0x00);
}
}
else
{
isHandled = CyFalse;
}
}
break;
case CY_U3P_USB_SC_SET_ISOC_DELAY:
{
if ((CyU3PUsbGetSpeed () == CY_U3P_SUPER_SPEED) && (wIndex == 0) && (wLength
== 0))
{
isHandled = CyTrue;
CyU3PUsbAckSetup ();
}
}

108

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

break;
default:
break;
}
}
/* If there has been an error, stall EP0 to fail the transaction. */
if ((isHandled != CyTrue) || (status != CY_U3P_SUCCESS))
{
/* This is an unhandled setup command. Stall the EP. */
CyU3PUsbStall (0, CyTrue, CyFalse);
}
}

6.9.8

USB Embedded Host

The FX3 embedded host works in the same way as a standard USB 2.0 host. The FX3 firmware prepares a scheduler table
with USB transfer entries that are similar to the Transfer Descriptor (TD) tables maintained by PC hosts. The actual transfer
scheduling is done by hardware to eliminate the overheads caused by the firmware managed scheduling.

6.9.8.1

Clocking

There are five independent clock domains in the UIB block supporting the USB 2.0 host functions, as listed in Table 6-4.

Table 6-4. USB 2.0 Embedded Host Clocks
Domain

Typ Freq

Configuration Source

Description

dma_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.DMA_DIV

DMA access clock

mmio_bus_clk_i

100 MHz

GCTL_CPU_CLK_CFG.MMIO_DIV

MMIO register access clock

uib_sieclock_i

30 MHz

Driven from USB 2.0 OTG PHY

USB 2.0 serial interface engine clock

standby_clk_i

32 kHz

Always-on

Always-on clock for low-power modes

uib_ref_clk_i

19.2/26/38.4/52 MHz

External input clock

USB2.0 PHY reference clock

In addition, the endpoint memory uses a clock, uib_epm_clk_i, that is 100 MHz when the USB 2.0 host is active. The
uib_epm_clk_i
configuration
source
is
from
GCTL_UIB_CORE_CLK.EPMCLK_SRC
and
enabled
by
GCTL_UIB_CORE_CLK.CLK_EN.

6.9.9

Interrupt Requests

The USB 2.0 host interrupts are part of the main USB core interrupt.
USB 2.0 OHCI interrupts are located in UIB_OHCI_INTERRUPT_STATUS. UIB_INTR.HOST_INT is the logical OR of the
interrupt sources in UIB_OHCI_INTERRUPT_STATUS.
USB 2.0 EHCI interrupts are located in UIB_EHCI_USBINTR. UIB_INTR.HOST_INT is the logical OR of the interrupt sources
in UIB_EHCI_USBINTR.
USB 2.0 host endpoint interrupts are located in UIB_HOST_EP_INTR. UIB_INTR.HOST_EP_INT is the logical OR of the
interrupt sources in UIB_HOST_EP_INTR.
USB charger detect interrupts are located in UIB_CHGDET_INTR. UIB_INTR.CHGDET_INT is the logical OR of the interrupt
sources in UIB_CHGDET_INTR.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

109

6.9.10
6.9.10.1

Functional Description
Embedded Host

The FX3 USB 2.0 embedded host operates like an EHCI host when in high-speed mode and like an OHCI host when in lowor full-speed mode, but the implementation does not follow the fields of the data structures specified in the EHCI/OHCI spec.
At the lowest level, incoming and outgoing data are managed by the DMA block. All USB transfer types, namely control, bulk,
isochronous and interrupt; are handled in a similar way by the DMA block. Refer to the FX3 DMA Subsystem chapter on
page 61 to learn how the DMA descriptor and socket data structures are organized and used.
As a USB host, data traffic is initiated by configuring the appropriate entries in the scheduler memory areas inside the USB
2.0 host controller. The USB 2.0 host controller hardware scans the scheduler memory for valid entries that contain the active
endpoint configurations and schedules data on the bus accordingly.

6.9.10.2

Scheduler Memory

Figure 6-3 shows the bit field of a scheduler entry data structure positioned in the scheduler memory. Definitions of the bit
fields are provided in the register definition section. Each scheduler entry requires three 32-bit words, 12 bytes of memory.
There are 32 entries for EP, which sums the total available memory of 384 bytes.
Figure 6-3. Scheduler Memory Entry

Memory bits

Addr

31:24

23

22:19

18:17

16

S_mask

PING

RL

MULT

ISO_EP
CERR
M

31:30

29

EP0_code

Bypass_e
MMULT
rr

28:27

15:14

13:10

9

8

7

NakCnt

Halt

T

ZLPE
EPT
N

26:19

18:11

10:0

Resp_rate

Polling_rate

Max_Packet_size

31:25

24:17

16

15:0

Reserved

ioc_rate

trns_mode

Total Byte Count

6.9.10.2.1

6:5

4:0
EPND

I

I+1

I+2

Scheduler Memory Organization

A host controller driver has the option to add or remove entries in the list. Two copies of the scheduler memory table are
provided so that firmware can first update the table and then make it active.
Active scheduler entries in the scheduler memory form the execution list for the host controller hardware. The execution list is
broken into the periodic list which services periodic (isochronous and interrupt) endpoints and the asynchronous list which
services bulk and control endpoints.
Each scheduler memory area contains a periodic list and an asynchronous/non-periodic list. Figure 6-4 shows how the list is
organized in high-speed mode, and low- or full-speed mode. The periodic list pointer points to the first entry in the periodic list.
It always starts from the lowest address of each scheduler memory.

110

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 6-4. Scheduler Memory Entry List Data Structure Organization

The asynchronous/non-periodic list pointer points to the location of the first entry in the asynchronous/non-periodic list. It is
programmed via HOST_SHDL_CS.BULK_CNTRL_PTR0 and HOST_SHDL_CS.BULK_CNTRL_PTR1 for the two areas of
scheduler memory respectively.
When the firmware needs to update to the current execution list, it first finds the active area on which the host is currently
running by reading HOST_SHDL_CS.PERI_SHDL_STATUS or HOST_SHDL_CS.ASYNC_SHDL_STATUS, updates the list
in the nonactive area, and then issues a schedule change operation by writing a '1' to HOST_SHDL_CS.PERI_SHDL_CHNG
or HOST_SHDL_CS.ASYNC_SHDL_CHNG.
The FX3 USB embedded host registers can be accessed directly from the UIB top-level register interface. Following is a list of
these registers.
/* FX3 USB 2.0 Embedded Host Register Interface */
/* These definitions extracted from the Top Level UIB register interface */
/* Common host registers */
uvint32_t host_cs;
uvint32_t host_ep_intr;
uvint32_t host_ep_intr_mask;
uvint32_t host_toggle;
uvint32_t host_shdl_cs;
uvint32_t host_shdl_sleep;
uvint32_t host_resp_base;
uvint32_t host_resp_cs;
uvint32_t host_active_ep;

/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0032000
0xe0032004
0xe0032008
0xe003200c
0xe0032010
0xe0032014
0xe0032018
0xe003201c
0xe0032020

*/
*/
*/
*/
*/
*/
*/
*/
*/

/* OHCI registers */
uvint32_t ohci_revision;
uvint32_t ohci_control;
uvint32_t ohci_command_status;
uvint32_t ohci_interrupt_status;
uvint32_t ohci_interrupt_enable;
uvint32_t ohci_interrupt_disable;
uvint32_t ohci_fm_interval;
uvint32_t ohci_fm_remaining;
uvint32_t ohci_fm_number;
uvint32_t ohci_periodic_start;
uvint32_t ohci_ls_threshold;

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

0xe0032024
0xe0032028
0xe003202c
0xe0032030
0xe0032034
0xe0032038
0xe003203c
0xe0032040
0xe0032044
0xe0032048
0xe003204c

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

111

uvint32_t ohci_rh_port_status;
uvint32_t ohci_eof;

/* 0xe0032054 */
/* 0xe0032058 */

/* EHCI registers */
uvint32_t ehci_hccparams;
uvint32_t ehci_usbcmd;
uvint32_t ehci_usbsts;
uvint32_t ehci_usbintr;
uvint32_t ehci_frindex;
uvint32_t ehci_configflag;
uvint32_t ehci_portsc;
uvint32_t ehci_eof;
uvint32_t shdl_chng_type;
uvint32_t shdl_state_machine;
uvint32_t shdl_internal_status;

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

/* OHCI scheduler entry */
struct
{
uvint32_t shdl_ohci0;
uvint32_t shdl_ohci1;
uvint32_t shdl_ohci2;
} ohci_shdl[64];

6.9.11.1

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

/* 0xe0032400 */
/* 0xe0032404 */
/* 0xe0032408 */

/* EHCI scheduler entry */
struct
{
uvint32_t shdl_ehci0;
uvint32_t shdl_ehci1;
uvint32_t shdl_ehci2;
} ehci_shdl[64];

6.9.11

0xe003205c
0xe0032060
0xe0032064
0xe0032068
0xe003206c
0xe0032070
0xe0032074
0xe0032078
0xe003207c
0xe0032080
0xe0032084

/* 0xe0032800 */
/* 0xe0032804 */
/* 0xe0032808 */

Embedded Host Programming Model
Host Connect

These steps are followed when FX3 detects the attachment of a device.
1. The firmware enables the USB bus power through the external power management IC (PMIC) controller.
2. The device connect is detected by the host TP, which signals the EHCI interface.
UIB_HOST_EHCI_PORTSC:PORT_CONNECT is set, which sets the UIB_HOST_EHCI_PORTSC:PORT_CONNECT_C
field and the UIB_HOST_EHCI_USBSTS:PORT_CHNG_DET field and generates an interrupt request.
3. The firmware receives the interrupt, clears the interrupt, and checks whether a low-speed device has connected. If so,
then the device is accessed through the OHCI register interface.
4. As high and full speed devices can only be distinguished after the port reset and chirp sequence is completed, the initial
detect sequence for both are performed by the EHCI controller. This is started by issuing a USB bus reset by setting the
UIB_HOST_EHCI_PORTSC:PORT_RESET bit. This bit should be cleared after 20 ms.
5. After 2 ms, the firmware checks the UIB_HOST_EHCI_PORTSC:PORT_ENABLE bit to see whether or not the port is
enabled. If so, then the device is high speed and the EHCI interface is used. If not, then the device is full speed.
6. If a Full Speed device is detected,, the OHCI Interface is enabled by setting the UIB_HOST_EHCI_PORTSC:PORTOWNER bit to 1. At this point, the connect signal to the EHCI interface is cleared, and the EHCI interface sees a disconnect and generates another interrupt request.

6.9.11.2

Host Disconnect

These steps are followed when the device is disconnected from the host:

112

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

1. The device disconnect is detected by the host TP, which signals the EHCI interface. The
UIB_HOST_EHCI_PORTSC:PORT_CONNECT_C field (and through that the
UIB_HOST_EHCI_USBSTS:PORT_CHNG_DET field) generates an interrupt request.
2. At the same time, the UIB_HOST_EHCI_PORTSC:PORTOWNER field is cleared, transferring port ownership to the EHCI
interface.
3. After disconnect, the EHCI interface resumes its role as the default port owner.

6.9.11.3

Managing Transfers

The USB 2.0 host hardware scheduler reads elements from the scheduler memory and based on its fields along with the EPM
status, it decides to schedule the element for SIE. The result of the executed transaction is recorded in the status fields. The
status of all the transactions for that scheduler entry are recorded as "sticky" in the status field until the scheduler entry is
complete.
Every entry in the scheduler memory represents one queue head (QH) in EHCI terminology or endpoint descriptor (ED) in
OHCI terminology. From this point on, this document calls it "QH" for convenience. In the fetch QH, one entry of the scheduler
memory is read. If that entry cannot be scheduled for the SIE due to halt bit set or entry not active, then the scheduler skips
and next QH. The software updates the active bit in the scheduler memory only during the scheduler memory update. The
active bit is set to zero when the host controller successfully executes the total_byte_cnt of transactions. The USB 2.0 host
controller reports the active/nonactive condition through the status bits. The bus scheduler does not execute a QH when its
active bit is zero.
The status of the USB transactions is written directly into system memory based on the response rate written in scheduler
memory per endpoint. The base address where scheduler responses are written is programmed via
HOST_RESP_BASE.BASE_ADDRESS. The response condition is programmed via the HOST_RESP_CS register. The
response rate indicates after how many either successful transactions or not NAKed transactions the status should be written
into system memory for the software to process. The firmware can use the UIB_HOST_RESP_CS.WR_RESP_COND
register bit to decide on the successful or not NAKed transactions. Table 6-5 provides a description of the status.

Table 6-5. USB 2.0 Host Response
Bit

Name

Description

3:0

EP_NUM

Endpoint number

4

Direction

0: IN 1: Out

5

Active

0: EP got deactivated. 1: EP is still active.

6

Halt

1: EP is not halted. 2: EP is halted.

7

Overrun/ Underrun

0: No overrun/underrun condition 1: There was an overrun/underrun when accessing the EPM.

8

Babble

0: No babble is detected. 1: Babble was detected.
PhyErr or CRC16 error, or device times out, or PID error or IN-ISO XactError IN-ISO XactErr:
The first transaction for the IN ISO has a data toggle equal, or

9

XactErr

More than the MULT field is specified in the scheduler memory, or
There is a data toggle mismatch in the transaction excluding the first transaction, or
A short IN-ISO with a data toggle greater than one was received.

10

Ping

0: No ping token has been issued. 1: Ping token has been issued when enabled.

15:11

-

Reserved

31:16

Byte Count

Total byte count left

6.9.11.3.1

Control Transfer Specific

An EP0 control transfer falls into three categories:
Setup transaction: N number of OUT data transactions followed by 1 IN token (ZLP)
Setup transaction: N number of IN data transactions followed by 1 OUT token (ZLP)
Setup transaction: 1 IN token (ZLP)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

113

Every EP0 transaction consists of at least two transactions, but the asynchronous list in the scheduler memory has only one
entry for every endpoint. One mechanism to initiate multiple transactions by the USB2.0 host controller is to setup EP0_code
through the scheduler memory entry.
The ep0_code is defined as:
00: Reserved
01: Setup Phase + Data Phase(OUT) + Status Phase(IN)
10: Setup Phase + Data Phase(IN) + Status Phase(OUT)
11: Setup Phase + Status Phase(IN)

6.9.11.3.1.1 Setup Phase
This EP0 category starts once the scheduler encounters the EP0 in the scheduler memory list for the first time, and the
ep0_code is "01". It loads its total byte counter from the schedule memory entry. This category indicates that after the SETUP
gets ACKed, the next scheduled EP0 is an OUT transaction. The scheduler informs the TP to issue a SETUP token. If the
SETUP token is successful, then the next time the scheduler encounters the EP0 in the list, it will inform the TP for an EP0OUT transaction. If the SETUP token is not successful, then the EP0 transaction is terminated and it will retry it the next time
it encounters the EP0 in the scheduler memory, as long as the EP0 is still active and not halted.

6.9.11.3.1.2 Data Phase(OUT)
The EP0 OUT transaction starts once the scheduler encounters the EP0 in the list, and EP0 state is the OUT state. The
internal total byte counter is decremented by the actual OUT DATA size sent to device. Once the byte counter reaches zero
and if the ZLPEN is "0" in the scheduler memory, the then next time the scheduler will request the TP to issue an EP0 IN to
the device.
If the ZLPEN is "1", then the next time the scheduler will request the TP to issue an EP0 OUT zero-length packet (ZLP) to the
device. After that, the scheduler will request the TP to issue an EP0 IN to the device.

6.9.11.3.1.3 Status Phase (IN)
Once a valid EP0 IN ZLP has been received, the scheduler deactivates the EP0 entry if the trns_mode of the scheduler entry
is "0".

6.9.11.3.1.4 Setup Phase
This EP0 category starts once the scheduler encounters the EP0 in the scheduler memory list for the first time, and the
ep0_code is "10". It loads its total byte counter from the schedule memory entry. This category indicates that after the SETUP
gets ACKed, the next scheduled EP0 is an IN transaction. The scheduler informs the TP to issue a SETUP token. If the
SETUP token is successful, then the next time the scheduler encounters the EP0 in the list, it will inform the TP for an EP0 IN
transaction. If the SETUP token is not successful, then the EP0 transaction is terminated and it will retry it the next time it
encounters the EP0 in the scheduler memory, as long as the EP0 is still active and not halted.

6.9.11.3.1.5 Data Phase (IN)
The EP0 IN transaction starts once the scheduler encounters the EP0 in the list, and the EP0 state is IN state. Processing an
IN EP0 is the same as processing any other IN EP. The internal total byte counter is decremented by the actual IN DATA size
received from device. Once the byte counter reaches or a short packet is received, and the ZLPEN is "0" in the scheduler
memory, then next time the scheduler will request the TP to issue an EP0 OUT ZLP to the device. If the ZLPEN is "1", then
the next time the scheduler will request the TP to issue another EP0 IN to the device, which should be a ZLP. After that, the
scheduler will request the TP to issue an EP0 OUT ZLP to the device.

6.9.11.3.1.6 Status Phase (OUT)
Once an EP0 OUT ZLP has been successfully received by the device, the scheduler deactivates the EP0 entry if the
trns_mode of the scheduler entry is "0".

114

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6.9.11.3.1.7 Setup Phase
This EP0 category starts once the scheduler encounters the EP0 in the scheduler memory list for the first time, and the
ep0_code is "11". This category indicates that after the SETUP gets ACKed, the next scheduled EP0 is an IN transaction. The
scheduler informs the TP to issue a SETUP token. If the SETUP token is successful, then the next time the scheduler
encounters the EP0 in the list, it will inform the TP for an EP0-IN transaction. If the SETUP token is not successful, then the
EP0 transaction is terminated and it will retry it the next time it encounters the EP0 in the scheduler memory, as long as the
EP0 is still active and not halted.

6.9.11.3.1.8 Status Phase (IN)
Once a valid EP0 IN ZLP has been received, the scheduler deactivates the EP0 entry if the trns_mode of the scheduler entry
is "0".

6.10

USB OTG Controller

The FX3 USB OTG controller implements the hardware interface between the processor and the USB PHY to allow the
firmware to implement the OTG features. The OTG function requires the firmware implementation to handle the protocol. The
controller hardware generates interrupts on the events, and the firmware handles the event and responds to it as needed.
The FX3 USB OTG controller is compatible with USB OTG 2.0 specifications.
USB OTG defines two protocols: SRP and HNP. SRP is a method for a peripheral to request that the host enable the VBus
bus power. Some hosts may wish to disable the VBus bus power to conserve system power, and this protocol allows
peripherals to connect to the host under such conditions.
The HNP protocol is a method of allowing a peripheral and host to switch roles, with the peripheral serving as the host and the
host receiving commands from the peripheral. For hosts and peripherals, it is necessary to have the D- pull-down resistor
enabled at all times. When a device is acting as a host, it must also enable the D+ pull-down resistor.

6.10.1

Interrupt Requests

USB OTG interrupts are located in UIB_OTG_INTR. UIB_INTR.OTG_INT is the logical OR of the interrupt sources in
UIB_OTG_INTR.

6.10.2

USB OTG Programming Model

FX3 USB OTG controller registers can be accessed directly from the UIB top-level register interface. Following is the list of
these registers.
/* FX3 USB OTG Register Interface */
/* These definitions extracted from the Top Level UIB register interface */
uvint32_t
uvint32_t
uvint32_t
uvint32_t

6.10.2.1

otg_ctrl;
otg_intr;
otg_intr_mask;
otg_timer;

/*
/*
/*
/*

0xe003180c
0xe0031810
0xe0031814
0xe0031818

*/
*/
*/
*/

USB OTG Start and Stop

The FX3 OTG controller needs to be initialized before it can handle OTG events. The following code example implements the
OTG controller start and stop sequence.
CyU3PReturnStatus_t
CyU3POtgStart (
CyU3POtgConfig_t *cfg)
{

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

115

/* Verify that the part in use supports the USB OTG functionality. */
if (!CyFx3DevIsOtgSupported ())
return CY_U3P_ERROR_NOT_SUPPORTED;
if (glIsOtgEnable)
{
return CY_U3P_ERROR_ALREADY_STARTED;
}
/* This call is not allowed if the device mode is already active. */
if ((CyU3PUsbIsStarted ()) || (glSdk_UsbIsOn))
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
/* Check for parameter validity. */
if (cfg == NULL)
{
return CY_U3P_ERROR_NULL_POINTER;
}
if (cfg->otgMode >= CY_U3P_OTG_NUM_MODES)
{
return CY_U3P_ERROR_BAD_ARGUMENT;
}
if ((cfg->cb == NULL) && (cfg->otgMode != CY_U3P_OTG_MODE_CARKIT_PPORT) &&
(cfg->otgMode != CY_U3P_OTG_MODE_CARKIT_UART))
{
return CY_U3P_ERROR_NULL_POINTER;
}
if (cfg->chargerMode >= CY_U3P_OTG_CHARGER_DETECT_NUM_MODES)
{
return CY_U3P_ERROR_BAD_ARGUMENT;
}
/* Register the handlers for OTG interrupt events. */
CyU3PUsbSetOTGIntHandler (CyU3PUsbOtgIntHandler);
CyU3PUsbSetChgDetIntHandler (CyU3PUsbChgdetIntHandler);
/* Reset the connected peripheral to invalid entry. */
glPeripheralType = CY_U3P_OTG_TYPE_DISABLED;
/* Reset the state machine variables. */
glIsHnpEnable = CyFalse;
if (cfg->otgMode == CY_U3P_OTG_MODE_OTG)
{
/* Enable the USB PHY connections. */
GCTLAON->control &= ~CY_U3P_GCTL_ANALOG_SWITCH;
/* Enable and set the EPM clock to bus clock (100MHz). */
GCTL->uib_core_clk = (CY_U3P_GCTL_UIBCLK_CLK_EN | CY_U3P_GCTL_UIB_CORE_CLK_DEFAULT);
GCTLAON->control |= CY_U3P_GCTL_USB_POWER_EN;
CyU3PBusyWait (100);
CyU3PUsbPowerOn ();
/* Enable OTG and charger detection interrupts. */
UIB->otg_intr = ~CY_U3P_UIB_OTG_INTR_DEFAULT;
UIB->otg_intr_mask = CY_U3P_UIB_OTG_TIMER_TIMEOUT;

116

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

UIB->chgdet_intr = ~CY_U3P_UIB_CHGDET_INTR_DEFAULT;
UIB->chgdet_intr_mask = CY_U3P_UIB_OTG_ID_CHANGE;
/* Enable OTG mode and charger detection. */
UIB->otg_ctrl = (CY_U3P_UIB_OTG_ENABLE);
/* Enable ID pin detection. */
UIB->chgdet_ctrl = CY_U3P_UIB_ACA_ENABLE;
/* Enable the UIB interrupts. */
UIB->intr = ~CY_U3P_UIB_INTR_DEFAULT;
UIB->intr_mask = (CY_U3P_UIB_OTG_INT | CY_U3P_UIB_CHGDET_INT);
CyU3PVicEnableInt (CY_U3P_VIC_UIB_CORE_VECTOR);
/* Enable the VBUS interrupts. */
GCTL->iopwr_intr = ~CY_U3P_GCTL_IOPWR_INTR_DEFAULT;
GCTL->iopwr_intr_mask = CY_U3P_VBUS;
glUibDeviceInfo.vbusDetectMode = CY_U3P_VBUS;
CyU3PVicEnableInt (CY_U3P_VIC_GCTL_PWR_VECTOR);
}
else if (cfg->otgMode == CY_U3P_OTG_MODE_CARKIT_PPORT)
{
/* Enable the USB PHY connections. */
GCTLAON->control &= ~CY_U3P_GCTL_ANALOG_SWITCH;
/* Enable and set the EPM clock to bus clock (100MHz). */
GCTL->uib_core_clk = (CY_U3P_GCTL_UIBCLK_CLK_EN | CY_U3P_GCTL_UIB_CORE_CLK_DEFAULT);
GCTLAON->control |= CY_U3P_GCTL_USB_POWER_EN;
CyU3PBusyWait (100);
CyU3PUsbPowerOn ();
UIB->otg_ctrl = CY_U3P_UIB_OTG_CTRL_DEFAULT;
GCTL->iomatrix |= CY_U3P_CARKIT;
UIB->chgdet_ctrl = CY_U3P_UIB_CARKIT;
}
else if (cfg->otgMode == CY_U3P_OTG_MODE_CARKIT_UART)
{
/* Verify if the configuration is possible. */
if ((CyFx3DevIOIsSib8BitWide (1)) || (CyFx3DevIOIsUartConfigured ()))
{
return CY_U3P_ERROR_BAD_ARGUMENT;
}
/* Enable the USB PHY connections. */
GCTLAON->control &= ~CY_U3P_GCTL_ANALOG_SWITCH;
/* Enable and set the EPM clock to bus clock (100MHz). */
GCTL->uib_core_clk = (CY_U3P_GCTL_UIBCLK_CLK_EN | CY_U3P_GCTL_UIB_CORE_CLK_DEFAULT);
GCTLAON->control |= CY_U3P_GCTL_USB_POWER_EN;
CyU3PBusyWait (100);
CyU3PUsbPowerOn ();
UIB->otg_ctrl = CY_U3P_UIB_OTG_CTRL_DEFAULT;
GCTL->iomatrix &= ~CY_U3P_CARKIT;
UIB->chgdet_ctrl = CY_U3P_UIB_CARKIT;
}

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

117

else
{
/* Do nothing. */
}
/* Save the current OTG configuration. */
glOtgInfo = *cfg;
glIsOtgEnable = CyTrue;
return CY_U3P_SUCCESS;
}
CyU3PReturnStatus_t
CyU3POtgStop (void)
{
if (!glIsOtgEnable)
{
return CY_U3P_ERROR_NOT_STARTED;
}
/* Do not disable the block if any of the modes are running. */
if ((CyU3PUsbIsStarted ()) || (CyU3PUsbHostIsStarted ()))
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
/* Disable all interrupts. */
UIB->intr_mask = 0;
CyU3PVicDisableInt (CY_U3P_VIC_UIB_CORE_VECTOR);
CyU3PVicDisableInt (CY_U3P_VIC_UIB_DMA_VECTOR);
/* Reset all state machine variables to default. */
glOtgInfo.otgMode = CY_U3P_OTG_MODE_DEVICE_ONLY;
glOtgInfo.chargerMode = CY_U3P_OTG_CHARGER_DETECT_ACA_MODE;
glOtgInfo.cb = NULL;
glPeripheralType = CY_U3P_OTG_TYPE_DISABLED;
glIsHnpEnable = CyFalse;
UIB->chgdet_ctrl = CY_U3P_UIB_CHGDET_CTRL_DEFAULT;
UIB->otg_ctrl = CY_U3P_UIB_OTG_CTRL_DEFAULT;
/* Disable the UIB block. */
UIB->power &= ~CY_U3P_UIB_RESETN;
CyU3PBusyWait (10);
/* Disable the UIB clock. */
GCTL->uib_core_clk &= ~CY_U3P_GCTL_UIBCLK_CLK_EN;
GCTLAON->control &= ~CY_U3P_GCTL_USB_POWER_EN;
/* Update the state variable. */
glIsOtgEnable = CyFalse;
return CY_U3P_SUCCESS;
}

118

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

6.10.2.2

Session Request Protocol

Upon attachment to the USB bus, if the USB bus power VBUS is not on, the B device can request the host to drive VBUS and
begin to communicate with the peripheral. This process is called "Session Request Protocol" (SRP).
In OTG 2.0, a SRP request is started with D+ pulsing. When FX3 is connected as a B-device, the SRP follows this sequence
of steps:
1. The firmware checks that no current session is ongoing by checking that the SESS_END bit in the OTG control register is
set and also that the DP and DM bits are cleared.
2. The firmware sets the DP_PU_EN bit in the OTG control register to pulse the USB D+ line and loads the OTG timer register to generate an interrupt between 5 ms and 10 ms later.
3. After receiving the OTG timer timeout interrupt, the processor clears the DP_PU_EN bit to stop pulsing the USB D+ signal.
4. The firmware enables the VBUS_VALID_INT interrupt and waits for VBUS to be powered.
5. After receiving the VBUS_VALID_INT interrupt, the firmware enables the D+ pull-up by enabling the USB 2.0 function
controller, which allows it to connect to the USB host.
6. If the host is capable, it drives VBUS and allows FX3 to connect as a peripheral.
7. Optionally, the firmware may enable DSCHG_VBUS to discharge the VBUS line below the levels specified for
SESS_END to begin the SRP process sooner.
As an A-device, the SRP enables the SRP interrupt to allow SRP signaling detection and waits for the SRP interrupt. Upon
receiving the interrupt, the firmware enables the VBUS power, allowing the B-device to connect. Once enabled, the firmware
should also enable the VBUS_VALID_INT interrupt to ensure that the peripheral is not drawing more current than the system
can provide. The firmware sequence is as follows:
1. After checking that DP = 0 and DM = 0 and B_SESS_END is asserted, enable the SRP interrupt.
2. Upon receiving the SRP Interrupt, enable the VBUS bus power as well as the USB host logic and its connect interrupt.
3. Upon receiving the connect interrupt, begin normal USB traffic to the B-device, starting with USB bus reset and enumeration.
The following code example implements the function to issue an SRP request.
static CyU3PReturnStatus_t
CyU3POtgIssueSrp (void)
{
uint32_t regVal;
if (!glIsOtgEnable)
{
return CY_U3P_ERROR_NOT_STARTED;
}
/* Check if device mode is enabled. */
if ((!CyU3POtgIsDeviceMode ()) || (CyU3PUsbIsStarted ()) || (CyU3PUsbHostIsStarted ()))
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
/* Check if there is any valid session. */
if (GCTL->iopower & glUibDeviceInfo.vbusDetectMode)
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
/* This is a hack as there is no way to send a pulse on the VBUS.
* Here we are first configuring the PHY as a device and doing a DP
* pull-up to send a high. To send a low, the PHY is configured as host

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

119

* and then DP is pulled down. This seems to work without the VBUS. */
/* Enable CHG_VBUS. */
UIB->otg_ctrl |= CY_U3P_UIB_CHG_VBUS;
CyU3PThreadSleep (10);
/* Pullup DP */
regVal = UIB->otg_ctrl & (CY_U3P_UIB_OTG_ENABLE | CY_U3P_UIB_CHG_VBUS);
UIB->otg_ctrl = (regVal | CY_U3P_UIB_DEV_ENABLE | CY_U3P_UIB_DP_PU_EN);
CyU3PThreadSleep (10);
/* Pull down DP */
UIB->otg_ctrl = (regVal | CY_U3P_UIB_HOST_ENABLE | CY_U3P_UIB_DP_PD_EN);
CyU3PThreadSleep (10);
/* Set the PHY to be disconnected. */
UIB->otg_ctrl = regVal;
/* Disable CHG_VBUS. */
UIB->otg_ctrl &= ~CY_U3P_UIB_CHG_VBUS;
CyU3PThreadSleep (10);
return CY_U3P_SUCCESS;
}

The following code example implements the function that accepts the SRP request from the A-device.
static void
CyU3POtgSetupPhy (void)
{
if (CyU3POtgIsHostMode ())
{
/* Enable and set the EPM clock to bus clock (100MHz). */
GCTL->uib_core_clk = (CY_U3P_GCTL_UIBCLK_CLK_EN | CY_U3P_GCTL_UIB_CORE_CLK_DEFAULT);
/* Enable host mode. */
UIB->otg_ctrl &= CY_U3P_UIB_OTG_ENABLE;
UIB->otg_ctrl |= CY_U3P_UIB_HOST_ENABLE;
/* Reset and enable the PHY. */
UIB->phy_clk_and_test = (CY_U3P_UIB_DATABUS16_8 | CY_U3P_UIB_VLOAD |
CY_U3P_UIB_RESET | CY_U3P_UIB_EN_SWITCH);
CyU3PBusyWait (10);
UIB->phy_clk_and_test &= ~CY_U3P_UIB_RESET;
UIB->phy_clk_and_test |= CY_U3P_UIB_SUSPEND_N;
CyU3PBusyWait (100);
/* Switch EPM clock to 120MHz. */
GCTL->uib_core_clk &= ~CY_U3P_GCTL_UIBCLK_EPMCLK_SRC_MASK;
/* Make sure EHCI is the owner of the port. */
UIB->ehci_configflag = CY_U3P_UIB_CF;
CyU3PBusyWait (10);
}
if (CyU3POtgIsDeviceMode ())
{
UIB->otg_ctrl &= CY_U3P_UIB_OTG_ENABLE;
UIB->otg_ctrl |= CY_U3P_UIB_DEV_ENABLE;
/* Enable and set the EPM clock to bus clock (100MHz). */
GCTL->uib_core_clk = (CY_U3P_GCTL_UIBCLK_CLK_EN |
CY_U3P_GCTL_UIB_CORE_CLK_DEFAULT);

120

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

CyU3PBusyWait (100);
/* Reset and enable the PHY. */
UIB->phy_clk_and_test = (CY_U3P_UIB_DATABUS16_8 | CY_U3P_UIB_VLOAD |
CY_U3P_UIB_RESET | CY_U3P_UIB_EN_SWITCH);
CyU3PBusyWait (10);
UIB->phy_clk_and_test &= ~CY_U3P_UIB_RESET;
UIB->phy_clk_and_test |= CY_U3P_UIB_SUSPEND_N;
CyU3PBusyWait (100);
/* Switch EPM clock to 120MHz. */
GCTL->uib_core_clk &= ~CY_U3P_GCTL_UIBCLK_EPMCLK_SRC_MASK;
CyU3PBusyWait (10);
UIB->otg_ctrl &= ~CY_U3P_UIB_DEV_ENABLE;
}
}
CyU3PReturnStatus_t
CyU3POtgSrpStart (uint32_t repeatInterval)
{
if (!glIsOtgEnable)
{
return CY_U3P_ERROR_NOT_STARTED;
}
if ((repeatInterval > CY_U3P_OTG_SRP_MAX_REPEAT_INTERVAL) ||
(repeatInterval == 0))
{
return CY_U3P_ERROR_BAD_ARGUMENT;
}
/* Check if device mode is enabled. */
if ((!CyU3POtgIsDeviceMode ()) || (CyU3PUsbIsStarted ()) || (CyU3PUsbHostIsStarted ()))
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
/* Check if there is any valid session. */
if (GCTL->iopower & glUibDeviceInfo.vbusDetectMode)
{
return CY_U3P_ERROR_INVALID_SEQUENCE;
}
CyU3POtgSetupPhy ();
/* Update the required timer period value. */
glOtgTimerPeriod = (uint32_t)(repeatInterval * 32);
/* Initialize the OTG timer with the corresponding repeat period. */
UIB->otg_timer = glOtgTimerPeriod;
return CY_U3P_SUCCESS;
}

6.10.2.3

Host Negotiation Protocol

An OTG A-device acts as the host initially in a USB session. In order to allow a peripheral to assume the role of a host, the
initial host must first configure the peripheral to enable HNP support through USB commands (SetFeature(b_hnp_enable)).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

121

To start the role change, the initial host suspends the USB bus, watches for the B-device to disconnect, and then connects
itself as a peripheral. At this point, normal USB communication occurs, only now the peripheral acts as the host, and vice
versa. When the B-device is finished serving as the host, it returns control to the A-device in the same manner.
At the beginning, the B-device is the peripheral and thus has its D+ pull-up resistor enabled. The A-device stops bus traffic,
suspending the bus. The B-device USB device logic recognizes the suspend as the first step of transferring control of the bus,
disables its D+ pull-up resistor, and enables its USB host logic. After the D+ line falls (is pulled down by the D+ pull-down
resistor) to 0, the A-device recognizes the disconnect request and enables its D+ pull-up to connect as a peripheral. The Bdevice host logic detects the connect request and generates an interrupt to the processor, which then generates traffic to the
A-device through the USB host logic.
After the B-device is finished serving as the host, it repeats the transfer process that the A-device performed, suspending the
USB bus, waiting for the disconnect interrupt, disabling its USB host logic and enabling its USB device logic, and connecting
to the USB bus.
The sequence of events and operations for a device (A or B) to give control of the USB bus to the other device follows:
1. Suspend the USB bus.
2. Wait for the disconnect interrupt.
3. Disable the USB host logic, and enable the USB device logic.
4. Connect to the USB bus through the USB device logic.
The A-device must first send a SetFeature(b_hnp_enable) command to the B-device to enable it to become the host.
The sequence for a device (either A or B) to become the USB host follows:
1. Wait for the suspend interrupt from the USB device logic.
2. Disconnect from the USB bus by disabling the D+ pull-up.
3. Disable the USB device logic and enable the USB host logic.
4. Wait for a connect interrupt from the USB host logic.
5. Generate a USB bus reset and begin enumerating the peripheral.

6.11

USB Charger Detect Controller

The FX3 charger detect controller implements the hardware for the system to interface to the external battery charger. The
controller is responsible for battery charger detection and USB ID signal detection and monitoring. This is useful in cases
where the FX3 is used in a battery powered device which can detect a charger and initiate charging action by talking to a
Power Management IC (PMIC).

6.11.1

USB Charger Detect Register Interface

The FX3 USB charger detect controller registers can be accessed directly from the UIB top-level register interface. Following
is the list of these registers.
/* FX3 USB Charger Detect Register Interface */
/* These definitions extracted from the Top Level UIB register interface */
uvint32_t chgdet_ctrl;
uvint32_t chgdet_intr;
uvint32_t chgdet_intr_mask;

6.11.2

/* 0xe0031800 */
/* 0xe0031804 */
/* 0xe0031808 */

Battery Charger Detection

When enabled by the firmware, the charger detect controller initiates a timed sequence of events to cause the USB PHY to
detect the presence of connection to a USB charger. The charger detection is polled by the hardware at a firmware-defined

122

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

rate of between 1 ms and 16 ms (charger detect control register field CHG_POLL_INTERVAL) in 1-ms increments. The
polling is enabled by the CHG_DET_EN setting, and the result is recorded in CHG_DETECTED.
The CHG_DET_CHANGE interrupt is generated when a change in the CHG_DETECTED field is seen. This interrupt is
enabled by CHG_DET_CHANGE_EN in the charger detect interrupt enable register.

6.11.3

USB ID Signal Detection

In the OTG 2.0 specification, the ID line is a simple on/off signal indicating whether the device is connected as a host (Adevice, ID = 0) or as a peripheral (B-device, ID = 1). The on state is generated by enabling a pull-up resistor and detecting
whether the ID line is floating or terminated with a pull-down resistor.
In the Battery Charging Specification revision 1.1, the functionality of the ID pin is expanded to include measuring resistance
values between the ID pin and ground. Using this method a device can detect connection to an ACA (Accessory Charger
Adapter). An ACA is a device that enables a single USB port to be attached to a charger and to another device
simultaneously. The value of the pull-down resistor also indicates to the device its role (host or peripheral) and if it is a
peripheral, whether it is allowed to connect to the USB bus (by enabling a pull-up resistor on D+) and initiate communication
with the USB host.
The Battery Charging Specification revision 1.1 defines three resistor values, as shown in Table 6-6.

Table 6-6. USB ACA Device Type
Resistor

Value

Device Type

RID_A_CHG

102-114 k?

USB embedded host (A-device)

RID_B_CHG

171-189 k?

USB OTG peripheral (B-device), may not connect

RID_C_CHG

256-284 k?

USB OTG peripheral (B-device), may connect

When the device is a peripheral but may not connect, the embedded host conserves power by not enabling VBUS, so the
peripheral needs to attempt to activate a session by initiating the SRP, as given in the OTG 1.3 Specification.
In addition, Motorola has defined two other resistor values, as shown in Table 6-7.

Table 6-7. USB Charger Motorola-defined Device Type
Resistor

Value

Device Type

200 k ±2%

196-204 k

Motorola USB charger type 0

440 k ±2%

431.2-448.8 k

Motorola USB charger type 1

A value of less than 10  is detected as an A-device without an ACA present, and a value greater than 448.8 k is detected
as a B-device without an ACA present.
The FX3 charger detect controller samples and decodes the strength of the pull-down resistor into a digital value, which is
subsequently read by the firmware when valid. This ID resistor value is sampled at periodic intervals of 1 to 16 ms, set by
OTG_ID_POLL_INTERVAL[3:0] in the charger detect control and configuration register. Setting the OTG_ID_DISABLE bit in
the same register may disable polling.
The OTG_ID_CHANGE interrupt is generated when a change in the OTG_ID_VALUE field is seen. This interrupt is enabled
by OTG_ID_CHANGE_EN in the charger detect interrupt enable register. Once a charger has been detected, firmware can
initiate charging by configuring a PMIC device through one of the available serial interfaces (UART, I2C or SPI).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

123

124

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

7. General Programmable Interface II (GPIF II)

EZ-USB FX3 integrates a high-performance interface, GPIF II, which enables functionality similar to but more advanced than
the FX2LP GPIF and Slave FIFO interfaces. GPIF II is a programmable state machine that provides the flexibility to design a
variety of interfaces to outside entities. The GPIF II interface may function either as a master or a slave in industry-standard or
proprietary interfaces. GPIF II can implement both parallel and serial high-bandwidth interfaces. Some popular interfaces that
can be implemented with GPIF II are Slave FIFO (asynchronous or synchronous), SRAM, and multiplexed address and data
buses (ADMux).
GPIF II is part of the larger FX3 Processor Interface Block (PIB). The PIB acts as the interface to an external processor,
FPGA, FIFO, memory, or other high-bandwidth device. This block supports the features required to connect an external
processor or device to USB or one of the other FX3 interfaces (SPI, UART, I2C, I2S). For example, GPIF II enables FX3 to
connect to an external FPGA, processor, or other device. The thread controller within the PIB and DMA adapter manages the
read/write accesses performed over GPIF II to registers and sockets. To understand the data transfer in and out of FX3, it is
important to know the terminology specific to FX3; refer FX3 Terminology section in AN75705 - Getting Started with EZ-USB®
FX3™.
A GPIF II Designer tool provided with the FX3 SDK installation enables graphical development of GPIF II designs.

7.1

Features

The following is a summary of the GPIF II features:
■

Functions as master or slave

■

Provides 256 programmable states

■

Implements 8-, 16-, 24- and 32-bit parallel data bus (package-dependent)

■

Enables interface frequencies up to 100 MHz

■

Supports 14 configurable control pins (strobes, enables, GPIO) when a 32-bit data bus is used

■

Supports 16 configurable control pins when a 8-, 16-, or 24-bit data bus is used

■

All control pins can be input, output, or bidirectional

■

Resources such as counters and comparators

■

Wide range of actions and triggers to define the behavior of the state machine

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

125

7.2

Block Diagram
Figure 7-1. Block Diagram of FX3 PIB
PIB Block
THREAD3

THREAD2

GPIF-II

THREAD1

Read/ Write
access to PIB
sockets

PIB Sockets

GPIF-II I/F

THREAD Controller
and Mux Logic

DMA Adapter

Bus Configuration

Interface
Pins

THREAD0
PIB Register Block

7.3

Typical GPIF II interface

GPIF II allows the FX3 to connect directly to external peripherals such as FPGAs, image sensors, ADCs, or any other highbandwidth devices. It provides external pins that can operate as inputs/outputs (CTL[12:0]), a data bus (DQ[31:0]), an
interface clock (PCLK), and an interrupt line.
Figure 7-2 shows a block diagram of a typical interface between the FX3 and a peripheral function. Table 7-1 lists the GPIF II
interface signals.
Figure 7-2. Block Diagram of Interface Between FX3 and Peripheral
DQ[31:0]
PCLK

EZ‐USB FX3
GPIF II

CTL[12:0]

Peripheral

INT# / CTL[15]

Table 7-1. GPIF II Interface Signals
Pin

IN/OUT

Description

CTL[12:0]

I/O

Programmable control signals

DQ[31:0]

I/O

Bidirectional data bus

PCLK

I/O

Interface clock

INT# /CTL[15]

I/O

Interrupt or control signal

The GPIF II control signals (CTL[12:0]) can be configured as outputs to control the external peripheral device, or as inputs to
read the status from an external peripheral device.

126

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The GPIF II interface offers a maximum of 32 bidirectional data lines:
■

An 8-bit-wide GPIF II interface (DQ[7:0]) uses pins GPIO[7:0].

■

A 16-bit-wide GPIF II interface (DQ[15:0]) uses pins GPIO[15:0].

■

A 24-bit-wide GPIF II interface (DQ[23:0]) uses pins GPIO[40:33] and GPIO[15:0].

■

A 32-bit-wide GPIF II interface (DQ[31:0]) uses pins GPIO[49:46], GPIO[44:33], and GPIO[15:0].

GPIF II can function as a master or slave. If it is configured as a master, then the GPIOs remaining after allocating for the data
bus and control signals can be used as address lines. If GPIF II is configured as a slave, then the maximum number of
address lines is limited to eight.
The interface clock, PCLK, can be configured as either an input or an output interface clock for synchronous interfaces to
external logic. The maximum frequency supported for the GPIF II interface clock is 100 MHz.

7.4

Functional Overview

The GPIF II interface is configured by creating a GPIF II state machine, and 8 KB of memory space is allocated to store the
GPIF II state machine definition. Each state is defined by 32 bytes in (SRAM) memory. These 32 bytes define the properties
of a state and the trigger conditions that can cause state (or I/O) transitions. Each state has two transitions out of it. The
transition out of a state is determined based on transition conditions. Transitions are caused by both external and internal
triggers. Each state is programmed to perform certain actions. The transition conditions are checked on each GPIF II clock
edge or after a programmable number of clock cycles.
Figure 7-3 is a simple depiction of the basic structure of a GPIF II state.
Figure 7-3. Structure of a GPIF II State

State 1
(Assert Actions for
State1)
If (f0*) then transition left

State 2
(Assert Actions for
State2)

If (f1*) then transition right

State 3
(Assert Actions for
State3)

Notes:
- * f0 and f1 are logical functions of triggers
- f0 is checked first. If f0 = TRUE, then GPIFII transitions from State 1 to State 2. If f0 = FALSE, then f1
is checked.
- If f1 = TRUE, then GPIFII transitions from State 1 to State 3.
- If both f0 and f1 evaluate to FALSE, then GPIFII remains in State 1. At the next clock, the conditions
are checked again.

7.4.1

Actions

Each state in a GPIF II state machine can be programmed to perform one or more actions. Actions performed in a state can
be programmed to be performed once or repeated in every clock cycle until a state change occurs. Actions can be internal,
such as reading or writing to a buffer. They can also be external, such as driving an output high or low. Table 7-2 lists the
GPIF II actions.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

127

Table 7-2. GPIF II Actions
No

1

2

Action

IN_DATA

IN_ADDR

Description
Samples data from the data bus and moves to the destination specified. Destination can be
Registers, PPRegisters, or Sockets. The data in the register can be accessed using the
CY_U3P_PIB_GPIF_INGRESS_DATA(thread_number) macro. The PPRegisters cannot be
accessed directly from the PPRegister space. These registers are for controlling the P-port
interface in PP mode. The data in Sockets can be controlled or accessed using DMA APIs.
Words from Socket can be accessed directly using the firmware API
CyU3PGpifReadDataWords().
Selects a thread or socket after sampling the address word from the bus. If there are two or
fewer address bits, the address selects one of the four threads. If the address has more than
two bits, the thread or socket can be selected depending upon the The "Address Selecting"
parameter is available only when more than two address bits are used.
The "PP Register Access Only" option is available only if the width of the address bus is more
than or equal to 8
Drives data onto the bus from the source specified. The source can be Registers, PPRegisters, or Sockets. The data in Register can be sourced using the
CY_U3P_PIB_GPIF_EGRESS_DATA(thread_number) macro. The PPRegisters cannot be
accessed directly from the PPRegister space. These registers are for controlling the P-port
interface in PP mode. The data in Sockets can be controlled or sourced using DMA APIs.
Words from Socket can be sourced directly using the firmware API
CyU3PGpifWriteDataWords().

3

DR_DATA

DR_DATA has two internal stages: update_bus and pop_data. The update_bus updates the
data bus with the word present in the source, and it happens as soon as the state machine
enters the particular state. The hardware state machine works using the interface clock (in
Synchronous protocol) or the FX3 internal clock (in Asynchronous protocol). In every clock
cycle, the update_bus happens regardless of the "Repeat actions until next transition" option
in the state setting. Pop_data removes the data word from the source and happens once or
multiple times depending on the "Repeat actions until next transition" option in the state setting.

Incompatibility with Other
Actions
Cannot be combined with
DR_DATA.
Cannot be combined with
IN_ADDR when the address and
data buses are multiplexed.

Cannot be combined with
IN_DATA when the address and
data buses are multiplexed

Cannot be combined with
IN_DATA.
Cannot be combined with
DR_ADDR when the address and
data buses are multiplexed.

4

DR_ADDR

Drives the value from the specified source to address bus. The source can be Registers,
AddressCounter, or ThreadSocket. The address in Registers can be sourced using the
CY_U3P_PIB_GPIF_EGRESS_ADDRESS(thread_number) macro. The data in Sockets can
be controlled or sourced using the DMA APIs. Words from Socket can be sourced directly
using the firmware API CyU3PGpifWriteDataWords().An AddressCounter can be used to
source the address.

5

COMMIT

Commit or wraps up the buffer associated with the selected ingress thread and socket. The
buffer is transferred to the consumer side of the pipe. Typically, this is used to wrap up the buf- None
fer in between a transaction prematurely.

6

7

8

9

128

DR_GPIO

Drives the GPIO signal to HIGH/LOW or toggles the value immediately or after a delay of one
clock cycle. The interface observes output latency between the time the DR_GPIO action is
called and the change in the GPIO signal in the interface.
The "Repeat actions until next transition" in the state setting has no effect on the behavior of
the DR_GPIO action. This action is repeated for every clock cycle (the clock being the interface clock or the FX3 internal clock).

Cannot be combined with
DR_DATA when the address and
data buses are multiplexed.

None

LD_ADDR_COUNT

Loads the counter with initial settings. The initial settings are loaded while starting the state
machine. This value needs to be the same in all states within a given state machine diagram.
Multiple values are not allowed. These settings can be overridden using firmware APIs. When
the counter reaches the limit, the hardware sets the ADDR_CNT_HIT internal trigger signal. Cannot be combined with
This action is generally used with COUNT_ADDR and the ADDR_CNT_HIT trigger. The count COUNT_ADDR.
value can also be programmed by the firmware application using
CyU3PGpifInitAddrCounter(). The value programmed into the register at the time of execution
of the state machine will be used.

LD_DATA_COUNT

Loads the counter with initial settings. The initial settings are loaded while starting the state
machine. This value needs to be the same in all states within a given state machine diagram.
Multiple values are not allowed. These settings can be overridden using firmware APIs. When
the counter reaches the limit, the hardware sets the DATA_CNT_HIT internal trigger signal.
Cannot be combined with
This action is generally used with COUNT_DATA and the DATA_CNT_HIT trigger. The count COUNT_DATA.
value can also be programmed by the firmware application using
CyU3PGpifInitDataCounter(). The value programmed into the register at the time of execution
of the state machine will be used.

LD_CTRL_COUNT

Loads the counter with initial settings. The initial settings are loaded while starting the state
machine. This value needs to be the same in all states within a given state machine diagram.
Multiple values are not allowed. These settings can be overridden using firmware APIs. When
the counter reaches the limit, the hardware sets the CTRL_CNT_HIT internal trigger signal.
Cannot be combined with
This action is generally used with COUNT_CTRL and the CTRL_CNT_HIT trigger. The count COUNT_CTRL.
value can also be programmed by the firmware application using CyU3PGpifInitCtrlCounter().
The value programmed into the register at the time of execution of the state machine will be
used.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

No

Action

Description

Incompatibility with Other
Actions

10

COUNT_ADDR

Increments/decrements the address counter value each time the state is visited. The hardware produces an ADDR_CNT_HIT event upon reaching the limit value specified during
LD_ADDR_COUNT.

Cannot be combined with
LD_ADDR_COUNT.

11

COUNT_DATA

Increments/decrements the data counter value each time the state is visited. The hardware
produces a DATA_CNT_HIT event upon reaching the limit value specified during
LD_DATA_COUNT.

Cannot be combined with
LD_DATA_COUNT.

12

COUNT_CTRL

Increments/decrements the control counter value each time the state is visited. The hardware
Cannot be combined with
produces a CTRL_CNT_HIT event upon reaching the limit value specified during
LD_CTRL_COUNT.
LD_CTRL_COUNT.

CMP_ADDR

Compares the sampled address with the specified comparison value or detects any change in
the address value.
Cannot be combined with
IN_DATA when the address and
"Repeat actions until next transition" in the state setting has no effect on the behavior of the
CMP_ADDR action. This action is repeated for every clock cycle (the clock being the interface data buses are multiplexed.
clock or the FX3 internal clock)..

CMP_DATA

Compares the sampled address with the specified comparison value or detects any change in
Cannot be combined with
the data value.
DR_DATA. Cannot be combined
"Repeat actions until next transition" in the state setting has no effect on the behavior of the
with IN_ADDR when the address
CMP_DATA action. This action is repeated for every clock cycle (the clock being the interface and data buses are multiplexed.
clock or the FX3 internal clock)..

13

14

Compares the sampled control word with the specified comparison value or detects any
change in the control value.
15

CMP_CTRL

16

INTR_CPU

Generates a CYU3P_GPIF_EVT_SM_INTERRUPT event to the FX3 CPU, which can be serNone
viced by the registered interrupt callback in the firmware.

17

INTR_HOST

Drives the INTR pin in the P-port interface to indicate the presence of an interrupt signal to the
None
external processor. The INTR pin should be connected to the external processor.

18

DR_DRQ

Drives the DRQ pin in the P-port interface to indicate the presence of a data request to the
external processor. The signal should be connected to the external processor on which the
DRQ is enabled.

7.4.1.1

None
"Repeat actions until next transition" in the state setting has no effect on the behavior of the
CMP_CTRL action. This action is repeated for every clock cycle (the clock being the interface
clock or the FX3 internal clock)..

None

Action - IN_DATA

The IN_DATA action samples data from the data bus and moves it to the specified destination. The destination can be the
DMA channel or the firmware application. See the firmware API CyU3PGpifReadDataWords(). Note that the option for
selecting the destination thread is available only when the destination is the DMA channel with the addressing mode selected
as Thread selected by State machine (Number of address lines =0).
It is possible to latch only the data from the data bus and not to store it in the selected destination or to store previously
latched data in the selected destination. These options are made available to satisfy certain protocols when the data on the
bus may lead a strobe signal that indicates data availability.
Figure 7-4. IN_DATA Action Settings Dialog Box

The following parameters are associated with this action:

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

129

■

Data Sink-Register/ Socket/ PPRegister

■

Thread Number-Thread number with which the data sink is associated. Selectable from Thread0 to 3 (This feature is
available when there is no address line to select the thread number or when master mode is enabled.)

■

Sample data from data bus-This option, when checked, samples data from the data bus, but does not push it in to the
specified data sink.

■

Write data into Data Sink-This option is selected when the user wants to push the sampled data into the specified data
sink.

7.4.1.2

Action - IN_ADDR

The IN_ADDR action causes the GPIF II hardware to sample the value from the address bus and use it to select a DMA
thread or a socket. Refer to the FX3 Terminology section in AN75705 - Getting started with EZ-USB FX3 for more details on
DMA threads and sockets.
When the address bus width is less than or equal to 2 bits, the address can select only a DMA thread. If the address is
between 3 and 5 bits wide, it can select either a DMA thread or a specific socket. The Address Selecting parameter shown in
Figure 7-4 is used to make this selection.
Figure 7-5. IN_ADDR Action Settings Dialog Box

The following parameter is associated with this action:
■

Address Selecting-Thread or Socket

7.4.1.3

Action - DR_DATA

The DR_DATA action drives data on the bus from the source specified. The source can be the DMA channel or the firmware
application. See the firmware API CyU3PGpifWriteDataWords(). Note that the option for selecting the source as the thread
number is available only when the source is the DMA channel with the addressing mode selected as Thread selected by State
machine (Number of address lines =0).

130

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-6. DR_DATA Action Settings Dialog Box

The following parameters are associated with this action:
■

Update new value from data source-This option updates the data bus with the data word present in the source and
removes the word from the specified source.

■

Data Source-This option selects between data counter and register/Socket/PPRegister.

■

Thread Number-Thread number with which the data source is associated. Selectable from Thread0 to 3. (This feature is
available when there is no address line to select the thread number.)

■

Remove data from data source-When this option is disabled, the data source continues to point to the same data.

Note: The Update new value from data source flag overrides the Repeat actions until next transition flag in the State Settings
dialog box. This means if the Update new value from data source option is selected, data will be updated on the bus in every
clock cycle when FX3 is in that state, even if the Repeat actions until next transition flag is not selected.

7.4.1.4

Action - DR_ADDR

The DR_ADDR action drives the value from the specified source to the address bus. The source can be the DMA channel or
the firmware application.
Figure 7-7. DR_ADDR Action Settings Dialog Box

The following parameters are associated with this action:
■

Address Source-Register/AddressCounter/ThreadSocket.

■

Thread Number-Thread0 to 3 (available only when number of address bits is set to 0).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

131

7.4.1.5

Action - COMMIT

The COMMIT action commits the data packet/buffer on the selected DMA channel.
Let say in your application, the data is transferred from GPIF II to USB and a DMA channel is created by allocating a DMA
buffer. When you use COMMIT action in the GPIF II state machine, the control of DMA buffer will be given to USB block. That
means the data in the DMA buffer is ready to be transmitted to USB host.
This action is typically used to force "buffer/packet end" using the state machine. For committing short buffers, this action
should be used along with the IN_DATA action. If the buffer is partially filled and the COMMIT action is performed without the
IN_DATA action, a zero-length buffer will be committed in addition to the partially filled buffer.
Figure 7-8. COMMIT Action Settings Dialog Box

The following parameters are associated with this action:
■

Thread Number-Thread 0 to 3 (available only when the number of address bits is configured to 0 or master mode is
enabled).

7.4.1.6

Action - DR_GPIO

The DR_GPIO action drives a GPIO signal to HIGH/LOW or toggles the value after "Assertion Delay" cycles. In synchronous
mode, the delay can be between two and three cycles, and in an asynchronous (no clock) system the delay can be 25 ns or
30 ns. The GPIO driven using the action is deasserted during the transition to the next state.
Figure 7-9. DR_GPIO Action Settings Dialog Box

The following parameters are associated with this action:

132

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Signal Name-A user-defined alphanumeric string to indicate the signal can be entered here. This name will appear on the
state machine canvas.

■

Output type: Early or Delayed-This parameter controls the delay of the output signal being driven. The delay will be 25 ns
in asynchronous mode or two clock cycles in synchronous mode when the Early option is not selected. The delay will be
30 ns in asynchronous mode or three clock cycles in synchronous mode when the Delayed option is selected.

■

Signal mode-In toggle mode, the signal value complements; in assert mode, the signal value is driven per the polarity of
the signal. The polarity of the signal is configured in the Interface Definition window.

Notes

1. The delayed output and signal mode settings are global for each signal and cannot be changed every time the action is
used in a different state. The tool will generate a configuration file that corresponds to the last settings that were made for
each output signal.
2. "Repeat actions until next transition" in the state setting has no effect on the behavior of the DR_GPIO action. This action
is repeated for every clock cycle (the clock being the interface clock or the FX3 internal clock).

7.4.1.7

Action - LD_ADDR_COUNT

This action loads the counter settings. Settings are loaded when the state machine starts. This value needs to be the same in
all states within a given state machine diagram.
Figure 7-10. LD_ADDR_COUNT Action Settings Dialog Box

The following parameters are associated with this action:
■

Counter type: Up counter/Down counter-The counter can be configured to count in ascending/descending order.

■

Counter load value-Initial count loaded when this action is performed.

■

Counter limit value-The count value at which the event should be generated.

■

Reload counter on reaching limit-The count load value can be reloaded when the counter limit value is hit by selecting this
parameter.

■

Counter mask event-If this option is not selected, a firmware event is generated when the counter limit is reached.

■

Counter step value-The counter step value that should be added/subtracted each time the COUNT_ADDR action is used.

7.4.1.8

Action - LD_DATA_COUNT

This action loads the counter with initial settings. The initial settings are loaded when the state machine starts. This value
needs to be the same in all states within a given state machine diagram.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

133

Figure 7-11. LD_DATA_COUNT Action Settings Dialog Box

The following parameters are associated with this action:
■

Counter type: Up counter/Down counter-The counter can be configured to count in ascending/descending order.

■

Counter load value-The initial count loaded when this action is performed.

■

Counter limit value-The count value at which the event should be generated.

■

Reload counter on reaching limit-The count load value can be reloaded when the count limit value is hit by selecting this
parameter.

■

Counter mask event-If this option is not selected, a firmware event is generated when the counter limit is reached.

■

Counter step value-The counter step value that should be added/subtracted each time the COUNT_DATA action is used.

7.4.1.9

Action - LD_CTRL_COUNT

This action loads the counter with initial settings. The initial settings are loaded when the state machine starts. This value
needs to be same in all states within a given state machine diagram. Multiple values are not allowed.
Figure 7-12. LD_CTRL_COUNT Action Settings Dialog Box

The following parameters are associated with this action:

134

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Counter type: Up counter/Down counter-The counter can be configured to count in ascending/descending order.

■

Counter load value-The initial count loaded when this action is performed.

■

Counter limit value-The count value at which the event should be generated.

■

Reload counter on reaching limit-The count load value can be reloaded when the count limit value is hit by selecting this
parameter.

■

Counter mask event-If this option is not selected, a firmware event is generated when the counter limit is reached.

■

Counter step value-The counter step value that should be added/subtracted each time the COUNT_CTRL action is used.

7.4.1.10

Action - COUNT_ADDR

This action updates the address counter value with the step value configured through the LD_ADDR_COUNT action. The
ADDR_CNT_HIT trigger will become true if this update results in the count reaching the specified limit.
Note that there are no parameters associated with this action.

7.4.1.11

Action - COUNT_DATA

This action updates the data counter value with the step value configured through the LD_DATA_COUNT action. The
DATA_CNT_HIT trigger will become true if this update results in the count reaching the specified limit.
Note that there are no parameters associated with this action.

7.4.1.12

Action - COUNT_CTRL

This action updates the control counter value with the step value configured through the LD_CTRL_COUNT action. The
CTRL_CNT_HIT trigger will become true if this update results in the count reaching the specified limit.
Note that there are no parameters associated with this action.

7.4.1.13

Action - CMP_ADDR

This action compares the address sampled with the specified comparison value.
Figure 7-13. CMP_ADDR Action Settings Dialog Box

The following parameters are associated with this action:
■

Comparator mode-In Value match mode, compares the current address value with the comparator value. In Change
detection mode, any change in the address value will cause a comparator match.

■

Unmask value-Use this value to unmask the bits to be compared.

■

Comparison value-Value against which to compare the address.

■

Comparator mask event-When you deselect this parameter, it will cause an event to be generated to the firmware application on a comparator match.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

135

Note The "Repeat actions until next transition" in the state setting has no effect on the behavior of the CMP_ADDR action.
This action is repeated for every clock cycle (the clock being the interface clock or the FX3 internal clock).

7.4.1.14

Action - CMP_DATA

This action compares the data sampled with the specified comparison value.
Figure 7-14. CMP_DATA Action Settings Dialog Box

The following parameters are associated with this action:
■

Comparator mode-In Value match mode, compares the current data value with the comparator value. In Change detection
mode, any change in the data value will cause a comparator match.

■

Unmask value-Use this value to unmask the bits to be compared.

■

Comparator value-Value to compare the data against.

■

Comparator mask event-When you deselect this parameter, it will cause an event to be generated to the firmware application on a comparator match.

Note: The "Repeat actions until next transition" in the state setting has no effect on the behavior of the CMP_DATA action.
This action is repeated for every clock cycle (the clock being the interface clock or the FX3 internal clock).

7.4.1.15

Action - CMP_CTRL

This action compares the control bits with the specified comparison value.
Figure 7-15. CMP_CTRL Action Settings Dialog Box

The following parameters are associated with this action:

136

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Comparator mode-In Value match mode, compares the current control signal values with the comparator value. In
Change detection mode, any change in the unmasked control signals will cause a comparator match.

■

Unmask value-Use this value to unmask the bits to be compared.

■

Comparison value-Value against which to compare the control signals.

■

Comparator mask event-When you deselect this parameter, it will cause an event to be generated to the firmware application on a comparator match.

Note: "Repeat actions until next transition" in the state setting has no effect on the behavior of the CMP_CTRL action. This
action is repeated for every clock cycle (the clock being the interface clock or the FX3 internal clock).

7.4.1.16

Action - INTR_CPU

This action interrupts the on-chip CPU to generate a CYU3P_GPIF_EVT_SM_INTERRUPT event, which is to be handled by
the firmware application.
No parameters associated with this action.

7.4.1.17

Action - INTR_HOST

This action interrupts the external processor by driving the INTR pin on the P-port.
No parameters associated with this action.

7.4.1.18

Action - DR_DRQ

This action drives the DRQ pin in the P-port interface to indicate the presence of a data request to the external processor.
Figure 7-16. DR_DRQ Action Settings Dialog Box

The following parameters are associated with this action:
DRQ value-Asserted or deasserted
■

Assert DRQ on-The DRQ signal can be asserted using any of these options:

■

From the DMA engine

■

On assertion from the external processor on the DACK pin of FX3

■

On deassertion of DACK from the external processor on the DACK pin of FX3

■

From the state machine using the DR_DRQ action

■

De-assert DRQ on-The DRQ can be deasserted using any of these options:

■

On assertion from the external processor on the DACK pin of FX3

■

On deassertion from the external processor on the DACK pin of FX3

■

From the state machine using the DR_DRQ action

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

137

7.4.2

Triggers

Triggers are signals that cause state transitions to occur. They can be:
External: Control signals driven by the external device
Internal: Internal signals asserted due to hardware or firmware events
Table 7-3 captures events generated as a result of the GPIF II actions.

Table 7-3. Event Generated by GPIF II Actions
No.

Event

Action Causing the Event

Description

1

Input signal name

None; this is an external event

The name associated with any GPIO configured as an input can be used as a trigger in a
transition equation.

2

FW_TRG

Firmware application

This trigger can be generated from the firmware using the firmware API
CyU3PGpifControlSWInput().

3

INTR_PENDING

Interrupt to CPU

This is true only when the CPU/host has yet to read the previously raised interrupt.

4

CTRL_CNT_HIT

COUNT_CTRL

This trigger is true when the count specified is reached. It is generated as a result of the
COUNT_CTRL action.

5

ADDR_CNT_HIT

COUNT_ADDR

This trigger is true when the count specified is reached. It is generated as a result of
COUNT_ADDR action.

7

DATA_CNT_HIT

COUNT_DATA

This trigger is true when the count specified is reached. It is generated as a result of
COUNT_DATA action

8

CTRL_CMP_MATCH

CMP_CTRL

This trigger is true when the control pattern and mask match the current GPIO. It is generated only when the CMP_CTRL action is specified in the parent state.

9

DATA_CMP_MATCH

CMP_DATA

This trigger is true when the data pattern and mask match the current data. It is generated
only when the CMP_DATA action is specified in the parent state.

10

ADDR_CMP_MATCH

CMP_ADDR

This trigger is true when the address pattern and mask match the current address read. It is
generated only when the CMP_ADDR action is specified in the parent state.

DMA_RDY_CT,
DMA_RDY_TH0,
11

DMA_RDY_TH1,
DMA_RDY_TH2,

IN_DATA
DR_DATA

This trigger is true when the DMA is ready to send or receive data.

DMA_RDY_TH3
DMA_WM_CT,
DMA_WM_TH0,
12

DMA_WM_TH1,

IN_DATA

This trigger is true when the active DMA thread crosses the transferred data above the
watermark.

DR_ADDR

This trigger is true when the DMA is ready to send or receive an address.

IN_DATA

This trigger is true when the data in the input register (INGRESS_DATA_REGISTER) is
valid. It is set when GPIF II writes data into the INGRESS_DATA_REGISTER using the
IN_DATA action. It is cleared by the firmware by setting the IN_DATA_VALID field in the
GPIF_DATA_CTRL register.

DMA_WM_TH2,
DMA_WM_TH3
13

DMA_RDY_ADDR
IN_REG_CR_VALID,

14

IN_REG0_VALID,
IN_REG1_VALID,
IN_REG2_VALID,
IN_REG3_VALID
OUT_REG_CT_VALID,

15

16

OUT_REG0_VALID,
OUT_REG1_VALID,
OUT_REG2_VALID,
OUT_REG3_VALID
OUT_ADDR_VALID

7.4.3

DR_DATA

DR_ADDR

This trigger is true when the data in the output register (EGRESS_DATA_REGISTER) is
valid. The firmware needs to enable this trigger by setting the EG_DATA_VALID bit in the
GPIF_DATA_CTRL register. This trigger will be cleared when the data in the register has
been transmitted by the GPIF II as a result of the DR_DATA action.
This trigger is true when the address in the output register
(EGRESS_ADDRESS_REGISTER) is valid. It is done when the firmware sets the
EG_ADDR_VALID bit in the GPIF_DATA_CTRL register.

Transition Conditions

Transition conditions determine the transition out of a state and into another. The transition conditions are Boolean logic
functions of the trigger signals. A simple example of actions, triggers, and transition conditions is shown in Figure 7-17, where
the three GPIF II states are IDLE, READ, and WRITE. No actions are asserted in the IDLE state. The CE, RE, and WE
signals are the trigger signals. They are the control input signals to GPIF II and are driven by an external device. The
transition conditions are formed with these signals. The left transition condition is (!CE&&!RE) (a read operation), and the right

138

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

transition condition is (!CE&&!WE) (a write operation). If the left transition condition evaluates to TRUE, then GPIF II
transitions from the IDLE state to the READ state. If the left transition condition evaluates to FALSE, then the right transition
condition is checked. If the right transition condition evaluates to TRUE, then GPIF II transitions from the IDLE state to the
WRITE state. If neither left nor right conditions evaluate to TRUE, then GPIF II remains in IDLE. Note that the first test
resolves the contention if both f0 and f1 are true.
Figure 7-17. Example State Transitions with Actions

IDLE
If (!CE&&!RE)

READ
(Actions: DR_DATA )

If (!CE&&!WE)

WRITE
(Actions: IN_DATA )

* f0 and f1 are logical functions of trigger signals

7.4.4

GPIF II Designer Tool

An essential part of working with FX3 GPIF II is the GPIF II Designer tool. The GPIF II Designer tool provides a convenient
graphical user interface (GUI) that allows you to define GPIF II state machines in graphical form. The various GPIF II triggers
and actions are available in an easy-to-use manner, allowing simple addition to the states in the diagram. The tool converts
the user graphical design into a C header file that can be integrated with the firmware application code using the firmware API
framework. The tool also generates warnings and error messages during the graphical entry process. You can create your
own GPIF II designs, but the GPIF II Designer tool also provides a set of "canned" designs for popular interfaces.
Documentation of these interfaces, describing the protocol along with timing diagrams, is available when you open an
example project in GPIF II Designer. As part of its initialization, FX3 firmware copies the settings in the .h file into the
appropriate GPIFII registers.
You can also make minor customizations to these designs to suit the target environment. A detailed description of the tool and
its use is provided in the GPIF II Designer User Guide, which is available when you install the tool with the EZ-USB FX3
Software Development Kit.

7.4.5
7.4.5.1

GPIF II Hardware Resources
Comparators

GPIF II includes an address comparator, a data comparator, and a control comparator. You can set the value of the
comparator and a mask that does a bit-by-bit enable. A trigger is available for these comparators that asserts when the
comparator meets the set limit.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

139

7.4.5.2

Counters

GPIF II has three counters for control, address, and data. The reset value and count limit value can be programmed for each
counter. The counter value is incremented by using the actions provided in the GPIF II Designer tool. A counter reaching its
programmed limit provides one of the available GPIF II trigger signals.

7.4.5.3

GPIF II Interrupt

Any GPIF II state can interrupt the CPU by asserting the INTR_CPU action provided in the GPIF II Designer tool. GPIF II state
machine execution continues after interrupting the CPU.

7.4.6

Threads and Sockets

A thread in the GPIF II context is a physical, hardware, data channel. There are four physical threads, each with an
independent controller. A socket, on the other hand, is very similar to an endpoint in the USB context. Each socket has buffers
assigned to it during initialization. A particular thread is mapped to a particular socket during initialization. This mapping can
be changed later during execution. A GPIF II thread is basically a pipe through which the data on the GPIF II interface is
connected to the socket (and hence buffer), where it is required to be written to or read from. Though there are four
independent threads, GPIF II can access only one of them at a time. Which thread is to be accessed can be specified using
the address bus on the GPIF II interface (two address bits select one of the four threads).

7.4.6.1

Difference Between PP_MODE=0 and PP_MODE=1

PP_MODE is a bit field of GPIF II Configuration register (GPIF_CONFIG). This decides the two modes of GPIF II. One mode,
PP_MODE=0, is designed for peripherals that use hardware signaling to switch end points or sockets. In this mode, the 32
sockets are mapped to 4 threads in a modulo-4 fashion. The other mode, called PP_MODE=1, is designed for interfacing with
chips that have DMA engines that transfer large data and switch end points through the accessing processor port (PP)
registers. In this mode, all the sockets are connected to a single thread inside the GPIF II.
PP_MODE=0 enables all four threads described in the previous section, as shown in Figure 7-18.

140

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-18. GPIF II - PP_MODE=0
PP_MODE = 0

Address bus

Thread 0

Socket with
associated
buffers
allocated

up to 8 sockets can be mapped to each thread

Thread 1

Socket with
associated
buffers
allocated

up to 8 sockets can be mapped to each thread

Thread 2

Socket with
associated
buffers
allocated

up to 8 sockets can be mapped to each thread

Thread 3

Socket with
associated
buffers
allocated

up to 8 sockets can be mapped to each thread

GPIFII

The second mode is PP_MODE=1. In this mode, while the four independent threads still exist, only one thread (Thread0) is
used, through which all sockets are accessed. In this mode, the external processor must first write to a few FX3 registers over
the GPIF II interface. These registers have 8-bit addresses; hence, in PP_MODE=1, having at least an 8-bit-wide address
bus on the interface is a requirement. By writing certain FX3 registers (PP_DMA_XFER and PP_DMA_SIZE), the socket
number and amount of data to be transferred are specified. Then when data access begins, the data is automatically routed
through thread 0, to and from whichever socket number was specified earlier in the register, as shown in Figure 7-19.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

141

Figure 7-19. GPIF II - PP_MODE=1
PP_MODE = 1
GPIFII

Socket with
associated
buffers
allocated

Address bus

up to 32 sockets
accessed through Thread0

Thread 0

(number of address lines >=8)

Address
Comparator

7.4.7
7.4.7.1

Register Block
If A7=1, GPIFII routes access
to register block
If A7=0, GPIFII routes access
to socket. The socket number
is specified in the
PP_DMA_XFER register

Addressing
Number of Address Lines

The number of address lines is an important factor in determining the addressing scheme. When the number is eight or more,
the GPIF II Designer tool automatically sets a field, "PP_MODE," which enables an external processor to access some PIB
registers. An example of an interface with eight address lines is the SRAM interface. In this case, the external processor can
directly program the socket and access direction and byte count through the PP_DMA_XFER and PP_DMA_SIZE registers.
When the interface has fewer than eight address lines, access to P-port registers is not possible, and the GPIF II Designer
tool clears the PP_MODE field to 0. For example, this is the case for the Slave FIFO interface, in which, the mapping of
sockets to threads is important, as explained in the following section.

7.4.7.2

Assigning Sockets to Threads

FX3 provides up to four physical threads for data transfer over GPIF II. At a time, any one socket may be mapped to a thread.
For example, in the Slave FIFO implementation, the address signals A0:A1 on the interface indicate the thread to be
accessed. The FX3 DMA fabric will then route the data to the socket mapped to that thread. So if socket 2 is mapped to
thread 2, when A0:A1 = 2, thread 2 is accessed, and any data that is transferred over thread 2 will be routed to socket 2.
Note: In PP_MODE=1, only thread 0 is used. The socket number programmed in the DMA_XFER register gets mapped to
thread 0. In PP_MODE=0, all four threads are accessible. Even though only four physical threads are available, an address
mapping mechanism can be used to access more than four socket addresses. Refer to application note AN68829 - Slave
FIFO Interface for EZ-USB FX3: 5-Bit Address Mode.

7.4.7.3

Addressing Methods

A socket may be addressed directly in PP_MODE =1 by the external processor programming the PP_DMA_XFER register.
Note that when PP_MODE =1, the GPIF II hardware decodes the address based on address bit A7. If A7=1, GPIF II
interprets the access as a register access and performs a read or write to the register address specified by A[7:0]. If A7=0,
then GPIF II interprets the access to be a socket access and performs a read or write operation to the socket number
specified in the PP_DMA_XFER register.
In PP_MODE =0, when the external processor/device does not have access to the PP registers, the thread to be accessed
may be addressed in the following ways. Note that in this case, the corresponding GPIF_THREAD_CONFIG(x) register must
be programmed using the API with the active socket to be accessed.
■

Thread_in_state: Thread address from GPIF II state

142

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

A0, A1: Thread address specified by A0:A1

■

Data_thread: Thread address specified by the data_thread field of the GPIF_AD_CONFIG register

7.4.8

Async/Sync

GPIF II supports both asynchronous and synchronous interfaces, configured by programming the "sync" field of the
GPIF_CONFIG register. For synchronous interfaces, the interface clock may be provided by an external source or the FX3
internal clock.

7.4.9

Configuration of Flags

To enable flow control on the interface, flags may be configured as empty, full, partially empty, or partially full signals. These
are not controlled by GPIF II states; rather, they are controlled directly by the DMA hardware engine internal to FX3. Flags are
associated with specific threads and hence indicate the status of the socket currently mapped to that thread. Flags indicate
empty or full, based on the direction of the socket (configured during socket initialization). So, the flag indicates an empty or
not empty status if data is being read out of the socket. It indicates a full or not full status if data is being written into the
socket. The GPIF II Designer tool allows for the configuration of flags, which are typically used in Slave FIFO mode. For a
partial flag, the watermark level must be programmed in the corresponding GPIF_THREAD_CONFIG register. For
information about the Slave FIFO interface and flag usage, refer to the application note AN65974 - Designing with the EZUSB FX3 Slave FIFO Interface.

7.4.10

Developing the GPIF II State Machine

This section describes the steps involved in developing the GPIF II state machine.

7.5

Designing a GPIF II Interface

The first step is to configure the GPIF II outside-world interface by filling out the entries in the Interface Settings section of the
Interface Definition tab (Figure 7-20). As you select and deselect options, the center panel changes to reflect a "living
schematic" of the interface. This saves you the trouble of figuring out the FX3 pin mapping because the FX3 signals are
labeled in the FX3 block.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

143

Figure 7-20. GPIF II Interface Definition Tab

Before starting a GPIF II design, consider the following questions:
1. Which FX3 serial peripherals will be used by your overall application?

In addition to the programmable GPIF II interface, the FX3 device implements a set of serial communication blocks to connect to external peripheral devices. The serial communication protocols supported are I2C (master only), I2S (transmitter
only), SPI (master only), and UART. Enabling a specific peripheral block on the FX3 affects the number of pins available
for use as part of the GPIF II interface.
2. Will FX3 act as a master or a slave of the interface?

A GPIF II interface allows the FX3 to interface with an external processor acting as a master or a slave. If the interface
transactions with the external system are initiated by FX3, then FX3 is the master. FX3 is a slave if the interface transactions are initiated by the external processor (connected on the GPIF II port), and the FX3 is only expected to respond to
the actions initiated by the external processor. A given GPIF II configuration uses the FX3 as a master or a slave device.
It is not possible to implement both modes in a single configuration.
If an address bus is part of the electrical interface, this will serve as an input for slave mode designs and as an output for
master mode designs.

144

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

When you select Master or Slave, the Action List (right panel) automatically updates to show the available choices for the
selection.
3. Does this interface use a clock?

A GPIF II-based interface can be synchronous or asynchronous in nature. In the case of a synchronous project, the GPIF
II state machine operates using the same clock that is used on the interface. A given GPIF II configuration is asynchronous or synchronous; it is not possible to have both coexisting in a given configuration.
An example of an asynchronous interface is a static RAM that has an address and data bus, read and write strobes, but
no clock. A read operation, for example, occurs by asserting the address, and then asserting chip enable and read
strobes. The data comes out a propagation time after the read strobe, with no reference to a clock.
4. Do you want FX3 GPIF II to drive the interface clock?

If yes, then select Internal; otherwise, select External. This section is dimmed out if you do not select Synchronous in
question 3.
This interface clock can be generated and driven out by the FX3 device or provided as input to the FX3 device. The maximum frequency supported for the GPIF II interface clock is 100 MHz.
5. When do you want GPIF II to sample interface signals? On the positive edge or the negative edge?

This section is dimmed out if you do not select Synchronous in question 3.
6. Endian-ness of your device: Little endian or big endian?.

"Endian-ness" refers to byte ordering in multibyte integers-most significant (big) or least significant (little) byte first.
7. Data bus width of the external device connected to FX3: 8-bit, 16-bit, 24-bit or 32-bit?

A GPIF II interface offers a maximum of 32 bidirectional data lines, which can be split into, or time multiplexed with,
address lines. In multiplexed operation, the address bus has the same width as the data bus. One of the control pins can
be used to implement the ADV or ALE signal required to control the functionality of the address/data multiplexed bus. If
the address bus is not time multiplexed with the data bus, the number of address lines available will depend on the width
of the data bus.
8. Does the external device require address lines?

This would be true if the device needs to select between FX3 resources, such as threads, sockets (configured as Slave in
GPIF II) or to select the particular memory region on the external device (configured as Master in GPIF II).
9. Do you want to enable special functions?

Some of the general-purpose I/O signals of FX3 can be associated with special functions that are commonly used in standard protocols. These special functions are only available on specific pins, and control signals that use them cannot be
moved to other pins. The enables are:
OE: Output Enable. Provides direct control of output drivers. The OE signal directly controls whether the data bus is
driven or tristated by the FX3, so that the latencies associated with doing this through the GPIF II state machine are
removed.
WE: Write Enable. Provides direct control to disable output drivers on the data bus. The data bus will not be driven by FX3
if the WE special function is selected and the WE input is asserted.
DLE: Data Latch Enable. Enables the input stage on the FX3 data bus to latch data. This special function is normally combined with the WE function.
ALE: Address Latch Enable. Enables the input address stage on the FX3 to latch address values.
DRQ: DMA Request. Provides a DMA request output that is controlled through the GPIF II state machine and that
responds to the DACK input signal.
DACK: DMA Acknowledge. This is not a separate special function, but an input that is used to control the behavior of the
DRQ signal.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

145

Table 7-4. GPIO mapping for Special Function signals
Special Function
DLE/WE

GPIO
GPIO_18

OE

GPIO_19

ALE

GPIO_27

DACK

GPIO_20

DRQ

GPIO_21

10. How many signals need to be monitored by GPIF II, and how many need to be driven by GPIF II? Also, how many
DMA flags do you need in your application?

Control pins can be configured as input signals that drive the GPIF II state machine, output signals that are driven by the
state machine, or flags that reflect the transfer readiness of various buffers on the FX3 device. You can configure any pins
that are unused by the GPIF II block as GPIOs that are controlled by the firmware application. As you add inputs or outputs, the state machine designer automatically adds them as choices to be tested (inputs) or asserted (outputs) in any
state.

7.6

GPIF II State Machine Implementation

The state machine canvas provides graphical controls to draw a GPIF II state machine diagram. A GPIF II state machine
consists of actions performed in each state and triggers that cause transitions from one state to another. The Action List
window displays the list of actions that can be added to states.
Click the State Machine tab to open the canvas. An unedited canvas has two states: START and STATE0. An unconditional
transition (LOGIC_ONE) connects the states as shown in the figure below.
Figure 7-21. GPIF II Designer Interface

The state machine canvas supports the following operations.

7.6.1

Add a State

A right-click anywhere on the canvas displays the State Machine menu. Select Add State to add a state to the canvas as
shown in the figure below.

146

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-22. GPIF II Designer (Adding a State)

7.6.2

Add Actions to a State

To add an action to a state, select the state by clicking the mouse inside the state graphic. Right-click the action that you want
to add from the Action List window. Select Add to Selected State from the menu. You can also open the Action List window by
choosing View > Action List. The list of actions is shown in the figure below.
Figure 7-23. GPIF II Designer (Adding Actions to a State)

7.6.3

Draw Transitions Between Actions

Position the mouse cursor inside the source state, from which the transition will originate. The cursor changes its shape to “+.”
Press the left mouse button, drag the mouse cursor to the destination state, and release it. The result of this step is shown in
the figure below.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

147

Figure 7-24. GPIF II Designer (Transitions Between Actions)

7.6.4

Add a Transition Equation

Bring the cursor to point to the transition line. Double-click on the line to open the Transition Equation Entry dialog box. All
available triggers to form a transition equation are displayed as a selectable list. Select the trigger and add to the Equation
Entry using the Add button. Use the necessary Boolean expression notations from the buttons on the left of the dialog box.
Alternatively, you can type the equation directly in the Equation Entry box to enter the Boolean expression. Click OK after
entering the equation. The window that pops up to enter the transition equation is shown in the figure below.
Figure 7-25. GPIF II Designer (Adding a Transition Equation)

7.6.5

Set State Properties

Position the mouse cursor inside a state graphic. Right-click to display the State menu. Select Settings from the menu to open
the State Settings dialog box. Every state can be associated with a name using an alphanumeric string. Macros that map the
state names to the state IDs generated by the tool are generated by the tool as part of the header generation.
The Repeat Count property indicates the number of clock cycles to continue inside the state before evaluating any outgoing
transition equation.

148

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

You can opt to have the actions associated with the state repeated until the transition to the next state by selecting the Repeat
actions until next transition option as shown in the figure below.
Figure 7-26. GPIF II Designer (Set State Properties)

7.6.6

Analyzing the Signal Timing of the GPIF II Interface

After entering the state machine corresponding to the P-port interface, you can use the Timing window to simulate the relative
timing of the input and output signals. The GPIF II project should be built without any errors before using the timing window
for simulation.
To perform the timing simulation, select a specific state machine path in the state machine. Save the selected path for further
viewing in a file. You can load a saved timing scenario from the menu provided on the top strip of the Timing window.
You can create a new timing scenario using the Create Scenario dialog box. A toolbar icon to create a scenario appears on
the top strip of the Timing window. You can enter a unique name to identify the scenario being created in the Scenario Name.
Use the Scenario Entry dialog box to select for the simulation a path consisting of a set of states that you can traverse
sequentially.
The Timing window provides the following features:

7.6.6.1

Selection of Time Frame

The display frame of the timing diagram can be selected by specifying the start and end of the time frame. The start and end
of time frame can be specified on the left and right bottom corner of the timing display respectively.

7.6.6.2

Automatic Timing Scale Selection

The timing window will be adjusted to the optimum scale according to the screen resolution and viewable area.
Note The timing simulation is performed based on a model of the GPIF II hardware. The GPIF II hardware execution is
synchronous even if the interface is operating asynchronously. A typical operating (internal) clock frequency of 200 MHz (5-ns
cycle time) is used in the simulation of asynchronous protocols.

7.6.7

Scenario Entry

You can simulate the state machine to view the relative timing and value of the signals in the form of a timing diagram. Select
the state machine path whose behavior is to be simulated.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

149

To select the path (state sequence) to be simulated, go to Timing Simulation > New Scenario or use the toolbar icon. The
Create Scenario dialog box is displayed.
Figure 7-27. Create Scenario Dialog Box

Enter a name for the scenario being created. The name can also be used to view the timing scenario later. Select the start
state of the sequence for states to be traversed. The tool then continuously provides a drop-down menu showing all the
possible next states for the currently selected state, and you can define the path by repeatedly selecting the desired states.
The current state is available as the next state option, unless a compulsory transition is specified in the state machine.
A timing scenario entered is saved with the name specified by the user during creation. All saved timing scenarios will be
available in a drop-down menu on the top strip of the window. A saved scenario can be selected from this menu and modified
or deleted. The Timing Simulation menu allows you to delete or modify the scenario.
Figure 7-28. Modify Scenario Dialog Box

150

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

7.6.8

Macro

A macro is a reusable scenario corresponding to a circular timing path with repeat count. A macro is created and saved
similar to a Scenario, except that the macro always has the same end state as the start state and has a repeat count.
Typically a macro is used to analyze repeating circular state paths. Consider a burst operation. The state paths of a burst read
or burst write are repeated a number of times. An analysis of such an operation can be simplified by specifying it as a macro.
Figure 7-29. Create Macro Dialog Box

7.7

GPIF II Constraints

The GPIF II hardware imposes some limitations on the state machines that can it can create, as follows:
■

Native support is limited to state machines that are limited to two (or fewer) outgoing transitions from each state. Such
state machines are called "binary state machines" in the rest of this document.

■

Each transition equation is limited to the use of four or fewer trigger variables.

Note that many GPIF II protocols involve simple decisions, such as sampling ready signals or other inputs. The following
discussion applies to situations where the decision logic is less simple.
Two techniques are available to surmount these limitations:
■

Mirror States

■

Intermediate States

The GPIF II Designer tool applies the first technique automatically on state machines that exceed two exit triggers. However,
it is possible that the tool may be unable to identify a set of transformations that allow the state machine to be mapped to the
GPIF II hardware. In such a case, the tool outputs the error message "Unable to synthesize state machine." The user can
follow Guidelines for Transition Equation Entry on page 154 to try and resolve these errors. If the error persists despite
making these changes, contact Cypress Support for assistance.

7.7.1

Mirror States

The mirror state machine technique uses a GPIF II feature that facilitates state machine designs that do not conform to the
previously described rules.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

151

The GPIF II hardware supports working with multiple copies of a binary state machine, where the active state machine copy is
determined using the current value of a trigger variable. For example, consider the state machine fragment shown in
Figure 7-30. This state machine has a state, S0, which has four outgoing transitions based on the transition equations !ABC,
!AD, ABC, and AD.
Figure 7-30. GPIF II State Machine Example Requiring Mirror States

S3

!A &
D

!A
&

D

S2

A&

&C

S1

A&B

B&

C

S0

S4

The "A" can be removed from these transition equations to obtain the two modified state machines shown in Figure 7-31.
Figure 7-31. A GPIF II State Machine Split as Mirror States

In this case, S0' is inserted as a mirror state of S0. S0 has valid transitions pointing to S1 and S2, and S0' has valid transitions
pointing to S3 and S4. The state machine {S0, S1, S2} is applicable when the trigger variable A has a value of 0, and the state
machine {S0', S3, S4} is applicable when the trigger variable A has a value of 1. The GPIF II hardware automatically selects
the correct state between S1 and S3 or between S2 and S4 by looking at the current value of A.
GPIF II Designer tries to apply this feature to implement state machines that have more than two out transitions from a state
as well as state machines that use transition equations with excessive triggers. The derived state machines using this
procedure need to follow a set of GPIF II mirroring rules (described in the next section) in order to be implemented without
side effects.
A real example of this method is provided in 7.7.3 Mirror State Example on page 153.

7.7.2

Mirror State Rules

The GPIF hardware allows up to eight mirror state machines to be created, so that the active mirror is selected based on the
current value of up to three input signals. The input signals that are used to select the active mirror state machine are called
"global triggers."

152

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

A set of rules needs to be satisfied by all the mirror state machines. GPIF II Designer tries to identify a set of global triggers
that reduce the state machine to one that satisfies the following rules.
■

The transitions can be split into groups of two each, such that each group applies to a specific combination of trigger values.

■

The transitions in each group have the same transition equations after the global trigger terms have been removed.

■

The target states that share the same transition equation do not use conflicting actions. See Table 7-2 for details on
incompatible actions.

The tool first attempts to find a solution with one global trigger, then with two, and finally three global triggers. If the tool is
unable to find a state machine reduction that satisfies the previous conditions with any of these levels, it will issue an error
message saying that the state machine input cannot be synthesized.
In many cases, such state machine mapping errors are a consequence of an incompletely specified input. See 7.7.4
Guidelines for Transition Equation Entry on page 154 for state machine definition guidelines to aid the tool in finding a
solution.

7.7.3

Mirror State Example

Figure 7-32 shows a part of the synchronous Slave FIFO protocol implementation that is included with GPIF II Designer as a
Cypress supplied interface project.
Figure 7-32. Slave FIFO Interface Example State Machine Requiring Mirror States

IN_ADDR
DR_DATA

END
WR &
!
!RD &

!W
R&
RD
&

RD

WR
IN_DATA

ND
&E
WR
&!
!RD
END
WR &
!RD &

!EN
D

IDLE

SLP
IN_DATA
COMMIT

ZLP
COMMIT

The IDLE state is where the state machine waits for control signals to start performing a data transfer. Depending on the input
signals, it may transition to one of four states:
The RD state, where a read operation is handled. Transition to the RD state is triggered by the RD input signal asserting while
the WR and the END input signals are deasserted. The IN_ADDR and DR_DATA actions are performed in the RD state.
The WR state, where a general write operation (not end of packet) is handled. Transition to the WR state is triggered by the
WR input asserting while the RD and END signals are deasserted. The IN_DATA action is associated performed with this
state.
The SLP state, where a single word write operation is handled (data along with end-of-packet signaling). Transition to the SLP
state is triggered by the WR and END inputs asserting while RD is deasserted. The IN_DATA and COMMIT actions are
associated with this state.
The ZLP state, where a zero-length write operation is handled (no data, only end-of-packet signaling). This transition is
triggered by END asserting while RD and WR are both deasserted. The COMMIT action is associated with this state.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

153

The GPIF II Designer tool converts this state machine fragment into the implementation shown in Figure 7-33, which has four
mirror state machines. The conditions under which each of the four mirrors is active are listed on top. All the transitions that
are shown going to the right share the same transition equation, and the actions specified in these states are nonconflicting.
Figure 7-33. Slave FIFO Interface Example Implementation with Mirror States
WR = 1
END = 0

WR = 1
END = 1

IDLE_0

IDLE_1

IDLE_2

IDLE_3

ZLP

IN_ADDR
DR_DATA

7.7.4

!RD

RD

RD

!RD

WR = 0
END = 1

!RD

WR = 0
END = 0

WR

SLP
IN_DATA
COMMIT

IN_DATA
COMMIT

COMMIT

Guidelines for Transition Equation Entry

In some cases, GPIF II Designer is unable to reduce the input state machines to an implementable form because of
insufficient input information.
For example, consider another form of the state machine fragment shown in Mirror State Example on page 153. This version
of the state machine cannot be converted into multiple mirrored state machines that satisfy the mirroring rules using any
global trigger combination.
Figure 7-34. State Machine Example with Mirror States

IN_DATA
COMMIT

END
WR &
!

D
EN

IN_DATA

SLP

R&
!W

IN_ADDR
DR_DATA

WR

EN D

RD

WR &

RD

IDLE

ZLP
COMMIT

The problem is that the transition equations are not fully defined. For example, the tool needs to assume that the IDLE RD
transition can happen independent of the values of the WR and END signals. If all the transition equations are made
completely defined by adding the expected values for the other input signals, the state machine is transformed into the
version shown in the example, and the tool can reduce the state machine to an implementable form.

154

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

In general, specifying each transition equation (particularly for transitions originating from a state that has more than two
output transitions) fully by listing the expected value of all trigger inputs helps the tool find a mapping of the state machine to
the GPIF II hardware. In the absence of such data, the tool treats the unspecified triggers as don't cares for a particular
transition and may fail to find an implementable mapping.
It is also recommended to avoid transition equations that involve multiple OR clauses in states that have more than two output
transitions. This is because transition equations that have OR clauses typically cannot be refactored to remove global
triggers.

7.7.5

Intermediate States

If the design allows adding one or more clocks to a transition, intermediate states can be inserted into the state machine to
reduce the number of state transitions originating at a state.
Consider the state machine fragment shown in Figure 7-35. There are four transitions originating at state S0, with the
transition equations F1, F2, F3, and F4 respectively.
Figure 7-35. Example State Machine with Multiple Transitions

F2

S1

F4

F3

F1

S0

S2

S3

S4

This state machine can be transformed into the version shown in Figure 7-36. Here Sx and Sy are dummy states that have
been inserted to meet the constraint that each state can have only two outgoing transitions.
Figure 7-36. GPIF II Implementation for Multiple Transitions Avoiding Mirror States

S0
F1

|F

2

F3

Sy
F3

F2

S2

F4

F1

Sx

S1

|F
4

S3

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

S4

155

This kind of transformation has an impact on the overall latency between states. For example, the actions specified in the
state S1 will now be performed with an additional delay of one cycle. Similarly, the input values that trigger the S0 --> S1
transition now need to stay valid for one additional cycle. Since these system-level timing changes cannot be assumed safely,
such transformations are not automatically performed by the GPIF II Designer tool. This technique can be used as necessary
to reduce state machines to an implementable form.

7.8

Initialization and Configuration of GPIF II Block

The GPIF II block is configured by writing to a set of device registers and configuration memories. The GPIF II Designer utility
generates the configuration data corresponding to the communication protocol to be implemented based on the graphical
state machine. This tool generates the GPIF II configuration information in the form of a C header file that defines a set of
data structures. The FX3 SDK and the GPIF II Designer installation also include a set of header files that have the
configuration data for a number of commonly used protocols.
The CyU3PGpifLoad() API is used by the firmware application to load the configuration generated by the GPIF II Designer
tool. This API, in turn, internally uses the CyU3PGpifWaveformLoad(), CyU3PGpifInitTransFunctions(), and
CyU3PGpifConfigure() APIs to complete the configuration. These APIs can be used directly as a replacement for the
CyU3PGpifLoad() call with the constraint that the CyU3PGpifConfigure() call should be made after the
CyU3PGpifWaveformLoad() and CyU3PGpifInitTransFunctions() calls.

7.8.1

GPIF II State Machine Control

The firmware application may require the GPIF II state machine to be started and stopped multiple times during run time. In
most cases where the FX3 device is functioning as a slave device, there will be a single GPIF II state machine, and the
application needs to start it as soon as the configuration has been loaded. The CyU3PGpifSMStart() API can be used to start
the state machine operation in this case.
If the application uses FX3 as a GPIF II master, there may be multiple disjointed state machines that implement different parts
of the communication protocol. The CyU3PGpifSMSwitch() API can be used to switch between different state machines in
this case.
If the GPIF II state machine operation is to be suspended and later resumed, the CyU3PGpifSMControl() API can be used to
pause or resume state machine operation.
If the state machine operation is to be stopped at some point and restarted from the reset state later, the CyU3PGpifDisable()
API can be used with the forceReload parameter set to CyFalse(0). The CyU3PGpifSMStart() API can then be used to restart
the state machine.
If the active GPIF II configuration is to be changed, the CyU3PGpifDisable() API can be used with the forceReload parameter
set to CyTrue(1). The CyU3PGpifLoad() API can then be used to load a fresh configuration.

7.9

Performing Read and Write Operations Using GPIF II

This section shows you the steps to program the GPIF II block with the help of a simple example that can be implemented
using the FX3 SDK. There is no need to connect any external peripheral to the FX3 GPIF II. In this example, GPIF II performs
a read operation when a DMA buffer is available in FX3, or it performs a write operation when data is available in the FX3
DMA buffers.
To design an interface using GPIF II Designer, start by creating a GPIF II Design project. A new project can be created using
the New Project command from the File menu, or by using the links provided on the start page. The New Project command
pops up the New Project dialog box shown in Figure 7-37. Here the user can enter the project name and choose the location
where the project files will be stored.
An existing project can be opened by choosing the File menu item Open Project. The start page also provides links to open
the most recently used projects.

156

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Once a project is opened, the Interface Definition window appears, where the user can enter the electrical interface details.
See Designing a GPIF II Interface for details on the Interface Definition window.
Selections applicable for the interface are the following:
■

Interface Type: Slave

■

Communication type: Synchronous

■

Clock settings: Internal

■

Active clock edge: Positive

■

Endianness: Little endian

■

Data bus width: 8 Bit, 16 Bit, 24 Bit, or 32 Bit, as required

■

Address/data bus multiplexed: Deselected (nonmultiplexed)

■

Number of address pins used: 0

■

No special function signals are needed for this example design. No input, output, and flags are used.

Figure 7-37 shows a screen shot of the Interface Definition window with the previous settings.
Figure 7-37. Interface Definition Window for Example Project

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

157

7.10

DMA Channel Creation in FX3 Firmware to Perform GPIF II to USB
Data Transfers

The code to create a DMA channel in FX3 firmware to perform GPIF II to USB data transfers follows.
dmaCfg.size = 16384;
dmaCfg.count = 4;
dmaCfg.prodSckId = CY_U3P_PIB_SOCKET_0;
dmaCfg.consSckId = CY_U3P_UIB_SOCKET_CONS_1;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = 0;
dmaCfg.cb = 0;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
apiRetStatus = CyU3PDmaChannelCreate (&glDmaChHandle, CY_U3P_DMA_TYPE_AUTO, &dmaCfg);
if (apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "CyU3PDmaChannelCreate failed, Error code = %d\n", apiRetStatus);
CyFxAppErrorHandler(apiRetStatus);
}

This code creates a DMA channel between socket 0 of the PIB and socket 1 of the UIB. In this example, GPIF II reads the
data and sends it to the USB host. So you need to use the producer socket of the PIB and the consumer socket of the UIB.
This project allocates four buffers for this data path, and each buffer is 16384 bytes.

7.11

GPIF II State Machine to Read Data into a Socket

Figure 7-38 shows the GPIF II state machine to read data from the data bus. The GPIF II state machine stays in the
DMAWAIT state until DMA_RDY_TH0 becomes HIGH. DMA_RDY_TH0 indicates the readiness of the DMA buffer of GPIF II
thread 0. It asserts HIGH when there is at least one empty buffer available for producer socket 0. By default, socket 0 is
mapped to thread 0.
Figure 7-38. GPIF II State Machine to Read Data

When the DMA_RDY_TH0 flag asserts, the GPIF II state machine moves to the READDATA state. It performs an IN_DATA
action in this state. The IN_DATA action reads the data available on the data bus and places it in the DMA buffer of socket 0.
The IN_DATA action settings are shown in Figure 7-39. As long as the state machine is in the READDATA state, a new byte

158

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

is read from the data bus and sent to the DMA buffer on every clock.
Figure 7-39. IN_DATA Action Setting

The GPIF II state machine returns to the DMAWAIT state when the DMA_RDY_TH0 flag goes low. This happens when DMA
buffer switching occurs for the created DMA channel or when all the allocated DMA buffers are filled with data and waiting to
get cleared from the USB side.
When GPIF II tries to push data to the DMA buffer after it is full, then a PIB overrun error is flagged for the corresponding
thread. The bit fields of the PIB error indicator register let you know if a PIB error is flagged.

7.12

DMA Channel Creation in FX3 Firmware to Perform USB to GPIF II
Data Transfers

The code to create a DMA channel in FX3 firmware to perform USB to GPIF II data transfers follows.
dmaCfg.size = 16384;
dmaCfg.count = 4;
dmaCfg.prodSckId = CY_U3P_UIB_SOCKET_PROD_1;
dmaCfg.consSckId = CY_U3P_PIB_SOCKET_1;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = 0;
dmaCfg.cb = 0;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
apiRetStatus = CyU3PDmaChannelCreate (&glDmaChHandle, CY_U3P_DMA_TYPE_AUTO, &dmaCfg);
if (apiRetStatus != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "CyU3PDmaChannelCreate failed, Error code = %d\n", apiRetStatus);
CyFxAppErrorHandler(apiRetStatus);
}
This code creates a DMA channel between socket 1 of the PIB and socket 1 of the UIB. In this example, GPIF II is driving
data onto the data bus that is coming from the USB host. So you need to use the consumer socket of the PIB and the
producer socket of the UIB.
This project allocates four buffers for this data path, and each buffer is 16384 bytes.

7.13

GPIF II State Machine to Drive Data from Socket as Data Source

The GPIF II state machine to drive data onto the data bus is shown in Figure 7-40. The GPIF II state machine stays in the
DMAWAIT state until DMA_RDY_TH1 becomes HIGH. DMA_RDY_TH1 indicates the readiness of the DMA buffer of GPIF II

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

159

thread 1. It asserts HIGH when at least one DMA buffer of consumer socket 1 is available with data. By default, socket 1 is
mapped to thread 1.
Figure 7-40. GPIF II State Machine to Drive Data on the Data Bus

The GPIF II state machine moves to the WRITEDATA state when the DMA_RDY_TH1 flag goes HIGH. It performs the
DR_DATA action in this state. The DR_DATA action drives the data available in the DMA buffer of socket 1 onto the data bus,
one word per clock. The DR_DATA action settings are shown in Figure 7-41.
Figure 7-41. DR_DATA Action Setting

The GPIF II state machine returns to the DMAWAIT state when the DMA_RDY_TH1 flag goes low. This happens when DMA
buffer switching occurs for the created DMA channel or when all the allocated DMA buffers are empty and waiting to get data
from the USB side.
When GPIF II tries to read data from the DMA buffer after it is emptied, then a PIB underrun error is flagged for the
corresponding thread. The bit fields of the PIB error indicator register let you know if a PIB error is flagged.

7.13.1

Alpha Values

Control outputs from the GPIF II state machine can be classified into early outputs and delayed/normal outputs. The early
outputs have a shorter output latency than the delayed outputs. This is achieved by making their values available to the GPIF
II hardware one cycle earlier than all the other state information. The early output signals from GPIF II are called "Alphas,"
and their total number is limited to eight signals.

160

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

As the values for the Alpha class outputs are specified and interpreted differently by the GPIF II hardware, the initial values for
these signals also need to be specified outside the state machine description. The initial Alpha values that a GPIF II design
needs to have are generated in the form of a _ALPHA_START macro in the GPIF II configuration header
file. This value is expected to be passed as the initial Alpha parameter to the CyU3PGpifSMStart() API after the
CyU3PGpifLoad() API has been called.

7.14

GPIF II Read and Write over Registers

IN_DATAx_VALID and OUT_DATAx_VALID (where "x" varies from 0 to 3) are the bit fields of the GPIF_DATA_CTRL register.
IN_DATAx_VALID is set high by the GPIF II hardware when data is written to the GPIF_INGRESS_DATA register
corresponding to socket x using the IN_DATA action in the GPIF II state machine. This will be cleared by the FX3 firmware
when the data in the GPIF_INGRESS_DATA register is read using the CyU3PGpifReadDataWords function. Figure 7-42
shows the GPIF II state machine that reads data from the data bus into the FX3 over the GPIF II register. It will read all ones
if no device is connected to the FX3 GPIF II.
Figure 7-42. GPIF II State Machine to Read Data from the Data Bus

The IN_DATA action reads the data available on the data bus and places it in the GPIF INGRESS register corresponding to
socket 0. IN_DATA action settings are shown in Figure 7-43.
Figure 7-43. IN_DATA Action Settings

FX3 firmware writes '1' to the OUT_DATAx_VALID field to indicate a valid word is present in the GPIF_EGRESS_DATA
register corresponding to socket x. The FX3 SDK provides the CyU3PGpifWriteDataWords function for doing so. The GPIF II
hardware writes' 0' to indicate that the data is used and a new word can be written when the DR_DATA action executes in a

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

161

GPIF II state. The GPIF II state machine that drives data from the register is shown in Figure 7-44.
Figure 7-44. GPIF II State Machine Driving Data from the Register

The DR_DATA action drives the data available in the GPIF EGRESS register that corresponds to thread 1 onto the GPIF II
data bus. The OUT_DATA action settings are shown in Figure 7-45.
Figure 7-45. OUT_DATA Action Settings

Selecting the option Remove data from data source will clear the OUT_REGx_VALID field of the GPIF_DATA_CTRL register.

7.15

Implementing Synchronous Slave FIFO Interface

This section explains the steps involved in designing a Slave FIFO interface using the FX3 GPIF II block.
The first step is to configure the GPIF II outside-world interface by filling out the entries in the Interface Settings tab.
Selections applicable to the synchronous Slave FIFO interface are as follows.
■

Interface type: Slave

■

Communication type: Synchronous

■

Clock settings: External

■

Active clock edge: Positive

■

Endianness: Little endian

■

Data bus width: 8 Bit, 16 Bit, 24 Bit, or 32 Bit, as required

162

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Address/data bus multiplexed: Deselected (nonmultiplexed)

■

Number of address pins used: 2 for selecting among the four threads available

■

Special functions: OE: This feature is available only with GPIO_19. With this function, the assertion of GPIO_19 can
directly change the data bus direction for the egress path (out of the FX3 device).

■

There are five input signals: SLCS#, SLWR#, SLRD#, SLOE#, and PKTEND#. All are active low signals.

Table 7-5. Slave FIFO Interface signal description
Signal Name

Signal Description

SLCS#

The chip select signal for the Slave FIFO interface. It must be asserted to perform any access to the Slave FIFO interface.

SLWR#

The write strobe for the Slave FIFO interface. It must be asserted to perform write transfers to the Slave FIFO.

SLRD#

The read strobe for the Slave FIFO interface. It must be asserted to perform read transfers from the Slave FIFO.

SLOE#

The output enable signal. It causes the data bus of the Slave FIFO interface to be driven by FX3. It must be asserted to perform read
transfers from the Slave FIFO.

PKTEND#

The packet end signal. It must be asserted to send a short packet to the USB host.

Four DMA flags (FLAGA, FLAGB, FLAGC, and FLAGD) are provided to the external peripheral to manage the data flow.
Figure 7-46 shows the FLAGA settings.
Figure 7-46. FLAGA Settings

Figure 7-47 shows the FLAGB settings.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

163

Figure 7-47. FLAGB Settings

The WaterMark value needs to be set using the CyU3PGpifSocketConfigure API. With this API, the active socket for each
thread and its properties can be selected by the user at run time.
Figure 7-48 shows the FLAGC settings.
Figure 7-48. FLAGC Settings

Figure 7-49 shows the FLAGD settings.

164

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-49. FLAGD Settings

A screen shot of the Interface Definition window with the previous settings is shown in Figure 7-50.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

165

Figure 7-50. Interface Definition Window

7.16

Synchronous Slave FIFO Access Sequence and Interface Timing

This section describes the access sequence and timing of the synchronous Slave FIFO interface.
An external processor or device (functioning as interface master) may perform single-cycle or burst data accesses to the FX3
internal FIFO buffers. The external master drives the 2-bit address on the ADDR lines and asserts the read or write strobes.
FX3 asserts the FLAG signals to indicate the empty or full condition of the buffer.

166

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-51. Synchronous Slave FIFO Read Sequence

tCYC

PCLK

tCH

tCL
2 cycle latency from
SLRD to data

3 cycle latency
from addr to data
SLCS

tAS tAH
FIFO ADDR

An

Am

tRDS tRDH
SLRD

SLOE

2 cycle latency from SLRD
to FLAG
tCFLG

FLAGA
(dedicated thread Flag for An)
(1 = Not Empty 0= Empty)

tCFLG

FLAGB
(dedicated thread Flag for Am)
(1 = Not Empty 0= Empty)

tOELZ
DQ (Data Out)

High‐Z

tOEZ

tCDH

tOELZ

Data
driven:DN(An)

DN+1(An)

tOEZ

tCO
DN(Am)

DN+1(Am) DN+2(Am)

SLWR (HIGH)

7.16.1

Synchronous Slave FIFO Read Sequence Description

The sequence for performing reads from the synchronous Slave FIFO interface is as follows.
1. The FIFO address is stable and SLCS# is asserted.
2. SLOE# is asserted. SLOE# is an output enable that signals FX3 to drive the data bus.
3. SLRD# is asserted.
The FX3 FIFO pointer is updated on the rising edge of the PCLK, while SLRD# is asserted. This action starts the propagation
of data from the newly addressed FIFO to the data bus. After a propagation delay of tCO (measured from the rising edge of
PCLK), the new data value is present. N is the first data value read from the FX3 FIFO. To drive the data bus, SLOE# must
also be asserted.
The same sequence of events applies to a burst read.
Note: For burst mode, SLRD# and SLOE# are left asserted during the entire duration of the read. When SLOE# is asserted,
the data bus is driven with data from the previously addressed FIFO. For each subsequent rising edge of PCLK, while SLRD#
is asserted, the FIFO pointer is incremented, and the next data value is placed on the data bus.

FLAG Usage: FLAG signals are monitored by the external processor for flow control. FLAG signals are FX3 outputs that may
be configured to show empty/full/partial status for a dedicated thread or the current thread being addressed.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

167

Figure 7-52. Synchronous Slave FIFO Write Sequence
tCYC

PCLK

tCH

tCL

SLCS

tAS tAH
FIFO ADDR

Am

An

tWRS

tWRH

SLWR
3 cycle latency from SLWR# to FLAG

tCFLG

FLAGA
dedicated thread FLAG for An
(1 = Not Full 0= Full)

3 cycle latency from SLWR# to FLAG tCFLG

FLAGB
dedicated thread FLAG for Am
(1 = Not Full 0= Full)
Data IN

tDS tDH
High-Z

DN(An)

tDS tDH
DN(Am)

tDH
DN+1(Am) DN+2(Am)

tPES tPEH
PKTEND
SLOE
(HIGH)

168

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-53. Synchronous ZLP Write Cycle Timing
tCYC

PCLK

tCH

tCL

SLCS

tAS tAH
FIFO ADDR
SLWR
(HIGH)

An

tPES tPEH

PKTEND
FLAGA
dedicated thread FLAG for An
(1 = Not Full 0= Full)
FLAGB
dedicated thread FLAG for Am
(1 = Not Full 0= Full)
Data IN

tCFLG

High-Z

SLOE
(HIGH)

7.16.2

Synchronous Slave FIFO Write Sequence Description

The sequence for performing writes to the synchronous Slave FIFO interface is as follows.
1. The FIFO address is stable, and the signal SLCS# is asserted.
2. The external master/peripheral outputs the data onto the data bus.
3. SLWR# is asserted.
4. While SLWR# is asserted, data is written to the FIFO, and on the rising edge of PCLK, the FIFO pointer is incremented.
5. The FIFO flag is updated after a delay of tCFLG from the rising edge of the clock.
The same sequence of events applies to a burst write.
Note: In the burst mode, SLWR# and SLCS# are left asserted for the entire duration of the burst write. In the burst write
mode, after SLWR# is asserted, the value on the data bus is written into the FIFO on every rising edge of PCLK. The FIFO
pointer is updated on each rising edge of PCLK.

Short Packet: A short packet can be committed to the USB host by using the PKTEND# signal. The external device/processor
should be designed to assert the PKTEND# along with the last word of data and the SLWR# pulse corresponding to the last
word. The FIFOADDR lines must be held constant during the PKTEND# assertion. On assertion of PKTEND# with SLWR#,
the GPIF II state machine interprets the packet to be a short packet and commits it to the USB interface. If the protocol does
not require any short packets to be transferred, the PKTEND# signal may be pulled high.
Note that in the read direction, there is no specific signal to indicate that a short packet has been sourced from USB. The
empty FLAG must be monitored by the external master to determine when all the data has been read.
Zero-Length Packet: The external device/processor can signal a ZLP by asserting PKTEND#, without asserting SLWR#.
SLCS# and the address must be driven as shown in Figure 7-53.
FLAG Usage: FLAG signals are monitored by the external processor for flow control. FLAG signals are FX3 outputs that may
be configured to show empty/full/partial status for a dedicated thread or the current thread being addressed.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

169

7.16.3

Slave FIFO Interface Logical Diagram

Figure 7-54 illustrates the logical flow chart of the Slave FIFO interface. For more information about the synchronous Slave
FIFO interface, refer to the application note AN65974 - Designing with the EZ-USB FX3 Slave FIFO Interface.
Figure 7-54. Slave FIFO Interface Flowchart

7.16.4

GPIF II State Machine of Slave FIFO Interface

Figure 7-55 shows the GPIF II state machine of the Slave FIFO interface.

170

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 7-55. GPIF II State Machine of the Slave FIFO Interface

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

171

172

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

8. Low Performance Peripherals (LPP)

The FX3 serial peripherals (I2C, SPI, I2S and UART) including GPIO form the Low Performance Peripherals (LPP). LPP
blocks are accessed using registers and the I2C, SPI, I2S, and UART peripheral blocks are DMA capable. The GPIOs cannot
be grouped into a parallel bus and cannot use DMA.
The bandwidth requirement of all the low-performance peripherals is minimal compared to DMA bandwidth. All LPP
peripherals interface to the DMA fabric as one entity, which connects to the DMA fabric through a single adapter and multiple
threads, as shown in Figure 8-1. Eight DMA sockets are available for four LPP blocks. Any LPP block can use any number of
available sockets from the eight DMA sockets, but only two sockets can be active or enabled at a time for a block. All eight
DMA sockets can be active together.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

173

Figure 8-1. LLP's Interfaces and DMA Fabric

UART Egress Socket
8

UART Ingress Socket

I2S Right Egress
Socket

UART

4

I2S transmitter

4

U
ART
UART
DMA
Thread

I2S Right
DMA
hread
Thread
8T
8

DMA Fabric

I2S Left Egress
Socket

I2S Left
f DM
MA
DMA
Thread
IO Mux

SPI Egress Socket
8

SPI Ingress Socket

SPI Master
Transciever

4

SPI DMA
Thread

I2C Egress Socket
8

MMIO Fabric

I2C Ingress Socket

I2C DMA
Thread

I2C
Multi-Master
Trasciever

2

MMIO Registers

Upon reset, all the LPP blocks are disabled. All the LPP blocks become operational only after an enable bit in a configuration
register is set. Each block has its own block-level soft reset; LPP soft reset and the global reset are synchronized to the core
clock. All the resets need to be deasserted for the block to be operational.

8.1
8.1.1

I2C Interface
I2C Block Features

The I2C block offers the following features:
■

Operates in master mode

174

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

■

Capable of multimaster negotiations

■

Supports 100-kHz, 400-kHz, and 1-MHz clock

■

Supports 7-bit and 10-bit addressing modes

■

Supports clock stretching

■

Supports register-based and DMA-based transfers

■

FX3 can boot from I2C EEPROM

Refer to the application note AN76405 - EZ - USB FX3 Boot Options for more information.

8.1.2

I2C Interface Overview

The I²C protocol, created by Philips Semiconductor, allows data to be communicated between I2C devices over two wires. It
sends information serially using one line for data (SDA) and one for clock (SCL), as shown in Figure 8-2.
Figure 8-2. I2C Bus
V

R1

R2

SDA
SCL

I2C Master
Microcontroller

I2C Slave
(EEPROM)

I2C Slave
(RTC)

An I2C master device controls the bus, controlling the clock and generating START/STOP signals that are required for the
communication. I2C slave devices simply listen to the bus and act based on the data sent on the I2C bus. The I2C master can
send data to a slave or receive data from a slave. Slave devices cannot transfer data among themselves. In a single master
system, the master device drives the clock, but slave devices can hold it low to synchronize slow slave devices (clock
stretching). The two signals (SCL and SDA) must be pulled high using external resistors, as they are open collector/drain
outputs and doing so implements a wired AND function. Any device pulling the signal low causes all the devices to see a low
logic value, and for logic high, all devices must stop driving the signal. A slow slave device may need to stop the bus while it
gathers data or services an interrupt. It can do so while holding the clock line (SCL) low, forcing the master into the wait state.
The master must then wait until SCL is released before proceeding. Multimaster mode is used when there is more than one
master on the I2C bus. This mode involves arbitration of the bus and clock synchronization.
FX3 is capable of functioning as a master transceiver and supports 100-kHz, 400-kHz, and 1-MHz operation. The I2C block
operates in big endian mode (most significant bit first) and supports both 7-bit and 10-bit slave addressing. It supports single
and burst (DMA) data transfers. Slow devices on its I2C bus can work with the FX3 I2C master by using clock stretchingbased flow control.
FX3 can function in multimaster I2C bus environments, as it is capable of carrying out negotiations with other masters on the
bus using SDA-based arbitration. Additionally, FX3 supports the repeated START feature to communicate with multiple slave

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

175

devices on the bus without losing ownership of the bus in between. Also, combined format communication is supported,
which allows you to load multiple bytes of data (including slave chip address phases) into special registers called
PREAMBLE. You can choose to place START, Repeated START, or STOP bits in between the data and also define the
master's behavior on receiving either a NAK or ACK for the data in the preamble. In applications such as EEPROM reads, this
greatly reduces the firmware complexity and execution time by packing the initial communication data into a transaction
header with the ability to abort the header transaction on receiving the NAK indications in the middle of the transactions. In
addition, the FX3 preamble repeat feature simplifies the firmware and saves time in situations that require time-consuming
polling. For example, after programming (writing) an I2C EEPROM, the device must be polled to check for completion of the
write operation. In this situation, the FX3 I2C block can be programmed automatically to repeat a single-byte preamble
containing the EEPROM's I2C address until the device responds with an ACK.
By programming a burst read count value for this block, burst reads from the slave (EEPROM, for example) can be performed
without byte-by-byte firmware intervention. In this case, the FX3 master receiver sends ACK response for all bytes received
as long as the burst read counter does not expire. When the last byte of the burst is received, the FX3 I2C block automatically
signals a NAK followed by a STOP bit, forcing the device to stop sending data.

8.2

FX3 I2C Operations Overview

The FX3 architecture supports register-based I2C operations for small transfers and offers DMA-based I2C operations for
larger transfers. This section explains the I2C operations in detail:

8.2.1

Reset and Initialization

■

On reset, all the blocks of the I2C core are placed in a disabled state. The core becomes operational only after the
ENABLE bit in the configuration registers of this block (I2C_CONFIG) is set by the firmware.

■

I2C clock speed is set in the GCTL block, as is the case for all FX3 blocks. GCTL_I2C_CORE_CLK is used to set the I2C
clock speed. The I2C core clock must run at 10 times the bit rate on the external I2C interface (for example, for 100-kHz
I2C, the I2C core clock must be set to 1 MHz). This requirement is necessary to generate the external clock with the
proper setup and hold with respect to SDA. At 100 kHz, a 50 percent duty cycle is required, and at 400 kHz and 1 MHz, a
40/60 (high/low) duty cycle is required to meet the timing parameters of the I2C specification.

■

The I2C clock must be enabled from GCTL before resetting the I2C block from the I2C_POWER register. Once the block
is reset, the ACTIVE bit of the I2C_POWER register is monitored by the firmware before accessing any of the I2C block
registers. Also, the block ENABLE bit of I2C_CONFIG can be set only after the block is in the active state.

8.2.2

Preamble

At the beginning of an operation (DMA or register mode), the master generates the start condition and transmits a 7-bit or 10bit slave address, requiring 1 or 2 bytes. The last bit in these bytes indicates R/W#. The host can begin writing to and reading
from the default address in the slave at this point. However, slave selection is typically followed by address specification in the
slave's internal address space, which can comprise multiple bytes. After sending the address, the FX3 controller resends the
start condition and slave address if the operation requires reading from the host, this time setting the R/W# bit high to indicate
a read operation. This part of the transaction is called the “preamble” in FX3. The preamble is typically followed by data
transfer, which can be one or several bytes..

8.2.3

Data Transfer

At the end of the preamble, the master transfers data that is derived from the connected DMA sockets or registers. The
DMA_MODE bit of the I2C_CONFIG register determines whether the I2C core is configured for DMA mode or register mode
transfers.

8.2.3.1

Programming Model

The FX3 I2C controller divides I2C transactions into two phases.

176

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

1. Control Phase: This phase consists of the addresses being transmitted before the actual read or write data starts. It is
mainly handled by the I2C_PREAMBLE_CTRL and I2C_PREAMBLE_DATA registers. The I2C_PREAMBLE_DATA register is 8 bytes long. Start and stop conditions after each byte (0: before first byte) are specified in the 16-bit
I2C_PREAMBLE_CTRL register.
2. Data Phase: This phase is handled by the I2C_COMMAND and I2C_BYTE_COUNT registers. The data phase can be
connected to either DMA- or register-based data paths. DMA programming is the same as for other blocks and is not
explained here.

8.2.3.2

Register-Based I2C Transfers

The FX3 firmware uses the I2C_PREAMBLE_CTRL, I2C_PREAMBLE_DATA, and I2C_COMMAND registers to initiate an
operation. It then performs writes or reads from the TX and RX registers. ARM registers that transmit data from the ARM core
to an external interface (in this case, I2C) are called EGRESS_DATA registers. For the receive function, that is, when READ
is set in the I2C_COMMAND register, the data is received from the external interface (in this case, I2C) and pushed into the
registers, called INGRESS_DATA registers. The firmware can be notified of completion by interrupt or by polling through the
status register. A register I2C_BYTE_COUNT is used to specify the number of bytes to be written out and the same register is
also used to determine the number of bytes received.
4-byte-deep FIFOs hold egress and ingress data in its register space. Based on the status of these FIFOs, the TX_SPACE,
TX_HALF, TX_DONE and RX_DATA, RX_HALF flags are set in the I2C_STATUS and I2C_INTR registers.
The firmware can clear the FIFOs by asserting TX_CLEAR and RX_CLEAR from the I2C_CONFIG register. Table 8-1 shows
the conditions for the assertion of flags:

Table 8-1. Conditions for Assertion of Flags
Flag Asserted
TX_SPACE

Egress FIFO State
Not full

Ingress FIFO State
-

TX_HALF

At least half empty

-

TX_DONE

Full

-

RX_DATA

-

Not empty

RX_HALF

-

At least half full

8.2.3.3

DMA-Based I2C Transfers

DMA-based transfers use the I2C sockets. The DMA interface supports sockets that are used for moving the data between
the peripheral and the USB 3.0 interconnect. DMA sockets that transmit I2C data are called egress sockets, and DMA
sockets that receive I2C data are called ingress sockets. I2C data is pushed into the DMA socket, when I2C interface is
configured for READ in I2C_COMMAND register. The FX3 firmware uses the I2C_PREAMBLE_CTRL,
I2C_PREAMBLE_DATA, and I2C_COMMAND registers to initiate an operation. The I2C transceiver reads the preamble and
command and then initiates the operation after consulting the availability of ingress or egress sockets. Ingress and egress
sockets can be programmed to interrupt the CPU upon transaction completion. The I2C controller always raises interrupts in
error conditions.
Once the expected number of data bytes has been received (indicated by BYTE_COUNT), then an end of transfer is
indicated to the DMA adapter by setting the flag RX_DONE (of I2C_STATUS and I2C_INTR) in both the register- and DMAbased transfers.
At any point, the status of the I2C block can be read from I2C_COMMAND.I2C_STAT bits to indicate the status of the block
and I2C lines.

8.2.3.4

Starting a Transaction

1. Select the DMA mode and enable the block through the I2C_CONFIG register. This step needs to be done only once after
booting, unless you want to change the data-path used in the data phase.
2. Program the I2C Byte count register to indicate the number of bytes to be transferred in the data phase. If you want the
data phase to continue without any limit on the number of bytes, then program 0xFFFFFFFF. In this case, the data phase

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

177

can be terminated only by the FX3 firmware. The operation of the I2C_BYTE_COUNT register is identical in DMA and
register mode data paths. The SCK_SIZE register of the chosen socket can be set to zero to indicate an indefinite transfer
size in DMA.
3. Program the preamble and I2C_COMMAD registers. This step is explained in the next section through examples.
4. The transaction starts when I2C controller hardware detects the I2C_COMMAND.PREAMBLE_VALID bit.

8.2.3.5

Terminating Transactions: Software and Hardware Aborts

1. Transactions with a finite I2C_BYTE_COUNT are usually terminated by the hardware after the required number of bytes
is exchanged. The end of transfer is indicated through the TX_DONE and RX_DONE interrupts.
2. The firmware can disable the block using the I2C_CONFIG register to abort a transfer in progress at the end of the current
byte. In this case, the firmware must reset the I2C block before initiating a new transfer, and the new transfer should start
with a START condition. It is advisable to read the I2C_INGRESS_DATA register during read transactions before aborting
a transfer to avoid loss of data. The hardware may not generate a STOP in such cases depending upon when the abort
happened. The firmware must ensure that the bus is freed by issuing a transaction with a STOP condition, such as a slave
address or a general call address with a STOP condition, so that the bus is not deemed busy by other masters.
3. The hardware can terminate a transfer upon detecting a NACK from a slave or upon long periods of inactivity (SCK held
low by the slave) as defined in the I2C_TIMEOUT register. In this case, I2C_BYTES_TRANSFERRED in the data phase
indicates when the abort happened. For example, if a data NACK error happens at the end of the 5th byte, the value in
this register will be 5. If a timeout occurs while transmitting the 1st bit of the 11th byte, then this value will be 11 and so on.
If the hardware abort conditions occur during the preamble, the error codes indicate where in the preamble abort happened. NACK hardware aborts are indicated by an ERROR interrupt and the associated error codes.

8.2.3.6

Multimaster Arbitration

When multiple I2C master devices are present on the I2C bus, including FX3, then if FX3 sends a START condition and the
competing master sends a STOP condition, the SDA line will be low. In this situation, FX3 will consider itself to have won
arbitration since there is no way for it to detect a STOP sent by the competing master. On the other hand, if FX3 sent a STOP
and the other master sends a START, then FX3 will detect the START condition and FX3 loses control of the I2C bus, since
the SDA status does not match the expected value. Whenever FX3 loses control of the bus, a Lost Arbitration interrupt will be
raised. Upon receiving this interrupt, the FX3 firmware must reset the block, which will clear any data in the core pipeline.

8.2.3.7

Error Conditions

Error conditions are indicated in the I2C_STATUS register. All errors marked as nonsticky do not require firmware
intervention, while the errors marked sticky require the firmware to reset the I2C DMA sockets and reissue the command.
Note: If an ERROR bit is set in I2C_Status, it is recommended to disable and re-enable the I2C block.

8.2.4

Examples

This section shows you the example codes to write and read to an I2C slave device (EEPROM) using register-based and
DMA-based transfers from FX3. APIs to perform read and write accesses to an I2C device are provided with the FX3 SDK.
Refer to the Cyu3i2c.c file, which is located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\lpp_source
(after FX3 SDK installation) for the source code of I2C-related APIs. Refer to FX3APIGuide.pdf located at C:\Program Files
(x86)\Cypress\EZ-USB FX3 SDK\1.3\doc for more details on FX3 APIs.

8.2.4.1

Initialize I2C Block

The CyU3PI2cInit API initializes the FX3 I2C block. The I2C block is initialized to operate at the default frequency of 100 kHz.
The CyU3PI2cInit function definition follows.
CyU3PI2cInit (void)
{
/* Set the clock frequency. This should precede the I2C power up */
CyU3PI2cSetClock (100000);

178

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

/* Initialize the LPP block if not already started. */
CyU3PLppInit (CY_U3P_LPP_I2C, CyU3PI2cInt_ThreadHandler);
CyU3PMutexCreate (&glI2cLock, CYU3P_NO_INHERIT);
/* Power on the I2C module */
I2C->lpp_i2c_power = 0;
CyU3PBusyWait (10);
I2C->lpp_i2c_power |= 1 << 31;
while (!(I2C->lpp_i2c_power & CY_U3P_LPP_I2C_ACTIVE));
/* Clear the error status */
glI2cStatus = 0;
/* Mark the module as active. */
glIsI2cActive = CyTrue;
}

8.2.4.2

Configure I2C Block

The CyU3PI2cSetConfig API configures the FX3 I2C block. Following is the code for setting the I2C bus frequency to 400
kHz. DMA transfers are not enabled in the following code. i2cConfig.isDma would need to be set CyTrue(1) to enable DMA
transfers.
/* Start the I2C master block. The bit rate is set at 100 kHz. */
CyU3PMemSet ((uint8_t *)&i2cConfig, 0, sizeof(i2cConfig));
i2cConfig.bitRate
= 400000;
i2cConfig.busTimeout = 0xFFFFFFFF;
i2cConfig.dmaTimeout = 0xFFFF;
i2cConfig.isDma
= CyFalse;
CyU3PI2cSetConfig (&i2cConfig, NULL);

8.2.4.3

Reads and Writes Using Register Transfers

The CyU3PI2cReceiveBytes API reads data from the I2C slave in register mode, and the CyU3PI2cTransmitBytes API writes
data to an I2C slave in register mode. The following code performs reads and writes to an I2C slave using register transfers.
CyFxUsbI2cTransfer (uint16_t byteAddress, uint8_t
devAddr, uint16_t
*buffer, CyBool_t isRead)
{
CyU3PI2cPreamble_t preamble;
uint16_t pageCount = (byteCount / glI2cPageSize);
uint16_t resCount = glI2cPageSize;
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
if ((byteCount % glI2cPageSize) != 0)
{
pageCount ++;
resCount = byteCount % glI2cPageSize;
}

byteCount, uint8_t

while (pageCount != 0)
{
if (isRead) /* Read */
{
/* Update the preamble information. */
preamble.length
= 4;
preamble.buffer[0] = devAddr;

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

179

preamble.buffer[1]
preamble.buffer[2]
preamble.buffer[3]
preamble.ctrlMask

=
=
=
=

(uint8_t)(byteAddress >> 8);
(uint8_t)(byteAddress & 0xFF);
(devAddr | 0x01);
0x0004;

status = CyU3PI2cReceiveBytes (&preamble, buffer, (pageCount == 1) ? resCount :
glI2cPageSize, 0);
}
else /* Write */
{
/* Update the preamble information. */
preamble.length
= 3;
preamble.buffer[0] = devAddr;
preamble.buffer[1] = (uint8_t)(byteAddress >> 8);
preamble.buffer[2] = (uint8_t)(byteAddress & 0xFF);
preamble.ctrlMask = 0x0000;
status = CyU3PI2cTransmitBytes (&preamble, buffer, (pageCount == 1) ? resCount :
glI2cPageSize, 0);
/* Wait for the write to complete. */
preamble.length = 1;
status = CyU3PI2cWaitForAck(&preamble, 200);
}
/* An additional delay seems to be required after receiving an ACK. */
CyU3PThreadSleep (1);
/* Update the parameters */
byteAddress += glI2cPageSize;
buffer += glI2cPageSize;
pageCount --;
}
}

8.2.4.4

Reads and Writes Using DMA Transfers

A DMA channel (glI2cTxHandle) is created to transfer data to an I2C slave device, and another DMA channel
(glI2cRxHandle) is created to read data from the I2C slave device. The following code reads and writes to an I2C slave using
DMA transfers.
CyFxUsbI2cTransfer (uint16_t byteAddress, uint8_t
devAddr, uint16_t
*buffer, CyBool_t isRead)
{
CyU3PDmaBuffer_t buf_p;
CyU3PI2cPreamble_t preamble;
uint16_t pageCount = (byteCount / glI2cPageSize);
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
if ((byteCount % glI2cPageSize) != 0)
{
pageCount ++;
}
/* Update the buffer address. */
buf_p.buffer = buffer;
buf_p.status = 0;

180

byteCount, uint8_t

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

while (pageCount != 0)
{
if (isRead) /* Read */
{
/* Update the preamble information. */
preamble.length
= 4;
preamble.buffer[0] = devAddr;
preamble.buffer[1] = (uint8_t )(byteAddress >> 8);
preamble.buffer[2] = (uint8_t)(byteAddress & 0xFF);
preamble.buffer[3] = (devAddr | 0x01);
preamble.ctrlMask = 0x0004;
buf_p.size = glI2cPageSize;
buf_p.count = glI2cPageSize;
status = CyU3PI2cSendCommand (&preamble, glI2cPageSize, isRead);
status = CyU3PDmaChannelSetupRecvBuffer (&glI2cRxHandle, &buf_p);
status = CyU3PDmaChannelWaitForCompletion(&glI2cRxHandle, 0x7FFF);
}
else /* Write */
{
/* Update the preamble information. */
preamble.length
= 3;
preamble.buffer[0] = devAddr;
preamble.buffer[1] = (uint8_t)(byteAddress >> 8);
preamble.buffer[2] = (uint8_t)(byteAddress & 0xFF);
preamble.ctrlMask = 0x0000;
buf_p.size = glI2cPageSize;
buf_p.count = glI2cPageSize;
status = CyU3PDmaChannelSetupSendBuffer (&glI2cTxHandle, &buf_p);
status = CyU3PI2cSendCommand (&preamble, glI2cPageSize, isRead);
status = CyU3PDmaChannelWaitForCompletion(&glI2cTxHandle, 0x7FFF);
}
/* Update the parameters */
byteAddress += glI2cPageSize;
buf_p.buffer += glI2cPageSize;
pageCount --;
/* Need a delay between write operations. */
CyU3PThreadSleep (10);
}
}

8.3
8.3.1

Serial Peripheral Interface
SPI Block Features

■

Supports master mode only

■

Supports all four SPI transfer modes (programmable SPI clock polarity and phase)

■

Comlies with the Motorola SPI specification in chapter 8 of the MC68HC11 reference manual

■

Supports register-based and DMA-based transfers

■

Supports programmable data unit length of 4 bit, 8 bit,16 bit, and 32 bit, MSB or LSB first

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

181

■

Provides the Chip Select (CS#) signal

■

Provides SPI clock up to 33 MHz

■

FX3 can boot from SPI flash/ EEPROM (refer to AN76405 - EZ-USB FX3 Boot Options for more information)

8.3.2

SPI Interface Overview

The SPI bus is a synchronous serial data link interface, named by Motorola, which operates in full duplex mode. Devices
communicate in master/slave mode where the master device initiates the data frame and provides the clock. Multiple slave
devices are allowed with individual slave select (chip select) lines. Sometimes SPI is called a four-wire serial bus, in contrast
to three-, two-, and one-wire serial buses.
During an SPI transmission, data is transmitted (shifted out serially) and received (shifted in serially) simultaneously. The
serial clock (SCK) synchronizes the shifting and sampling of information on the two serial data lines. A slave select line allows
an individual slave SPI device to be selected. Slave devices that are not selected do not interfere with SPI bus activities.
Figure 8-3. SPI Bus
Master SPI

Slave SPI

TX SHIFT REGISTER

MOSI

RX SHIFT REGISTER

MISO

SHIFT REGISTER

SCK
Controls

SSN

Shift register can be single or two
(as shown in Master)

The FX3 SPI block operates in master mode and facilitates standard full-duplex synchronous transfers using the master out,
slave in (MOSI), master in, slave out (MISO), serial interface clock (SCK), and slave select (SSN) pins. The roles of the four
SPI interface pins are as follows:
■

SCK: As the SPI master, FX3 provides this clock. The FX3 SPI interface clock can run up to 33 MHz. This clock is gated
so that start and stop of transaction can be signaled in conjunction with the SS line. Eight clock cycles are generated on
this line per transfer.

■

SSN: As the SPI master, FX3 drives the slave select line in a mode-dependent fashion along with SCK to signal the start
of the transaction. Depending upon mode, a slave can remain selected for multiple 8-bit transactions (based on Clock
Phase (CPHA) configuration), has to toggle between transactions, or can be firmware controlled. FX3 also supports firmware control operation of the SSN line. It has a provision to drive SSN signal with a programmable lead and lag with
respect to SCK at the start and end of transmission.

■

MOSI: FX3 drives serial data on the MOSI line. Data can be driven on the positive or negative edge of SCK selected by a
configuration bit. The selected slave samples the data on the negative or positive edges respectively.

■

MISO: FX3 samples serial data on the MISO line. Data can be driven by the selected slave on the positive or negative
edge of SCK governed by a configuration bit. FX3 samples the data on the negative or positive edge respectively.

The SPI block supports single and burst (DMA) data transfers. The SPI transmit and SPI receive blocks can be enabled
independently using the TX_ENABLE/RX_ENABLE register settings. Independent shift registers are used for the transmit
and receive paths. The shift register length can be set to values between 4 and 32 bits. By default, the TX and RX registers
shift data to the left. This can be reversed, if necessary.

182

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The FX3 SPI block can share its MOSI, MISO, and SCLK pins with more than one slave connected to the SPI bus. In this
case, the SSN signal of the block cannot be used, and the multiple slave select signals need to be managed using GPIOs.

8.3.3

FX3 SPI Operations Overview

This section explains SPI operations.

8.3.3.1

Reset and Initialization

■

On reset, the SPI core is placed in a disabled state. The core becomes operational only after the firmware sets the
ENABLE bit in the configuration register of this block (SPI_CONFIG).

■

SPI clock speed is set in the GCTL block as is the case for all FX3 blocks. GCTL_SPI_CORE_CLK is used for setting the
SPI clock speed.

■

Once the block is reset, the firmware monitors the ACTIVE bit of the SPI_POWER register before accessing any of the
SPI block registers. The block ENABLE bit of SPI_CONFIG can be set only after the block is in the active state.

8.3.3.2

Modes Governing Transfers

The CPHA bit in the configuration register determines how a transfer starts.
1. CPHA=0: When CPHA=0, the slave starts monitoring the SCK line. The master first drives the data on the bus and then
toggles the clock to the active state.. The slave samples the data as soon as it detects the idle-to-active clock edge. The
master drives new data on the active-to-idle clock edge. Transfer ends when 8 bytes are transferred or aborts early by
deassertion of SSN signal from the master. When the SSN toggle mode is CPHA controlled as indicated by the SSNCTRL[1:0] bits, SSN returns to idle at the end of the transfer and asserts to begin a transfer.
2. CPHA=1: When CPHA=1, the master drives data on the idle-to-active clock edge, and the slave samples data on the
active-to-idle clock edge. Transfer ends when the word is transferred or aborts early by deassertion of SSN signal from
the master. When the SSN toggle mode is CPHA controlled as indicated by the SSNCTRL[1:0] bits, SSN can remain
asserted for multiple transfers when CPHA=1.
The CPOL bit defines the clock polarity. CPOL=0 means that the SCK is idle low. So the idle-to-active edge in this case is
the positive edge. The CPOL and CHPA bits need to be identical in all the devices connected to the SPI bus to ensure that
the data is sampled half a clock cycle after it is driven on the SPI bus.

8.3.4

SSN Control Configurations

At the beginning of a transfer, SCK is in idle and SSN is deasserted. SSN needs to be asserted (SSN=0) for the slave to begin
monitoring the SCK signal. SCK is driven by the SPI master only when data is being transferred. Conversely, when SCK
toggles, the status of the MISO line is interpreted as data when the RX mode is enabled. Once the TX mode is enabled, it is
the responsibility of the DMA producer to have data available, or SCK will go to idle. If the SPI block is configured to operate
in register mode, the SPI block expects to receive data if there is space in the RX register and transmits data if it exists in the
TX register. If any of these conditions are met, the SCK will not go to idle. If both are not met, then the SCK will go to idle.
The FX3 SPI supports a firmware-controlled SSN bit. When this mode is enabled, the value will be transmitted as is, except
when the DESELECT bit is set high, forcing slave deselecting. The firmware is entirely responsible for managing the polarity
and timing of this bit. When SSN is firmware controlled, there is no restriction on the DMA size. The firmware asserts the
SSN_BIT of SPI_CONFIG, and the SSN_BIT value will hold for the entire duration of the DMA transfer (as is the case with the
SPI EEPROM, where SSN remains asserted throughout). Upon completion of the transfer, the firmware can choose to
deassert SSN_BIT or leave it asserted. SSN is asserted for the entire multiword transaction.
The SPI block supports various lead and lag times between SSN and SCK as specified in the SPI_CONFIG register. the lead
of 0 is not supported. When the block is disabled, it must finish RX/TX of the current word.
When multiple slaves are connected to the SPI block, the SPI block handles SSN assertion for the default slave, and GPIO
lines handle SSN assertion for the other slaves under firmware control (The “default slave” is the one whose chip select is
connected to the FX3 SS# output pin). The DESELCT bit in SPI_CONFIG has to be set while accessing nondefault slaves,
logically disconnecting the default slave. The firmware can assert and deassert the GPIO line to select alternate slaves.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

183

8.3.5

Data Transfers

The FX3 architecture supports register-based SPI operations for small transfers and DMA-based SPI operations for larger
transfers.
The data from the core side can be received either through the DMA interface or the register interface for transmitting it over
the SPI bus. The registers used on the ARM side to read the data from the core and convey it to the bus are called
EGRESS_DATA registers. The registers used to get the data from the external bus are called INGRESS_DATA registers. The
DMA interface supports sockets that are used for moving the data between the peripheral and the USB 3.0 interconnect. The
sockets used for transmitting the data to the bus are called EGRESS sockets. The DMA sockets that are used for receiving
the data from the bus are called INGRESS sockets.
Apart from the SCK and SSN configurations, SPI endianness also needs to be configured; this can be done by the ENDIAN
bit of the SPI_ CONFIG register.

8.4

Programming Model

SPI is a simple block that does not interpret data. The SPI programming model is similar to I2C except for the control phase.
No control phase is required in SPI, so only the data phase exists.

8.4.1

Register-Based Transfers

4-byte-deep FIFOs hold egress and ingress data in its register space. Based on the status of FIFOs TX_SPACE, TX_HALF,
TX_DONE, and RX_DATA, the RX_HALF flags are asserted in the SPI_STATUS and SPI_INTR registers to indicate to the
firmware.
The firmware can clear the FIFOs by asserting TX_CLEAR and RX_CLEAR from the SPI_CONFIG register. Table 8-2 shows
the conditions for the assertion of flags.

Table 8-2. Conditions for Assertion of Flags
FLAG Asserted
TX_SPACE

Egress FIFO State
Not full

Ingress FIFO State
-

TX_HALF

At least half empty

-

TX_DONE

Full

-

RX_DATA

-

Not empty

RX_HALF

-

At least half full

8.4.2

DMA-Based Transfers

Ingress and egress sockets can be programmed to interrupt the CPU upon transaction completion. The transceiver always
raises interrupts in error conditions.
There are two separate BYTE_COUNT registers for RX and TX paths. These two registers can be used only for DMA mode
and cannot be used for register mode transfers. The SPI_TX_BYTE_COUNT register specifies the number of bytes to be
written out during DMA transfer. The SPI_RX_BYTE_COUNT register indicates the number of bytes received. Register mode
transfers are always treated as infinite-length transfers.
Once the expected number of data bytes has been received or transmitted (indicated by SPI_TX_BYTE_COUNT or
SPI_RX_BYTE_COUNT), then an end of transfer is indicated to the DMA adapter by setting the RX_DONE or TX_DONE flag
to 1 respectively (of SPI_STATUS and SPI_INTR) in DMA-based transfers.
As SPI protocol is very simple, no special error handling is required apart from handling FIFO overflow and underflow.

184

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

8.5

Examples

This section shows example codes to write and read to an SPI slave device (flash memory) using register-based and DMAbased transfers from FX3. APIs to perform read and write accesses to an SPI device are provided with the FX3 SDK. Refer to
the Cyu3spi.c file located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\lpp_source (after FX3 SDK
installation) for the source code of SPI-related APIs. Refer to FX3APIGuide.pdf located at C:\Program Files
(x86)\Cypress\EZ-USB FX3 SDK\1.3\doc for more details on FX3 APIs.

8.5.1

Initialize SPI Block

The CyU3PSpiInit API initializes the FX3 SPI block. The SPI block is initialized to operate at the default frequency of 1 MHz.
Following is the CyU3PSPIInit function definition.
CyU3PSpiInit (void)
{
/* Set the clock freqency. This should precede the SPI power up */
CyU3PSpiSetClock (1000000);
CyU3PMutexCreate (&glSpiLock, CYU3P_NO_INHERIT);
/* Identify if the LPP block has been initialized. */
CyU3PLppInit (CY_U3P_LPP_SPI, CyU3PSpiInt_ThreadHandler);
/* Power on the SPI module */
SPI->lpp_spi_power &= ~(1 << 31);
CyU3PBusyWait (10);
SPI->lpp_spi_power |= 1 << 31;
/* Wait till the active bit is set */
while (!(SPI->lpp_spi_power & CY_U3P_LPP_SPI_ACTIVE));
/* Mark the module active. */
glIsSpiActive = CyTrue;
}

8.5.2

Configure SPI Block

The CyU3PSpiSetConfig API configures the FX3 SPI block. Following is the code for setting the SPI bus frequency to 8 MHz.
The word length is configured to 8 bits, and slave select (SSN) is configured to be controlled by the FX3 firmware.
CyU3PMemSet ((uint8_t *)&spiConfig, 0, sizeof(spiConfig));
spiConfig.isLsbFirst = CyFalse;
spiConfig.cpol
= CyTrue;
spiConfig.ssnPol
= CyFalse;
spiConfig.cpha
= CyTrue;
spiConfig.leadTime
= CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK;
spiConfig.lagTime
= CY_U3P_SPI_SSN_LAG_LEAD_HALF_CLK;
spiConfig.ssnCtrl
= CY_U3P_SPI_SSN_CTRL_FW;
spiConfig.clock
= 8000000;
spiConfig.wordLen
= 8;
CyU3PSpiSetConfig (&spiConfig, NULL);

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

185

8.5.3

Reads and Writes Using Register Transfers

The CyU3PSpiReceiveWords API reads data from the SPI slave device in register mode, and the CyU3PSpiTransmitBytes
API writes data to an SPI slave device in register mode. Following is the code for performing reads and writes to an SPI slave
using register transfers.
CyFxSpiTransfer (uint16_t pageAddress, uint16_t byteCount, uint8_t *buffer, CyBool_t
isRead)
{
uint8_t location[4];
uint32_t byteAddress = 0;
uint16_t pageCount = (byteCount / glSpiPageSize);
if ((byteCount % glSpiPageSize) != 0)
{
pageCount ++;
}
byteAddress = pageAddress * glSpiPageSize;
while (pageCount != 0)
{
location[1] = (byteAddress >> 16) & 0xFF;
location[2] = (byteAddress >> 8) & 0xFF;
location[3] = byteAddress & 0xFF;

/* MS byte */
/* LS byte */

if (isRead) /*Read*/
{
location[0] = 0x03; /* Read command. */
status = CyFxSpiWaitForStatus ();
CyU3PSpiSetSsnLine (CyFalse);
status = CyU3PSpiTransmitWords (location, 4);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (2, "SPI READ command failed\r\n");
CyU3PSpiSetSsnLine (CyTrue);
}
status = CyU3PSpiReceiveWords (buffer, glSpiPageSize);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetSsnLine (CyTrue);
}
else /* Write */
{
location[0] = 0x02; /* Write command */
status = CyFxSpiWaitForStatus ();
CyU3PSpiSetSsnLine (CyFalse);
status = CyU3PSpiTransmitWords (location, 4);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (2, "SPI WRITE command failed\r\n");
CyU3PSpiSetSsnLine (CyTrue);
}

186

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

status = CyU3PSpiTransmitWords (buffer, glSpiPageSize);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetSsnLine (CyTrue);
}
/* Update the parameters */
byteAddress += glSpiPageSize;
buffer += glSpiPageSize;
pageCount --;
CyU3PThreadSleep (10);
}
}

8.5.4

Reads and Writes Using DMA Transfers

A DMA channel (glSpiTxHandle) is created to transfer data to an SPI slave device, and another DMA channel
(glSpiRxHandle) is created to read data from the SPI slave device. Following is the code for performing reads and writes to an
SPI slave using DMA transfers.
CyFxSpiTransfer (uint16_t pageAddress, uint16_t byteCount, uint8_t *buffer, CyBool_t
isRead)
{
CyU3PDmaBuffer_t buf_p;
uint8_t location[4];
uint32_t byteAddress = 0;
uint16_t pageCount = (byteCount / glSpiPageSize);
if ((byteCount % glSpiPageSize) != 0)
{
pageCount ++;
}
buf_p.buffer = buffer;
buf_p.status = 0;
byteAddress = pageAddress * glSpiPageSize;
while (pageCount != 0)
{
location[1] = (byteAddress >> 16) & 0xFF;
location[2] = (byteAddress >> 8) & 0xFF;
location[3] = byteAddress & 0xFF;

/* MS byte */
/* LS byte */

if (isRead) /* Read */
{
location[0] = 0x03; /* Read command. */
buf_p.size = glSpiPageSize;
buf_p.count = glSpiPageSize;
status = CyFxSpiWaitForStatus ();
CyU3PSpiSetSsnLine (CyFalse);
status = CyU3PSpiTransmitWords (location, 4);
if (status != CY_U3P_SUCCESS)
{

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

187

CyU3PDebugPrint (2, "SPI READ command failed\r\n");
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetBlockXfer (0, glSpiPageSize);
status = CyU3PDmaChannelSetupRecvBuffer (&glSpiRxHandle, &buf_p);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
status = CyU3PDmaChannelWaitForCompletion (&glSpiRxHandle, 5000);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetSsnLine (CyTrue);
CyU3PSpiDisableBlockXfer (CyFalse, CyTrue);
}
else /* Write */
{
location[0] = 0x02; /* Write command */
buf_p.size = glSpiPageSize;
buf_p.count = glSpiPageSize;
status = CyFxSpiWaitForStatus ();
CyU3PSpiSetSsnLine (CyFalse);
status = CyU3PSpiTransmitWords (location, 4);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (2, "SPI WRITE command failed\r\n");
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetBlockXfer (glSpiPageSize, 0);
status = CyU3PDmaChannelSetupSendBuffer (&glSpiTxHandle, &buf_p);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
status = CyU3PDmaChannelWaitForCompletion(&glSpiTxHandle, 5000);
if (status != CY_U3P_SUCCESS)
{
CyU3PSpiSetSsnLine (CyTrue);
}
CyU3PSpiSetSsnLine (CyTrue);
CyU3PSpiDisableBlockXfer (CyTrue, CyFalse);
}
/* Update the parameters */
byteAddress += glSpiPageSize;
buf_p.buffer += glSpiPageSize;
pageCount --;

188

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

CyU3PThreadSleep (10);
}
}

8.6
8.6.1

Universal Asynchronous Receiver Transmitter
UART block features

■

Programmable baud rate up to 4096 kbps

■

Supports 10-bit and 11-bit modes.

■

Supports asynchronous serial mode of communication

■

Uses 16 times oversampling and uses RX bit polling to improve the error rate in transmit and receive operations

■

Supports flow control by adding two hardware pins (RTS and CTS) to the UART

8.6.2

UART Overview

The UART allows asynchronous full-duplex transfer using the UART_TX and UART_RX pins. These pins are held high in the
absence of transmission. Transmission starts when a 0-level start bit is transmitted and ends when a 1-level stop bit is
transmitted. This represents the default 10-bit transmission mode. A 9th parity bit can be appended to data in the 11-bit
transmission mode.
Figure 8-4. UART

UART TX
UART RX
UART

UART
UART RTS
UART CTS

The FX3 UART block can operate at numerous baud rates, ranging from 300 bps to 4608 Kbps and supports both one and
two stop bits. Flow control pins, RTS (Request To Send) and CTS (Clear To Send) are supported in hardware. This block
supports both single and burst (DMA) data transfers.
The transmitter and receiver components of the UART block can be individually enabled. Both hardware and software flow
control are supported and they can be set individually on the transmitter and receiver components.
External interface devices must be used to convert the logic level signals of the UART to and from the external voltage
signaling standards, such as RS-232, RS-422, and RS-485.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

189

8.7

FX3 UART Operations Overview

The FX3 architecture supports register-based UART operations for small transfers and DMA-based UART operations for
larger transfers. This section explains the UART operations.

8.7.1

Reset and Initialization

■

Upon reset, the UART block is placed in a disabled state. The UART block becomes operational when firmware sets the
ENABLE bit in the configuration register (UART_CONFIG).

■

UART clock speed is set in the GCTL block as is the case for all FX3 blocks. GCTL_UART_CORE_CLK is used to set the
UART clock speed. The UART core clock must be running at 16 times the frequency at the external interface (for example, for a 100-kHz UART clock, the UART core clock is set to 1.6 MHz). This is required to generate the external clock with
the proper setup and hold with respect to the data.

■

Once the block is reset, firmware monitors the ACTIVE bit in the UART_POWER register before accessing any of the
UART block registers. Also, the block ENABLE bit of the UART_CONFIG register can be set only after the block is in the
active state.

8.7.2

Programming Model

The UART programming model is similar to I2C except for the control phase. No control phase is required in a UART, so only
the data phase exists. Data transfers can be either register based or DMA based.

8.7.3

Register-Based Transfers

ARM registers that convey core data to the data from the core and transmit it onto the bus are called EGRESS_DATA
registers. The set of registers used for receiving the data from the bus are called INGRESS_DATA registers. The firmware
can be notified of completion by interrupt or by polling through the status register.
4-byte-deep FIFOs hold egress and ingress data in their register spaces. Based on the status of FIFOs TX_SPACE,
TX_HALF, TX_DONE and RX_DATA, RX_HALF flags are asserted in the UART_STATUS and UART_INTR registers.
Firmware monitors these flags to perform data transfers.
The firmware can clear the FIFOs by asserting TX_CLEAR and RX_CLEAR bits in the UART_CONFIG register. Table 8-3
shows the conditions for the assertion of flags:

Table 8-3. Conditions for Assertion of Flags
FLAG Asserted
TX_SPACE

Egress FIFO State
Not full

Ingress FIFO State
-

TX_HALF

At least half empty

-

TX_DONE

Full

-

RX_DATA

-

Not empty

RX_HALF

-

At least half full

8.7.3.1

DMA-Based Transfers

DMA based transfers use the UART sockets. The DMA interface supports sockets that are used to move the data between
the peripheral and the USB 3.0 interconnect. The sockets used for transmitting the data to the bus are called egress sockets.
The DMA sockets that are used for receiving the data from the bus (over the RX line) are called ingress sockets. Ingress and
egress sockets can be programmed to interrupt the CPU upon transaction completion. The transceiver always raises
interrupts in error conditions.
There are two separate BYTE_COUNT registers for the RX and TX paths. These two registers can be used only for DMA
mode and not for register mode transfers. The UART_TX_BYTE_COUNT register specifies the number of bytes to be written
out during DMA transfer. The UART_RX_BYTE_COUNT register is used to read the number of bytes received. Register
mode transfers are always treated as infinite-length transfers.

190

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Once the expected number of data bytes has been received or transmitted (indicated by UART_TX_BYTE_COUNT or
UART_RX_BYTE_COUNT), an end of transfer is indicated to the DMA adapter by setting the flag RX_DONE or TX_DONE to
1 respectively (of UART_STATUS and UART_INTR) in DMA-based transfers.

8.7.3.2

Error Conditions

Error conditions are indicated in the UART_STATUS register. All errors marked as nonsticky do not require firmware
intervention while the errors marked as sticky require the firmware to reset the UART DMA sockets and reissue the
command.

8.7.4

Examples

This section shows the example codes to receive and transfer data from the FX3 UART block APIs to access the UART block
are provided with the FX3 SDK. Refer to the Cyu3uart.c file located at C:\Program Files (x86)\Cypress\EZ-USB FX3
SDK\1.3\firmware\lpp_source (after FX3 SDK installation) for the source code of UART-related APIs. Refer to
FX3APIGuide.pdf located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc for more details on FX3 APIs.

8.7.4.1

Initialize UART Block

The CyU3PUartInit API initializes the FX3 UART block. The UART block is initialized to operate at the default baud rate of
9600. The CyU3PUARTInit function definition follows.
CyU3PUartInit (void)
{
CyU3PMutexCreate (&glUartLock, CYU3P_NO_INHERIT);
/* Set the clock to a default value.
* This should prcede the UART power up*/
CyU3PUartSetClock (9600);
/* Identify if the LPP block has been initialized. */
CyU3PLppInit (CY_U3P_LPP_UART,CyU3PUartInt_ThreadHandler);
/* Hold the UART block in reset. */
UART->lpp_uart_power &= ~(1 << 31);
CyU3PBusyWait (10);
UART->lpp_uart_power |= (1 << 31);
/* Wait for the active bit to be asserted by the hardware */
while (!(UART->lpp_uart_power & CY_U3P_LPP_UART_ACTIVE));
/* Mark the module as active. */
glIsUartActive = CyTrue;
}

8.7.4.2

FX3 Firmware to Send UART Messages and to Receive Fixed Bytes of Text

The following code prints messages on a user interface like HyperTerminal or TeraTerm and receives a fixed number of bytes
of text from the same user interface.
■

UART block of FX3 is configured for the following settings: Baud rate: 115200, one stop bit, no parity, no flow control, both
TX and RX paths enabled, and DMA transfers enabled.

■

uartIntrCb callback function to receive UART events is registered using the CyU3PUartSetConfig API.

■

Value 0xFFFFFFFFU is passed for the TX path to specify infinite or indefinite data transmission.

■

Value 4 is passed for the RX path to specify that only 4 bytes of data transfer is allowed. This means FX3 firmware can
process the input UART messages only after 4 characters are entered in TeraTerm. For example, if you enter 3 then the

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

191

FX3 firmware waits for you to enter another character. If you enter 5 then the FX3 firmware can read the first 4 characters
and wait for 3 more characters to be entered on TeraTerm.
CyU3PUartConfig_t uartConfig;
CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;
/* Initialize the UART for printing debug messages */
apiRetStatus = CyU3PUartInit();
/* Set UART configuration */
CyU3PMemSet ((uint8_t *)&uartConfig, 0, sizeof (uartConfig));
uartConfig.baudRate = CY_U3P_UART_BAUDRATE_115200;
uartConfig.stopBit = CY_U3P_UART_ONE_STOP_BIT;
uartConfig.parity = CY_U3P_UART_NO_PARITY;
uartConfig.txEnable = CyTrue;
uartConfig.rxEnable = CyTrue;
uartConfig.flowCtrl = CyFalse;
uartConfig.isDma = CyTrue;
apiRetStatus = CyU3PUartSetConfig (&uartConfig, uartIntrCb);
/* Set the UART transfer to a really large value. */
apiRetStatus = CyU3PUartTxSetBlockXfer (0xFFFFFFFF);
/* Set the UART transfer to 4 */
apiRetStatus = CyU3PUartRxSetBlockXfer (4);
/* Initialize the debug module. */
apiRetStatus = CyU3PDebugInit (CY_U3P_LPP_SOCKET_UART_CONS, 8);
}

Now you can use the CyU3PDebugPrint API to print debug messages on TeraTerm.
A DMA manual channel needs to be created between the UART producer socket and the CPU consumer socket to get data
into the FX3 from a user interface like TeraTerm. A minimum-size DMA buffer (16 bytes) is allocated for this data path.
dmaCfg.size = 16;
dmaCfg.count = 1;
dmaCfg.prodSckId = CY_U3P_LPP_SOCKET_UART_PROD;
dmaCfg.consSckId = CY_U3P_CPU_SOCKET_CONS;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
/* Enabling the callback for produce event. */
dmaCfg.notification = CY_U3P_DMA_CB_PROD_EVENT;
dmaCfg.cb = 0;
CyU3PDmaChannelCreate (&glChHandleUARTtoCPU, CY_U3P_DMA_TYPE_MANUAL_IN, &dmaCfg);
CyU3PDmaChannelSetXfer (&glChHandleUARTtoCPU, 0);

The UART callback function definition follows. The firmware needs to check for the RX_DONE event to learn whether the
required number of bytes was received. The DMA channel created for the RX path is wrapped up after receiving the
RX_DONE event. The received data is printed back on the HyperTerminal and the DMA buffer is cleared for receiving the
next set of data from the HyperTerminal.
void uartIntrCb(CyU3PUartEvt_t evt, CyU3PUartError_t error)
{
if (evt == CY_U3P_UART_EVENT_RX_DONE)

192

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

{
CyU3PDmaChannelSetWrapUp (&glChHandleUARTtoCPU);
CyU3PDmaChannelGetBuffer (&glChHandleUARTtoCPU, &inBuf_p, CYU3P_NO_WAIT);
CyU3PDebugPrint (4, "%d %d %d %d\n\r",inBuf_p.buffer[0],inBuf_p.buffer[1],inBuf_p.buffer[2],
inBuf_p.buffer[3]);
CyU3PDmaChannelDiscardBuffer (&glChHandleUARTtoCPU);
CyU3PUartRxSetBlockXfer (4);
}
}

8.8
8.8.1

Integrated Interchip Sound Interface
I2S Block Features

■

Supports I2S transmitter function as master

■

Transmits data at 8, 16, 32, 44.1, 48, 96, 192 kHz

■

Supplies SCK at 64*WS (Word Select) frequencies

■

Transmits 8-, 16-, 24-, 32-bit data values

■

Default behavior is:
❐

WS = 0 means left channel

❐

Data values should be zero padded at LSB to 32 bits

❐

MSB is transmitted first

■

Nondefault behavior is controlled by bits in the configuration register.

■

FX3 is capable of supplying MCLK derived from the PLL when configured as output; however, this clock is not expected to
be of high-fidelity quality.

8.8.2

I2S Overview

I2S is a serial bus standard used to connect digital audio devices. It is used to communicate PCM audio data between
integrated circuits in an electronic device. The I2S bus separates the clock and serial data signals, resulting in a lower jitter
than a normal communications system that recovers the clock from the data stream.
FX3 supports left-justified and right-justified variants of the I2S protocol as defined in the TLV320AIC31 datasheet by Texas
Instruments.
The I2S bus handles only audio data, while the other signals such as subcoding and control are transferred separately. To
minimize the number of pins required and to keep the interface simple, a 3-line serial bus is used. As shown in Figure 8-5, it
consists of a signal for two time-multiplexed data channels (I2S SD), a word select line (I2S WS), and a clock line (I2S SCK).
The roles of the three I2S interface pins and MCLK are as follows:
Figure 8-5. I2S Interface
I2S SCK
Transmitter

I2S WS

Receiver

I2S SD

1. WS: The word select line indicates the channel being transmitted:
WS = 0; channel 1 (left)
WS = 1; channel 2 (right)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

193

Typical frequencies for WS are 44.1 kHz and 48 kHz, which represent sampling rates for audio data. The I2S master is
expected to supply this clock.
2. SCK: Provides the clock for exchanging the one-bit serial data. Audio data can be an 8-, 16-, 24-, or 32-bit value. The I2S
standard specifies that the SCK should be a fixed multiple of WS (64X), and if fewer than 32 bits are transmitted, the LSBs
should be padded with zeroes. However, some implementations are known to stop SCK, which is controlled by a configuration bit. The I2S master is expected to supply this clock.
3. SD: This line carries the serial data clocked using SCK. Most Significant Bit (MSB) is transmitted first. The standard specifies that the LSBs should be zero padded to transmit a word (32-bit value). Either the master or a slave can drive this line.
4. MCLK: Many codecs expect the master to supply them with a 256X WS master clock. This clock is carried over the MCLK
pin. For high-quality audio, MCLK is configured as an input driven by a crystal.
The I2S block can be configured to support different audio word widths, endianness, number of channels, and data rate.
By default, the standard protocol is most significant bit first, but this can be reversed. FX3 also supports the left-justified
and right-justified variants of the protocol. When the block is enabled in left-justified mode, the left channel audio sample
is sent first on the I2S SD line.
In mono mode, the "left data" is sent to both channels on the receiver (WordSelect = Left and WordSelect = Right). In the
variable SCK mode, WS (WordSelect) toggles every Nth edge of SCK, where N is the word width chosen. In fixed SCK
mode, however, WS toggles every 32nd SCK edge. In this mode, the audio sample is zero padded to 32 bits.

8.8.3

FX3 I2S Operations Overview

FX3 supports two types of I2S operations; one word at a time (SGL_LEFT_DATA, SGL_RIGHT_DATA) for small transfers and
DMA-based I2S operations for larger transfers. Two special modes of operation, Mute and Pause, are supported. When Mute
is held asserted, the DMA data is ignored, and zeros are transmitted instead. When paused, the DMA data flow into the block
is stopped, and zeros are transmitted over the interface.
■

I2S DMA sockets: I2S exchanges data with the system memory through two 32-bit DMA sockets. The left and right channels have separate sockets as most of the audio algorithms generate data in that manner. The sockets are configured to
be a word stream, which means that their readiness signals the availability of a word of data or memory availability for
receiving a word of data. However, they are typically configured to have larger buffers, and the producer is expected to
generate a larger quantity of data at a time to minimize the latency while switching the DMA sockets. The sockets supply
byte-packed data; 8-, 16-, 24-, and 32 bit words are supported.

■

I2S transceiver: The I2S transceiver will not begin transmission until both the left and right egress socket have data. It
then pulls data in the order determined by the MODE_WS bit, serializes it, and clocks it out using SCK. The block has a
clock generation mechanism to generate WS and SCK at the specified rates.

8.8.4

Programming Model

This section explains the I2S operations.

8.8.4.1

Start Transmission

1. The firmware creates a DMA channel between a producer socket and the I2S consumer socket.
2. The firmware enables the I2S block.
3. As soon as the I2S bock is enabled and the socket is ready, the I2S clock starts toggling and data transmission occurs.

8.8.4.2

Mute Condition

1. When Mute is asserted, discard the DMA data, andtransmit zeros instead.
2. When Mute is deasserted, do not discard the DMA data, and transmit it.

8.8.4.3

Pause Condition

1. When Pause is asserted, transmit the current word pair, and then stop the data flow into the I2S block and transmit zeros.
However, receive the data and buffer it for the previous request(s). Pause has priority over Mute if both are asserted.
2. Assert the PAUSED bit in the I2S_STATUS register.

194

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

8.8.4.4

Buffer Underflow

1. When the DMA buffer runs out of data but end of transfer is not high, treat this as a Mute condition. That is, transmit zeros
until both channels have data in stereo mode and the left channel has data in mono mode.
2. Assert the NO_DATA bit in the I2S_STATUS register.
3. Raise an interrupt if interrupts are enabled in the firmware.
4. The clock continues to run when interrupted.
5. Deassert the NO_DATA bit in the I2S_STATUS register upon receiving the socket active signal from the DMA.
6. When only one channel is underflowing, treat it is as an underflow for both the channels to maintain synchronization. This
means mute both channels (discard DMA data and transmit zeros from the channel with data) until data for both channels
is available.

8.8.4.5

Stop Event

1. The firmware can signal a stop event by disabling the block anytime.
2. Upon receiving this event, finish transmitting the current word pair and shift-in/parallel load zeros in the serializer.
3. Discard any untransmitted data in the pipelines.
4. After aborting or completing an existing transaction, a stop event must be generated before starting a new transaction.

8.8.4.6

Fixed Clock Mode

In fixed clock (FIXED_SCK) mode, SCK is always 64xWS, and left and right data is padded to 32 bits. When FIXED_SCK=0
(called continuous transmission mode),
SCK=2 x (number of bits in sample) x WS.
The I2S master is expected to supply this clock. FX3 derives the clock by dividing MCLK and gating it when transmission
ends. FIXED_SCK=0 is not supported when the number of bits per sample is set to 18 and 24, since MCLK is 256xWS and
256 is not divisible by 36 or 48. The main difference in the FIXED and non-FIXED SCK mode is the frequency of the SCK and
the padding behavior.

8.8.4.7

Data Shift Mode

The I2S protocol is specified to be MSB first, but the FX3 I2S block supports programmable bit order so that it can interface
with different devices.

8.8.4.8

Padding

Padding refers to adding extra zero bits to a sample received from the DMA to make a 32-bit value. This value is then
transmitted from left to right. No padding is necessary when FIXED_CLOCK=0, since the exact number of bit clock transitions
is available.

8.8.4.9

Error Conditions

Error conditions are indicated in the I2S_STATUS register. Errors denoted as nonsticky do not require firmware intervention.
Errors marked sticky require the firmware to reset the I2S DMA sockets and reissue the command.

8.8.4.10

Examples

This section shows an example code to transfer data from the FX3 I2S block. APIs to access the I2S block are provided with
the FX3 SDK. Refer to the Cyu3i2s.c file located at C:\Program Files (x86)\Cypress\EZ-USB FX3
SDK\1.3\firmware\lpp_source (after FX3 SDK installation) for the source code of the UART=related APIs. Refer to
FX3APIGuide.pdf located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc for more details about the FX3 APIs.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

195

8.8.4.11

Initialize I2S Block

The CyU3PI2sInit API initializes the FX3 I2S block. The I2S block is initialized to operate at the default sampling rate of 8 kHz.
The CyU3PI2sInit function definition follows.
CyU3PI2sInit (void)
{
CyU3PMutexCreate (&glI2sLock, CYU3P_NO_INHERIT);
/* Set the clock frequency. This should precede the I2S power up. Setting it to stereo
fixed mode. */
status = CyU3PI2sSetClock (CY_U3P_I2S_DEFAULT_SAMPLE_RATE * 64);
/* Identify if the LPP block has been initialized. */
status = CyU3PLppInit (CY_U3P_LPP_I2S,CyU3PI2sInt_ThreadHandler);
/* Power on the I2S module */
I2S->lpp_i2s_power &= ~(1 << 31);
CyU3PBusyWait (10);
I2S->lpp_i2s_power |= 1 << 31;
while (!(I2S->lpp_i2s_power & CY_U3P_LPP_I2S_ACTIVE));
/* Mark the module active. */
glIsI2sActive = CyTrue;
}

8.8.4.12

Configure I2S Interface

The CyU3PI2sSetConfig API configures the FX3 I2S block. Following is the code for setting the I2S interface sampling
frequency of 44.1 kHz. A sample word is configured to 16 bits, and DMA transfers are enabled.
/* Configure the I2S interface. */
CyU3PMemSet ((uint8_t *)&i2sCfg, 0, sizeof (i2sCfg));
i2sCfg.isMono = CyFalse;
i2sCfg.isLsbFirst = CyFalse;
i2sCfg.isDma = CyTrue;
i2sCfg.padMode = CY_U3P_I2S_PAD_MODE_NORMAL;
i2sCfg.sampleRate = CY_U3P_I2S_SAMPLE_RATE_44_1KHz;
i2sCfg.sampleWidth = CY_U3P_I2S_WIDTH_16_BIT;
status = CyU3PI2sSetConfig (&i2sCfg, NULL);

8.8.4.13

Transferring Data from USB Interface to I2S Interface Using DMA Transfers

The FX3 firmware source code to transfer the data from EP1 OUT to the left channel and data received on EP2 OUT to the
right channel of an I2S amplifier/speaker follows. The DMA buffer size is defined based on the USB speed: 64 for Full Speed,
512 for High Speed, and 1024 for SuperSpeed. Auto DMA channels are created between two sockets of the USB and the left
and right I2S sockets.
/* Identify the usb speed. Once that is identified, create a DMA channel and start the
transfer on this. Based on the Bus Speed configure the endpoint packet size */
switch (usbSpeed)
{
case CY_U3P_FULL_SPEED:
size = 64;
break;
case CY_U3P_HIGH_SPEED:
size = 512;

196

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

break;
case CY_U3P_SUPER_SPEED:
size = 1024;
break;
default:
break;
}
CyU3PMemSet ((uint8_t *)&epCfg, 0, sizeof (epCfg));
epCfg.enable = CyTrue;
epCfg.epType = CY_U3P_USB_EP_BULK;
epCfg.burstLen = 1;
epCfg.streams = 0;
epCfg.pcktSize = size;
/* Producer 1 endpoint configuration */
status = CyU3PSetEpConfig(CY_FX_EP_PRODUCER_1, &epCfg);
/* Producer 2 endpoint configuration */
status = CyU3PSetEpConfig(CY_FX_EP_PRODUCER_2, &epCfg);
/* Create a DMA Auto channel between two sockets of the U port and the L and R I2S sockets. DMA size is set based on the USB speed. */
dmaCfg.size = size;
dmaCfg.count = 8;
dmaCfg.prodSckId = CY_FX_EP_PRODUCER_1_SOCKET;
dmaCfg.consSckId = CY_U3P_LPP_SOCKET_I2S_LEFT;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = 0;
dmaCfg.cb = NULL;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
CyU3PDmaChannelCreate (&glI2sLeftCh, CY_U3P_DMA_TYPE_AUTO, &dmaCfg);
dmaCfg.prodSckId = CY_FX_EP_PRODUCER_2_SOCKET;
dmaCfg.consSckId = CY_U3P_LPP_SOCKET_I2S_RIGHT;
CyU3PDmaChannelCreate (&glI2sRightCh, CY_U3P_DMA_TYPE_AUTO, &dmaCfg);
/* Flush the Endpoint memory */
CyU3PUsbFlushEp(CY_FX_EP_PRODUCER_1);
CyU3PUsbFlushEp(CY_FX_EP_PRODUCER_2);
/* Set DMA Channel transfer size to infinite. */
status = CyU3PDmaChannelSetXfer (&glI2sLeftCh, 0);
status = CyU3PDmaChannelSetXfer (&glI2sRightCh, 0);

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

197

8.9
8.9.1

GPIO
GPIO Features

■

All 61 pins can be configured as simple GPIOs.

■

Up to 8 pins can be configured as complex GPIOs.

■

Programmable drive strength for output I/Os.

■

Supports internal weak pull-up or pull-down.

8.9.2

GPIO Overview

General-purpose I/O pins are a special (simple) case of low-performance peripherals that do not need a DMA capability.
Several FX3 pins can function as GPIOs. All GPIOs together are considered a single low-performance peripheral. Each pin is
multiplexed to support other blocks (such as UART, SPI, and so on). By default, pins are allocated in groups to either one
block or the other (Blk I/O) depending on the interface mode in their respective power domain. In a typical application, not all
FX3 blocks are used. Also, not all the pins of blocks being used are utilized. Unused pins in each block may be overridden as
a simple or complex GPIO pin on a pin-by-pin basis.
Simple GPIOs provide software-controlled and observable input and output capability. They also can raise interrupts.
Complex GPIOs support a variety of time-based functions. They work off either a slow or a fast clock. Complex GPIOs can
also be used as general-purpose timers by the firmware. Only eight pins can be configured as complex GPIOs at a time.

8.9.3

Programming Model

This section explains the GPIO operations.

8.9.3.1

Reset and Initialization

On reset, all the blocks of the GPIO core are placed in a disabled state. The core becomes operational only after one of the
ENABLE bits in the configuration registers of this block (GPIO_SIMPLE or PIN_STATUS) is set by the firmware.
The GPIO core’s clock speed is set in the GCTL block as is the case for all FX3 blocks. Three major clock settings are
required for GPIOs:
GCTL_ FAST _CORE_CLK: Master GPIO clock derived out of PLL system clock. It can be set to a maximum of 200 MHz.
GCTL_ SLOW _CORE_CLK: Slow clock derived out of GCTL_ FAST _CORE_CLK. It can be set to a maximum of 1 MHz.
GCTL_SIMPLE_CLK: Derived out of GCTL_ FAST _CORE_CLK. Applicable to simple GPIOs only. GCTL_ FAST
_CORE_CLK can be divided by 2, 4, 16, and 64 only.
Once the block is reset, the ACTIVE bit of the GPIO_POWER register is monitored by the firmware before accessing any of
the GPIO block registers. Also, the block ENABLE bit of GPIO_CONFIG can be set only after the block is in the active state.
Table 8-4 shows the various modes supported by a complex GPIO. It uses the values from three registers. TIMER is the
value of the PIN_TIMER register, THRESHOLD is the value of the PIN_THRESHOLD register, and MODE is from the
PIN_STATUS register.

198

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Table 8-4. Modes Supported by Complex GPIO
Mode

Name

Description of Functionality Achieved

0

STATIC

Use as simple GPIO, drive output to static value and/or observe input value.

1

TOGGLE

When TIMER=THRESHOLD, change value of output.

2

SAMPLENOW

Set THRESHOLD=TIMER now. This is a method to observe a current value of the running TIMER register, which is not
readable.

3

PULSENOW

■
■
■
■

Toggle the pin value immediately.
Set TIMER=0.
When TIMER=THRESHOLD, toggle output back.
Set MODE=STATIC.

4

PULSE

■
■
■

Toggle value when TIMER=0.
When TIMER=THRESHOLD, toggle output back.
Set MODE=STATIC.

5

PWM

6

MEASURE_LOW

Toggle value when TIMER=0.
When TIMER=THRESHOLD, toggle output back.
Measure the time a signal is low and continue doing so.
Set TIMER=0 on negative edge (negedge) of input.
Set THRESHOLD=TIMER on positive edge (posedge) of input.
Measure the time a signal is high and continue doing so.

7

MEASURE_HIGH

Set TIMER=0 on posedge of input.
Set THRESHOLD=TIMER on negedge of input.
Measure the time a signal is low once and then stop.

8

MEASURE_LOW_ONCE

Set TIMER=0 on negedge of input.
Set THRESHOLD=TIMER on posedge of input.
Set MODE=STATIC.
Measure the time a signal is high once and then stop.

9

MEASURE_HIGH_ONCE

Set TIMER=0 on posedge of input.
Set THRESHOLD=TIMER on negedge of input.
Set MODE=STATIC.

10

MEASURE_NEG

11

MEASURE_POS

12

MEASURE_ANY

13

MEASURE_NEG_ONCE

Measure when a signal goes low and continue doing so.
Set THRESHOLD=TIMER on negedge.
Measure when a signal goes high and continue doing so.
Set THRESHOLD=TIMER on posedge.
Measure when a signal changes and continue doing so.
Set THRESHOLD=TIMER on posedge or negedge.
Measure when a signal goes low once and then stop.
Set THRESHOLD=TIMER on negedge.
Set MODE=STATIC.
Measure when a signal goes high once and then stop.

14

MEASURE_POS_ONCE

Set THRESHOLD=TIMER on posedge.
Set MODE=STATIC.
Measure when a signal changes and then stop.

15

MEASURE_ANY_ONCE

Set THRESHOLD=TIMER on negedge or posedge.
Set MODE=STATIC.

8.9.4

Examples

This section shows an example code to configure and use FX3 GPIOs.. APIs to access the GPIO block are provided with the
FX3 SDK. Refer to the Cyu3gpio.c file located at C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\lpp_source
(after FX3 SDK installation) for the source code of GPIO-related APIs. Refer to FX3APIGuide.pdf located at C:\Program Files
(x86)\Cypress\EZ-USB FX3 SDK\1.3\doc for more details on the FX3 APIs.

8.9.4.1

Initialize GPIO Block

The CyU3PGpioInit API initializes the FX3 GPIO block, and its definition follows.
CyU3PGpioInit (CyU3PGpioClock_t *clk_p, CyU3PGpioIntrCb_t irq)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

199

{
/* Store the interrupt handler function pointer. */
CyU3PRegisterGpioCallBack(irq);
/* If the boot firmware has left the GPIO block ON, do not reset it. */
if ((CyU3PLppGpioBlockIsOn () == CyFalse) || ((GPIO->lpp_gpio_power &
CY_U3P_LPP_GPIO_ACTIVE) == 0))
{
status = CyU3PGpioSetClock (clk_p);
/* Register the fact that GPIO has been started with the FX3 API library. */
status = CyU3PLppInit (CY_U3P_LPP_GPIO, CyU3PGpioInt_Handler);
/* Power the GPIO block ON, and wait for it to be active. */
GPIO->lpp_gpio_power &= ~(1 << 31);
CyU3PBusyWait (10);
GPIO->lpp_gpio_power |= (1 << 31);
while (!(GPIO->lpp_gpio_power & CY_U3P_LPP_GPIO_ACTIVE));
}
else
{
/* GPIO block is already ON. Just register the block with the FX3 API library. */
status = CyU3PLppInit (CY_U3P_LPP_GPIO, CyU3PGpioInt_Handler);
}
/* Update the status flag. */
glIsGpioActive = CyTrue;
}

8.9.4.2

Configure GPIO[45] as Input Pin and GPIO[21] as Output Pin

The I/O matrix needs to be configured to use simple and complex GPIOs. I/Os that are not configured for peripheral
interfaces can be used as GPIOs. This selection must be explicitly made. Otherwise, these lines will be configured per their
default function. This selection is made via four 32-bit bit masks, where each I/O is represented in C by (1 << IO number). In
this case, GPIO[45] is used as an input pin and is selected during the I/O matrix configuration. GPIO[21] is also used but
cannot be selected here, as it is part of the GPIF II I/Os (CTL4). If this I/O is not used with the GPIF II interface, it can be
overridden to become a GPIO by invoking the CyU3PDeviceGpioOverride call.
io_cfg.gpioSimpleEn[0] = 0; // bit positions 31:0
io_cfg.gpioSimpleEn[1] = 0x00002000; /* GPIO 45 */(bit positions 63:32)
io_cfg.gpioComplexEn[0] = 0;
io_cfg.gpioComplexEn[1] = 0;
CyU3PDeviceConfigureIOMatrix (&io_cfg);

The clock parameters for the GPIO block are defined using the CyU3PGpioInit API. Three clocks are associated with the FX3
GPIO core clock. The FAST clock is derived from the FX3 system clock, and its frequency is determined by the clkSrc and
fastClkDiv parameters. The SLOW clock is derived from the FAST clock, and its frequency is determined by the slowClkDiv
value. The operating clock for various complex GPIO timers can be selected from among the FAST clock, the SLOW clock,
and a fixed 32-kHz frequency. All simple GPIOs function (are updated or sampled) based on a separate clock, which is also
derived from the FAST clock. The frequency of this clock is determined by the simpleDiv value. The FAST clock is configured
as half of the system clock, and the SLOW clock is disabled (set to zero). Interrupt callback can be registered using
CyU3PGpioInit, but this example does not use it.

200

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

/* Init the GPIO module */
gpioClock.fastClkDiv = 2;
gpioClock.slowClkDiv = 0;
gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
gpioClock.clkSrc = CY_U3P_SYS_CLK;
gpioClock.halfDiv = 0;
apiRetStatus = CyU3PGpioInit(&gpioClock, NULL);

The CyU3PGpioSetSimpleConfig API configures a simple GPIO. The code for configuring GPIO[45] is as follows. GPIO[45] is
configured as input, and interrupt is enabled for both edges of GPIO[45].
/* Configure GPIO 45 as input with interrupt enabled for both edges */
gpioConfig.outValue = CyTrue;
gpioConfig.inputEn = CyTrue;
gpioConfig.driveLowEn = CyFalse;
gpioConfig.driveHighEn = CyFalse;
gpioConfig.intrMode = CY_U3P_GPIO_INTR_BOTH_EDGE;
CyU3PGpioSetSimpleConfig(45, &gpioConfig);
GPIO[21] needs to be overridden, as this pin is associated with the GPIF II control signal. The
CyU3PDeviceConfigureIOMatrix call cannot select the I/O as a GPIO, as it is part of the GPIF II I/Os. An override API call
must be made with caution, as this will change the functionality of the pin. If the I/O line is used as part of GPIF II and is
connected to an external device, then the line will no longer behave as a GPIF II I/O. Here the CTL4 line is not used by the
GPIF II block, so it is safe to override.
CyU3PDeviceGpioOverride (21, CyTrue);
GPIO[21] can be configured as an output using the following code. No interrupt is enabled
corresponding to this I/O change.
gpioConfig.outValue = CyFalse;
gpioConfig.driveLowEn = CyTrue;
gpioConfig.driveHighEn = CyTrue;
gpioConfig.inputEn = CyFalse;
gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
CyU3PGpioSetSimpleConfig(21, &gpioConfig);

Use the followingcode to get the status of GPIO[45].
/* Get the status of the pin */
CyU3PGpioGetValue (45, &gpioValue);

Use the following code to set the value of GPIO[21].
/* Set the GPIO 21 to high */
CyU3PGpioSetValue (21, CyTrue);

GPIO[21] can be driven low by changing the second parameter of the CyU3PGpioSetValue API.
/* Set the GPIO 21 to low */
CyU3PGpioSetValue (21, CyFalse);

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

201

8.9.4.3

Configure GPIO[50] to Generate PWM Output

The I/O matrix needs to be configured to use simple and complex GPIOs. I/Os that are not configured for peripheral
interfaces can be used as GPIOs. This selection must be explicitly made. Otherwise, these lines will be configured per their
default function. This selection is made via four 32-bit bit masks, where each I/O is represented by (1 << IO number). In this
case, GPIO[50] is used as an input pin and is selected during the I/O matrix configuration.
io_cfg.gpioSimpleEn[0] = 0;
io_cfg.gpioSimpleEn[1] = 0;
/* GPIO[50] is used as complex GPIO. */
io_cfg.gpioComplexEn[0] = 0;
io_cfg.gpioComplexEn[1] = 0x00040000;
CyU3PDeviceConfigureIOMatrix (&io_cfg);

Initialize the GPIO module. The GPIO block runs with a fast clock at SYS_CLK / 2, and a slow clock is not used. In this case,
the SYS_CLK runs at 403 MHz
gpioClock.fastClkDiv = 2;
gpioClock.slowClkDiv = 0;
gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
gpioClock.clkSrc = CY_U3P_SYS_CLK;
gpioClock.halfDiv = 0;
CyU3PGpioInit(&gpioClock, NULL);

CyU3PGpioSetComplexConfig configures a complex GPIO. The code for configuring GPIO[50] as a PWM output with a 25
percnet duty cycle is as follows.
/* Configure GPIO 50 as PWM output */
gpioConfig.outValue = CyFalse;
gpioConfig.inputEn = CyFalse;
gpioConfig.driveLowEn = CyTrue;
gpioConfig.driveHighEn = CyTrue;
gpioConfig.pinMode = CY_U3P_GPIO_MODE_PWM;
gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
gpioConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;
gpioConfig.timer = 0;
gpioConfig.period = CY_FX_PWM_PERIOD;
/* (201600 - 1) */
gpioConfig.threshold = CY_FX_PWM_25P_THRESHOLD; /* (50400 - 1) */
apiRetStatus = CyU3PGpioSetComplexConfig(50, &gpioConfig);

The following code changes the PWM duty cycle to 75 percent.
/* Change the PWM duty cycle to 75%. */
CyU3PGpioComplexUpdate (50, CY_FX_PWM_75P_THRESHOLD, CY_FX_PWM_PERIOD); /*
CY_FX_PWM_75P_THRESHOLD = (151200 - 1) */

202

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

9. Storage Ports

FX3S features an integrated storage controller that supports up to two independent SD/ MMC/SDIO devices on its two
storage ports (S0 and S1). Both storage ports support the following specifications:
■

MMC system specification, MMCA Technical Committee, version 4.41

■

SD specification, version 3.0

■

SDIO host controller compliant with SDIO specification version 3.00

9.1

Storage Interface Block Features

The Storage Interface Block (SIB) contains the interface logic for the storage port. The SIB offers the following features:
■

Supports SD3.0/eMMC4.41/SDIO 3.0.

■

Supports two independent ports.

■

8 bidirectional sockets.

■

1-, 4-, and 8-bit bus width on the card interface

■

Card insertion and removal detection

■

Write protection

■

SD3.0 voltage switch sequence from 3.3 V to 1.8 V

■

SD3.0 host tuning feature

■

Normal and alternate eMMC boot as defined in eMMC specification, version 4.41

■

Dynamic clock stop to avoid overrun and underrun and power saving

■

SDR and DDR mode of operation

■

Max operating frequency
❐

104-MHz SDR

❐

52-MHz DDR

❐

Throughput of 180 MBps including both ports

❐

SDIO interrupt feature as specified in the SDIO specification version 2.00 (January 30, 2007)

❐

SDIO read-wait and suspend-resume features as defined in the SDIO specification version 2.00 (January 30, 2007)

9.2

Block Diagram

The SIB is the host controller for external storage devices. It connects storage devices to the ARM processor, USB and lowbandwidth peripherals such as SPI, UART, I2C, I2S, and GPIO. The SIB generates commands and accepts responses at the
SD/MMC interface based on the configuration provided by the firmware. SIB contains two storage port controllers (S0 and S1)
that can be independently configured to support different protocols.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

203

Figure 9-1. SIB Block Diagram

SIB Block
S0_CLK
S0_DAT[7:0]

SIB CLOCK
CONTROL

GCTL

THREAD_0

S0 Registers

S1 Core

S1 Registers

Read/ Write access
to SIB sockets

SIB Sockets [0 – 7]

S1_DAT[7:0]

S0 Core

DMA Adapter

Interface Pins

S0_CMD

S1_CMD
THREAD_1
S1_CLK
SIB CLOCK
CONTROL

GCTL

SIB consists of three major subblocks.
■

S0 core

■

S1 core

■

DMA adapter

The S0 and S1 core are functionally independent, thus can be configured independently. This also allows to clock gate one of
the cores based on the active port. All protocol-related translation and error handling is done by the respective cores. The
cores provide a simple request/data interface to the DMA backbone.
The S0/S1 core contains a CLOCK CONTROL sub-block. The clock control block accepts the core clock as the input and
generates the clocks required for the SIB. This block instantiates the Delay-Locked Loop (DLL) and performs the following
functions:
■

Gating of clock when sockets cannot accept data

■

Gating of clock when sockets do not have data

■

Gating of clock when data transfer of all blocks has been completed

■

Gating of DLL master clock when the block is IDLE

■

Gating of clock only on block boundaries

■

Generating pin sample clocks and core clocks used by the core

■

Keeping track of when DLL locks and loses lock

Each DLL is used to:
■

Internally generate 16 equally spaced phases of input signal. This allows clock control in 22.5º increments. A phase picker
circuit at the DLL output stage picks up to a maximum of 4 of these 16 output phases to guarantee no setup and hold time
issues on-chip. The input reference frequency range of the signal input clock is 25-208 MHz. This is utilized for SD3.0
Host Tuning Feature, discussed in SD3.0 Host Tuning Feature on page 229.

The DMA adapter is used to interface to the DMA interconnect of the FX3S device. All DMA data through the interface is
assembled at the core and then forwarded to the DMA adapter to transfer over the system interconnect. The channel to
access the DMA adapter is the thread. A thread controller converts the simple request-data interface from the core to the
required transactions on the DMA adapter. The DMA data enters the DMA adapter through two distinct pipes, named Thread
0 and Thread 1 in Figure 9-1. These two pipes are required to allow two simultaneous data streams from/to the two storage

204

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

devices. The cores talk to the external world through a 1-, 4-, or 8-bit data bus.
The SIB has eight sockets (sockets 0-7) associated with it. The storage port driver in the FX3 SDK reserves two of these
sockets (socket 6 and 7) for internal operations like card initialization. The remaining sockets can be used for data transfers
with the storage devices.

9.3

Storage Interface (S-Port)

The two ports (S0 and S1) comprising the FX3S storage interface are configured as follows.
Storage port 0 (S0 port) can be configured as:
■

MMC-only interface

■

SD/SDIO and GPIO interface

■

GPIO-only interface

Storage port 1 (S1 port) can be configured as:
■

MMC-only interface

■

SD/SDIO and GPIO interface

■

SD/SDIO and UART interface

■

SD/SDIO and SPI interface

■

SD/SDIO and I2S interface

■

GPIO-only interface

■

GPIO + UART + I2S interface

■

UART + SPI + I2S interface.

Figure 9-2 shows the dual-SD/MMC/SDIO configuration, and Table 9-1 shows the S-port mapping in all configurations.
Figure 9-2. Dual-SD/SDIO/MMC Configuration

FX3S
SD

OR

MM
C

OR

SDIO

S0_DAT[7:0]
S0_CMD
S0_CLK

S1_CLK
S1_CMD
S1_DAT[7:0]

SD

OR

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

MM
C

OR

SDI
O

205

Table 9-1. S-Port Mapping in All Configurations
FX3S Pin Description
Name

S0-Port

Power
Domain

8b MMC

SD+GPIO

GPIO

GPIO[33]

VIO2

S0_SD0

S0_SD0

GPIO

GPIO[34]

VIO2

S0_SD1

S0_SD1

GPIO

GPIO[35]

VIO2

S0_SD2

S0_SD2

GPIO

GPIO[36]

VIO2

S0_SD3

S0_SD3

GPIO

GPIO[37]

VIO2

S0_SD4

GPIO

GPIO

GPIO[38]

VIO2

S0_SD5

GPIO

GPIO

GPIO[39]

VIO2

S0_SD6

GPIO

GPIO

GPIO[40]

VIO2

S0_SD7

GPIO

GPIO

GPIO[41]

VIO2

S0_CMD

S0_CMD

GPIO

GPIO[42]

VIO2

S0_CLK

S0_CLK

GPIO

GPIO[43]

VIO2

S0_WP

S0_WP

GPIO

GPIO[44]

VIO2

S0S1_INS

S0S1_INS

GPIO

GPIO[45]

VIO2

MMC0_RST_OUT

GPIO

GPIO

S1-Port
8b MMC

SD+UART

SD+SPI

SD+GPIO

GPIO

GPIO+UART+
I2S

SD+I2S

UART+SPI+
I2S

GPIO[46]

VIO3

S1_SD0

S1_SD0

S1_SD0

S1_SD0

GPIO

GPIO

S1_SD0

UART_RTS

GPIO[47]

VIO3

S1_SD1

S1_SD1

S1_SD1

S1_SD1

GPIO

GPIO

S1_SD1

UART_CTS

GPIO[48]

VIO3

S1_SD2

S1_SD2

S1_SD2

S1_SD2

GPIO

GPIO

S1_SD2

UART_TX

GPIO[49]

VIO3

S1_SD3

S1_SD3

S1_SD3

S1_SD3

GPIO

GPIO

S1_SD3

UART_RX

GPIO[50]

VIO3

S1_CMD

S1_CMD

S1_CMD

S1_CMD

GPIO

I2S_CLK

S1_CMD

I2S_CLK

GPIO[51]

VIO3

S1_CLK

S1_CLK

S1_CLK

S1_CLK

GPIO

I2S_SD

S1_CLK

I2S_SD

GPIO[52]

VIO3

S1_WP

S1_WP

S1_WP

S1_WP

GPIO

I2S_WS

S1_WP

I2S_WS

GPIO[53]

VIO4

S1_SD4

UART_RTS

SPI_SCK

GPIO

GPIO

UART_RTS

GPIO

SPI_SCK

GPIO[54]

VIO4

S1_SD5

UART_CTS

SPI_SSN

GPIO

GPIO

UART_CTS

I2S_CLK

SPI_SSN

GPIO[55]

VIO4

S1_SD6

UART_TX

SPI_MISO

GPIO

GPIO

UART_TX

I2S_SD

SPI_MISO

GPIO[56]

VIO4

S1_SD7

UART_RX

SPI_MOSI

GPIO

GPIO

UART_RX

I2S_WS

SPI_MOSI

VIO4

MMC1_RS
T_OUT

GPIO

GPIO

GPIO

GPIO

I2S_MCLK

I2S_MCLK

I2S_MCLK

GPIO[57]

The S-port interface includes three power domains: VIO2, VIO3, and VIO4. For the system design, the power domain
connection depends on the S-port configuration. You must connect the power domains of all signals of a particular interface to
the same power source. For example, if the S-port 1 is configured to "8-bit MMC configuration," then VIO2, VIO3, and VIO4
must connect to the same voltage level (for example, 3.3 V).
The storage interface signals can be driven at 3.3 V or 1.8 V (low-voltage operation for UHS mode of operation) based on the
voltage provided on the VIO2 or VIO3 (VIO4) input.
The storage ports can be configured with an 8-bit-wide or 4-bit-wide data bus and will support interface clock frequencies up
to 104-MHz SDR or 52-MHz DDR.
The storage ports do not support functioning in the legacy SPI mode.
The storage controller block on the FX3S device supports sending any command with custom parameters and receiving
arbitrary lengths of device response. The data interface is connected to the DMA fabric, and all data transfers are performed
through DMA sockets. Refer to chapter 5 for details on DMA and DMA sockets.
The storage controller can be configured to transfer one or more blocks of data with arbitrary block lengths. However, it is
expected that the data block length will be a multiple of 8 bytes and greater than or equal to 16 bytes. The FAST_IO (CMD39)
command should be used to transfer small amounts data from/to SDIO devices.

206

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The interface clock frequency is divided down from the master system clock (384 MHz or 416 MHz) through a set of dividers.
The block supports clock frequencies ranging from 400-kHz to 104-MHz SDR (or 52-MHz DDR).
The storage controller supports stopping the interface clock to reduce power consumption when the interface is not in use. An
auto stop clock feature is supported to prevent data overflow during read operations. The clock automatically stops when the
internal buffer is full and restarts when a buffer is made available.
The storage controller supports card insertion and removal detection through one of two mechanisms:
■

Voltage change on the DAT[3] pin

■

Voltage change on a dedicated GPIO pin connected to a microswitch on the card socket

GPIO pins are used for resetting the eMMC devices and for checking the write protect status of the storage devices. These
pins operate under firmware control and do not directly affect the storage port operation.
The storage controller supports SDIO-specific features such as SDIO interrupt detection and the SDIO read-wait and
suspend-resume features, as specified in the SDIO specification version 2.00.

9.4
9.4.1

SD/ MMC/ SDIO Interface
SD/MMC Interface Overview

The SD bus includes the following signals:
■

CLK: Host to card clock signal

■

CMD: Bidirectional command/response signal

■

DAT0-DAT3: Four bidirectional data signals

■

VDD, VSS1, VSS2: Power and ground signals

The MMC bus includes these signals:
■

CLK: Host to card clock signal

■

CMD: Bidirectional command/response signal

■

DAT0-DAT7: Eight bidirectional data signals

■

VDD, VSS1, VSS2: Power and ground signals

The SD/MMC protocol is based on command and data bit streams that are initiated by a start bit and terminated by a stop bit.
Additionally, the SD/MMC controller provides a reference clock. Each message/operation is represented by one of the
following tokens:
■

Command: A token transmitted serially on the CMD pin that starts an operation. A command is sent from the host to a
card

■

Response: A token from the card transmitted serially on the CMD pin in response to certain commands, from the card to
the host.

■

Data: Data can be transferred via the data lines from the card to the host or vice versa. The number of data lines used for
the data transfer can be one (DAT0) or four (DAT0-DAT3) with the SD protocol and one (DAT0), four (DAT0-DAT3), or
eight (DAT0-DAT7) with the MMC protocol.

Figure 9-3, Figure 9-4, and Figure 9-5 show the possible bus operations in a normal working case. Please note that the
figures are for illustrative purposes and use read operations in the MMC card as an example. Similar operations apply to the
SD protocol as well, with a change in data bus width.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

207

Figure 9-3. Sequential Read Operation (Using 1-bit Data Bus)*

* Source: eMMC Specification 4.3

Figure 9-4. (Multiple) Block Read Operation (Using 8-bit MMC Data Bus)*

* Source: eMMC Specification 4.3
*Note: Bus width for the block read operation in the SD card would be 4 bits using the DAT0-3 lines.
Figure 9-5. "No Response" and "No Data" Operations*

* Source: eMMC Specification 4.3
For more details, refer to the SD/MMC specification.

208

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

9.4.2

SDIO Interface Overview

A Secure Digital Input and Output (SDIO) card is an extension of the SD specification to cover I/O functions. The SD standard
offers great flexibility, including the ability to use the SD slot for more than memory cards. The SDIO card is an interface that
extends the functionality of devices by using a standard SD card slot to give devices that use these new capabilities. A partial
list of new capabilities includes the following:
■

GPS

■

Camera

■

Wi-Fi

■

FM radio

■

Ethernet

■

Barcode readers

■

Bluetooth®

The SDIO and SD interfaces are mechanically and electrically identical. Thus, the SDIO bus includes the following signals:
■

CLK: Host to card clock signal

■

CMD: Bidirectional command/response signal

■

DAT0-DAT3: Four bidirectional data signals

■

VDD, VSS1, VSS2: Power and ground signals
Figure 9-6. Signal Connection to Two 4-Bit SDIO Cards*

* Source: SDIO Specification, version 2.0
The command/response protocol for SDIO is the same as that for the SD protocol described in 9.4.1 SD/MMC Interface
Overview on page 207. For more details, refer to the SDIO specification.

9.5

FX3S S-Port Operations Overview

Most of the S-port operations including initialization and other housekeeping tasks are performed by the storage driver, which
is provided with the FX3 SDK. The FX3 SDK provides the following:
1. Storage driver that identifies and initializes the storage peripherals connected to FX3S, as well as interrupt services associated with the storage interface
2. A set of APIs (storage API library) that allows users to query peripheral properties and perform data transfers to/from
these peripherals

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

209

The storage driver uses a dedicated RTOS thread and handles all events arising due to the SIB controller interrupts. The
storage driver identifies the type of storage device connected on each of the enabled storage ports and initializes it with the
appropriate command sequence.
The storage API provides functions to query the storage device properties like device type, memory capacity, number of SDIO
functions, and so on. APIs are provided to perform read/write transfers to SD/MMC memory devices as well as to SDIO cards.
The storage API also provides functions to send individual commands to the storage device and obtain the corresponding
responses. The device initialization will be performed by the storage driver in this case as well, and the command mode can
be used only after device initialization. The storage APIs are intended only for applications running on the FX3S device.

9.5.1
9.5.1.1

S-port Initialization and Configuration
Configuring the FX3S I/O Matrix

The GCTL_IOMATRIX register must be configured to enable the appropriate mode for the S0 and S1 ports. This is done
using the API CyU3PDeviceConfigureIOMatrix. When using eMMC devices, the s0Mode/s1Mode should be set to
CY_U3P_SPORT_8BIT to obtain the optimal performance. GPIOs (unused pins that are not configured for any other
peripheral interfaces) to be used as voltage switching GPIOs or reset GPIOs also need to be configured for use as simple
GPIOs. Refer to 4.1.1 I/O Matrix Configuration on page 53 for details on IO matrix configuration.
/* Configure the IO matrix for the device.
* S0 port is enabled in 8 bit mode.
* S1 port is enabled in 4 bit mode.
* UART is enabled on remaining pins of the S1 port.
*/
io_cfg.isDQ32Bit
= CyFalse;
io_cfg.s0Mode
= CY_U3P_SPORT_8BIT;
io_cfg.s1Mode
= CY_U3P_SPORT_4BIT;
io_cfg.gpioSimpleEn[0] = 0;
io_cfg.gpioSimpleEn[1] = 0x02002000; /*IOs 45 and 57 are chosen as GPIO
for voltage switching GPIOs */
io_cfg.gpioComplexEn[0] = 0;
io_cfg.gpioComplexEn[1] = 0;
io_cfg.useUart
= CyTrue;
io_cfg.useI2C
= CyFalse;
io_cfg.useI2S
= CyFalse;
io_cfg.useSpi
= CyFalse;
io_cfg.lppMode
= CY_U3P_IO_MATRIX_LPP_UART_ONLY;
status = CyU3PDeviceConfigureIOMatrix (&io_cfg);
if (status != CY_U3P_SUCCESS)
{
goto handle_fatal_error;
}

9.5.1.2

Setting S-Port Interface Parameters

Interface parameters such as low-voltage operation, DDR clocking support, card detection and write protection support need
to be set independently for both the storage ports using the API CyU3PSibSetIntfParams.
intfParams.resetGpio = 0xFF; /* No GPIO control on SD/MMC power. */
intfParams.rstActHigh = CyTrue; /* Don't care as no GPIO is selected. */
intfParams.cardDetType = CY_U3P_SIB_DETECT_DAT_3; /* Card detect based
on SD_DAT[3]. */
intfParams.writeProtEnable = CyTrue; /* Write protect handling enabled.*/
intfParams.lowVoltage = CyTrue;
/* Low voltage operation enabled. */
intfParams.voltageSwGpio = 45;
/* Use GPIO_45 for voltage switch on

210

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

S0 port. */
intfParams.lvGpioState = CyFalse; /* Driving GPIO
SxVDDQ. */
intfParams.useDdr = CyTrue;
/* DDR clocking
intfParams.maxFreq = CY_U3P_SIB_FREQ_104MHZ; /* No
limitation. */
intfParams.cardInitDelay = 0; /* No delay required
initialization. */

low selects 1.8 V on
enabled. */
S port clock
between SD card

insertion before

status = CyU3PSibSetIntfParams (0, &intfParams);
if (status == CY_U3P_SUCCESS)
{
intfParams.voltageSwGpio = 57;
/* Use GPIO_57 for voltage switch on S1 port. */
status = CyU3PSibSetIntfParams (1, &intfParams);
}
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "Set SIB interface parameters failed,
code=%d\r\n", status);
CyFxAppErrorHandler (status);
}
status = CyU3PSibStart ();
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "SIB start failed, code=%d\r\n", status);
CyFxAppErrorHandler (status);
}

The structure passed as a parameter to CyU3PSibSetIntfParams defines the configuration parameters for the storage ports.
These parameter values are used internally by the storage driver to configure the GPIOs (like resetGPIO, voltageswGPIO,
and so on, if enabled) appropriately. All parameter values, except for the "cardDetType," are used internally by the storage
driver only and do not have a register-level impact. cardDetType enables the appropriate interrupt for card detection. Refer to
Card Insertion and Removal Detection Mechanism on page 226 for more details on card detection.

9.5.1.3

Starting the Storage Driver

The CyU3PSibStart API is called to start the storage driver and initialize any storage devices that are connected on the two
storage ports. Depending on the type of device (SD/MMC/SDIO), the device is initialized appropriately by the driver. The
storage device types supported by FX3S are as follows.
/** \brief List the Storage Device types supported by FX3S.
**Description**\n
This enumeration lists the various storage device types supported by the
storage module in FX3S firmware.
*/
typedef enum CyU3PSibDevType
{
CY_U3P_SIB_DEV_NONE = 0,
CY_U3P_SIB_DEV_MMC,
CY_U3P_SIB_DEV_SD,
CY_U3P_SIB_DEV_SDIO,
CY_U3P_SIB_DEV_SDIO_COMBO
card are not supported. */
} CyU3PSibDevType;

/**<
/**<
/**<
/**<
/**<

No device */
MMC/eMMC device */
SD Memory card */
SDIO IO only Device.*/
SDIO Combo Device. Data transfers to the combo

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

211

9.5.1.4

Setting the S-Port Clock

The S0/S1 interface clock is enabled or disabled by the bit SDMMC_CLK_DIS in the register SDMMC_CS (SD/MMC/SDIO
card command and status register). For bit definitions, refer to SDMMC_CS register on page 656.
The clock values are set using the register GCTL_SIB0_CORE_CLK and GCTL_SIB1_CORE_CLK (SIB Port 0/1 core clock
configuration register). GCTL_SIBx_CORE_CLK.DIV determines the clock divider value for dividing the PLL system clock.
GCTL_SIBx_CORE_CLK.SRC selects the clock source, and GCTL_SIBx_CORE_CLK.EN enables it.
The clock choice for the divisor is user-configurable. For example, the following frequencies can be configured through these
registers:
■

400 kHz: For the SD/MMC card initialization

■

20 MHz: For a card with 0- to 20-MHz frequency

■

24 MHz: For a card with 0- to 26-MHz frequency

■

48 MHz: For a card with 0- to 52-MHz frequency (48-MHz frequency on SD_CLK is supported when the clock input to
FX3S is 19.2 MHz or 38.4 MHz.)

■

52 MHz: For a card with 0- to 52-MHz frequency (52-MHz frequency on SD_CLK is supported when the clock input to
FX3S is 26 MHz or 52 MHz)

■

100 MHz: For a card with 0- to 100-MHz frequency

If the DDR mode is selected, data is clocked on both the rising and falling edge of the SD clock. DDR clocks run up to
52 MHz.

9.5.1.4.1

Powering On the SIB

The SIB block is power cycled using the SIB_POWER.RESETN bit and then polled for the SIB_POWER.ACTIVE bit, which
remains deasserted until initialization is complete. SIB_POWER.ACTIVE = 1 indicates block is initialized and ready for
operation. For bit definitions, refer to SIB_POWER register on page 640.

9.5.1.4.2

Initializing SIB Sockets

Initially, all sockets are disabled, and socket interrupts are cleared using the registers SCK_STATUS, SCK_INTR and
SCK_INTR_MASK. Refer to 5.5.5 Sockets on page 68 for more details on sockets.
Later, the active SIB socket number for read/write is set using SDMMC_CS.SOCKET before initiating reads/writes from/to the
SD/MMC/SDIO device.

9.5.1.4.3

S-Port I/O Drive Strength

The S-port I/O drive strength is programmable like any other I/O pin as discussed in 4.1.2 I/O Drive Strength on page 55.

9.5.1.5

Sending SD/MMC/SDIO Commands

The SD/SDIO/MMC command to be sent on the command bus is specified through the register SDMMC_CMD_IDX. The cmd
field specifies the command index that is to be included in the command sent. When the command is sent, the hardware
sends out start and transmission bits followed by (SDMMC_CMD_RESP_FMT.CMDFRMT+1 bits) a 7-bit CRC code and an
end bit. The (SDMMC_CMD_RESP_FMT.CMDFRMT+1) bits include as many bits as necessary in the following order:
command index (6 bits), argument (starting from bit 31 of SDMMC_CMD_ARG0), SDMMC_CMD_ARG1. The
SDMMC_CMD_ARG0 register holds the 32-bit SD/MMC/SDIO command argument. Any additional argument bits for the
expanded command may be placed in the SDMMC_CMD_ARG1 register. There is no need for the software to specify start,
transmission and end bits-they are to be generated by the hardware.
For bit definitions, refer to SDMMC_CMD_IDX register on page 641, SDMMC_CMD_RESP_FMT register on page 650,
SDMMC_CMD_ARG0 register on page 642 and SDMMC_CMD_ARG1 register on page 643.
After writing to these registers, the command transmission is initiated by setting the SDMMC_CS. SNDCMD bit and then
polled for the SDMMC_INTR.CMDSENT bit that indicates command send completion. Refer to 9.5.1.6 Handling SIB
Events on page 214 for the SDMMC_INTR register field descriptions.

212

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The SDMMC_INTR.RCVDRES bit is polled to get the response from the card. The first 8 bits of response are captured in the
RESP_IDX register. These eight bits include the start, transmission, and command index fields. The response data received
from the card on the response bus, including crc7 and end bits, is placed in registers SDMMC_RESP_REG.
For bit definitions, refer to SDMMC_RESP_IDX register on page 644 and SDMMC_RESP_REG0 register on page 645.
Command/response timing is specified through the registers, SDMMC_NCC_NWR, SDMMC_NAC, and SDMMC_NCR.
For bit definitions, refer to SDMMC_NCC_NWR register on page 665, SDMMC_NAC register on page 666, SDMMC_NCR
register on page 664.
A block size of 512 (0x0200) is set as the default using the register SDMMC_BLOCKLEN.
Following successful initialization, the SIB mode (SD/ MMC/ SDIO) is set and SIB is configured for the data bus width and
clock speed using the SDMMC_MODE_CFG register. For bit definitions, refer to SDMMC_MODE_CFG register on page 653.
The devices detected on the storage ports can be queried using the API CyU3PSibQueryDevice. If the device on the storage
port has more than one partition, then the API CyU3PSibQueryUnit can be used to access the storage partition (LUN)
information for the specified port and unit number. This applies only to SD and eMMC devices.
for (i = 0; i < CY_FX_SIB_PORTS; i++)
{
unitsFound = 0;
/* Initialize LUN data structures with default values. */
for (j = 0; j < CY_FX_SIB_PARTITIONS; j++)
{
glLunState[i * CY_FX_SIB_PARTITIONS + j]
= CyFalse;
glLunUnit[i * CY_FX_SIB_PARTITIONS + j]
= 10;
/* Invalid value. */
glLunWriteable[i * CY_FX_SIB_PARTITIONS + j] = CyTrue;
glLunBlkSize[i * CY_FX_SIB_PARTITIONS + j]
= 0;
glLunNumBlks[i * CY_FX_SIB_PARTITIONS + j]
= 0;
}
/* Query each of the storage ports to identify whether a device has been
detected. */
status = CyU3PSibQueryDevice (i, &glDevInfo[i]);
if (status == CY_U3P_SUCCESS)
{
CyU3PDebugPrint (8, "Found a device on port %d\r\n", i);
CyU3PDebugPrint (6, "\tType=%d, numBlks=%d, eraseSize=%d, clkRate=%d\r\n",
glDevInfo[i].cardType, glDevInfo[i].numBlks, glDevInfo[i].eraseSize,
glDevInfo[i].clkRate);
CyU3PDebugPrint (6, "\tblkLen=%d removable=%d, writeable=%d, locked=%d\r\n",
glDevInfo[i].blkLen, glDevInfo[i].removable, glDevInfo[i].writeable,
glDevInfo[i].locked);
CyU3PDebugPrint (6, "\tddrMode=%d, opVoltage=%d, busWidth=%d,
numUnits=%d\r\n", glDevInfo[i].ddrMode,
glDevInfo[i].opVoltage, glDevInfo[i].busWidth,
glDevInfo[i].numUnits);
CyU3PDebugPrint (6, "\tcardCmdClass=%d\r\n", glDevInfo[i].ccc);
/* Run through each of the units present and check how many data partitions
are present. We skip all boot partitions in this application.
*/
for (j = 0; j < glDevInfo[i].numUnits; j++)
{
status = CyU3PSibQueryUnit (i, j, &unitInfo);
if (status != CY_U3P_SUCCESS)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

213

{
CyU3PDebugPrint (2, "Error: Failed to query partition %d on port
%d\r\n", j, i);
break;
}
CyU3PDebugPrint (6, "Dev %d, Unit %d: location=%d numBlocks=%d\r\n",
i, j, unitInfo.location, unitInfo.numBlocks);
if (unitInfo.location == CY_U3P_SIB_LOCATION_USER)
{
CyU3PDebugPrint (4, "Dev %d: Found user partition\r\n", i);
unitsFound++;
}
}
}

If an existing partition needs to be removed for the specified storage port, this can be done using the API
CyU3PSibRemovePartitions. This reunifies the complete storage available on a device as a single data partition (volume).
CyU3PSibPartitionStorage can be used to partition the storage device into multiple logical units that can be separately
accessed.
if ((unitsFound < CY_FX_SIB_PARTITIONS) && (glDevInfo[i].writeable))
{
/* Make sure any existing partitioning is removed. */
CyU3PSibRemovePartitions (i);
/* Makes sure that each storage device is partitioned into the
required number of units. */
for (j = 0; j < CY_FX_SIB_PARTITIONS; j++)
{
partsize[j] = (glDevInfo[i].numBlks / CY_FX_SIB_PARTITIONS);
parttype[j] = CY_U3P_SIB_LUN_DATA;
}
CyU3PDebugPrint (4, "Port %d: Creating partitions as required\r\n",i);
status = CyU3PSibPartitionStorage (i, CY_FX_SIB_PARTITIONS, partsize,
parttype);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (2, "Error: Failed to partition storage device %d,
status=%d\r\n", i, status);
continue;
}
}

Note: APIs CyU3PSibPartitionStorage and CyU3PSibRemovePartitions are used to manage virtual partitions created by the
firmware.

9.5.1.6

Handling SIB Events

The SIB events are based on the bits of the SD/MMC/SDIO interrupt request register (SDMMC_INTR). These bits are set to 1
whenever a bit in SDMMC_STATUS changes from 0 to 1.
For bit definitions, refer to SDMMC_STATUS register on page 658, SDMMC_INTR register on page 660, and
SDMMC_INTR_MASK register on page 662.

214

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

CyU3PSibRegisterCbk can be used to register a callback function that will be called to provide a notification for storagerelated events such as card insertion/removal and data transfer completion; as well as for the status of the storage read/write
operations.
/* Register a callback for SIB events. */
CyU3PSibRegisterCbk (CyFxMscApplnSibCB);
void
CyFxMscApplnSibCB (
uint8_t
portId,
CyU3PSibEventType
evt,
CyU3PReturnStatus_t status)
{
CyU3PDmaSocketConfig_t sockConf;
if (evt == CY_U3P_SIB_EVENT_XFER_CPLT)
{
if (status != CY_U3P_SUCCESS)
{
glMscCmdStatus
= 1;
glSensePtr[portId] = CY_FX_MSC_SENSE_CRC_ERROR;
/* Transfer has failed. Reset the DMA channel. */
if (glCmdDirection)
{
CyU3PDmaSocketGetConfig ((uint16_t)(CY_U3P_UIB_SOCKET_CONS_0 |
CY_FX_MSC_EP_BULK_IN_SOCKET),
&sockConf);
glMscResidue -= sockConf.xferCount;
CyU3PDmaChannelReset (&glChHandleMscIn);
}
else
{
CyU3PDmaSocketGetConfig ((uint16_t)(CY_U3P_UIB_SOCKET_PROD_0 +
CY_FX_MSC_EP_BULK_OUT_SOCKET),
&sockConf);
glMscResidue -= sockConf.xferCount;
CyU3PDmaChannelReset (&glChHandleMscOut);
}
}
else
{
glMscCmdStatus = 0;
glMscResidue
= 0;
glSensePtr[portId] = CY_FX_MSC_SENSE_OK;
}
CyU3PEventSet (&glMscAppEvent, CY_FX_MSC_SIBCB_EVENT_FLAG, CYU3P_EVENT_OR);
}
if (evt == CY_U3P_SIB_EVENT_INSERT)
{
uint8_t i = 0;
CyU3PDebugPrint (2, "Insert event on port %d\r\n", portId);
CyFxMscApplnQueryDevStatus ();
for (i = 0; i < CY_FX_SIB_PARTITIONS; i++)
{

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

215

glSensePtr[portId * CY_FX_SIB_PARTITIONS + i] = CY_FX_MSC_SENSE_MEDIA_CHANGED;
}
}
if (evt == CY_U3P_SIB_EVENT_REMOVE)
{
uint8_t i = 0, lun = 0;
CyU3PDebugPrint (2, "Remove event on port %d\r\n", portId);
for (i = 0; i < CY_FX_SIB_PARTITIONS; i++)
{
lun = portId * CY_FX_SIB_PARTITIONS + i;
glLunState[lun]
glLunUnit[lun]
glLunBlkSize[lun]
glLunNumBlks[lun]
glLunWriteable[lun]
glSensePtr[lun]

=
=
=
=
=
=

CyFalse;
10;
0;
0;
CyTrue;
CY_FX_MSC_SENSE_MEDIA_CHANGED;

}
}
if ((evt == CY_U3P_SIB_EVENT_DATA_ERROR) || (evt == CY_U3P_SIB_EVENT_ABORT))
{
/* Transfer has failed. Reset the DMA channel. */
if (glCmdDirection)
{
CyU3PDmaChannelReset ((CyU3PDmaChannel *) &glChHandleMscOut);
}
else
{
CyU3PDmaChannelReset ((CyU3PDmaChannel *) &glChHandleMscIn);
}
/* Make sure the request is aborted and that the controller is reset. */
CyU3PSibAbortRequest (portId);
}
}

9.5.2

Reads and Writes to SD/ MMC Using DMA Transfers

A DMA channel (out) is created to transfer data to the SD/ MMC device connected to any of the S-ports, and another DMA
channel (in) is created to read data from the SD/MMC device. Refer to FX3 DMA Subsystem chapter on page 61 for more
details on the DMA channels and sockets. Any of the six available S-port sockets can be used for these channels. The socket
is defined as follows inside the FX3 SDK library:
CY_U3P_SIB_SOCKET_0 = 0x0200,
CY_U3P_SIB_SOCKET_1,
CY_U3P_SIB_SOCKET_2,
CY_U3P_SIB_SOCKET_3,
CY_U3P_SIB_SOCKET_4,
CY_U3P_SIB_SOCKET_5,

/**<
/**<
/**<
/**<
/**<
/**<

S-port
S-port
S-port
S-port
S-port
S-port

socket
socket
socket
socket
socket
socket

number
number
number
number
number
number

0.
1.
2.
3.
4.
5.

*/
*/
*/
*/
*/
*/

The following is the code for performing reads and writes to/from the SD/MMC device.
/* Initiating Write to SD/ MMC card */

216

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

status = CyU3PDmaChannelSetXfer (&glChHandleMscOut, (numBlks *
CY_FX_SIB_MAX_BLOCK_SIZE));
if (status == CY_U3P_SUCCESS)
{
status = CyU3PSibReadWriteRequest (CY_FX_SIB_WRITE, ((lun >= CY_FX_SIB_PARTITIONS)
? 1 : 0), glLunUnit[lun], numBlks, startAddr, 0);
if (status != CY_U3P_SUCCESS)
{
/* Abort the DMA Channel */
CyU3PDmaChannelReset (&glChHandleMscIn);
}
}
/* Initiating Read from SD/ MMC card */
status = CyU3PDmaChannelSetXfer (&glChHandleMscIn, (numBlks *
CY_FX_SIB_MAX_BLOCK_SIZE));
if (status == CY_U3P_SUCCESS)
{
status = CyU3PSibReadWriteRequest (CY_FX_SIB_READ, ((lun >= CY_FX_SIB_PARTITIONS) ?
1 : 0), glLunUnit[lun], numBlks, startAddr, 1);
if (status != CY_U3P_SUCCESS)
{
/* Abort the DMA Channel */
CyU3PDmaChannelReset (&glChHandleMscIn);
}
}

CyU3PSibReadWriteRequest initiates a read/write data request. This function is used to initiate a read/write request to a
storage device. The open-ended read/write commands (CMD18 and CMD25) are used in all cases.
Inside this API, the block length and number of blocks, calculated from the parameters passed to it, are set in the appropriate
registers: SDMMC_BLOCKLEN and SDMMC_BLOCK_COUNT.
For bit definitions, refer to SDMMC_BLOCK_COUNT register on page 651.
The active SIB socket number for read/write is set using SDMMC_CS.SOCKET before initiating reads/writes from/to the SD/
MMC device. The DAT0 pin state can be monitored to learn the storage device busy state by polling for the bit
SDMMC_SATUS.DAT0_STAT. Before starting the command transmission involving the data phase, the
SDMMC_STATUS.DATA_SM_BUSY bit is polled to learn if the data state machine is busy. If so, the SIB is reset by setting the
SDMMC_CS.RSTCONT bit and then polled for it to become 0. Hardware writes 0 when reset is complete.
Before initiating any command transmission involving data through DAT[0:3] for SD or DAT[0:7] for MMC, the
DAT3_CHANGE interrupt is disabled by setting the SDMMC_INTR_MASK.DAT3_CHANGE bit. The interrupt is enabled
again after command completion. Then command transmission is initiated and completed in the same manner as described
in 9.5.1.5 Sending SD/MMC/SDIO Commands on page 212.
In a read operation (MULTI BLOCK read command CMD18), the command transmission is initiated by setting the bits
SDMMC_CS. SNDCMD and SDMMC_CS. RDDCARD.
The CY_U3P_SIB_EVENT_XFER_CPLT event is sent to the caller through the register storage callback function when the
specified amount of data has been completely transferred. This event is triggered based on the bits
SDMMC_INTR.BLOCK_COMP and SDMMC_INTR.BLOCKS_RECEIVED.
The socket number to be passed as a parameter to the function CyU3PSibReadWriteRequest is the offset with respect to
CY_U3P_SIB_SOCKET_0. For example, if CY_U3P_SIB_SOCKET_1 is used to create the DMA channel, then the socket
number to be passed in CyU3PSibReadWriteRequest is "1". This function internally initiates the DMA channel for transferring
the specified amount of data. It is therefore expected that the DMA channel be left in the idle state
(CY_U3P_DMA_CONFIGURED) when calling this API.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

217

CyU3PDmaChannelSetXfer sets up a one-to-one DMA channel for data transfer. The sockets corresponding to a DMA
channel are left disabled when the channel is created, so that transfers are started only when desired by the user. This
function enables a DMA channel to transfer a specified amount of data before suspending again. An infinite transfer can be
started by specifying a transfer size of 0. This function should be called only when the channel is in the
CY_U3P_DMA_CONFIGURED state. Refer to chapter 5 for more details on DMA.

9.5.2.1

Sending Vendor Commands to SD/ MMC

The CyU3PSibVendorAccess function is used to send general SD/MMC commands to storage device/cards attached to the
FX3S device and receive the corresponding response. Custom commands can be implemented using this function.
Command transmission is initiated and completed in the same manner as described in 9.5.1.5 Sending SD/MMC/SDIO
Commands on page 212.

9.5.2.2

Setting the Granularity of Write Operations

CyU3PSibSetWriteCommitSize sets the sector granularity at which write operations are committed to the SD/MMC storage.
Committing write data to SD/MMC storage in small chunks can lead to poor write transfer performance. The write
performance to these devices can be improved by combining write operations with sequential addresses and performing a
single commit (STOP_TRANSMISSION) operation.
/* Commit data in 8MB chunks: 16k sectors */
CyU3PSibSetWriteCommitSize (i, 16384);

By default, this value is set to 1, meaning that a write of one sector or more is immediately committed to the storage device.

9.5.2.3

Checking Card Status

The CyU3PSibGetCardStatus function sends the CMD13 (SEND_STATUS) command to the SD/MMC device connected on
the specified storage port and provides the card status response that is received. This API can be used to check whether the
storage device is accessible and is in the TRAN state, where it can receive new commands.

9.5.2.4

Aborting Ongoing Transaction to S-Port

The SIB is reset by writing to the bit SDMMC_CS. RSTCONT and then polled for it to become 0. Software writes '1' to bring
the SIB FSMs to a known state. Hardware writes '0' when reset is complete. The values of the CFG registers are not affected
by RSTCONT. Internal queues are flushed by RSTCONT. Then the SDMMC_CS.WRDCARD and SDMMC_CS.RDDCARD
bits are selectively set, and the SIB is reset again by setting SDMMC_CS.RSTCONT.
The CyU3PSibAbortRequest API is used to abort any ongoing transactions on the specified port. Prior to calling this function,
the corresponding DMA channel should be reset.
Void CyFxMscApplnSibCB (
uint8_t
portId,
CyU3PSibEventType
evt,
CyU3PReturnStatus_t status)
{
if ((evt == CY_U3P_SIB_EVENT_DATA_ERROR) || (evt == CY_U3P_SIB_EVENT_ABORT))
{
/* Transfer has failed. Reset the DMA channel. */
if (glCmdDirection)
{
CyU3PDmaChannelReset ((CyU3PDmaChannel *) &glChHandleMscOut);
}
else
{
CyU3PDmaChannelReset ((CyU3PDmaChannel *) &glChHandleMscIn);
}

218

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

/* Make sure the request is aborted and that the controller is reset. */
CyU3PSibAbortRequest (portId);
}
}

9.5.3
9.5.3.1

Working with SDIO Cards
Configuration and Initialization

The configuration of the S-port and the initialization are very similar to that of the SD card, as explained in 9.5.1 S-port
Initialization and Configuration on page 210.
The IOMatrix configuration is done similarly to that for SD cards and interface parameters are set independently for the
appropriate S-port. The CyU3PSibStart API calls for starting the storage driver also identify and initialize the SDIO device
connected on the two storage ports. The device type, "SDIO IO only" or "combo card," can be learned by calling
CyU3PSibQueryDevice.
Note: The storage driver and library APIs in FX3 SDK 1.3.1 have been tested for SDIO I/O only cards. For combo cards,
please contact Cypress Support.
CyU3PSdioQueryCard can be used to fetch SDIO card information and card common register information. This function
returns a CYU3PSdioCardRegs object that contains card common register information from an initialized SDIO card on the
port specified by portId.

9.5.3.2

Reads and Writes from SDIO Card Registers

9.5.3.3

IO_RW_DIRECT Command (CMD52)

The IO_RW_DIRECT command (CMD52) is the simplest means to access a single register within the total register space in
any I/O function, including the common I/O area (CIA). This command reads or writes 1 byte using only 1 command/response
pair. A common use is to initialize registers or monitor status values for I/O functions. This command is the fastest means to
read or write single I/O registers, as it requires only a single command/response pair.
Figure 9-7. IO_RW_DIRECT Command

S D
1 1

Command
Index
110100b
6

R/W
Flag
1

Function
Number
3

*

RAW
Flag

Stuff

Register
Address

Stuff

Write Data or
Stuff Bits

CRC7

E

1

1

17

1

8

7

1

* Source: SDIO Specification, version 2.0
The IO_RW_DIRECT command contains the following fields:
■

S: Start bit. Always 0.

■

D: Direction. Always1; indicates transfer host to card.

■

Command Index: Identifies the IO_RW_DIRECT command with a value of 110100b.

■

R/W flag: This bit determines the direction of the I/O operation. If this bit is 0, this command will read data from the SDIO
card at the address specified by the Function Number and the Register Address to the host. The data byte is returned in
the response, R5. If this bit is set to 1, the command will write the bytes in the Write Data field to the I/O location
addressed by the Function Number and Register Address. If the RAW flag is 0, then the data in the register that was
written will be read and that value returned in the response.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

219

■

RAW flag: The Read after Write flag. If this bit is set to 1 and the R/W flag is set to 1, then the command will read the value
of the register after the write. This is useful to allow writing to a control register and reading the status at the same
address. If this bit is cleared, the value returned in the R5 response will be the same as the write data in the command. If
this bit is set, the data field of the R5 response will contain the value read from the addressed register after the write
operation.

■

Function Number: The number of the function within the I/O card you wish to read or write. Note that function 0 selects the
CIA.

■

Register Address: This is the address of the byte of data inside the selected function to read or write. There are 17 bits of
address available, so the register is located within the first 128K (131,072) addresses of that function.

■

Write Data or Stuff Bits: For a direct write command (R/W=1), this is the byte that is written to the selected address. For a
direct read command (R/W=0), this field is not used and is be set to 0.

■

CRC7: Seven bits of CRC data.

■

E: End bit, always 1.

9.5.3.3.1

CMD52 R5 Response (SD Mode)

If the communication between the card and host is in the 1-bit or 4-bit SD mode, the response will be in a 48-bit response
(R5) as shown in Figure 9-8.
Figure 9-8. R5 IO_RW_DIRECT Response (SD Modes)

S

D

1

1

Command
Index
110100b
6

Response Flag
Bits
7-----------0
8

Stuff
16

*
Read or Write
Data

CRC7

E

8

7

1

* Source: SDIO Specification, version 2.0
■

S: Start bit. Always 0.

■

D: Direction. 0 indicates transfer card to host (response).

■

Command Index: Identifies the IO_RW_DIRECT command with a value of 110100b.

■

Stuff: Not used. Will be set to 0.

■

Response Flags Bit: Eight bits of flag data indicating the status of the SDIO card.

■

Read or Write Data: For an I/O write (R/W=1) with the RAW flag set (RAW=1), this field will contain the value read from
the addressed register after the write of the data contained in the command. Note that in this case, the read-back data
may not be the same as the data written to the register, depending on the design of the hardware. For an I/O write with the
RAW bit=0, the SDIO function will not do a read after the write operation, and the data in this field will be identical to the
data byte in the write command. For an I/O read (R/W=0), the actual value read from that I/O location is returned in this
field.

■

CRC7: Seven bits of CRC data.

■

E: End bit, always 1.

For more details on the command response format and bit descriptions, refer to the SDIO specification.

9.5.3.3.2

CyU3PSdioByteReadWrite API

CMD52 command transmission is initiated in the same manner as explained in 9.5.1.5 Sending SD/MMC/SDIO
Commands on page 212. The 1-byte response data of the CMD52 read register command is contained in the lower 8 bits of
the SDMMC_RESP_REG register.
CyU3PSdioByteReadWrite performs a direct I/O operation (single byte) to an SDIO card using CMD52. This function is used
to read or write a single byte of data from/to a register on the SDIO card.

220

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

When the readAfterWrite flag is set, the data from the register is read back after the write has been completed. The following
code snippet demonstrates the use of this API.
/* Initialize the Function */
bitFnNo = (1 << funcNo);
data
|= bitFnNo;
status = CyU3PSdioByteReadWrite (portId, CY_U3P_SDIO_CIA_FUNCTION, CY_U3P_SDIO_WRITE, 0,
CY_U3P_SDIO_REG_IO_ENABLE, &data);
if (status != CY_U3P_SUCCESS)
{
ERROR_PRINT (2, "CMD52: write to IO ENABLE error status = %d\r\n", status);
return status;
}
/* Wait till IO Ready is set or 100 attempts */
trials = 100;
data
= 0;
while ((!(data & bitFnNo)) && (trials > 0))
{
status = CyU3PSdioByteReadWrite (portId, CY_U3P_SDIO_CIA_FUNCTION, CY_U3P_SDIO_READ, 0,
CY_U3P_SDIO_REG_IO_READY, &data);
if (status != CY_U3P_SUCCESS)
{
ERROR_PRINT (6, "CMD52: IO RDY error status = %d\r\n", status);
return status;
}
trials--;
}
if (!(data & bitFnNo))
{
ERROR_PRINT (6, "IO READY ERROR TIMEOUT \r\n");
return CY_U3P_ERROR_TIMEOUT;
}

9.5.3.3.3

IO_RW_EXTENDED Command (CMD53)

In order to read and write multiple I/O registers with a single command, a new command, IO_RW_EXTENDED, is defined.
This command allows reading or writing a large number of I/O registers with a single command. Since this is a data transfer
command, it provides the highest possible transfer rate. For this operation, the address of the register is set into the Register
Address field. Data is transferred on the DAT[0] or DAT[3:0] lines as defined for SD memory cards.
Figure 9-9. IO_RW_EXTENDED Command

S D
1 1

Command
Index
110101b
6

R/W
Flag
1

Function
Number
3

*

Block
Mode

OP
Code

Register
Address

Byte/ Block
Count

CRC7

E

1

1

17

9

7

1

* Source: SDIO Specification, version 2.0
The IO_RW_EXTENDED command contains the following fields:

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

221

■

S: Start bit. Always 0.

■

D: Direction. Always1 indicates transfer host to card.

■

Command Index: Identifies the IO_RW_EXTENDED command with a value of 110101b.

■

R/W flag: This bit determines the direction of the I/O operation. If this bit is 0, this command reads data from the SDIO
card at the address specified by the Function Number and the Register Address to the host; otherwise, it writes the bytes
from the DAT[x] lines to the I/O location addressed by the Function Number and Register Address.

■

Function Number: The number of the function within the I/O card you wish to read or write. Note that function 0x00 selects
the CIA.

■

Block Mode (optional): If set to 1, this bit indicates that the read or write operation will be performed on a block basis,
rather than the normal byte basis. If this bit is set, the Byte/Block Count value contains the number of bytes/blocks to be
read/written. The block size for functions 1-7 is set by writing the block size to the I/O block size register in the FBR. The
block size for function 0 is set by writing to the FN0 block size register in the CCCR. Card and host support for the block I/
O mode is optional. The block size used when Block Mode = 1 and the maximum byte count per command used when
Block Mode = 0 can be read from the CIS in the tuple TPLFE_MAX_BLK_SIZE on a per-function basis (refer to the SDIO
specification for more details). Table 9-3 shows the relationship between the value in the command and the actual number
of bytes/blocks transferred.

■

OP code: Defines the read/write operation as described in Table 9-2.

Table 9-2. OpCode Field Description
Op Code

Command Operation

Description

0

Multibyte R/W to fixed address

Used to read or write multiple bytes of data to/from a single I/O register address. This command is useful
when I/O data is transferred using a FIFO inside the I/O card.

1

Multibyte R/W to incremental address

Used to read or write multiple bytes of data to/from an I/O register address that increments by 1 after each
operation. This command is used when large amounts of I/O data exist within the I/O card in a RAM-like
data buffer.

■

Register Address: Start Address of the I/O register to read or write. Range is [0x1FFFF:0].

■

Byte/ Block Count: If the command is operating on bytes (Block Mode = 0), this field contains the number of bytes to read
or write. A value of 0x000 shall cause 512 bytes to be read or written. If the command is in block mode (Block Mode=1),
the Block Count field specifies the number of Data Blocks to be transferred following this command. A value of 0x000
indicates that the count set to infinite.

Table 9-3. Byte Count Values
Count Value
Bytes Transferred
Blocks Transferred
■

CRC7: Seven bits of CRC data.

■

E: End bit, always 1.

9.5.3.3.4

0x000
512
∞

0x001
1
1

0x002
2
2

-------------

0x1FF
511
511

CyU3PSdioExtendedReadWrite API

The CyU3PSdioExtendedReadWrite API performs extended I/O operations (multibyte/multiblock) to/from the SDIO card
using CMD53. Arguments needed for CMD53 described in 9.5.3.3.3 IO_RW_EXTENDED Command (CMD53) are passed as
parameters.
Inside this API, the block length and number of blocks, calculated from the parameters passed to it, are set in the appropriate
registers: SDMMC_BLOCKLEN and SDMMC_BLOCK_COUNT. The logic for the same is as follows.
if (blockmode == CY_U3P_SDIO_RW_BLOCK_MODE)
{
noOfBlocks = transferCount;
blockSize = glCardCtxt[portId].fnBlkSize[functionNumber];

222

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

}
else if (blockmode == CY_U3P_SDIO_RW_BYTE_MODE)
{
noOfBlocks = 1;
blockSize = (transferCount != 0) ? transferCount : 512;
}

Note: "blockmode" and "transferCount" are parameters passed to CyU3PSdioExtendedReadWrite. Whereas the variable
values "noOfBlocks" and "blockSize" are used to set the values of the registers-SDMMC_BLOCKLEN and
SDMMC_BLOCK_COUNT-the active SIB socket number for read/write is set using SDMMC_CS.SOCKET before initiating
reads/writes from/ to the SDIO device. The DAT0 pin state can be monitored to learn the storage device busy state by polling
for the bit SDMMC_SATUS.DAT0_STAT.

In a read opertion, the BLOCKS_RECEIVED and RD_DATA_TIMEOUT interrupts are cleared in the SDMCC_INTR register
by writing '1' to the bits. In a write operation, the BLOCK_COMP interrupt in the SDMMC_INTR register is cleared in the same
way.
Since CMD53 involves data phase, through DAT[0:3] lines, the DAT3_CHANGE interrupt is disabled by setting
SDMMC_INTR_MASK.DAT3_CHANGE. The interrupt is enabled again after command completion. Then command
transmission is initiated and completed in the same manner as described in Sending SD/MMC/SDIO Commands on
page 212.
In a CMD53 read operation, the command transmission is initiated by setting the bits SDMMC_CS. SNDCMD and
SDMMC_CS. RDDCARD, whereas in a CMD53 write operation, the command transmission is initiated by setting the bits
SDMMC_CS. SNDCMD and SDMC_CS. WRDCARD.
The data associated with the CMD53 data phase is read/written to/from the DMA channel associated with the socket ID
passed in for the operation. This operation should use one of the SIB sockets as a producer (for read) or consumer (for write).
Before calling this function, the necessary DMA channels need to be created. A DMA channel (out) is created to transfer data
to the SDIO device connected to any of the S-ports, and another DMA channel (in) is created to read data from the SDIO
device. Any of the six available S-port sockets can be used for these channels. Sockets are defined as follows inside the FX3
SDK library.
Transferring infinite blocks of data (by setting transferCount to 0 in block mode) is not supported on the FX3S devices. If
transferCount is set to 0, FX3S will transfer 512 bytes of data in multibyte transfer mode, but will throw an error in multiblock
mode. Table 9-4 shows the number of bytes and blocks transferred based on transferCount values.

Table 9-4. Byte/ Block Count Values
Transfer Count Value
Bytes Transferred
Blocks Transferred

0x000
512
illegal

0x001
1
1

0x002
2
2

-------------

0x1FF
511
511

The following code snippet demonstrates the use of this API.
CyU3PDmaChannelReset (&glChHandleSdiotoCpu);
size = ((length+511)/512)*512; /* make sure that size is 512 aligned */
dmaBuffer.size
= size;
dmaBuffer.buffer = buff;
dmaBuffer.count = 0;
dmaBuffer.status = 0;
status = CyU3PDmaChannelSetupRecvBuffer (&glChHandleSdiotoCpu, &dmaBuffer);
if (status != CY_U3P_SUCCESS)
{
ERROR_PRINT (6, "CyU3PDmaChannelSetupSendBuffer error status = %d\r\n", status);
CyU3PDmaChannelReset (&glChHandleSdiotoCpu);

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

223

return status;
}
status = CyU3PSdioExtendedReadWrite (0, 1 /*functionNumber*/, 0 /*isWrite*/,
1 /*blockMode*/, 0 /* opCode */, 00 /*registerAddr*/, (size/512)
/*transferCount*/, glChHandleSdiotoCpu.prodSckId /*sckId*/);
if (status != CY_U3P_SUCCESS)
{
ERROR_PRINT (6, "CyU3PSdioExtendedReadWrite error status = %d\r\n", status);
CyU3PSibAbortRequest(0);
return status;
}

9.5.3.4

Setting Function Block Size

The function CyU3PSdioSetBlockSize sets the block size for a function. The block size set should be lower than the
maximum block size value read from the CISTPL_FUNCE CIS tuple for the function. The value set to the card using this API
is saved in the driver and is used as the transfer block size in case of extended transfers.
DEBUG_PRINT (8, "setting Func %d block size to 512 \r\n", funcNo);
status = CyU3PSdioSetBlockSize (portId, funcNo, 0x200);
if (status != CY_U3P_SUCCESS)
{
ERROR_PRINT (8, "failed to set block size %d \r\n", status);
return status;
}

9.5.3.5

Initialization and Operation of SDIO Functions

The SDIO function initialization and application specific functionality or I/O-only card-specific functionalities can be
implemented using the CyU3PSdioByteReadWrite and CyU3PSdioExtendedReadWrite APIs in the application firmware.

9.5.3.6

SDIO Interrupts

To allow the SDIO card to interrupt the host, an interrupt function is added to a pin on the SD interface. Pin number 8, which
is used as DAT[1], is used to signal the card's interrupt to the host. The use of the interrupt is optional for each card or function
within a card. The SDIO interrupt is "level sensitive," that is, the interrupt line is held active (low) until it is either recognized
and acted upon by the host or deasserted due to the end of the interrupt period. Once the host has serviced the interrupt, it is
cleared via some function-unique I/O operation.
The 1-bit SD mode, pin 8 is dedicated to the interrupt function. Thus, in the SPI and SD 1-bit modes, there are no timing
constraints on interrupts. A card in the SPI or 1-bit SD mode signals an interrupt to the host at any time by asserting pin 8 low.
Since pin 8 is shared between the IRQ and DAT[1] in the 4-bit SD mode, an interrupt is sent by the card and recognized by
the host only during a specific time. The time that a low on pin 8 is recognized as an interrupt is defined as the interrupt
period. An SDIO host samples the level on pin 8 (DAT[1]/IRQ) into the interrupt detector only during the interrupt period. At all
other times, the host interrupt controller ignores the level on pin 8.
The interrupt period begins after a function is initialized (IOEx), the card is placed into 4-bit SD mode, and interrupts are
enabled (IENM and IENx). A card, depending on design, may require a longer time until it is able to issue interrupts.
The interrupt period ends at the next clock from the end bit of a command that transfers data block(s) using DAT[x] lines. It
resumes two clocks after the completion of the last data block transfer in a transaction.

224

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 9-10. Read Interrupt Cycle Timing *

* Source: SDIO Specification, version 2.0
This interrupt period is intended to prevent interaction between the DAT[1] data and the interrupt signals on a common pin.
Figure 9-10 shows the timing of the interrupt period for single data transaction read cycles. For more details, refer to the SDIO
specification.

9.5.3.7

Enabling and Disabling SDIO Interrupts

SDIO interrupts can be enabled or disabled by setting or clearing the bit SDMMC_INTR_MASK.SDIO_INTR_MASK. The
CyU3PSdioInterruptControl API can be used to enable or disable interrupts on the SDIO card. A request to enable interrupts
for an SDIO function (1-7) automatically enables the card's interrupt master.

9.5.3.8

Handling SDIO Interrupts

An SDIO interrupt is notified via the SDMMC_INTR.SDIO_INTR bit. The SDIO interrupt is notified to the application firmware
in the form of an event registered through the SIB callback (explained in 9.5.1.6 Handling SIB Events on page 214).
/* Register a callback for SIB events. */
status = CyU3PSibRegisterCbk (CyFxSDIOUARTApplnSibCB);
/* SIB Callback for handling SIB events */
void
CyFxSDIOUARTApplnSibCB (
uint8_t
portId,
CyU3PSibEventType
evt,
CyU3PReturnStatus_t status)
{
if (evt == CY_U3P_SIB_EVENT_SDIO_INTR)
{
/* Handle SDIO interrupt event */
}
}

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

225

9.6
9.6.1

FX3S-Specific Features
Card Insertion and Removal Detection Mechanism

FX3S supports the two-card insertion and removal detection mechanisms.
■

Use of SD_D[3] data: This signal must have an external 470-k pull-down resistor connected to SD_D[3]. SD cards have
an internal 10-k pull-up resistor. When the card is inserted or removed from the SD/MMC connector, the voltage level at
the SD_D[3] pin changes and triggers an interrupt to the CPU.

■

Use of the S0/S1_INS pin: Some SD/MMC connectors include a microswitch for card insertion/removal detection. This
microswitch can be connected to S0/S1_INS. When the card is inserted or removed from the SD/MMC connector, it turns
the microswitch on and off. This changes the voltage level at the pin that triggers the interrupt to the CPU. S0/ S1_INS
stays high or floating when card is not inserted and goes low when card is inserted. The card-detect microswitch polarity
is assumed to be the same as the write-protect microswitch polarity. A low indicates that the card is inserted. This S0/
S1_INS pin is shared between the two S-ports. Register configuration determines which port gets to use the pin. This pin
is mapped to the VIO2 power domain (see Table 9-1); if S0 and S1 are at different voltage levels, the pin cannot be used
as S1_INS. Figure 9-11 depicts this mechanism.
Figure 9-11. Card Detection Using GPIO

226

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

9.6.2

Handling Card Detection in Software

The card detection method can be chosen in the firmware according to its support on the card as well as on the hardware.
The card detection method is chosen using the field cardDetType through API CyU3PSibSetIntfParams. Accordingly, the
interrupt will be enabled in the SDMMC_INTR_MASK register. The CARD_DETECT interrupt is enabled in the card detection
method based on GPIO, or the DAT3_STAT interrupt is enabled in the card detection method based on the DAT3 line.
intfParams.resetGpio = 0xFF; /* No GPIO control on SD/MMC power. */
intfParams.rstActHigh = CyTrue; /* Don't care as no GPIO is selected. */
intfParams.cardDetType = CY_U3P_SIB_DETECT_DAT_3; /* Card detect based
on SD_DAT[3]. */
intfParams.writeProtEnable = CyTrue; /* Write protect handling enabled.*/
intfParams.lowVoltage = CyTrue;
/* Low voltage operation enabled. */
intfParams.voltageSwGpio = 45;
/* Use GPIO_45 for voltage switch on
S0 port. */
intfParams.lvGpioState = CyFalse; /* Driving GPIO low selects 1.8 V on
SxVDDQ. */
intfParams.useDdr = CyTrue;
/* DDR clocking enabled. */
intfParams.maxFreq = CY_U3P_SIB_FREQ_104MHZ; /* No S port clock
limitation. */
intfParams.cardInitDelay = 0; /* No delay required between SD card
insertion before
initialization. */
status = CyU3PSibSetIntfParams (0, &intfParams);

The card detection mechanism supported is provided through the enumerated list CyU3PSibCardDetect, as follows. The card
detection can be disabled by selecting CY_U3P_SIB_DETECT_NONE.
/** \brief List of card detection methods.
**Description**\n
The card insertion and removal detection can be based on either GPIO card detect
or based on signal changes on the DAT3 line. */
typedef enum CyU3PSibCardDetect
{
CY_U3P_SIB_DETECT_NONE = 0,
/**< Don't use any card detection mechanism */
CY_U3P_SIB_DETECT_GPIO,
/**< Use a GPIO connected to a micro-switch on the
socket. This is
only supported for the S0 storage port. */
CY_U3P_SIB_DETECT_DAT_3
/**< Use voltage changes on the DAT[3] pin for card
detection. */
} CyU3PSibCardDetect;

If the card detect mechanism is chosen as GPIO based, then the GPIO44 is chosen as a default by the FX3S software driver
and library. The FX3S library and driver configure the GPIO in such a case by default, and the card detect interrupt will be
notified to the application firmware via the SIB callback registered (explained in 9.5.1.6 Handling SIB Events on page 214), as
shown in the following example. This is the case even with DAT3-based card detection.
Note: Any unused GPIO can be used for card detection, which can be configured like any simple GPIO in the application
firmware. Refer to 4.1 GPIO Pins on page 53 for more details.
/* Register a callback for SIB events. */
status = CyU3PSibRegisterCbk (CyFxSDIOUARTApplnSibCB);
/* SIB Callback for handling SIB events */
void

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

227

CyFxSDIOUARTApplnSibCB (
uint8_t
portId,
CyU3PSibEventType
evt,
CyU3PReturnStatus_t status)
{
if (evt == CY_U3P_SIB_EVENT_INSERT)
{
/* Handle card insert event */
}
if (evt == CY_U3P_SIB_EVENT_REMOVE)
{
/* Handle card remove event */
}
}

9.6.3

Write Protection

The S0_WP/ S1_WP (SD write protection) on the S-port is used to connect to the WP microswitch of the SD/MMC card
connector. This pin internally connects to a CPU-accessible GPIO for firmware to detect the SD card write protection. Write
protection can be enabled using the writeProtEnable field of the structure passed to CyU3PSibSetIntfParams. If enabled.
GPIO 43 acts as S0_WP and GPIO52 acts as S1_WP.

9.6.4

SD/MMC CLOCK STOP

FX3S supports the stop clock feature, which can save power if the internal buffer is full when receiving data from the SD/
MMC/SDIO.
SDMMC_MODE_CFG. RD_STOP_CLK_EN enables the SIB to detect overflow and stop the clock to the SD/SDIO/MMC card
during data transfer.
SDMMC_MODE_CFG. WR_STOP_CLK_EN enables SIB to detect underflow and stop the clock to the SD/SDIO/MMC card
during data transfer.
Refer to 9.5.1.5 Sending SD/MMC/SDIO Commands on page 212 for the SDMMC_MODE_CFG register description.

9.6.5

SD_CLK Output Clock Stop

During the data transfer, the SD_CLK clock can be enabled (on) or disabled (stopped) at any time by the internal flow control
mechanism. The SD_CLK output frequency is dynamically configurable using a clock divisor from a system clock. Refer to
Setting the S-Port Clock on page 212.

9.6.6

SDIO Read-Wait/ Suspend-Resume Feature

FX3S supports the optional read-wait and suspend-resume features as defined in the SDIO specification version 2.00
(January 30, 2007).

9.6.6.1

Read-Wait

Host devices built to the SD physical specification control the SDCLK to stop the read data block output from a card executing
a multiple read command whenever the host cannot accept more data. During the time that the host has stopped the SDCLK,
a CMD52 cannot be issued. This limitation creates the problem that a host device built to the SD physical specification cannot
perform the I/O command during a multiple read cycle.
To eliminate this limitation, the SDIO specification adds the read-wait control to enable the host to issue CMD52 during a
multiple read cycle. Read-wait uses the DAT[2] line to allow the host to signal the card to temporarily halt the sending of read

228

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

data by a card. This feature is optional for an SDIO or combo card. However, if an SDIO or combo supports read-wait, all
functions and any memory will support read-wait. For more details, refer to the SDIO specification. Any card that supports
suspend-resume will also support read-wait.
The CyU3PSdioReadWaitEnable API is used to enable read-wait on the SDIO bus. This function triggers read-wait on a card
that supports the feature using the DAT[2] of the SDIO data bus. It is enabled by setting the bit SDMMC_CS.
SDIO_READ_WAIT_EN.

9.6.6.2

Suspend-Resume Feature

Within a multifunction SDIO or a combo card, there are multiple devices (I/O and memory) that share access to the SD bus.
In order to allow sharing of access to the host among multiple devices, SDIO and combo cards can implement the optional
concept of suspend-resume. If a card supports suspend-resume, the host may temporarily halt a data transfer operation to
one function or memory (suspend) in order to free the bus for a higher priority transfer to a different function or memory. Once
this higher priority transfer is complete, the original transfer is restarted where it left off (resume). Support of suspend-resume
is optional on a per-card basis. If suspend-resume is implemented, it will be supported by the memory (if any) of a combo card
and all I/O functions except function 0. Note that the host can suspend multiple transactions and resume them in any order
desired. I/O function 0 does not support suspend-resume.
The CyU3PSdioSuspendResumeFunction API is used to suspend or resume the specified SDIO function. Suspend-resume
needs to be supported by the card to which these calls are being addressed. Support for suspend-resume can be ascertained
by looking at the SBS bit of the card's card capability register. When the function is resumed, it also checks if any data is
available.

9.6.6.3

SD3.0 Host Tuning Feature

SD3.0 supports the tuning feature to find the optimal sampling point in the host during the SDR50, SDR104, and DDR104
modes of operation. CMD19 is the special command that is used in SD3.0 for starting the tuning operation. SDR104 and
DDR104 are not supported in FX3S. The host generally supports two types of sampling:
■

Fixed sampling: SDR-FD-SDR signaling, fixed delay (can't use tuning). This method is available up to only 100-MHz
frequency.

■

Variable sampling: SDR-VD-SDR signaling, variable delay (uses tuning block). The CMD19 is used by the host to read the
tuning block.

The arguments of the CMD19 are zero, and response R1 is defined for this command. The card sends a 64-byte block of data
on the DAT[3:0] lines with predefined CRC bits. This data is used by the host to compare with a predefined tuning block
pattern and to increment the sampling control block by one step. Per the specification, there can be 40 executions of CMD19
in no more than 150 ms. CMD19 always returns a 64-byte tuning pattern sent by the card. After the CPU sets up the SIB
sockets, command transmission is initiated and completed in the same manner as described in 9.5.1.5 Sending SD/MMC/
SDIO Commands on page 212. Receipt of the 64-byte tuning pattern is indicated by the block received interrupt
(SDMMC_INTR.BLOCKS_RECEIVED). The host verifies the data integrity of the tuning block and adjusts its sampling point
accordingly. For register descriptions, refer to SDMMC_DLL_CTRL register on page 668.
The tuning can be implemented as follows. The SIB has registers for selecting the CMD and data phase values in the
SDMMC DLL control register. Increment these values from 0 until a point where the tuning data reception does not lead to a
CRC16 error. When the phase values exceed the maximum possible value (15), all 16 phase values possible have returned
CRC16 errors and hence a fatal error is reported.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

229

Figure 9-12. SD 3.0 Host Tuning Feature
Card switched to SDR50 mode
Exit
Yes

Make cmd and data
phase sel values 0
No

Is phase value =
16?

Send CMD19

Increment cmd and
data phase sel values

Wait for block received
interrupt

CRC16 error in
rcvd data?

Yes

No

More details on the SD3.0 host tuning methodology are documented in the SD3.0 specification.

9.6.6.4

Normal and Alternate eMMC4.4 Boot

The eMMC 4.4 boot mode is supported in FX3S. Two types of boot operations are defined in eMMC 4.4: normal boot and
alternate boot. FX3S supports both modes of operation.
In normal boot, the host (FX3S S-port) pulls the CMD line low for at least 74 clock cycles after power up or reset. SW writes '1'
to the bit SDMMCU_CS.BOOTCMD to initiate a CMD_LINE_LOW boot (or alternate boot) command. With the alternate boot
command, the CPU must send the command. The card recognizes that a boot is initiated and sends the boot acknowledge
followed by the boot data. Once all boot data is read, the host pulls the CMD line HIGH, as illustrated in Figure 9-13.
Figure 9-13. Normal Boot*

* Source: eMMC Specification, version 4.3

230

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

The boot's acknowledge can be disabled by setting the EXT_CSD register in the card. The boot operation can be terminated
by the host by pulling the CMD line HIGH. The termination can occur during data transfer or between consecutive data
blocks. The host does not interpret between them. Writing 1 to SDMMCU_CS.CLR_BOOTCMD causes the CPU to terminate
the boot and return to IDLE. Figure 9-14 depicts the flow chart for normal boot.
Figure 9-14. Flowchart for Normal Boot

The CPU may terminate a boot due to a CRC error or boot ack timeout. In a boot termination during data transfer, the CPU
has to bring the SIB FSMs to a known state by setting the RSTCONT bit in the SDMMCU_CS register and also ensure that
the associated sockets are brought back to a known state. More details on normal boot operation can be found in the SD 3.0
specification.
In alternate boot operation mode, If CMD0 is issued with argument 0XFFFFFFFA, 74 clock cycles after power up or reset, the
card sends the boot acknowledgement status followed by the boot data. The boot acknowledgment can be disabled as in the
case of normal boot. The termination of boot operation is triggered by issuing a reset command (CMD0 with argument
0XF0F0F0F0). As in the case of normal boot, the termination can occur during block boundary or data transfer. The condition
for termination described previously for normal boot is the same for alternate boot.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

231

Figure 9-15. Alternate Boot

* Source: eMMC Specification, version 4.3
The flow chart shown in Figure 9-16 depicts the alternate boot operation flow.

232

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Figure 9-16. Flow Chart for Alternate Boot Operation *

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

233

234

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10. Registers

10.1

Introduction

This chapter describes the EZ-USB FX3 registers.
Table 10-1 provides an overview of the FX3 memory map:
Table 10-1. FX3 Memory Map
Offset

Size

Name

Description

0x00000000

0x4000

ITCM_MEMORY

16-KB Instruction Tightly Coupled Memory (visible to ARM only)

0x10000000

0x2000

DTCM_MEMORY

8-KB Data Tightly Coupled Memory (visible to ARM only)

0x40000000

0x80000

SYSMEM

512-KB Main System RAM

0xE0000000

0x10000000

MMIO

Main MMIO Space

0xFFFF0000

0x8000

BOOTROM

32-KB Boot ROM Memory

0xFFFFF000

0x1000

VIC

ARM PL192 VIC Vectored Interrupt Controller

Table 10-2 provides an overview of the MMIO register space starting at 0xE0000000 (as shown in Table 10-1):
Table 10-2. MMIO Register Space
Offset
(from address
0xE0000000)

Size

Name

Description

0x00000

0x10000

LPP

Low Performance Peripherals register map

0x10000

0x10000

PIB

Processor Port register map

0x30000

0x10000

UIB

USB Port register map

0x40000

0x10000

UIBIN

USB SuperSpeed Ingress Adapter

0x50000

0xFC00

GCTL

Global Controller register map

0x5FC00

0x0400

CPU

ARM CPU register map (BIST only)

Detailed descriptions of all the registers in each IP block are provided in the following sections.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

235

10.2

Register Conventions

Register Name
b7

Register Function
b6

b5

b4

Address

b3

b2

b1

b0

bitname

bitname

bitname

bitname

bitname

bitname

bitname

bitname

SW R, W access

SW R, W access

SW R, W access

SW R, W access

SW R, W access

SW R, W access

SW R, W access

SW R, W access

HW R, W access

HW R, W access

HW R, W access

HW R, W access

HW R, W access

HW R, W access

HW R, W access

HW 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 memory.

■

The second line shows the bit position in the register.

■

The third line shows the field name of the corresponding bit(s) in the register.

■

The fourth line shows SW CPU accessibility: R(ead), W(rite), W0C (write 0 to clear), W1S (write 1 to set), or R/W.

■

The fifth line shows HW CPU accessibility: R(ead), W(rite), W0C (write 0 to clear), W1S (write 1 to set), or R/W.

■

The sixth line shows the default value. These values apply after a hard reset (refer to 4.3.3 Reset on page 59). When a
default value extends across bytes, the borders between the bytes is a lighter line.

■

Gray, empty cells indicate reserved bits. Do not read from or write to these bits.

236

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.3

Vectored Interrupt Controller (VIC) Registers

10.3.1

VIC_IRQ_STATUS
IRQ Status Register

VIC_IRQ_STATUS
b31

IRQ Status after Masking
b30

b29

b28

b27

0xFFFFF000
b26

b25

b24

IRQ_STATUS[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_IRQ_STATUS
b23

IRQ Status after Masking
b20

b19

IRQ_STATUS[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_IRQ_STATUS
b15

IRQ Status after Masking
b12

b11

IRQ_STATUS[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

VIC_IRQ_STATUS
b7

IRQ Status after Masking
b4

b3

IRQ_STATUS[7:0]
R

R

R

R

R

R

R

R

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

31:0

IRQ_STATUS[31:0]

1

IRQ interrupt is raised by the following source:

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

237

10.3.2

VIC_FIQ_STATUS
FIQ Status Register

VIC_FIQ_STATUS
b31

FIQ Status after Masking
b30

b29

b28

b27

0xFFFFF004
b26

b25

b24

FIQ_STATUS[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_FIQ_STATUS
b23

FIQ Status after Masking
b20

b19

FIQ_STATUS[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_FIQ_STATUS
b15

FIQ Status after Masking
b12

b11

FIQ_STATUS[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

VIC_FIQ_STATUS
b7

FIQ Status after Masking
b4

b3

FIQ_STATUS[7:0]
R

R

R

R

R

R

R

R

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

31:0

FIQ_STATUS[31:0]

1

238

FIQ interrupt is raised at the line corresponding to the bit position.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.3.3

VIC_RAW_STATUS
Raw Status Register

VIC_RAW_STATUS
b31

IRQ Status before Masking
b30

b29

b28

b27

0xFFFFF008
b26

b25

b24

RAW_STATUS[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_RAW_STATUS
b23

IRQ Status before Masking
b20

b19

RAW_STATUS[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_RAW_STATUS
b15

IRQ Status before Masking
b12

b11

RAW_STATUS[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

VIC_RAW_STATUS
b7

IRQ Status before Masking
b4

b3

RAW_STATUS[7:0]
R

R

R

R

R

R

R

R

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

31:0

RAW_STATUS[31:0]

1

FIQ/IRQ interrupt is raised at the line corresponding to the bit position regardless of its
masked (disable) state.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

239

10.3.4

VIC_INT_SELECT
IRQ/FIQ Designation Register

VIC_INT_SELECT
b31

IRQ/FIQ Designation Register
b30

b29

b28

b27

0xFFFFF00C
b26

b25

b24

FIQ_nIRQ[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_INT_SELECT
b23

IRQ/FIQ Designation Register
b20

b19

FIQ_nIRQ[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_INT_SELECT
b15

IRQ/FIQ Designation Register
b12

b11

FIQ_nIRQ[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

VIC_INT_SELECT
b7

IRQ/FIQ Designation Register
b4

FIQ_nIRQ[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31:0

FIQ_nIRQ[31:0]

1

240

Designate the line corresponding to the bit position as FIQ. The software ensures that this
register is a power of 2 (one FIQ only). It writes to this register only after disabling the interrupts it intends to change.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.3.5

VIC_INT_ENABLE
Interrupt Enable Register

VIC_INT_ENABLE
b31

Interrupt Enable Register
b30

b29

b28

b27

0xFFFFF010
b26

b25

b24

INT_ENABLE[31:24]
R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_INT_ENABLE
b23

Interrupt Enable Register
b20

b19

INT_ENABLE[23:16]
R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_INT_ENABLE
b15

Interrupt Enable Register
b12

b11

INT_ENABLE[15:8]
R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

VIC_INT_ENABLE
b7

Interrupt Enable Register
b4

b3

INT_ENABLE[7:0]
R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31:0

INT_ENABLE[31:0]

1

Enable the interrupt at this bit position. All interrupts are disabled at reset. Software cannot
write 0 here to disable interrupts. Use the VIC_INT_CLEAR register for this purpose.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

241

10.3.6

VIC_INT_CLEAR
Interrupt Clear Register

VIC_INT_CLEAR
b31

Interrupt Clear Register
b30

b29

b28

b27

0xFFFFF014
b26

b25

b24
W1C

INT_CLEAR[31:24]
W1C

W1C

W1C

W1C

W1C

W1C

W1C

R

R

R

R

R

R

R

R

NA

NA

NA

NA

NA

NA

NA

NA

b22

b21

b18

b17

b16
W1C

VIC_INT_CLEAR
b23

Interrupt Clear Register
b20

b19

INT_CLEAR[23:16]
W1C

W1C

W1C

W1C

W1C

W1C

W1C

R

R

R

R

R

R

R

R

NA

NA

NA

NA

NA

NA

NA

NA

b14

b13

b10

b9

b8
W1C

VIC_INT_CLEAR
b15

Interrupt Clear Register
b12

b11

INT_CLEAR[15:8]
W1C

W1C

W1C

W1C

W1C

W1C

W1C

R

R

R

R

R

R

R

R

NA

NA

NA

NA

NA

NA

NA

NA

b6

b5

b2

b1

b0
W1C

VIC_INT_CLEAR
b7

Interrupt Clear Register
b4

b3

INT_CLEAR[7:0]
W1C

W1C

W1C

W1C

W1C

W1C

W1C

R

R

R

R

R

R

R

R

NA

NA

NA

NA

NA

NA

NA

NA

This register disables the interrupt line and masks it if it was designated IRQ.

Bit

Name

Description

31:0

INT_CLEAR[31:0]

1

242

Disable the interrupt at this bit position. Mask it if it is designated IRQ.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.3.7

VIC_PRIORITY_MASK
Per-Priority Interrupt Mask Register

VIC_PRIORITY_MASK
b31

Per-Priority Interrupt Mask Register
b30

b29

b22

b21

b14

b13

VIC_PRIORITY_MASK
b23

b27

0xFFFFF024
b26

b25

b24

b18

b17

b16

b10

b9

b8

Per-Priority Interrupt Mask Register

VIC_PRIORITY_MASK
b15

b28

b20

b19

Per-Priority Interrupt Mask Register
b12

b11

PRIO_MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b2

b1

b0

VIC_PRIORITY_MASK
b7

Per-Priority Interrupt Mask Register
b4

b3

PRIO_MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

This register allows you to mask interrupts on a per-priority basis.

Bit

Name

Description

15:0

PRIO_MASK[15:0]

1
0

Unmasked
Interrupt at the priority level = bit position is masked.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

243

10.3.8

VIC_VEC_ADDRESS
Interrupt Vector Register

There are 32 VIC_VEC_ADDRESS registers. The address of each is calculated as VIC_VEC_ADDRESS(x) = 0xFFFFF100 +
(x*0x4). So, VIC_VEC_ADDRESS(0) is at address 0xFFFFF100, VIC_VEC_ADDRESS(1) is at address 0xFFFFF100 + 0x4
and so on. The definition of each of these is the same.
VIC_VEC_ADDRESS
b31

Interrupt Vector Register
b30

b29

b28

b27

0xFFFFF100
b26

b25

b24

ISR_ADD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_VEC_ADDRESS
b23

Interrupt Vector Register
b20

b19

ISR_ADD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

VIC_VEC_ADDRESS
b15

Interrupt Vector Register
b12

ISR_ADD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

VIC_VEC_ADDRESS
b7

Interrupt Vector Register
b4

ISR_ADD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This registers holds the address of ISR for interrupts. 32 registers for 32 lines. There are 32 of these registers, which are contiguous. Note the offset for this register bank.

Bit

Name

Description

31:0

ISR_ADD[31:0]

The firmware accesses this register only after disabling the corresponding interrupt. Holds the
address to the ISR for interrupt number = the position of this register in the bank of 32 registers.

244

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.3.9

VIC_VECT_PRIORITY
Interrupt Priority Register

There are 32 VIC_VECT_PRIORITY registers. The address of each is calculated as VIC_VECT_PRIORITY(x) =
0xFFFFF200 + (x*0x4). So, VIC_VECT_PRIORITY(0) is at address 0xFFFFF200, VIC_VECT_PRIORITY(1) is at address
FFFFF200 + 0x4,and so on. The definition of each of these is the same.
VIC_VECT_PRIORITY
b31

Interrupt Priority Register
b30

b29

b22

b21

b14

b13

b6

b5

VIC_VECT_PRIORITY
b23

b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

b0

Interrupt Priority Register

VIC_VECT_PRIORITY
b7

b27

Interrupt Priority Register

VIC_VECT_PRIORITY
b15

b28

0xFFFFF200

b12

b11

Interrupt Priority Register
b4

b3

VIC_INTR_PRI[3:0]
R/W

R/W

R/W

R/W

R

R

R

R

0xF

This register holds the priority designation of the interrupts. There are 32 registers for 32 lines. The 32 registers are contiguous. Note the offset for this register bank.

Bit

Name

Description

3:0

VIC_INTR_PRI

The firmware accesses this register only after disabling the corresponding interrupt. It assigns one of
the 16 priorities to the interrupt number. This equals the position of this register in the bank of 32 registers. When any two interrupts with the same priority arrive at the VIC, the one connected to the
lower numbered line wins.

.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

245

10.3.10

VIC_ADDRESS
Active ISR Address Register

VIC_ADDRESS
b31

Active ISR Address Register
b30

b29

b28

b27

0xFFFFFF00
b26

b25

b24

ACTIVE_ISR[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

VIC_ADDRESS
b23

Active ISR Address Register
b20

b19

ACTIVE_ISR[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

VIC_ADDRESS
b15

Active ISR Address Register
b12

b11

ACTIVE_ISR[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

VIC_ADDRESS
b7

Active ISR Address Register
b4

b3

ACTIVE_ISR[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register returns the ISR address of the interrupt deemed active after masking and priority resolution. This is what the
CPU reads when interrupted.

Bit

Name

Description

31:0

ACTIVE_ISR[31:0]

Upon interruption, software reads this register. This marks the active interrupt as being serviced,
which prevents interrupts of equal or lower priority from raising interrupt. Upon completion, the software writes any value to this register, which clears the active interrupt. software does not access this
register at any other time.

246

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4

Global Controller Registers

10.4.1

GCTL_IOMATRIX
I/O Matrix Configuration Register

GCTL_IOMATRIX
b31

I/O Matrix Configuration Register
b30

b29

b22

b21

b14

b13

GCTL_IOMATRIX
b23

b27

0xE0051008
b26

b25

b24

b18

b17

b16

b9

b8

I/O Matrix Configuration Register

GCTL_IOMATRIX
b15

b28

b20

b19

I/O Matrix Configuration Register
b12

b11

b10

S1CFG[2:0]

GCTL_IOMATRIX
b7

R/W

R/W

R/W

R

R

R

0

0

0

b1

b0

I/O Matrix Configuration Register
b6

b5

b4

b3

b2

S0CFG

CARKIT

R/W

R/W

R

R

0

0

This register defines port usage and implementation for the GPIO port.

Bit

Name

Description

10:8

S1CFG[2:0]

GPIO[57:46] is configured with the following encoding:
0
Connected to GPIO
1
Connected to GPIO + UART
2
Connected to GPIO + SPI
3
Connected to GPIO + I2S
4
Connected to UART+SPI+I2S
5
Connected to PIB_DQ+UART+I2S

4

S0CFG

GPIO[45:33] is configured with the following encoding:
0
Connected to GPIO
1
Connected to PIB_DQ[16]..PIB_DQ[27] (GPIF-II mode)

1

CARKIT

Carkit UART configuration:
0
Use LPP_UART (LPP_UART not available to S1)
1
Use PIB_CTL11/PIB_CTL12 pins for carkit UART
(enabling the USB2 PHY for Carkit UART operation must be done separately in UIB_PHY*).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

247

10.4.2

GCTL_GPIO_SIMPLE
GPIO Override Configuration Register

GCTL_GPIO_SIMPLE
b63

GPIO Override Configuration Register
b62

b61

b60

b59

0xE005100C
b58

b57

b56

OVERRIDE[60:56]

GCTL_GPIO_SIMPLE
b55

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b50

b49

b48

GPIO Override Configuration Register
b54

b53

b52

b51

OVERRIDE[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

GCTL_GPIO_SIMPLE
b47

GPIO Override Configuration Register
b44

b43

OVERRIDE[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

GCTL_GPIO_SIMPLE
b39

GPIO Override Configuration Register
b36

b35

OVERRIDE[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

GCTL_GPIO_SIMPLE
b31

GPIO Override Configuration Register
b28

b27

OVERRIDE[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GCTL_GPIO_SIMPLE
b23

GPIO Override Configuration Register
b20

b19

OVERRIDE[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GCTL_GPIO_SIMPLE
b15

GPIO Override Configuration Register
b12

b11

OVERRIDE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

248

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.2

GCTL_GPIO_SIMPLE (continued)

GCTL_GPIO_SIMPLE
b7

GPIO Override Configuration Register
b6

b5

b4

b3

b2

b1

b0

OVERRIDE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register is used to determine if the simple GPIO function should override the (GCTL_IOMATRIX specified) function of
each pin on a per-pin basis. GCTL_GPIO_COMPLEX takes precedence over GCTL_GPIO_SIMPLE.

Bit

Name

Description

60:0

OVERRIDE[60:0

When bit  is set, the corresponding pin maps to simple GPIO .

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

249

10.4.3

GCTL_GPIO_COMPLEX
GPIO Override Configuration Register

GCTL_GPIO_COMPLEX
b63

b62

GPIO Override Configuration Register
b61

b60

b59

0xE0051014
b58

b57

b56

OVERRIDE[60:56]

GCTL_GPIO_COMPLEX
b55

b54

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b50

b49

b48

GPIO Override Configuration Register
b53

b52

b51

OVERRIDE[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b42

b41

b40

GCTL_GPIO_COMPLEX
b47

b46

GPIO Override Configuration Register
b45

b44

b43

OVERRIDE[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b34

b33

b32

GCTL_GPIO_COMPLEX
b39

b38

GPIO Override Configuration Register
b37

b36

b35

OVERRIDE[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b26

b25

b24

GCTL_GPIO_COMPLEX
b31

b30

GPIO Override Configuration Register
b29

b28

b27

OVERRIDE[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GCTL_GPIO_SIMPLE
b23

GPIO Override Configuration Register
b20

b19

OVERRIDE[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GCTL_GPIO_COMPLEX
b15

b14

GPIO Override Configuration Register
b13

b12

b11

OVERRIDE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

250

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.3

GCTL_GPIO_COMPLEX (continued)

GCTL_GPIO_COMPLEX
b7

b6

GPIO Override Configuration Register
b5

b4

b3

b2

b1

b0

OVERRIDE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register is used to determine if the complex GPIO function should override the (GCTL_IOMATRIX specified) function of
each pin on a per-pin basis. GCTL_GPIO_COMPLEX takes precedence over GCTL_GPIO_SIMPLE.

Bit

Name

Description

60:0

OVERRIDE[60:0]

When bit  is set, the corresponding pin maps to complex GPIO_PIN  Mod 8. If multiple pins
are mapped onto the same GPIO_PIN the behavior of the hardware is undefined.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

251

10.4.4

GCTL_DS
I/O Drive Strength Configuration Register

GCTL_DS

I/O Drive Strength Configuration Register

b31

b30

b29

b22

b21

GCTL_DS

b28

b27

0xE005101C
b26

b25

b18

b17

b24

I/O Drive Strength Configuration Register

b23

b20

b19

I2CDS_G[1:0]

GCTL_DS

b16

S1LDS_G[1:0]

R/W

R/W

R/W

R/W

R

R

R

R

2

2

2

2

b10

b9

I/O Drive Strength Configuration Register

b15

b14

b13

S1DS_G[1:0]

b12

b11

S0DS_G[1:0]

PDS_G[1:0]

b8

I2CDS[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

2

2

2

2

2

2

2

2

b6

b5

b2

b1

GCTL_DS

I/O Drive Strength Configuration Register

b7

S1LDS[1:0]

b4

b3

S1DS[1:0]

S0DS[1:0]

b0

PDS[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

2

2

2

2

2

2

2

2

This register defines pull-up and pull-down drive strength capability for I/O pins. Pins that are configured as GPIO use a different drive strength value from pins that have their 'normal' function.
Bit

Name

Description

19:18

I2CDS_G[1:0]

Drive strength for CHGDET pin, VIO5 power domain

17:16

S1LDS_G[1:0]

Drive strength for GPIOs, VIO4 power domain

15:14

S1DS_G[1:0]

Drive strength for GPIOs, VIO3 power domain

13:12

S0DS_G[1:0]

Drive strength for GPIOs, VIO2 power domain

11:10

PDS_G[1:0]

Drive strength for P-Port GPIOs, VIO1 power domain

9:8

I2CDS[1:0]

Drive strength for I2C pins, VIO5 power domain
00
Slow speed 1-MHz gpio (push-pull) driver

7:6

S1LDS[1:0]

01

I2C fast-mode 1.5 to 3.6 V (open-drain only)

10

I2C fast-mode 1.2 to 1.5 V, standard-mode 1.2 to 3.6 V (open-drain only)

11

I2C fast-mode plus (open-drain only)

Drive strength for I2C pins, VIO5 power domain

continued on next page

252

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.4

GCTL_DS (continued)

5:4

S1DS[1:0]

Drive strength for GPIOs, VIO3 power domain

3:2

S0DS[1:0]

Drive strength for GPIOs, VIO2 power domain

1:0

PDS[1:0]

Drive strength for P-Port, VIO1 power domain
0
Quarter strength
1
Half strength
2
Three quarter strength
3
Full strength

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

253

10.4.5

GCTL_WPU_CFG
I/O Pull-Up Configuration Register

GCTL_WPU_CFG
b63

I/O Pull-Up Configuration Register
b62

b61

b60

b59

0xE0051020
b58

b57

b56

WPU[59:56]

GCTL_WPU_CFG
b55

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b51

b50

b49

b48

I/O Pull-Up Configuration Register
b54

b53

b52

WPU[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b43

b42

b41

b40

GCTL_WPU_CFG
b47

I/O Pull-Up Configuration Register
b44

WPU[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b38

b37

b35

b34

b33

b32

GCTL_WPU_CFG
b39

I/O Pull-Up Configuration Register
b36

WPU[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b27

b26

b25

b24

GCTL_WPU_CFG
b31

I/O Pull-Up Configuration Register
b28

WPU[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

GCTL_WPU_CFG
b23

I/O Pull-Up Configuration Register
b20

WPU[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

GCTL_WPU_CFG
b15

I/O Pull-Up Configuration Register
b12

WPU[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

254

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.5

GCTL_WPU_CFG (continued)

GCTL_WPU_CFG
b7

I/O Pull-Up Configuration Register
b6

b5

b4

b3

b2

b1

b0

WPU[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

In conjunction with the GCTL_DS register, this register determines whether a weak pull-up on each I/O pin should be
engaged. Firmware should not enable WPU and WPD simultaneously on a given I/O. A weak pull-up or weak pull-down takes
about 5 µs to be effective at the pads.

Bit

Name

Description

59:0

WPU[59:0]

When set, a weak pull-up is connected for the pin associated with the corresponding GPIO #.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

255

10.4.6

GCTL_WPD_CFG
I/O Pull-Down Configuration Register

GCTL_WPD_CFG
b63

I/O Pull-Down Configuration Register
b62

b61

b60

b59

0xE0051028
b58

b57

b56

WPD[59:56]

GCTL_WPD_CFG
b55

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b51

b50

b49

b48

I/O Pull-Down Configuration Register
b54

b53

b52

WPD[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b43

b42

b41

b40

GCTL_WPD_CFG
b47

I/O Pull-Down Configuration Register
b44

WPD[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b38

b37

b35

b34

b33

b32

GCTL_WPD_CFG
b39

I/O Pull-Down Configuration Register
b36

WPD[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b27

b26

b25

b24

GCTL_WPD_CFG
b31

I/O Pull-Down Configuration Register
b28

WPD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

GCTL_WPD_CFG
b23

I/O Pull-Down Configuration Register
b20

WPD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

GCTL_WPD_CFG
b15

I/O Pull-Down Configuration Register
b12

WPD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

256

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.6

GCTL_WPD_CFG (continued)

GCTL_WPD_CFG
b7

I/O Pull-Down Configuration Register
b6

b5

b4

b3

b2

b1

b0

WPD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

In conjunction with the GCTL_DS register, this register determines whether a weak pull-down on each I/O pin should be
engaged. Firmware should not enable WPU and WPD simultaneously on a given I/O. A weak pull-up or weak pull-down takes
about 5 µs to be effective at the pads.

Bit

Name

Description

59:0

WPD[59:0]

When set, a weak pull-down is connected for the pin associated with the corresponding GPIO #.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

257

10.4.7

GCTL_IOPOWER
I/O Power Observability Register

GCTL_IOPOWER

I/O Power Observability Register

b31

b30

b29

b22

b21

b28

GCTL_IOPOWER

b27

0xE0051030
b26

b25

b24

b18

b17

b16

I/O Power Observability Register

b23

b20

REG_BYPASS_
REG_CARKIT_EN
EN

b19

REG_CARKIT_SEL[1:0]

USB_REGULATOR_TRIM[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

GCTL_IOPOWER

I/O Power Observability Register

b15

b14

b13

b12

b11

b10

b9

b8

0

0

USB_POWER_
GOOD

VBUS_TH

PDS_G[1:0]

VBUS

USB25REG

USB33REG

R

R

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

X

X

X

X

X

X

b7

b6

b5

b4

b3

b2

b1

b0

VIO5

CVDDQ

EFVDDQ

VIO4

VIO3

VIO2

0

VIO1

GCTL_IOPOWER

I/O Power Observability Register

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R

R/W

X

X

X

X

X

X

0

X

This register can be used to detect I/O Power status on various I/O domains

Bit

Name

Description

21

REG_BYPASS_EN

Controls the 3.3-V active regulator's bypass mode. This mode enables an external voltage
to be applied to the internal 3.3-V node by bypassing the 3.3-V regulator. It allows the 2.5-V
regulator to be tested and characterized across a different range of input supply voltages
rather than from a single regulated 3.3-V supply. This bit has no function when the regulator
is in standby mode.
0
3.3-V active regulator is not in bypass mode
1
3.3-V active regulator is in bypass mode

20

REG_CARKIT_EN

Enables the regulator to provide different output voltage from the 3.3-V regulator. Output
value is selected by the reg_carkit_sel[1:0] bits.
1
Enables regulator to output different voltages for the carkit mode. NOT ALLOWED
for chip-level carkit UART mode because the regulator 2.5-V supply output is disabled, which is not supported by the USB2.0 PHY.
0
Regulator operates normally.

continued on next page

258

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.7

GCTL_IOPOWER (continued)

19:18

REG_CARKIT_SEL[1:0]

Defines the output value of the 3.3-V regulator output. All values other than the default are
for characterization and future use. This must not be used by software/firmware.
00
Default output of the 3.3-V regulator
01
Regulator output is nominal 3.0 V (experimental)
10
Regulator output is nominal 2.7 V (experimental)
11
Not allowed

17:16

USB_REGULATOR_TRIM[1:0]

Trim value for USB Main Regulator output voltage. See USB I/O Subsystem for more
details.

13

USB_POWER_GOOD

Indicates that internal supplies of the regulator are stable. For debug purposes:
0
Internal power is not stable
1
Internal power is stable

12

VBUS_TH

Vbus level detected by regulator. The interrupt associated with this can be used to detect
the over current condition when using an A-device.
0
Vbus not detected to be < 4.1 V
1
Vbus detected to be > 4.4 V

11

VBAT

Indicates VBAT voltage is present and within operating range. Internal regulator voltages
may not yet be stable when this pin asserts.

10

VBUS

Indicates VBUS voltage is present and within operating range. Internal regulator voltages
may not yet be stable when this pin asserts.

9

USB25REG

Indicates internal 2.5-V regulated voltage to USB2 PHY is present and stable.

8

USB33REG

Indicates internal 3.3-V regulator is present and stable.

7

VIO5

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.

6

CVDDQ

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.
Note CVDDQ is required for chip operation (clock and reset). This bit will always be 1 when
it can be accessed.

5

EFVDDQ

Indicates the eFuse programming voltage pin is supplied with either 1.2 V or 2.5 V. The
presence of programming voltage at 2.5 V is not detectable. Programming will fail but reading succeeds when supplying this pin with 1.2 V.

4

VIO4

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.

3

VIO3

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.

2

VIO2

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.

0

VIO1

Indicates all I/O power domains for this block are powered and active. Any time needed for
internal voltages to stabilize cells to become active has passed before this bit asserts.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

259

10.4.8

GCTL_IOPOWER_INTR
I/O Power Change Interrupt Register

GCTL_IOPOWER_INTR
b31

I/O Power Change Interrupt Register

b30

b29

GCTL_IOPOWER_INTR
b23

b27

0xE0051034
b26

b25

b24

b18

b17

b16

I/O Power Change Interrupt Register

b22

b21

GCTL_IOPOWER_INTR
b15

b28

b20

b19

I/O Power Change Interrupt Register

b14

b13

b12

b11

b10

b9

b8

USB_POWER_
GOOD

VBUS_TH

VBAT

VBUS

USB25REG

USB33REG

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

b1

GCTL_IOPOWER_INTR

I/O Power Change Interrupt Register

b7

b6

b5

b4

b3

b2

VIO5

CVDDQ

EFVDDQ

VIO4

VIO3

VIO2

VIO1

b0

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

0

This register generates an interrupt when an interface power domain is powered up or down. Note that a power domain that
is already up when the device resets (including wakeup from standby) also causes an interrupt in this register (which is not
seen by the CPU until the corresponding mask bit is set).

Bit

Name

Description

13

USB_POWER_GOOD

Interrupt request. Must be cleared by firmware.

12

VBUS_TH

Interrupt request. Must be cleared by firmware.

11

VBAT

Interrupt request. Must be cleared by firmware.

10

VBUS

Interrupt request. Must be cleared by firmware.

9

USB25REG

Interrupt request. Must be cleared by firmware.

8

USB33REG

Interrupt request. Must be cleared by firmware.

7

VIO5

Interrupt request. Must be cleared by firmware.

continued on next page

260

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.8

GCTL_IOPOWER_INTR (continued)

6

CVDDQ

Interrupt request. Must be cleared by firmware.
Note CVDDQ is required for chip operation (clock and reset). This interrupt will never trigger when it
is observable.

5

EFVDDQ

Interrupt request. Must be cleared by firmware.

4

VIO4

Interrupt request. Must be cleared by firmware.

3

VIO3

Interrupt request. Must be cleared by firmware.

2

VIO2

Interrupt request. Must be cleared by firmware.

0

VIO1

Interrupt request. Must be cleared by firmware.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

261

10.4.9

GCTL_IOPOWER_INTR_MASK
I/O Power Change Interrupt Mask Register

GCTL_IOPOWER_INTR_MASK
b31

b30

I/O Power Change Interrupt Mask Register
b29

GCTL_IOPOWER_INTR_MASK
b23

b22

b14

b27

0xE0051038
b26

b25

b24

b18

b17

b16

I/O Power Change Interrupt Mask Register
b21

GCTL_IOPOWER_INTR_MASK
b15

b28

b20

b19

I/O Power Change Interrupt Mask Register
b13

b12

b11

b10

b9

b8

USB_POWER_
GOOD

VBUS_TH

VBAT

VBUS

USB25REG

USB33REG

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

b1

GCTL_IOPOWER_INTR_MASK

I/O Power Change Interrupt Mask Register

b7

b6

b5

b4

b3

b2

VIO5

CVDDQ

EFVDDQ

VIO4

VIO3

VIO2

VIO1

b0

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

0

Set to 1 to activate interrupt. Affects reporting of interrupts only, not logging.

Bit

Name

Description

13

USB_POWER_GOOD

Set to 1 to report interrupt to CPU

12

VBUS_TH

Set to 1 to report interrupt to CPU

11

VBAT

Set to 1 to report interrupt to CPU

10

VBUS

Set to 1 to report interrupt to CPU

9

USB25REG

Set to 1 to report interrupt to CPU

8

USB33REG

Set to 1 to report interrupt to CPU

7

VIO5

Set to 1 to report interrupt to CPU

6

CVDDQ

Set to 1 to report interrupt to CPU.
Note CVDDQ is required for chip operation (clock and reset). This interrupt will never trigger when it
is observable.

continued on next page

262

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.9

GCTL_IOPOWER_INTR_MASK (continued)

5

EFVDDQ

Set to 1 to report interrupt to CPU

4

VIO4

Set to 1 to report interrupt to CPU

3

VIO3

Set to 1 to report interrupt to CPU

2

VIO2

Set to 1 to report interrupt to CPU

0

VIO1

Set to 1 to report interrupt to CPU

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

263

10.4.10

GCTL_SW_INT
Software Interrupt Register

GCTL_SW_INT
b31

Software Interrupt Register
b30

b29

b28

SWINT

b27

0xE005104C
b26

b25

b24

ARGUMENT[30:24]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GCTL_SW_INT
b23

Software Interrupt Register
b20

b19

ARGUMENT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GCTL_SW_INT
b15

Software Interrupt Register
b12

b11

ARGUMENT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GCTL_SW_INT
b7

Software Interrupt Register
b4

b3

ARGUMENT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register is a software interrupt register with 31b argument.

Bit

Name

Description

31

SWINT

Software interrupt request. Must be set by issuer and cleared by ISR.

30:0

ARGUMENT[30:0]

31-bit argument that can be set by issuer, read by ISR.

264

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.11

GCTL_PLL_CFG
PLL Configuration Register

GCTL_PLL_CFG
b31

PLL Configuration Register
b30

b29

b22

b21

b28

GCTL_PLL_CFG
b23

b27

0xE0052000
b26

b24

b17

b16

PLL Configuration Register
b20

b19

b18

PLL_LOCK

GCTL_PLL_CFG
b15

b25

FSLC[2:0]

R

R

R

R

R/W

R/W

R/W

R/W

0

X

X

X

b10

b9

PLL Configuration Register
b14

b13

b12

b11

CP_CFG[1:0]
R/W

R/W

R/W

R

R

R/W

0

0

H

GCTL_PLL_CFG
b7

b8

REFDIV

PLL Configuration Register
b6

b5

b4

b3

OUTDIV[1:0]

b2

b1

b0

FBDIV[5:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

H

H

H

H

H

H

On power up, this value is initialized depending on the FSLC[1:0] pin values as follows:
0: 19.2-MHz input clock, FBDIV = 20, REFDIV0 = 0, OUTDIV(1:0) = 00, oscclk = 384 MHz
FX3 supports only 19.2 MHz.

Bit

Name

Description

19

PLL_LOCK

Asserted when PLL locks

18:16

FSLC

Value presented on FSLC[2:0] pins on the device that identify reference clock frequency/crystal provided. FSLC[2] selects between reference clock or crystal, FSLC[1:0] select reference clock frequency when FSLC[2] = 0.

13:12

CP_CFG

PLL charge pump configuration
0
2.5 µA
1
5 µA
2
7.5 µA
3
10 µA
The charge pump bit setting varies depending on both the refclk frequency and the configuration
divider bits.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

265

10.4.11

GCTL_PLL_CFG (continued)

8

REFDIV

PLL input reference divider configuration. This field must be 0.

7:6

OUTDIV

PLL output divider configuration. This field must be 0.

5:0

FBDIV

PLL feedback divider configuration. This field must be 0x14.

266

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.12

GCTL_CPU_CLK_CFG
CPU and Bus Clock Configuration Register

GCTL_CPU_CLK_CFG
b31

CPU and Bus Clock Configuration Register
b30

b29

b22

b21

b14

b13

GCTL_CPU_CLK_CFG
b23

b27

0xE0052004
b26

b25

b24

b18

b17

b16

b9

b8

CPU and Bus Clock Configuration Register

GCTL_CPU_CLK_CFG
b15

b28

b20

b19

CPU and Bus Clock Configuration Register
b12

b11

b10

MMID_DIV[3:0]

DMA_DIV[11:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b1

b0

1

1

GCTL_CPU_CLK_CFG

CPU and Bus Clock Configuration Register

b7

b6

b5

0

0

b4

b3

b2

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

SRC[1:0]

CPU_DIV[3:0]

2

1

Bit

Name

Description

15:12

MMIO_DIV[3:0]

MMIO bus clock divider value. This determines how much to divide the CPU clock. The actual divider
is DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to16. The following must be true: (MMIO_DIV + 1) = N × (DMA_DIV +1).

11:8

DMA_DIV[3:0]

DMA bus clock divider value. This determines how much to divide the CPU clock. The actual divider
is DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 16.

5:4

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll
On power up, the CPU clock will be PLL clock divided by 2, which is around 100 MHz. The expectation is that Boot ROM/Firmware changes this value to get to final CPU frequency.

3:0

CPU_DIV

CPU clock divider value. This determines how much to divide the source clock selected by the SRC
field of this register. The actual divider is DIV + 1. Zero (divide by 1) is illegal and results in undefined
behavior. In other words, the range of divider values is 2 to 16.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

267

10.4.13

GCTL_UIB_CORE_CLK
UIB Clock Configuration Register

GCTL_UIB_CORE_CLK
b31

b30

UIB Clock Configuration Register
b29

b28

b27

0xE0052008
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

b0

CLK_EN
R/W
R
0

GCTL_UIB_CORE_CLK
b23

b22

UIB Clock Configuration Register
b21

GCTL_UIB_CORE_CLK
b15

b14

b6

b19

UIB Clock Configuration Register
b13

GCTL_UIB_CORE_CLK
b7

b20

b12

b11

UIB Clock Configuration Register
b5

b4

b3

PCLK_SRC[1:0]

EPMCLK_SRC[1:0]

R/W

R/W

R/W

R

R

R

2

R/W
R
2

Bit

Name

Description

31

CLK_EN

Enable clock multiplexer

3:2

PCLK_SRC[1:0]

Clock source for SuperSpeed section of UIB block:
0
Not defined
1
USB3 PHY 125 MHz (spread spectrum clock)
2
Bus clock (typ 100 MHz)
3
Standby clock (typ 32 kHz)
This field drives a simple clock mux; the actual presence and configuration of the clock inputs used is
defined in the appropriate registers.

1:0

EPMCLK_SRC[1:0]

Clock source for EPM section of UIB block:
0
USB2 PHY 480 MHz divided by 4 (120 MHz)
1
USB3 PHY 125 MHz (spread spectrum clock)
2
Bus clock (typ 100 MHz)
3
Standby clock (typ 32 kHz)
This field drives a simple clock mux; the actual presence and configuration of the clock inputs used is
defined in the appropriate registers.
Note In GTM test mode, make sure the USB2 PHY clock is running for at least 40 µs before selecting
EPMCLK_SRC = 0.

268

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.14

GCTL_PIB_CORE_CLK
PIB Clock Configuration Register

GCTL_PIB_CORE_CLK
b31

PIB Clock Configuration Register

b30

b29

b28

b27

0xE005200C
b26

b25

b24

b18

b17

b16

b10

b9

CLK_EN
R/W
R
0

GCTL_PIB_CORE_CLK
b23

PIB Clock Configuration Register

b22

b21

GCTL_PIB_CORE_CLK
b15

b20

b19

PIB Clock Configuration Register

b14

b13

b12

b11

SRC[1:0]

GCTL_PIB_CORE_CLK
b7

HALFDIV

b8

DIV;9:8]

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

PIB Clock Configuration Register

b6

b5

b4

b3

b2

b1

b0

DIV[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

12:11

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

10

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 256.5.

9:0

DIV[9:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 1024.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

269

10.4.15

GCTL_GPIO_FAST_CLK
GPIO Fast Clock Configuration Register

GCTL_GPIO_FAST_CLK
b31

GPIO Fast Clock Configuration Register

b30

b29

b28

b27

0xE0052018
b26

b25

b24

b18

b17

b16

b10

b9

CLK_EN
R/W
R
0

GCTL_GPIO_FAST_CLK
b23

GPIO Fast Clock Configuration Register

b22

b21

GCTL_GPIO_FAST_CLK
b15

b20

b19

GPIO Fast Clock Configuration Register

b14

b13

b12

b11

b8

SIMPLE1
R/W
R

GCTL_GPIO_FAST_CLK
b7

GPIO Fast Clock Configuration Register

b6

SIMPLE0

b5

SRC[1:0]

b4

b3

b2

HALFDIV

b1

b0

DIV[3:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

2

0

0

0

1

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

8:7

SIMPLE[1:0]

Divider value for simple GPIOs relative to fast GPIO clock
0
Divide by 2
1
Divide by 4
2
Divide by 16
3
Divide by 64

6:5

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

4

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 16.5.
Note Do not use HALFDIV for FAST_CLK unless neither GPIO_SLOW_CLK or GPIO_SIMPLE_CLK
is used. They will not function with HALFDIV = 1.
Note Do not change HALFDIV after CLK_EN is set to 1 at least once, without first applying a hardware reset. It can be set together with CLK_EN in a single register write.

continued on next page

270

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.15
3:0

GCTL_GPIO_FAST_CLK (continued)

DIV[3:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 16.

Note Any two writes to GCTL_GPIO_FAST_CLK and GPIO_SLOW_CLK must be spaced at least 35cy @ busclk apart. This
holds for back-to-back writes to the same register as well as writes to both of these registers in either order.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

271

10.4.16

GCTL_GPIO_SLOW_CLK
GPIO Slow Clock Configuration Register

GCTL_GPIO_SLOW_CLK
b31

b30

GPIO Slow Clock Configuration Register
b29

b28

b27

0xE005201C
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

b0

CLK_EN
R/W
R
0

GCTL_GPIO_SLOW_CLK
b23

b22

GPIO Slow Clock Configuration Register
b21

GCTL_GPIO_SLOW_CLK
b15

b14

b6

b19

GPIO Slow Clock Configuration Register
b13

GCTL_GPIO_SLOW_CLK
b7

b20

b12

b11

GPIO Slow Clock Configuration Register
b5

b4

b3

DIV[5:0]
R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

1

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

5:0

DIV[5:0]

Clock divider value. This determines how much to divide the GPIO_FAST_CLK system clock. The
actual divider is DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words,
the range of divider values is 2 to 64.

Note Any two writes to GCTL_GPIO_FAST_CLK and GPIO_SLOW_CLK must be spaced at least 35cy @ busclk apart. This
holds for back-to-back writes to the same register as well as writes to both of these registers in either order.

272

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.17

GCTL_I2C_CORE_CLK
I2C Core Clock Configuration Register

GCTL_I2C_CORE_CLK
b31

0xE0052020

I2C Core Clock Configuration Register

b30

b29

b28

b27

b26

b25

b24

b18

b17

b16

b9

b8

CLK_EN
R/W
R
0

GCTL_I2C_CORE_CLK
b23

I2C Core Clock Configuration Register

b22

b21

GCTL_I2C_CORE_CLK
b15

b20

I2C Core Clock Configuration Register

b14

b13

b12

SRC[1:0]

b11

b10

HALFDIV

DIV[11:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

b6

b5

b3

b2

b1

b0

GCTL_I2C_CORE_CLK
b7

b19

I2C Core Clock Configuration Register
b4

DIV[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

This register contains the divider for the I2C clock block. It must be set to a frequency that is 10x the bit rate on the interface
(so 1 MHz, 4 MHz, 10 MHz, and so on).

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

14:13

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

12

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 4096.5.

11:0

DIV[11:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 4096.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

273

10.4.18

GCTL_UART_CORE_CLK
UART Core Clock Configuration Register

GCTL_UART_CORE_CLK
b31

b30

UART Core Clock Configuration Register
b29

b28

b27

0xE0052024
b26

b25

b24

CLK_EN
R/W
R
0

GCTL_UART_CORE_CLK
b23

b22

UART Core Clock Configuration Register
b21

b20

b19

b18

b17

SRC[1:0]

GCTL_UART_CORE_CLK
b15

b14

b16

HALFDIV

R/W

R/W

R/W

R

R

R

0

0

0

b11

b10

b9

b8

UART Core Clock Configuration Register
b13

b12

DIV[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

GCTL_UART_CORE_CLK
b7

b6

UART Core Clock Configuration Register
b5

b4

DIV[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

This is the core clock provided to the UART peripheral. The UART uses 8x oversampling, so the resulting baud rate is 1/8th
the frequency provided by this clock.

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

18:17

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

16

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 65536.5.

15:0

DIV[15:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 65536.

274

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.4.19

GCTL_SPI_CORE_CLK
SPI Core Clock Configuration Register

GCTL_SPI_CORE_CLK
b31

SPI Core Clock Configuration Register

b30

b29

b28

b27

0xE005202C
b26

b25

b24

CLK_EN
R/W
R
0

GCTL_SPI_CORE_CLK
b23

SPI Core Clock Configuration Register

b22

b21

b20

b19

b18

b17

SRC[1:0]

GCTL_SPI_CORE_CLK
b15

b16

HALFDIV

R/W

R/W

R/W

R

R

R

0

0

0

b11

b10

b9

b8

SPI Core Clock Configuration Register

b14

b13

b12

DIV[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b3

b2

b1

b0

GCTL_SPI_CORE_CLK
b7

SPI Core Clock Configuration Register
b4

DIV[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

18:17

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

16

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 65536.5.

15:0

DIV[15:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 65536.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

275

10.4.20

GCTL_I2S_CORE_CLK
I2S Core Clock Configuration Register

GCTL_I2S_CORE_CLK

I2S Core Clock Configuration Register

b31

b30

CLK_EN

MCLK_IN

R/W

R/W

R

R

0

0

b29

GCTL_I2S_CORE_CLK
b23

b28

b27

0xE0052034
b26

b25

b18

b17

b24

I2S Core Clock Configuration Register

b22

b21

b20

b19

b16

SRC[1:0]

GCTL_I2S_CORE_CLK
b15

R/W

R/W

R

R

0

0

b10

b9

b8

I2S Core Clock Configuration Register

b14

b13

b12

b11

HALFDIV

DIV[14:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b3

b2

b1

b0

0

GCTL_I2S_CORE_CLK
b7

I2S Core Clock Configuration Register
b4

DIV[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

Bit

Name

Description

31

CLK_EN

Enable clock divider. Both the divider itself and its output are gated.

30

MCLK_IN

0
I2S_MCLK is an output, generated from this divider
1
I2S_MCLK is taken as the input to this divider instead of the PLL clock
Note Never change this value after CLK_EN is set without first issuing a reset to the device.

17:16

SRC[1:0]

Clock source select. This field selects between one of the following four prestage system clocks:
00
sys16_clk (sys_clk_pll divided by 16)
01
sys4_clk (sys_clk_pll divided by 4)
10
sys2_clk (sys_clk_pll divided by 2)
11
sys_clk_pll

15

HALFDIV

Nonintegral divider select. This field adds 0.5 to the divider value selected by the DIV field. This yields
divider values from 2.5 to 32768.5.

14:0

DIV[15:0]

Clock divider value. This determines how much to divide the PLL system clock. The actual divider is
DIV + 1. Zero (divide by 1) is illegal and results in undefined behavior. In other words, the range of
divider values is 2 to 32768.

276

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.5

Global Controller Always On Registers

10.5.1

GCTL_WAKEUP_EN
Wakeup Enable Register

GCTL_WAKEUP_EN
b31

Wakeup Enable Register
b30

b29

b22

b21

b14

b13

GCTL_WAKEUP_EN
b23

b27

0xE0050004
b26

b25

b24

b18

b17

b16

Wakeup Enable Register

GCTL_WAKEUP_EN
b15

b28

b20

b19

Wakeup Enable Register
b12

EN_WATCHDOG2 EN_WATCHDOG1

b11

b10

b9

b8

EN_UIB_VBUS

EN_UIB_SSRX

EN_UIB_OTGID

EN_UIB_DM

R/W

R/W

R/W

R/W

R

R/W

R

R

R

R

R/RW

R

0

0

0

0

0

0

GCTL_WAKEUP_EN

Wakeup Enable Register

b7

b6

b5

b4

b3

b2

b1

b0

EN_UIB_DP

EN_UART_CTS

EN_GPIO[44]

EN_GPIO[47]

EN_GPIO[34]

EN_PIB_CLK

EN_PIB_CMD

EN_PIB_CTRL0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register indicates which wakeup sources are enabled to wake up the system from suspend/standby modes. It is in the
always-on power domain. Unless otherwise noted, wakeup sources work from both standby and suspend modes. The
wakeup detectors are active across all power modes and can also be used as interrupt sources in active/idle mode. If wakeup
pins are defined as outputs (in GPIO or PIB), wakeup functionality is not guaranteed to work.
GCTL_CONTROL.WAKEUP_CPU_INT must be set before entering suspend/standby to enable wakeup.

Bit

Name

Description

13

EN_WATCHDOG2

Enables wakeup when WatchDog #2 generates an interrupt.

12

EN_WATCHDOG1

Enables wakeup when WatchDog #1 generates an interrupt.

11

EN_UIB_VBUS

Enables wakeup when VBUS is asserted. Works in either standby or suspend modes.

10

EN_UIB_SSRX

Enables wakeup when an LFPS signal appears on the USB3 SSRX pins.
This wakeup source does not work from standby mode.

9

EN_UIB_OTGID

Enables wakeup when an impedance change is detected on the USB2 OTGID pin (USB ATTACH
event). This wakeup source does not work from standby mode. This wakeup source works from suspend only when an external 32-kHz clock source is present.
continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

277

10.5.1

GCTL_WAKEUP_EN (continued)

8

EN_UIB_DM

Enables wakeup when the USB2 D+ line transitions to from 0 to 1 or from 1 to 0 (CONNECT in host
mode).
This wakeup source does not work from standby mode.

7

EN_UIB_DP

Enables wakeup when the USB2 D+ line transitions to from 1 to 0 (USB RESUME) or from 0 to 1
(CONNECT in host mode).
This wakeup source does not work from standby mode.

6

EN_UART_CTS

Enables wakeup from the UART_CTS pin. Wakeup occurs when the level set in POL_UART_CTS is
detected.

5

EN_GPIO[44]

Enables wakeup from the GPIO[44] pin (card insertion). Wakeup occurs when the level set in
POL_GPIO[44] is detected.

4

EN_GPIO[47]

Enables wakeup from the GPIO[47] pin (SD1). Wakeup occurs when the level set in POL_GPIO[47]
is detected.

3

EN_GPIO[34]

Enables wakeup from the GPIO[34] pin (SD0). Wakeup occurs when the level set in POL_GPIO[34]
is detected.

2

EN_PIB_CLK

Enables wakeup from the PIB_CLK pin. Wakeup occurs on any change on this pin after wakeup.

1

EN_PIB_CMD

Enable wakeup from a CMD5 on the PIB_CMD pin. This wakeup source does not work from standby
mode. This wakeup source works from suspend only when an external 32-kHz clock source is
present.

0

EN_PIB_CTRL0

Enables wakeup from the PIB CTL0 pin (CE# typically). Wakeup occurs on any change on this pin
after wakeup.

278

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.5.2

GCTL_WAKEUP_POLARITY
Wakeup Signal Polarity Register

GCTL_WAKEUP_POLARITY
b31

b30

Wakeup Signal Polarity Register
b29

GCTL_WAKEUP_POLARITY
b23

b22

b14

b27

0xE0050008
b26

b25

b24

b18

b17

b16

b10

b9

Wakeup Signal Polarity Register
b21

GCTL_WAKEUP_POLARITY
b15

b28

b20

b19

Wakeup Signal Polarity Register
b13

GCTL_WAKEUP_POLARITY

b12

b11

b8

POL_UIB_VBUS

POL_UIB_DM

R/W

R/W

R

R

1

0

Wakeup Signal Polarity Register

b7

b6

b5

b4

b3

POL_UIB_DP

POL_UART_CTS

POL_GPIO[44]

POL_GPIO[47]

POL_GPIO[34]

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b2

b1

b0

This register indicates polarity for wakeup detect signals. It is in the always on power domain.
Bit

Name

Description

11

POL_UIB_VBUS

Polarity of the VBUS signal:
0
Wakeup when LOW
1
Wakeup when HIGH

8

POL_UIB_DM

Polarity of the USB D– signal:
0
Wakeup when LOW
1
Wakeup when HIGH

7

POL_UIB_DP

Polarity of the USB D+ signal:
0
Wakeup when LOW
1
Wakeup when HIGH

6

POL_UART_CTS

Polarity of the UART_CTS signal:
0
Wakeup when LOW
1
Wakeup when HIGH

5

POL_GPIO[44]

Polarity of the GPIO[44] signal:
0
Wakeup when LOW
1
Wakeup when HIGH

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

279

10.5.2

GCTL_WAKEUP_POLARITY (continued)

4

POL_GPIO[47]

Polarity of the GPIO[47] signal:
0
Wakeup when LOW (Applicable for SDIO interrupt wakeup)
1
Wakeup when HIGH (Not required for SDIO interrupt wakeup)

3

POL_GPIO[34]

Polarity of the GPIO[34] signal:
0
Wakeup when LOW (Applicable for SDIO interrupt wakeup)
1
Wakeup when HIGH (Not required for SDIO interrupt wakeup)

280

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.5.3

GCTL_WAKEUP_EVENT
Wakeup Event Register

GCTL_WAKEUP_EVENT
b31

b30

Wakeup Event Register
b29

GCTL_WAKEUP_EVENT
b23

b22

b14

b27

0xE005000C
b26

b25

b24

b18

b17

b16

Wakeup Event Register
b21

GCTL_WAKEUP_EVENT
b15

b28

b20

b19

Wakeup Event Register
b13

b12

EV_WATCHDOG2 EV_WATCHDOG1

b11

b10

b9

b8

EV_UIB_VBUS

EV_UIB_SSRX

EV_UIB_OTGID

EV_UIB_DM

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

GCTL_WAKEUP_EVENT

Wakeup Event Register

b7

b6

b5

b4

b3

b2

b1

b0

EV_UIB_DP

EV_UART_CTS

EV_GPIO[44]

EV_GPIO[47]

EV_GPIO[34]

EV_PIB_CLK

EV_PIB_CMD

EV_PIB_CTRL0

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

This register indicates which wakeup source caused the system wakeup. Multiple bits may be set (although this is unlikely).
After power-on or reset, these bits are zero. This register is in the always-on power domain. The wakeup detectors are active
across all power modes and can also be used as interrupt sources in active/idle mode.

Bit

Name

Description

13

EV_WATCHDOG2

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

12

EV_WATCHDOG1

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

11

EV_UIB_VBUS

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

10

EV_UIB_SSRX

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

9

EV_UIB_OTGID

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

8

EV_UIB_DM

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

281

10.5.3

GCTL_WAKEUP_EVENT (continued)

7

EV_UIB_DP

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

6

EV_UART_CTS

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

5

EV_GPIO[44]

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

4

EV_GPIO[47]

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

3

EV_GPIO[34]

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

2

EV_PIB_CLK

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

1

EV_PIB_CMD

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

0

EV_PIB_CTRL0

Indicates that this wakeup source was the reason for system wakeup from standby/suspend mode.
See GCTL_WAKEUP_EN for more information.

282

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.5.4

GCTL_FREEZE
I/O Freeze Control Register

GCTL_FREEZE
b31

I/O Freeze Control Register
b30

b29

b22

b21

b14

b13

b6

b5

GCTL_FREEZE
b23

0xE0050010
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

b0

I/O Freeze Control Register

GCTL_FREEZE
b7

b27

I/O Freeze Control Register

GCTL_FREEZE
b15

b28

b12

b11

I/O Freeze Control Register

VIO4IO_FRZ[1:0]

b4

b3

VIO3IO_FRZ[1:0]

VIO2IO_FRZ[1:0]

VIO1IO_FRZ[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register indicates the state of the I/Os in each power domain when GCTL_CONTROL.FREEZE_IO is asserted. It is in
the always-on power domain.

Bit

Name

Description

7:6

VIO4IO_FRZ[1:0]

Frozen state of I/Os in the VIO4 domain.

5:4

VIO3IO_FRZ[1:0]

Frozen state of I/Os in the VIO3 domain.

3:2

VIO2IO_FRZ[1:0]

Frozen state of I/Os in the VIO2 domain.

1:0

VIO1IO_FRZ[1:0]

Frozen state of I/Os in the VIO1 domain
0
Sample and hold state
1
High impedance
2
Drive 0 at full strength (outputs only)
3
Drive 1 at full strength (outputs only)
Note that states 2 and 3 only override the output value driven to a fixed value, but do not change the
drive mode of a pin from off to on. In other words, pins that are currently inputs remain inputs and are
not forced to drive.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

283

10.5.5

GCTL_WATCHDOG_CS
Watchdog Timers Command and Control Register

GCTL_WATCHDOG_CS
b31

Watchdog Timers Command and Control Register

b30

b29

b28

BACKUP_CLK

b27

0xE0050014

b26

b25

b24

BACKUP_DIVIDER[14:8]

R/W1S

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

b18

b17

b16

0

GCTL_WATCHDOG_CS
b23

Watchdog Timers Command and Control Register
b20

b19

BACKUP_DIVIDER[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

GCTL_WATCHDOG_CS
b15

Watchdog Timers Command and Control Register

b14

b13

b12

b11

BITS1[4:0]

b10

b9

INTR1

R/W

R/W

R/W

R/W

R/W

R/W1C

R/W

R

R

R

R

R

R/W1S

R

0

0

0

0

0

0

b6

b5

GCTL_WATCHDOG_CS
b7

b8

MODE1[1:0]
R/W
R
3

Watchdog Timers Command and Control Register
b4

b3

BITS0[4:0]

b2

b1

INTR0

b0

MODE0[1:0]

R/W

R/W

R/W

R/W

R/W

R/W1C

R/W

R

R

R

R

R

R/W1S

R

0

0

0

0

0

0

R/W
R
3

This register controls two watchdog timers. Each timer can be used in free-running, interrupt, or reset mode and has a selectable number of significant bits. The frequency is fixed at 32768 Hz, and counters count down only. Firmware can protect this
register against unwanted writes (see GCTL_WAKEUP_EN).

Bit

Name

Description

31

BACKUP_CLK

Switches the watchdog clocks from the 32-kHz clock input to a 'backup' 32-kHz clock derived from
the main reference clock using BACKUP_DIVIDER. This field is sticky and cannot change after it is
set to 1. This bit can only be cleared with the RESET# pin or POR.

30:16

BACKUP_DIVIDER[14:0]

Divider used to generate a 'backup' 32-kHz clock. This is relevant for systems where no 32-kHz clock
is present as an input signal. The external reference clock (OSCCLK) is divided by
(BACKUP_DIVIDER + 1). In other words, a value of 1 means divided by 2. The behavior of the
divider is undefined when this value is 0. This field must not change after the BACKUP_CLK bit is set.

15:11

BITS1[4:0]

Number of least significant bits to be used when checking for counter limit (useful only for
MODE = 1, 2).

10

INTR1

Interrupt signal (Mode 1 only). This bit indicates when the WDOG timer has issued an Interrupt to the
CPU while the system is powered-up. Refer to the GCTL_WAKEUP_EVENT register when the
WDOG timer is used to wake up the system from a power-down state.

continued on next page

284

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.5.5

GCTL_WATCHDOG_CS (continued)

9:8

MODE1[1:0]

Counter mode:
0
Free-running mode, counter wraps around after 32 bits.
1
Interrupt mode, interrupt when COUNTER & ~((~0)< 0 is switched before the 8-byte boundary

TH1_SCK_ACTIVE

0x1A

A socket has gone inactive within a DMA Transfer

TH1_ADAP_OVERFLOW

0x1B

Adapter unable to service write request though buffer is available

TH1_ADAP_UNDERFLOW

0x1C

Adapter unable to service read request though buffer is available

TH1_READ_FORCE_END

0x1D

A read socket is wrapped up

TH1_READ_BURST_ERR

0x1E

A read socket with burstsize > 0 is switched before the 8-byte boundary

TH2_ADAP_OVERFLOW

0x22

A socket has gone inactive within a DMA transfer

TH2_ADAP_UNDERFLOW

0x23

Adapter unable to service write request though buffer is available

TH2_ADAP_UNDERFLOW

0x24

Adapter unable to service read request though buffer is available

TH2_READ_FORCE_END

0x25

A read socket is wrapped up

TH2_READ_BURST_ERR

0x26

A read socket with burstsize > 0 is switched before 8-byte boundary

TH3_SCK_ACTIVE

0x2A

A socket has gone inactive within a DMA transfer

TH3_ADAP_OVERFLOW

0x2B

Adapter unable to service write request though buffer is available

TH3_ADAP_UNDERFLOW

0x2C

Adapter unable to service read request though buffer is available

TH3_READ_FORCE_END

0x2D

A read socket is wrapped up

TH3_READ_BURST_ERR

0x2E

A read socket with burstsize > 0 is switched before the 8-byte boundary

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.6.8

PIB_EOP_EOT
PIB EOP/EOT Configuration Register

PIB EOP/EOT
b31

Configuration Register
b30

b29

b28

b27

0xE0010024
b26

b25

b24

PIB_EOP_EOT_CFG[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

b22

b21

b18

b17

b16

PIB EOP/EOT
b23

Configuration Register
b20

b19

PIB_EOP_EOT_CFG[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

b14

b13

b10

b9

b8

PIB EOP/EOT
b15

Configuration Register
b12

b11

PIB_EOP_EOT_CFG[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

b6

b5

b2

b1

b0

PIB EOP/EOT
b7

Configuration Register
b4

b3

PIB_EOP_EOT_CFG[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

This register specifies how EOP is set in descriptors of ingress P-port sockets and how EOP is interpreted for egress P-port
sockets.

Bit

Name

Description

31:0

PIB_EOP_EOT_CFG[31:0] This register specifies how EOP bits are set or interpreted for ingress and egress sockets, respectively.
0
Stream mode behavior
1
Packet mode behavior

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

301

10.6.9

PIB_DLL_CTRL
DLL Configuration Register

PIB_DLL_CTRL

DLL Configuration Register

b31

b30

ENABLE_RESET
_ON_ERR

DLL_RESET_N

R/W

R/W

R

R

0

0

b29

b28

PIB_DLL_CTRL
b23

b21

b14

b13

b6

b5

b20

b25

b24

b19

b18

b17

b16

b10

b9

b8

DLL Configuration Register
b12

PIB_DLL_CTRL
b7

0xE0010028
b26

DLL Configuration Register
b22

PIB_DLL_CTRL
b15

b27

b11

DLL Configuration Register
b4

b3

b2

b1

b0

DLL_STAT

HIGH_FREQ

ENABLE

R

R/W

R/W

W

R

R

0

0

0

This register configures the DLL phases and enables the DLL.

Bit

Name

Description

31

ENABLE_RESET_ON_ERR

0
1

30

DLL_RESET_N

Resets the DLL
0
DLL is reset
1
DLL is not reset

Hardware does not reset the DLL when DLL code overrun/underrun occurs
Hardware resets the DLL when DLL code overrun/underrun occurs

continued on next page

302

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.6.9

PIB_DLL_CTRL (continued)
011
100
101
110
111

Phase Comparator DFT #1. The used dll_out signals are available for monitoring on
TDO pin in clock_observation_mode
Scan test: monitor test_so. This mode is not cannot be selected through register
control.
Phase Comparator DFT #2: The used dll_out signals are available for monitoring on
TDO pin in clock_observation_mode
Error code reset: The error_code[1:0] output of the dll is available for monitoring on
the designated GPIO in clock_observation_mode
This setting is used either for fault grading or monotonicity testing, based on the settings of the “mode” input.
DLL_MODE =0: Fault grading. The DLL's phase comparator drives dllrdy, which is
available for monitoring on the designated GPIO in clock_observation_mode
DLL_MODE =1: Monotonicity test. The used dll_out signals are available for monitoring on TDO pin in clock_observation_mode

2

DLL_STAT

0
1

DLL is not in phase lock
DLL has achieved phase lock

1

HIGH_FREQ

0
1

23 to 80 MHz
70 to 230 MHz

0

ENABLE

Drives the DLLEN input
0
DLL is disabled (internally power gated)
1
DLL is enabled

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

303

10.6.10

PIB_WR_THRESHOLD
Write Threshold Register

PIB_WR_THRESHOLD
b31

Write Threshold Register
b30

b29

b22

b21

b14

b13

PIB_WR_THRESHOLD
b23

b27

0xE001002C
b26

b25

b24

b18

b17

b16

b10

b9

b8

Write Threshold Register

PIB_WR_THRESHOLD
b15

b28

b20

b19

Write Threshold Register
b12

b11

VALUE16[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

PIB_WR_THRESHOLD
b7

Write Threshold Register
b4

VALUE16[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register specifies the write buffer free event threshold; the CPU writes a 16-bit value that is visible using the
PP_WR_THRESHOLD register. When AP writes the PP_WR_THRESHOLD register, the PIB_WR_THRESHOLD register is
updated with the WR_THRESHOLD interrupt.

Bit

Name

Description

15:0

VALUE16[15:0]

The CPU writes to this field during initialization. The value written to this register is made available by
hardware in PP_WR_THRESHOLD register. When AP writes to the PP_WR_THRESHOLD register
this register is updated with the new value and WR_THRESHOLD interrupt is provided.

304

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.6.11

PIB_RD_THRESHOLD
Read Threshold Register

PIB_RD_THRESHOLD
b31

Read Threshold Register
b30

b29

b22

b21

b14

b13

PIB_RD_THRESHOLD
b23

b27

0xE0010030
b26

b25

b24

b18

b17

b16

b10

b9

b8

Read Threshold Register

PIB_RD_THRESHOLD
b15

b28

b20

b19

Read Threshold Register
b12

b11

VALUE16[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

PIB_RD_THRESHOLD
b7

Read Threshold Register
b4

VALUE16[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Read buffer data available to the event threshold as a number of bytes available. The device side must have the intelligence
to activate the interrupt either when this threshold is exceeded or when it sees it useful (end of packet).

Bit

Name

Description

15:0

VALUE16[15:0]

The CPU writes to this field during initialization. The value written to this register is made available by
hardware in the PP_RD_THRESHOLD register. When AP writes to the PP_RD_THRESHOLD register, this register is updated with the new value and the RD_THRESHOLD interrupt is provided.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

305

10.6.12

PIB_ID
Block Identification and Version Number Register

PIB_ID

Block Identification and Version Number Register

b31

b30

b29

b28

b27

0xE0017F00

b26

b25

b24

BLOCK_VERSION[15:18]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b23

b22

b21

b18

b17

b16

PIB_ID

Block Identification and Version Number Register
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b10

b9

b8

0x0001

PIB_ID

Block Identification and Version Number Register

b15

b14

b13

b12

b11

BLOCK_ID[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b6

b5

PIB_ID

Block Identification and Version Number Register
b7

b4

b3

b2

b1

b0

BLOCK_ID[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0x0001

Every IP block implements a few MMIO registers at offset 0 in its MMIO space that identify the block and control its power/
clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible even
when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

306

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.6.13

PIB_POWER
Power, Clock, and Reset Control Register

PIB_POWER
b31

Power, Clock, and Reset Control Register
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0017F04
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

PIB_RD_THRESHOLD
b23

Read Threshold Register

PIB_RD_THRESHOLD
b15

b19

Read Threshold Register

PIB_RD_THRESHOLD
b7

b20

b12

b11

Read Threshold Register
b4

b3

b0

ACTIVE
R
W
0

Every IP block implements a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its power/
clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible even
when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active low reset signal for all logic in the block. Note that reset is active on all flops in the block when
either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or this signal is active.
After setting this bit to 1, firmware polls and waits for the ‘active’ bit to assert. Reading ‘1’ from ‘resetn’
does not indicate the block is out of reset. This may take some time depending on initialization tasks
and clock frequencies.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words, reading ACTIVE = 1 indicates that
the block is initialized and ready for operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

307

10.7

GPIF Registers

10.7.1

GPIF_CONFIG
GPIF Configuration Register

GPIF_CONFIG

GPIF Configuration Register

b31

b30

ENABLE

PP_MODE

R/W

R/W

R

R

0

0

b29

b28

GPIF_CONFIG

b27

0xE0014000
b26

b25

b24

b18

b17

b16

b9

b8

GPIF Configuration Register

b23

b22

b21

b20

b19

A7OVERRIDE
R/W
R
0

GPIF_CONFIG

GPIF Configuration Register

b15

b14

b13

b12

b11

b10

THREAD_IN_
STATE

DATA_COMP_
TOGGLE

CTRL_COMP_
TOGGLE

ADDR_COMP_
TOGGLE

ENDIAN

SYNC

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

GPIF_CONFIG

GPIF Configuration Register

b7

b6

b5

b4

b3

b2

b1

b0

ADDR_COMP_
ENABLE

CTRL_COMP_
ENABLE

DOUT_POP_EN

DDR_MODE

CLK_OUT

CLK_SOURCE

CLK_INVERT

DATA_COMP_
ENABLE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

1

0

0

0

0

0

This register provides static configuration information for GPIF.

Bit

Name

Description

31

ENABLE

Enables entire GPIF block.

30

PP_MODE

Main operating mode of PP registers
0
Master mode or simple slave mode - PP* registers are not honored
1
P-Port mode - PP* registers are used to setup transfers

19

A7OVERRIDE

Overrides the use of AIN[7] to enable selection of register versus DMA access on different pins in
PP_MODE = 1. If A7OVERRIDE = 1, register accesses are determined by beta (pp_access) instead.

15

THREAD_IN_STATE

0
1

Normal operation
The thread number for an operation comes from the state description rather than the
THREAD_CONFIG register (see GPIF_Modes for more information)

continued on next page

308

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.1

GPIF_CONFIG (continued)

13

DATA_COMP_TOGGLE

0
1

Comparator outputs true when bits match a target value.
Comparator outputs true when any of the unmasked bits change value.

12

CTRL_COMP_TOGGLE

0
1

Comparator outputs true when bits match a target value.
Comparator outputs true when any of the unmasked bits change value.

11

ADDR_COMP_TOGGLE

0
1

Comparator outputs true when bits match a target value.
Comparator outputs true when any of the unmasked bits change value.

10

ENDIAN

Endianness of interface when PP_MODE==0
0
Little Endian
1
Big Endian

8

SYNC

0
Operate in asynchronous mode.
1
Operate in synchronous mode.
These mode have different clocking structures.
GPIF_CONFIG.SYNC should be set to indicate synchronous or Asynchronous MODE before programming GPIF_BUS_CONFIG.DLE* and GPIF_BUS_CONFIG.ALE*

7

DOUT_POP_EN

0
1

rq_pop is a separate beta
Use update_dout (alpha) to also trigger rq_pop (which is normally beta)

6

DDR_MODE

0
1

Select 1X clock as the core clock
Select 2X clock as the core clock

5

CLK_OUT

Indicates whether to drive CLK pin with GPIF clock. No effect when CLK_SOURCE = 0 or PMMC
mode.
0
Do not output clock on CLK pin (typical of async mode)
1
Output clock on CLK pin (typical of sync master mode)

4

CLK_SOURCE

Indicates whether clock is sourced from GCTL or pin. Has no effect in PMMC mode.
0
External clock input on CLK pin
1
Internal clock generated from GCTL

3

CLK_INVERT

0
1

Normal clock polarity (clock on positive edge)
Inverted clock polarity (clock on negative edge)

2

DATA_COMP_ENABLE

0
1

Disable the data comparator
Enable the data comparator

1

ADDR_COMP_ENABLE

0
1

Disable the address comparator
Enable the address comparator

0

CTRL_COMP_ENABLE

0
1

Disable the control comparator
Enable the control comparator

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

309

10.7.2

GPIF_BUS_CONFIG
Bus Configuration Register

GPIF_BUS_CONFIG
b31

Bus Configuration Register
b30

b29

b28

0xE0014004

b27

b26

FIO1_CONF[3:0]

b25

b24

FIO0_CONF[3:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

ALE_PRESENT

CNTR_PRESENT

GPIF_BUS_CONFIG
b23

Bus Configuration Register
b20

b19

CE_CLKSTOP

INT_CTRL

DRQ_ASSERT_
MODE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

GPIF_BUS_CONFIG

DRQ_MODE[1:0]

Bus Configuration Register

b15

b14

b13

b12

b11

b10

b9

b8

FIO1_PRESENT

FIO0_PRESENT

DRQ_PRESENT

OE_PRESENT

DLE_PRESENT

WE_PRESENT

CE_PRESENT

ADR_CTRL[3]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

GPIF_BUS_CONFIG
b7

Bus Configuration Register
b4

ADR_CTRL[2:0]

b3

MUX_MODE

BUS_WIDTH[1:0]

b0

PIN_COUNT[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register specifies how the pins on the GPIF interface are distributed over data, address and control buses and which
special (hard-wired) functions are present on the control bus.

Bit

Name

Description

31:28

FIO1_CONF[3:0]

Designates control to be used to enable output drivers of FIO1 (CTRL[8])
0 to 3
Use the alpha 4-7 to switch FIO1 direction.
8 to 11 Use beta 0-3.

27:24

FIO0_CONF[3:0]

Designates control to be used to enable output drivers of FIO0 (CTRL[7])
0 to 3
Use the alpha 4 to 7 to switch FIO0 direction.
8 to 11 Use beta 0-3.

23

CE_CLKSTOP

0
1

Normal operation
CTRL[0] is CE; it should be used to clock gate most of GPIF when deasserted

22

INT_CTRL

0
1

Normal operation of INT pin
Override INT pin and connect to CTRL[15]

20

DRQ_ASSERT_MODE

0
1

Do nothing
Assert DRQ on rising edge of DMA_READY. Typical case, DRQ_MODE = 2, this bit 1.

continued on next page

310

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.2

GPIF_BUS_CONFIG (continued)

19:18

DRQ_MODE[1:0]

0
1
2
3

Assert DRQ on deassertion of DACK
Assert DRQ on assertion of DACK
Deassert DRQ on deassertion of DACK
Deassert DRQ on assertion of DACK

17

ALE_PRESENT

CTRL[10] is ALE used to latch address from the DQ lines.

16

CNTR_PRESENT

CTRL[9] is connected to the selected control counter bit instead of a control signal

15

FIO1_PRESENT

CTRL[8] is to be treated as I/O that is driven out when the alpha specified in FIO1_CONF is asserted
(ignore CTRL_BUS_DIRECTION)

14

FIO0_PRESENT

CTRL[7] is to be treated as I/O that is driven out when the alpha specified in FIO0_CONF is asserted
(ignore CTRL_BUS_DIRECTION)

13

DRQ_PRESENT

CTRL[4] is directly influenced by CTRL[3]/DACK as defined by DRQ_MODE
This setting also overrides the CTRL_BUS_SELECT selection for this pin, in favor of betas 'assert
drq' and 'deassert_drq'

12

OE_PRESENT

CTRL[2] is OE and should be used to tristate DQ lines.
If WE_PRESENT = 1 also, then OE will take precedence over WE. In other words, when WE is
asserted, then output drivers are off, regardless of value of OE input.

11

DLE_PRESENT

CTRL[1] is DLE and should be used to latch data from DQ lines
Can be used together with WE_PRESENT

10

WE_PRESENT

CTRL[1] is WE and should be used to disable DQ drivers
Can be used together with DLE_PRESENT

9

CE_PRESENT

CTRL[0] is CE and should be used to disable DQ drivers

8:5

ADR_CTRL[3:0]

Number of control lines overridden by address lines. Control signals CTRL[15] to CTRL[16ADR_CTRL] are not connected to pins. Instead those pins are designated as address signals. Which
address signals depends on the other mode fields above. In other words: if ADR_CTRL = 0 all CTRL
lines are connected to pins, if ADR_CTRL = 1, CTRL[15] is not connected and so on.

4

MUX_MODE

0
1

Address and data are separate lines.
Address is sampled from DQ, time multiplexed with data.

3:2

BUS_WIDTH[1:0]

0
1
2
3

DQ is 8b wide
DQ is 16b wide
DQ is 24b wide
DQ is 32b wide

1:0

PIN_COUNT[1:0]

Number of pins allocated to GPIF interface. Needs to be consistent with GCTL_IOMATRIX:
0
47-pin interface
1
43-pin interface
2
35-pin interface
3
31-pin interface

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

311

10.7.3

GPIF_BUS_CONFIG2
Bus Configuration Register #2

GPIF_BUS_CONFIG2
b31

Bus Configuration Register #2
b30

b29

b28

b27

0xE0014008
b26

b25

b24

STATE7[4:0]

GPIF_BUS_CONFIG2
b23

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b18

b17

b16

Bus Configuration Register #2
b22

b21

b20

b19

STATE6[4:0]

GPIF_BUS_CONFIG2
b15

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b10

b9

b8

Bus Configuration Register #2
b14

b13

b12

b11

STATE5[4:0]

GPIF_BUS_CONFIG2
b7

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b1

b0

Bus Configuration Register #2
b6

b5

b4

b3

b2

STATE_FROM_CTRL[2:0]
R/W

R/W

R/W

R

R

R

0

0

0

This register configures state number overrides directly using control signals CTRL[i] in the state number.

Bit

Name

Description

28:24

STATE7[4:0]

Lambda number to be used for state number bit 7

20:16

STATE6[4:0]

Lambda number to be used for state number bit 6

12:8

STATE5[4:0]

Lambda number to be used for state number bit 5

2:0

STATE_FROM_CTRL[1:0] 0
1,2,3
2,3
3

312

Normal operation
STATE7 indicates Lambda number to be used for state number bit 7
STATE6 indicates Lambda number to be used for state number bit 6
STATE5 indicates Lambda number to be used for state number bit 5

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.4

GPIF_AD_CONFIG
Address/Data Configuration Register

GPIF_AD_CONFIG
b31

Address/Data Configuration Register
b30

b29

b22

b21

GPIF_AD_CONFIG
b23

b28

b27

0xE001400C
b26

GPIF_AD_CONFIG

b20

b19

b18

b17

b16

ADDRESS_THREAD[1:0]

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

Address/Data Configuration Register
b14

b13

GPIF_AD_CONFIG
b7

b24

Address/Data Configuration Register
DATA_THREAD[1:0]

b15

b25

b12

b11

b10

b9

b8

AIN_DATA

DOUT_SELECT

R/W

R/W

R

R

0

0

b1

b0

Address/Data Configuration Register
b6

b5

AOUT_SELECT[1:0]

b4

b3

AIN_SELECT[1:0]

b2

A_OEN_CFG[1:0]

DQ_OEN_CFG[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Configuration for DQ lines into DQ, Address, control buses and serial modes.

Bit

Name

Description

19:18

DATA_THREAD[1:0]

Thread number to be used for data; only relevant when AIN_DATA = 1
When this register is used to select the thread it must have been initialized by firmware. When both
are used, ADDRESS_THREAD must be different from DATA_THREAD.

17:16

ADDRESS_THREAD[1:0]

Thread number to be used for addresses; only relevant when AIN_SELECT! = 0
When this register is used to select the thread it must have been initialized by firmware. When both
are used, ADDRESS_THREAD must be different from DATA_THREAD.

9

AIN_DATA

This field determines which thread number to use for data accesses:
0
Specified by A1:A0.
1
Specified by DATA_THREAD
If AIN_SELECT=0 this field also determines the thread number for which to change the active socket
on awq_push:
0
The active socket of thread A1:A0 is changed (3 bits only)
1
The active socket of thread DATA_THREAD is changed (full 5 bits)

8

DOUT_SELECT

0
1

Connect DOUT to the socket pointed to by AIN_DATA or EGRESS_DATA register (as
determined by beta 'register_access')
Connect DOUT to DATA_COUNTER

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

313

10.7.4

GPIF_AD_CONFIG (continued)

7:6

AOUT_SELECT[1:0]

0
1
2

Connect AOUT to ADDR_COUNTER
Connect AOUT to EGRESS_ADDRESS register
Connect AOUT to the socket pointed to by ADDRESS_THREAD register

5:4

AIN_SELECT[1:0]

0
1
2

Connect AIN to the active socket number of thread specified by AIN_DATA
Connect AIN to INGRESS_ADDRESS register
Connect AIN to the socket pointed to by ADDRESS_THREAD register

3:2

A_OEN_CFG[1:0]

Address lines (if there are any) are
0
Always outputs
1
Always inputs
2
Controlled by the beta: “a_oen”
3
Reserved

1:0

DQ_OEN_CFG[1:0]

Data lines are
0
Always outputs
1
Always inputs
2
Direction controlled by the alpha: “dq_oen”
3
Reserved
Note that CTRL[2] can be OE, controlling the data output drivers directly, overriding what's specified
here (this field should be set to 0 if that is used)

314

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.5

GPIF_STATUS
GPIF Status Register

GPIF_STATUS

GPIF Status Register

b31

b30

b29

b28

b27

0xE0014010
b26

b25

b24

INTERRUPT_STATE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIF_STATUS

GPIF Status Register

b23

b20

b19

IN_DATA_VALID[3:0]

EG_DATA_EMPTY[3:0]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

b14

b13

b9

b8

GPIF_STATUS

0xF

GPIF Status Register

b15

b12

b11

b10

WAVEFORM_BUSY CTRL_COMP_HIT DATA_COMP_HIT

GPIF_STATUS

R

R

R

R/W

R/W

R/W

0

0

0

GPIF Status Register

b7

b6

b5

b4

b3

b2

b1

b0

ADDR_COMP_
HIT

CTRL_COUNT_
HIT

DATA_COUNT_
HIT

ADDR_COUNT_
HIT

CRC_ERROR

SWITCH_TIMEOUT

GPIF_INTR

GPIF_DONE

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Live status bits. Most of these bits can trigger an interrupt on their rising edge (see GPIF_INTR).

Bit

Name

Description

31:24

INTERRUPT_STATE[7:0]

State that raised the interrupt through GPIF_INTR. Note that these bits do not have individual interrupt and mask bits in GPIF_INTR and GPIF_MASK.

23:20

IN_DATA_VALID[3:0]

Indicates corresponding INGRESS_DATA register is full.

19:16

EG_DATA_EMPTY[3:0]

Indicates corresponding EGRESS_DATA register is empty

10

WAVEFORM_BUSY

CPU tried to access waveform memory without clearing WAVEFORM_VALID

9

CTRL_COMP_HIT

Control comparator hits

8

DATA_COMP_HIT

Data comparator hits

7

ADDR_COMP_HIT

Address comparator hits

6

CTRL_COUNT_HIT

Control counter is at limit

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

315

10.7.5

GPIF_STATUS (continued)

5

DATA_COUNT_HIT

Data counter is at limit

4

ADDR_COUNT_HIT

Address counter is at limit

3

CRC_ERROR

Indicates that an incorrect CRC was received

2

SWITCH_TIMEOUT

Indicates that the SWITCH_TIMEOUT was reached (see WAVEFORM_SWITCH).
This bit clears when a new WAVEFORM_SWTICH is initiated.

1

GPIF_INTR

Indicates that GPIF state machine has raised an interrupt.

0

GPIF_DONE

1

316

GPIF has reached the DONE state. Nonsticky.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.6

GPIF_INTR
GPIF Interrupt Request Register

GPIF_INTR

GPIF Interrupt Request Register

b31

b30

b29

b22

b21

GPIF_INTR

b28

b27

0xE0014014
b26

b25

b24

b18

b17

b16

GPIF Interrupt Request Register

b23

b20

b19

IN_DATA_VALID[3:0]

EG_DATA_EMPTY[3:0]

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIF_INTR

GPIF Interrupt Request Register

b15

b12

b11

WAVEFORM_BUSY CTRL_COMP_HIT DATA_COMP_HIT

GPIF_INTR

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

0

0

0

GPIF Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

b0

ADDR_COMP_
HIT

CTRL_COUNT_
HIT

DATA_COUNT_
HIT

ADDR_COUNT_
HIT

CRC_ERROR

SWITCH_TIMEOUT

GPIF_INTR

GPIF_DONE

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

Interrupt request bits. Bits assert when corresponding bit in GPIF_STATUS asserts and must be cleared by software.

Bit

Name

Description

23:20

IN_DATA_VALID[3:0]

Interrupt request corresponding to same bit in GPIF_STATUS

19:16

EG_DATA_EMPTY[3:0]

Interrupt request corresponding to same bit in GPIF_STATUS

10

WAVEFORM_BUSY

Interrupt request corresponding to same bit in GPIF_STATUS

9

CTRL_COMP_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

8

DATA_COMP_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

7

ADDR_COMP_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

6

CTRL_COUNT_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

5

DATA_COUNT_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

4

ADDR_COUNT_HIT

Interrupt request corresponding to same bit in GPIF_STATUS

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

317

10.7.6

GPIF_INTR (continued)

3

CRC_ERROR

Interrupt request corresponding to same bit in GPIF_STATUS

2

SWITCH_TIMEOUT

Interrupt request corresponding to same bit in GPIF_STATUS

1

GPIF_INTR

Interrupt request corresponding to same bit in GPIF_STATUS

0

GPIF_DONE

Interrupt request corresponding to same bit in GPIF_STATUS

318

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.7

GPIF_INTR_MASK
GPIF Interrupt Mask Register

GPIF_INTR_MASK
b31

GPIF Interrupt Mask Register
b30

b29

b22

b21

GPIF_INTR_MASK
b23

b28

b27

0xE0014018
b26

b25

b24

b18

b17

b16

GPIF Interrupt Mask Register
b20

b19

IN_DATA_VALID[3:0]

EG_DATA_EMPTY[3:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIF_INTR_MASK
b15

GPIF Interrupt Mask Register
b12

b11

WAVEFORM_BUSY CTRL_COMP_HIT DATA_COMP_HIT

GPIF_INTR_MASK

R/W

R/W

R/W

R

R

R

0

0

0

GPIF Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

ADDR_COMP_
HIT

CTRL_COUNT_
HIT

DATA_COUNT_
HIT

ADDR_COUNT_
HIT

CRC_ERROR

SWITCH_TIMEOUT

GPIF_INTR

GPIF_DONE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Interrupt mask. Report interrupt to firmware only when corresponding bit in this register is set.

Bit

Name

Description

23:20

IN_DATA_VALID[3:0]

Mask bit that controls reporting of corresponding bit in GPIF_INTR

19:16

EG_DATA_EMPTY[3:0]

Mask bit that controls reporting of corresponding bit in GPIF_INTR

10

WAVEFORM_BUSY

Mask bit that controls reporting of corresponding bit in GPIF_INTR

9

CTRL_COMP_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

8

DATA_COMP_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

7

ADDR_COMP_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

6

CTRL_COUNT_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

5

DATA_COUNT_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

4

ADDR_COUNT_HIT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

319

10.7.7

GPIF_INTR (continued)

3

CRC_ERROR

Mask bit that controls reporting of corresponding bit in GPIF_INTR

2

SWITCH_TIMEOUT

Mask bit that controls reporting of corresponding bit in GPIF_INTR

1

GPIF_INTR

Mask bit that controls reporting of corresponding bit in GPIF_INTR

0

GPIF_DONE

Mask bit that controls reporting of corresponding bit in GPIF_INTR

320

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.8

GPIF_CTRL_BUS_DIRECTION
Control Bus In/Out Direction Register

GPIF_CTRL_BUS_DIRECTION
b31

b30

Control Bus In/Out Direction Register
b29

b28

b27

0xE0014024
b26

b25

b24

DIRECTION[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_CTRL_BUS_DIRECTION
b23

b22

Control Bus In/Out Direction Register
b21

b20

b19

DIRECTION[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_CTRL_BUS_DIRECTION
b15

b14

Control Bus In/Out Direction Register
b13

b12

b11

DIRECTION[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_BUS_DIRECTION
b7

b6

Control Bus In/Out Direction Register
b5

b4

DIRECTION[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Two bits specify type of each bit in the 16-bit CTRL/ADDR Bus. Settings specified here may be overridden by
GPIF_BUS_CONFIG bits.

Bit

Name

Description

31:0

DIRECTION[31:0]

Bit at (bit_number/2) has following direction:
00
Input
01
Output
10
Bidirectional I/O
11
Open drain I/O

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

321

10.7.9

GPIF_CTRL_BUS_DEFAULT
Control Bus Default Values Register

GPIF_CTRL_BUS_DEFAULT
b31

b30

Control Bus Default Values Register
b29

GPIF_CTRL_BUS_DEFAULT
b23

b22

b14

b27

0xE0014028
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Bus Default Values Register
b21

GPIF_CTRL_BUS_DEFAULT
b15

b28

b20

b19

Control Bus Default Values Register
b13

b12

DEFAULT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_BUS_DEFAULT
b7

b6

Control Bus Default Values Register
b5

b4

DEFAULT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Reset/initialization value for the CTRL[15:0] signals.

Bit

Name

Description

15:0

DEFAULT[15:0]

One bit for each CTRL signal indicating default value
0
Asserted (see POLARITY)
1
Deasserted (see POLARITY)

322

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.10

GPIF_CTRL_BUS_POLARITY
Control Bus SIgnal Polarity Register

GPIF_CTRL_BUS_POLARITY
b31

b30

Control Bus SIgnal Polarity Register
b29

GPIF_CTRL_BUS_POLARITY
b23

b22

b14

b27

0xE001402C
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Bus SIgnal Polarity Register
b21

GPIF_CTRL_BUS_POLARITY
b15

b28

b20

b19

Control Bus SIgnal Polarity Register
b13

b12

POLARITY[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_BUS_POLARITY
b7

b6

Control Bus SIgnal Polarity Register
b5

b4

POLARITY[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Polarity of each of the CTRL[15:0] signals.

Bit

Name

Description

15:0

POLARITY[15:0]

One bit for each CTRL signal indicating polarity
0
Asserted when 1
1
Asserted when 0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

323

10.7.11

GPIF_CTRL_BUS_TOGGLE
Control Bus Output Toggle Mode Register

GPIF_CTRL_BUS_TOGGLE
b31

b30

Control Bus Output Toggle Mode Register
b29

GPIF_CTRL_BUS_TOGGLE
b23

b22

b14

b27

0xE0014030
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Bus Output Toggle Mode Register
b21

GPIF_CTRL_BUS_TOGGLE
b15

b28

b20

b19

Control Bus Output Toggle Mode Register
b13

b12

TOGGLE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_BUS_TOGGLE
b7

b6

Control Bus Output Toggle Mode Register
b5

b4

TOGGLE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Polarity of each of the CTRL[15:0] signals.

Bit

Name

Description

15:0

TOGGLE[15:0]

One bit for each CTRL signal indicating toggle mode
0
Normal mode, set value from alpha/beta
1
Toggle mode, toggle value when alpha/beta is 1, do nothing when 0

324

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.12

GPIF_CTRL_BUS_SELECT
Control Bus Connection Matrix Register

There are 16 GPIF_CTRL_BUS_SELECT registers. The address of each is calculated as GPIF_CTRL_BUS_SELECT(x) =
0xE0014034 + (x*0x4). Hence GPIF_CTRL_BUS_SELECT(0) is at address 0xE0014034, GPIF_CTRL_BUS_SELECT(1) is
at address 0xE0014034 + 0x4 and so on. The definition of each of these is the same.
GPIF_CTRL_BUS_SELECT
b31

b30

Control Bus Connection Matrix Register
b29

GPIF_CTRL_BUS_SELECT
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

b10

b9

b8

b2

b1

b0

Control Bus Connection Matrix Register
b13

GPIF_CTRL_BUS_SELECT
b7

b27

Control Bus Connection Matrix Register
b21

GPIF_CTRL_BUS_SELECT
b15

b28

0xE0014034

b12

b11

Control Bus Connection Matrix Register
b5

b4

b3

OMEGA_INDEX[4:0]
R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

These registers specify which of the alphas, betas or flags are to appear on each of CTRL[15:0]. They are only honored if the
CTRL line is declared as an output.

Bit

Name

Description

4:0

OMEGA_INDEX[4:0]

For each omega, 5-bits specify what is driven at to the output:
0–3
Connect to alpha 0–3
8–11
Connect to beta 0–3
16–19 Empty/Full flags for thread 0–3
20–23 Partial flag for thread 0–3
24
Empty/Full flag for current thread
25
Partial flag for current thread
26
PP_DRQR5 signal (see PP_DRQR5_MASK)
27–31 Connected to logic 0 (cannot be used together with CTRL_BUS_TOGGLE)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

325

10.7.13

GPIF_CTRL_COUNT_CONFIG
Control Counter Configuration Register

GPIF_CTRL_COUNT_CONFIG
b31

Control Counter Configuration Register

b30

b29

GPIF_CTRL_COUNT_CONFIG
b23

b21

0xE0014074
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

Control Counter Configuration Register

b14

b13

GPIF_CTRL_COUNT_CONFIG
b7

b27

Control Counter Configuration Register

b22

GPIF_CTRL_COUNT_CONFIG
b15

b28

b12

b11

Control Counter Configuration Register

b6

b5

b4

CONNECT[3:0

b3

b2

b1

b0

SW_RESET

RELOAD

DOWN_UP

ENABLE

R/W

R/W

R/W

R/W

R/W1S

R/W

R/W

R/W

R

R

R

R

R/W0C

R

R

R

0

0

0

0

0

1

1

0

Configures the 16-bit control counter

Bit

Name

Description

7:4

CONNECT[3:0]

Connect the specified bit of this counter to CTRL[9]

3

SW_RESET

0
1

Hardware write 0 to signal that counter has reset
Software writes one to reset/load the counter

2

RELOAD

0
1

Saturate on reaching the limit
Reload on reaching the limit

1

DOWN_UP

0
1

Down count
Up count

0

ENABLE

0
1

This counter is not used.
This counter is used.

326

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.14

GPIF_CTRL_COUNT_RESET
Control Counter Reset Register

GPIF_CTRL_COUNT_RESET
b31

b30

Control Counter Reset Register
b29

GPIF_CTRL_COUNT_RESET
b23

b22

b14

b27

0xE0014078
b26

b25

b24

b18

b17

b16

b10

b9

b8

Control Counter Reset Register
b21

GPIF_CTRL_COUNT_RESET
b15

b28

b20

b19

Control Counter Reset Register
b13

b12

b11

RESET_LOAD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_CTRL_COUNT_RESET
b7

b6

Control Counter Reset Register
b5

b4

b3

RESET_LOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Configures the reset/load value of the control counter.

Bit

Name

Description

15:0

RESET_LOAD[15:0]

Reset counter to this value. Reload to this value when limit is reached if specified.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

327

10.7.15

GPIF_CTRL_COUNT_LIMIT
Control Counter Limit Register

GPIF_CTRL_COUNT_LIMIT
b31

b30

Control Counter Reset Register
b29

GPIF_CTRL_COUNT_LIMIT
b23

b22

b14

b27

0xE001407C
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Counter Reset Register
b21

GPIF_CTRL_COUNT_LIMIT
b15

b28

b20

b19

Control Counter Reset Register
b13

b12

LIMIT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

GPIF_CTRL_COUNT_LIMIT
b7

b6

Control Counter Reset Register
b5

b4

LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

Configures the limit value of the control counter.

Bit

Name

Description

15:0

LIMIT[15:0]

Stop counting when counter reaches this value

328

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.16

GPIF_ADDR_COUNT_CONFIG
Address Counter Configuration Register

GPIF_ADDR_COUNT_CONFIG
b31

Address Counter Configuration Register

b30

b29

GPIF_ADDR_COUNT_CONFIG
b23

b27

0xE0014080
b26

b25

b24

b18

b17

b16

b10

b9

b8

Address Counter Configuration Register

b22

b21

GPIF_ADDR_COUNT_CONFIG
b15

b28

b20

b19

Address Counter Configuration Register

b14

b13

b12

b11

INCREMENT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

GPIF_ADDR_COUNT_CONFIG
b7

Address Counter Configuration Register

b6

b5

b4

b3

b2

b1

b0

DOWN_UP

SW_RESET

RELOAD

ENABLE

R/W

R/W1S

R/W

R/W

R

R/W0C

R

R

1

0

1

0

Configures the 16-bit address counter.

Bit

Name

Description

7:0

INCREMENT[7:0]

8-bit quantity to be added/subtracted to the counter on each clock

3

DOWN_UP

0
1

Down count
Up count

2

SW_RESET

0
1

Hardware write 0 to signal that counter has reset
Software writes one to reset/load the counter

1

RELOAD

0
1

Saturate on reaching the limit
Reload on reaching the limit

0

ENABLE

0
1

This counter is not used.
This counter is used.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

329

10.7.17

GPIF_ADDR_COUNT_RESET
Address Counter Reset Register

GPIF_ADDR_COUNT_RESET
b31

b30

Address Counter Reset Register
b29

b28

b27

0xE0014084
b26

b25

b24

RESET_LOAD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_ADDR_COUNT_RESET
b23

b22

Address Counter Reset Register
b21

b20

b19

RESET_LOAD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_ADDR_COUNT_RESET
b15

b14

Address Counter Reset Register
b13

b12

b11

RESET_LOAD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_ADDR_COUNT_RESET
b7

b6

Address Counter Reset Register
b5

b4

b3

RESET_LOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the reset/reload value of the data counter.

Bit

Name

Description

31:0

RESET_LOAD[31:0]

Reset counter to this value. Reload to this value when limit is reached if specified.

330

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.18

GPIF_ADDR_COUNT_LIMIT
Address Counter Limit Register

GPIF_ADDR_COUNT_LIMIT
b31

b30

Address Counter Limit Register
b29

b28

0xE0014088

b27

b26

b25

b24

LIMIT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b19

b18

b17

b16

GPIF_ADDR_COUNT_LIMIT
b23

b22

Address Counter Limit Register
b21

b20

LIMIT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b11

b10

b9

b8

GPIF_ADDR_COUNT_LIMIT
b15

b14

Address Counter Limit Register
b13

b12

LIMIT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

GPIF_ADDR_COUNT_LIMIT
b7

b6

Address Counter Limit Register
b5

b4

LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

Configures the limit value of the address counter

Bit

Name

Description

31:0

LIMIT[31:0]

Stop counting when counter reaches this value.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

331

10.7.19

GPIF_STATE_COUNT_CONFIG
State Counter Configuration Register

GPIF_STATE_COUNT_CONFIG
b31

State Counter Configuration Register

b30

b29

GPIF_STATE_COUNT_CONFIG
b23

b21

0xE001408C
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

State Counter Configuration Register

b14

b13

GPIF_STATE_COUNT_CONFIG
b7

b27

State Counter Configuration Register

b22

GPIF_STATE_COUNT_CONFIG
b15

b28

b12

b11

State Counter Configuration Register

b6

b5

b4

b3

b2

b1

b0

SW_RESET

ENABLE

R/W1S

R/W

R/W0C

R

0

0

Configures the first 16-bit state counter.

Bit

Name

Description

1

SW_RESET

0
1

Hardware write 0 to signal that counter has reset
Software writes one to reset/load the counter

0

ENABLE

0
1

This counter is not used.
This counter is used.

332

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.20

GPIF_STATE_COUNT_LIMIT
State Counter Limit Register

GPIF_STATE_COUNT_LIMIT
b31

b30

State Counter Limit Register
b29

GPIF_STATE_COUNT_LIMIT
b23

b22

b14

b27

0xE0014090
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

State Counter Limit Register
b21

GPIF_STATE_COUNT_LIMIT
b15

b28

b20

b19

State Counter Limit Register
b13

b12

LIMIT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

GPIF_STATE_COUNT_LIMIT
b7

b6

State Counter Limit Register
b5

b4

LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

Configures the reset/load and limit values of counters.

Bit

Name

Description

15:0

LIMIT[15:0]

Generate an output tick, reset and start counting again if enabled when this limit is reached.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

333

10.7.21

GPIF_DATA_COUNT_CONFIG
Data Counter Configuration Register

GPIF_DATA_COUNT_CONFIG
b31

Data Counter Configuration Register

b30

b29

GPIF_DATA_COUNT_CONFIG
b23

b27

0xE0014094
b26

b25

b24

b18

b17

b16

b10

b9

b8

Data Counter Configuration Register

b22

b21

GPIF_DATA_COUNT_CONFIG
b15

b28

b20

b19

Data Counter Configuration Register

b14

b13

b12

b11

INCREMENT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

GPIF_DATA_COUNT_CONFIG
b7

Data Counter Configuration Register

b6

b5

b4

b3

b2

b1

b0

DOWN_UP

SW_RESET

RELOAD

ENABLE

R/W

R/W1S

R/W

R/W

R

R/W0C

R

R

1

0

1

0

Configures the 32-bit data counter.

Bit

Name

Description

7:0

INCREMENT[7:0]

8-bit quantity to be added/subtracted to the counter on each clock

3

DOWN_UP

0
1

Down count
Up count

2

SW_RESET

0
1

Hardware write 0 to signal that counter has reset
Software writes one to reset/load the counter

1

RELOAD

0
1

Saturate on reaching the limit
Reload on reaching the limit

0

ENABLE

0
1

This counter is not used.
This counter is used.

334

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.22

GPIF_DATA_COUNT_RESET
Data Counter Reset Register

GPIF_DATA_COUNT_RESET
b31

b30

Data Counter Reset Register
b29

b28

b27

0xE0014098
b26

b25

b24

RESET_LOAD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_DATA_COUNT_RESET
b23

b22

Data Counter Reset Register
b21

b20

b19

RESET_LOAD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_DATA_COUNT_RESET
b15

b14

Data Counter Reset Register
b13

b12

b11

RESET_LOAD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_DATA_COUNT_RESET
b7

b6

Data Counter Reset Register
b5

b4

b3

RESET_LOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the reset/reload value of the data counter.

Bit

Name

Description

31:0

RESET_LOAD[31:0]

Reset counter to this value. Reload to this value when limit is reached if specified.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

335

10.7.23

GPIF_DATA_COUNT_LIMIT
Data Counter Limit Register

GPIF_DATA_COUNT_LIMIT
b31

b30

Data Counter Limit Register
b29

b28

0xE001409C

b27

b26

b25

b24

LIMIT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b19

b18

b17

b16

GPIF_DATA_COUNT_LIMIT
b23

b22

Data Counter Limit Register
b21

b20

LIMIT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b11

b10

b9

b8

GPIF_DATA_COUNT_LIMIT
b15

b14

Data Counter Limit Register
b13

b12

LIMIT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

GPIF_DATA_COUNT_LIMIT
b7

b6

Data Counter Limit Register
b5

b4

LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

Sets the limit value of the data counter.

Bit

Name

Description

31:0

LIMIT[31:0]

Reload data counter if this limit is reached and reload is enabled.

336

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.24

GPIF_CTRL_COMP_VALUE
Control Comparator Value Register

GPIF_CTRL_COMP_VALUE
b31

b30

Control Comparator Value Register
b29

GPIF_CTRL_COMP_VALUE
b23

b22

b14

b27

0xE00140A0
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Comparator Value Register
b21

GPIF_CTRL_COMP_VALUE
b15

b28

b20

b19

Control Comparator Value Register
b13

b12

VALUE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_COMP_VALUE
b7

b6

Control Comparator Value Register
b5

b4

VALUE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the target value for the 16-bit control-bus comparator.

Bit

Name

Description

15:0

VALUE[15:0]

Output true when CTRL bus matches this value

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

337

10.7.25

GPIF_CTRL_COMP_MASK
Control Comparator Mask Register

GPIF_CTRL_COMP_MASK
b31

Control Comparator Mask Register

b30

b29

GPIF_CTRL_COMP_MASK
b23

b27

0xE00140A4
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Control Comparator Mask Register

b22

b21

GPIF_CTRL_COMP_MASK
b15

b28

b20

b19

Control Comparator Mask Register

b14

b13

b12

MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_CTRL_COMP_MASK
b7

Control Comparator Mask Register

b6

b5

b4

MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the comparison mask for the 16-bit control-bus comparator.

Bit

Name

Description

15:0

MASK[15:0]

0
1

338

Bit at this bit position is a don't-care for comparison
Bit at this bit position in the CTRL bus is to be used in comparison

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.26

GPIF_DATA_COMP_VALUE
Data Comparator Value Register

GPIF_DATA_COMP_VALUE
b31

b30

Data Comparator Value Register
b29

b28

0xE00140A8

b27

b26

b25

b24

VALUE[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

GPIF_DATA_COUNT_LIMIT
b23

b22

Data Counter Limit Register
b21

b20

VALUE[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

GPIF_DATA_COUNT_LIMIT
b15

b14

Data Counter Limit Register
b13

b12

VALUE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_DATA_COUNT_LIMIT
b7

b6

Data Counter Limit Register
b5

b4

VALUE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the target value for the 32-bit data comparator.

Bit

Name

Description

31:0

VALUE[31:0]

Output true when Data bus matches this value.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

339

10.7.27

GPIF_DATA_COMP_MASK
Data Comparator Mask Register

GPIF_DATA_COMP_MASK
b31

Data Comparator Mask Register

b30

b29

b28

0xE00140AC

b27

b26

b25

b24

MASK[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

GPIF_DATA_COMP_MASK
b23

Data Comparator Mask Register

b22

b21

b20

MASK[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

GPIF_DATA_COMP_MASK
b15

Data Comparator Mask Register

b14

b13

b12

MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_DATA_COMP_MASK
b7

Data Comparator Mask Register

b6

b5

b4

MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the comparison mask for the 32-bit data comparator.

Bit

Name

Description

31:0

MASK[31:0]

0
1

340

Bit at this bit position is a don't-care for comparison
Bit at this bit position in the Data bus is to be used in comparison

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.28

GPIF_ADDR_COMP_VALUE
Address Comparator Value Register

GPIF_ADDR_COMP_VALUE
b31

b30

Address Comparator Value Register
b29

b28

0xE00140B0

b27

b26

b25

b24

VALUE[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

GPIF_ADDR_COMP_VALUE
b23

b22

Address Comparator Value Register
b21

b20

VALUE[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

GPIF_ADDR_COMP_VALUE
b15

b14

Address Comparator Value Register
b13

b12

VALUE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_ADDR_COMP_VALUE
b7

b6

Address Comparator Value Register
b5

b4

VALUE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the target value for the 32-bit address comparator.

Bit

Name

Description

31:0

VALUE[31:0]

Output true when Data bus matches this value.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

341

10.7.29

GPIF_ADDR_COMP_MASK
Address Comparator Mask Register

GPIF_ADDR_COMP_MASK
b31

Address Comparator Mask Register

b30

b29

b28

0xE00140B4

b27

b26

b25

b24

MASK[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

GPIF_ADDR_COMP_MASK
b23

Address Comparator Mask Register

b22

b21

b20

MASK[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

GPIF_ADDR_COMP_MASK
b15

Address Comparator Mask Register

b14

b13

b12

MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_ADDR_COMP_MASK
b7

Address Comparator Mask Register

b6

b5

b4

MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Sets the comparison mask for the 32-bit data comparator.

Bit

Name

Description

31:0

MASK[31:0]

0
1

342

Bit at this bit position is a don't-care for comparison
Bit at this bit position in the CTRL bus is to be used in comparison

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.30

GPIF_DATA_CTRL
Data Control Register

GPIF_DATA_CTRL
b31

Data Control Register
b30

b29

b22

b21

b14

b13

GPIF_DATA_CTRL
b23

b27

0xE00140B8
b26

b25

b24

b18

b17

b16

b10

b9

b8

Data Control Register

GPIF_DATA_CTRL
b15

b28

b20

b19

Data Control Register
b12

b11

EG_ADDR_VALID[3:0]

IN_ADDR_VALID[3:0]

R/W1S

R/W1S

R/W1S

R/W1S

R/W1C

R/W1C

R/W1C

R/W1C

R/W0C

R/W0C

R/W0C

R/W0C

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIF_DATA_CTRL
b7

Data Control Register
b4

b3

EG_DATA_VALID[3:0]

IN_DATA_VALID[3:0]

R/W1S

R/W1S

R/W1S

R/W1S

R/W1C

R/W1C

R/W1C

R/W1C

R/W0C

R/W0C

R/W0C

R/W0C

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

1

0

1

0

Configures and controls flow of data through GPIF_INGRESS_DATA/EGRESS_DATA registers. Provides valid flags for the
data registers associated with the four threads.

Bit

Name

Description

15:12

EG_ADDR_VALID[3:0]

Software writes 1 to indicate a valid word is present in the address register. Hardware writes 0 to indicate that the data is used and new word can be written.

11:8

IN_ADDR_VALID[3:0]

Indicates address available in INGRESS_ADDRESS. Cleared by software when address processed.

7:4

EG_DATA_VALID[3:0]

Software writes 1 to indicate a valid word is present in the address register. Hardware writes 0 to indicate that the data is used and new word can be written.

3:0

IN_DATA_VALID[3:0]

Indicates data available in INGRESS_DATA. Cleared by software when data processed.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

343

10.7.31

GPIF_INGRESS_DATA
Socket Ingress Data Register

There are four GPIF_INGRESS_DATA registers. The address of each is calculated as GPIF_INGRESS_DATA(x) =
0xE00140BC + (x*0x4). Hence GPIF_INGRESS_DATA(0) is at address 0xE00140BC, GPIF_INGRESS_DATA(1) is at
address 0xE00140BC + 0x4 and so on. The definition of each of these is the same.
GPIF_INGRESS_DATA
b31

Socket Ingress Data Register
b30

b29

b28

b27

0xE00140BC
b26

b25

b24

DATA[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIF_INGRESS_DATA
b23

Socket Ingress Data Register
b20

b19

DATA[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIF_INGRESS_DATA
b15

Socket Ingress Data Register
b12

b11

DATA[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIF_INGRESS_DATA
b7

Socket Ingress Data Register
b4

b3

DATA[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Holds ingress data for the active socket in a thread.

Bit

Name

Description

31:0

DATA[31:0]

Ingress Data. This register will hold only one word of GPIF_BUS_CONFIG.BUS_WIDTH. No packing/
unpacking is done. MSBs will be 0.

344

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.32

GPIF_EGRESS_DATA
Socket Egress Data Register

There are four GPIF_EGRESS_DATA registers. The address of each is calculated as GPIF_EGRESS_DATA(x) =
0xE00140CC + (x*0x4). Hence GPIF_EGRESS_DATA(0) is at address 0xE00140CC, GPIF_EGRESS_DATA(1) is at
address 0xE00140CC + 0x4 and so on. The definition of each of these is the same.
GPIF_EGRESS_DATA
b31

Socket Egress Data Register
b30

b29

b28

0xE00140CC

b27

b26

b25

b24

DATA[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

GPIF_EGRESS_DATA
b23

Socket Egress Data Register
b20

DATA[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

GPIF_EGRESS_DATA
b15

Socket Egress Data Register
b12

DATA[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

GPIF_EGRESS_DATA
b7

Socket Egress Data Register
b4

DATA[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Holds egress data for the active socket in a thread.

Bit

Name

Description

31:0

DATA[31:0]

Egress data. This register will hold only one word of GPIF_BUS_CONFIG.BUS_WIDTH. No packing/
unpacking is done. MSBs are ignored.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

345

10.7.33

GPIF_INGRESS_ADDRESS
Thread Ingress Address Register

There are four GPIF_INGRESS_ADDRESS registers. The address of each is calculated as GPIF_INGRESS_ADDRESS(x) =
0xE00140DC + (x*0x4). Hence GPIF_INGRESS_ADDRESS(0) is at address 0xE00140DC, GPIF_INGRESS_ADDRESS(1)
is at address 0xE00140DC + 0x4 and so on. The definition of each of these is the same.
GPIF_INGRESS_ADDRESS
b31

b30

Thread Ingress Address Register
b29

b28

b27

0xE00140DC
b26

b25

b24

ADDRESS[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_INGRESS_ADDRESS
b23

b22

Thread Ingress Address Register
b21

b20

b19

ADDRESS[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_INGRESS_ADDRESS
b15

b14

Thread Ingress Address Register
b13

b12

b11

ADDRESS[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_INGRESS_ADDRESS
b7

b6

Thread Ingress Address Register
b5

b4

b3

ADDRESS[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Holds ingress address for the active socket in a thread.

Bit

Name

Description

31:0

ADDRESS[31:0]

Ingress address

346

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.34

GPIF_EGRESS_ADDRESS
Thread Egress Address Register

There are four GPIF_EGRESS_ADDRESS registers. The address of each is calculated as GPIF_EGRESS_ADDRESS(x) =
0xE00140EC + (x*0x4). Hence GPIF_EGRESS_ADDRESS(0) is at address 0xE00140EC, GPIF_EGRESS_ADDRESS(1) is
at address 0xE00140EC + 0x4 and so on. The definition of each of these is the same.
GPIF_EGRESS_ADDRESS
b31

b30

Thread Egress Address Register
b29

b28

b27

0xE00140EC
b26

b25

b24

ADDRESS[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_EGRESS_ADDRESS
b23

b22

Thread Egress Address Register
b21

b20

b19

ADDRESS[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_EGRESS_ADDRESS
b15

b14

Thread Egress Address Register
b13

b12

b11

ADDRESS[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

GPIF_EGRESS_ADDRESS
b7

b6

Thread Egress Address Register
b5

b4

ADDRESS[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Holds egress address for the active socket in a thread.

Bit

Name

Description

31:0

ADDRESS[31:0]

Egress address

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

347

10.7.35

GPIF_THREAD_CONFIG
Thread Configuration Register

There are four GPIF_THREAD_CONFIG registers. The address of each is calculated as GPIF_THREAD_CONFIG(x) =
0xE00140FC + (x*0x4). Hence GPIF_THREAD_CONFIG(0) is at address 0xE00140FC, GPIF_THREAD_CONFIG(1) is at
address 0xE00140FC + 0x4 and so on. The definition of each of these is the same.
GPIF_THREAD_CONFIG
b31

b30

Thread Configuration Register
b29

b28

b27

ENABLE

0xE00140FC
b26

b25

b24

WATERMARK[13:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

b18

b17

b16

0

GPIF_THREAD_CONFIG
b23

b22

Thread Configuration Register
b21

b20

b19

WATERMARK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

1

GPIF_THREAD_CONFIG
b15

b14

Thread Configuration Register
b13

b12

b11

BURST_SIZE[3:0]
R/W

R/W

R/W

R/W

R

R

R

R

b1

b0

4

GPIF_THREAD_CONFIG
b7

b6

Thread Configuration Register
b5

b4

b3

WM_CFG

b2

THREAD_SOCK[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R

R/W

R/W

R/W

R/W

R/W

0

0

1

0

1

0

Configures the active socket and thread watermark. (All sockets behind the thread share the watermark). The hardware gets
the status and direction of the sockets from the adapter.The watermark signal is the limit hit indicator of a counter that counts
read/write accesses that happen on the interface. The limit of this counter is programmed by the hardware to “end of usable
space” and is reset to 0 by PIB hardware as dma_ready (available flag) goes from 0->1.

Bit

Name

Description

31

ENABLE

Enables the thread controller for operation. Can be set by firmware after initializing THREAD_SOCK
and other fields. Will be set by hardware when THREAD_SOCK is written to by hardware.

29:16

WATERMARK[13:0]

Watermark position. Indicates number words that would be subtracted from the end of usable space/
data. Watermark needs to be programmed to a value greater than the round trip flag latency of the
system.
This latency is a sum of three quantities namely (1) FX3 latency between seeing the end of the last
burst that completely fills the buffer to the time the full/empty flag updates (can be calculated from
generic gpif params), (2). Expected time of arrival of a flow control signal that would prevent the AP
from issuing the next burst (as measured from the end of the burst) (3). Any additional group latency
between the APs dma controller logic and the interface pins in both directions.

continued on next page

348

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.35

GPIF_THREAD_CONFIG (continued)
“end of usable space/data” is calculated using one of the equations depending on the context. (1) For
normal write transfers in either PP modes, this is the size of the buffer to be produced into. (2) For
normal read transfers in either PP modes, this is the byte count of the buffer to be consumed. (3) For
partial buffer read or write transfers in PP mode 1, this is the value of written by AP into the
PP_DMA_SIZE register rounded up to an integral number of BURSTSIZE quanta.

11:8

BURST_SIZE[3:0]

Log2 of burst size (1: 2 words, 2: 4 words, etc). Programmed to support systems that work with fixed
burst sizes. A burst is defined as a portion of transfer that unconditionally completes after it is initiated. The system must always transfer an entire burst before responding to a change in a partial flag.
In transfers that involve short packet, the PIB hardware will automatically append zeros/truncate data
to do its part in preserving the above mentioned definition of burst. Burst size is a power of 2 and
must be programmed to a value greater than watermark when partial flag is used.Buffer sizes used
should be integral multiple of the burst size. Maximum value is 14. When value is >0, any socket
switching must occur on 8 byte boundaries.Besides, this field needs to be programmed to a non-zero
value to support bandwidth>200MBps on P-Port.

7

WM_CFG

0
1

4:0

THREAD_SOCK[4:0]

Assert partial flag when number of samples (remaining available for reading/writing) is less
than or equal to the watermark.
Assert when samples are more than the watermark.

Active Socket Number for this thread.
Can be written by software for fixed socket assignment.(all threads)
Can be modified by hardware as result of PP_DMA_XFER accesses (only for thread 0)
Can be modified by hardware as result of alpha 'sample AIN' (all threads. Hardware can only modify
bits [4:2] of this field)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

349

10.7.36

GPIF_LAMBDA_STAT
Lambda Status Register

GPIF_LAMBDA_STAT
b31

Lambda Status Register
b30

b29

b28

b27

0xE001410C
b26

b25

b24

LAMBDA[31:24]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

b22

b21

b18

b17

b16

GPIF_LAMBDA_STAT
b23

Lambda Status Register
b20

b19

LAMBDA[23:16]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

b14

b13

b10

b9

b8

GPIF_LAMBDA_STAT
b15

Lambda Status Register
b12

b11

LAMBDA[15:8]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

b6

b5

b2

b1

b0

GPIF_LAMBDA_STAT
b7

Lambda Status Register
b4

b3

LAMBDA[7:0]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0x10000000

Provides the current state of the 32 Lambdas (inputs).

Bit

Name

Description

31:0

LAMBDA[31:0]

Current value of the Lambda inputs

350

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.37

GPIF_ALPHA_STAT
Alpha Status Register

GPIF_ALPHA_STAT
b31

Alpha Status Register
b30

b29

b22

b21

b14

b13

b6

b5

GPIF_ALPHA_STAT
b23

0xE0014110
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

b0

Alpha Status Register

GPIF_ALPHA_STAT
b7

b27

Alpha Status Register

GPIF_ALPHA_STAT
b15

b28

b12

b11

Alpha Status Register
b4

b3

ALPHA[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

1

0

1

0

Provides the current state of the 8 Alphas (state machine early outputs).

Bit

Name

Description

7:0

ALPHA[7:0]

Current value of the Alpha signals

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

351

10.7.38

GPIF_BETA_STAT
Beta Status Register

GPIF_BETA_STAT
b31

Beta Status Register
b30

b29

b28

b27

0xE0014114
b26

b25

b24

BETA[31:24]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIF_BETA_STAT
b23

Beta Status Register
b20

b19

BETA[23:16]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIF_BETA_STAT
b15

Beta Status Register
b12

b11

BETA[15:8]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIF_BETA_STAT
b7

Beta Status Register
b4

b3

BETA[7:0]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0

0

0

0

0

0

0

0

Provides the current state of the 32 Betas (state machine late outputs).

Bit

Name

Description

31:0

BETA[31:0]

Current value of the Beta signals

352

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.39

GPIF_WAVEFORM_CTRL_STAT
Waveform Program Control Register

GPIF_WAVEFORM_CTRL_STAT
b31

Waveform Program Control Register

b30

b29

b28

0xE0014118

b27

b26

b25

b24

CURRENT_STATE[7:0]
R

R

R

R

R

R

R

R

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIF_DATA_CTRL
b23

Data Control Register
b20

b19

ALPHA_INIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b9

b8

GPIF_DATA_CTRL
b15

Data Control Register
b12

b11

b10

CPU_LAMBDA

GPIF_DATA_CTRL
b7

GPIF_STAT[2:0]

R/W

R

R

R

R

R/w

R/w

R/w

0

0

0

0

b2

b1

b0

PAUSE

WAVEFORM_VALI
D

R/W

R/W

R

R

0

0

Data Control Register
b6

b5

b4

b3

Offers the facility to program new waveforms to GPIF. Provides current status of GPIF.

Bit

Name

Description

31:24

CURRENT_STATE[7:0]

Current state of GPIF. Always updated.

23:16

ALPHA_INIT[7:0]

Initial values for alpha outputs. These are loaded into the alpha registers when GPIF execution starts
(first WAVEFORM_SWITCH) is set.

11

CPU_LAMBDA

Visible to the state machine as lambda 30.

10:8

GPIF_STAT[2:0]

0
1
2
3
4
5
6
7

1

PAUSE

Write 1 here to pause GPIF. 0 to resume where left off.

0

WAVEFORM_VALID

0

Waveform is not valid (Initial state or WAVEFORM_VALID is cleared)

GPIF is armed (WAVEFORM_VALID is set)
GPIF is running (using WAVEFORM_SWITCH)
GPIF is done (encountered DONE_STATE)
GPIF is paused (PAUSE = 0)
GPIF is switching (waiting for timeout/terminal state)
An error occurred

Waveforms are no longer valid, stop operation and return outputs to default state

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

353

1

354

The waveform memory is consistent and valid.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.40

GPIF_WAVEFORM_SWITCH
Waveform Switch Control Register

GPIF_WAVEFORM_SWITCH
b31

b30

Waveform Switch Control Register
b29

b28

0xE001411C

b27

b26

b25

b24

DONE_STATE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_WAVEFORM_SWITCH
b23

b22

Waveform Switch Control Register
b21

b20

b19

DESTINATION_STATE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_WAVEFORM_SWITCH
b15

b14

Waveform Switch Control Register
b13

b12

b11

TERMINAL_STATE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

SWITCH_NOW

DONE_ENABLE

WAVEFORM_
SWITCH

GPIF_WAVEFORM_SWITCH
b7

b6

TERMINATED

TIMEOUT_
REACHED

Waveform Switch Control Register
b5

b4

b3

TIMEOUT_MODE[2:0]

R

R

R/W

R/W

R/W

R/W

R/W

R/W1S

R/W

R/W

R

R

R

R

R

R/W0C

0

0

0

0

0

0

0

0

Offers the facility to program new waveforms to GPIF. Provides current status of GPIF.

Bit

Name

Description

31:24

DONE_STATE[7:0]

Signal GPIF_DONE upon reaching this state.

23:16

DESTINATION_STATE[7:0]

State to jump to, may be the initial state of the new waveform.

15:8

TERMINAL_STATE[7:0]

State from which to initiate the switch. Corresponds to idle states of waveforms.

7

TERMINATED

Indicates that the TERMINAL_STATE was reached since last WAVEFORM_SWITCH

6

TIMEOUT_REACHED

Indicates that timeout was reached since last WAVEFORM_SWITCH

5:3

TIMEOUT_MODE[2:0]

0
1
2
3
4

Timeout disable
Timeout for reaching TERMINAL_STATE. Interrupt on timeout
Timeout for reaching DONE_STATE. Interrupt on timeout
Timeout for reaching TERMINAL STATE. Force switch on timeout.
Timeout for hanging in current state. Timer resets on each transition.

2

SWITCH_NOW

1

Do not wait for TERMINAL_STATE, switch right away

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

355

10.7.40

GPIF_WAVEFORM_SWITCH (continued)

1

DONE_ENABLE

1

0

WAVEFORM_SWITCH

Software sets this bit after programming the switch register. Hardware clears it after the switch is
complete.

356

Enable checking for DONE_STATE and generation of GPIF_DONE.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.41

GPIF_WAVEFORM_SWITCH_TIMEOUT
Waveform Timeout Register

GPIF_WAVEFORM_SWITCH_TIMEOUT
b31

b30

Waveform Timeout Register
b29

b28

b27

0xE0014120
b26

b25

b24

RESET_LOAD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

GPIF_WAVEFORM_SWITCH_TIMEOUT
b23

b22

Waveform Timeout Register
b21

b20

b19

RESET_LOAD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

GPIF_WAVEFORM_SWITCH_TIMEOUT
b15

b14

Waveform Timeout Register
b13

b12

b11

RESET_LOAD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_WAVEFORM_SWITCH_TIMEOUT
b7

b6

Waveform Timeout Register
b5

b4

b3

RESET_LOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Defines the timeout counter (in the number of state machine clock) for waveform switching. Effective only when
TIMEOUT_ENABLE is set.

Bit

Name

Description

31:0

RESET_LOAD[31:0]

Timeout value

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

357

10.7.42

GPIF_CRC_CONFIG
CRC Configuration Register

GPIF_CRC_CONFIG

CRC Configuration Register

b31

b30

b29

b28

b22

b21

b20

CRC_ERROR

BYTE_ENDIAN

BIT_ENDIAN

b27

0xE0014124
b26

b25

b24

b18

b17

b16

b10

b9

b8

ENABLE
R/W
R
0

GPIF_CRC_CONFIG

CRC Configuration Register

b23

R

R/W

R/W

R/W

R

R

0

0

0

b14

b13

GPIF_CRC_CONFIG

b19

CRC Configuration Register

b15

b12

b11

CRC_RECEIVED[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIF_CRC_CONFIG

CRC Configuration Register

b7

b4

b3

CRC_RECEIVED[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Configuration of CRC computation for data stream.

Bit

Name

Description

31

ENABLE

Enables CRC calculation

22

CRC_ERROR

A CRC was loaded into CRC_RECEIVED that is different from CRC_VALUE

21

BYTE_ENDIAN

Indicates the order in which bytes in a 32-bit word are brought through the CRC shift register. This is
independent from the endianness of the interface.
0
LSB first
1
MSB first

20

BIT_ENDIAN

Indicates the order in which the bits in each byte are brought through the CRC shift register.
0
LSb first
1
MSb first

15:0

CRC_RECEIVED[15:0]

A CRC value received on the data inputs by the state machine

358

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.43

GPIF_CRC_DATA
CRC Data Register

GPIF_CRC_DATA
b31

CRC Data Register
b30

b29

b28

b27

0xE0014128
b26

b25

b24

CRC_VALUE[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b20

b18

b17

b16

GPIF_CRC_DATA
b23

CRC Data Register
b19

CRC_VALUE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b12

b10

b9

b8

GPIF_CRC_DATA
b15

CRC Data Register
b11

INITIAL_VALUE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIF_CRC_DATA
b7

CRC Data Register
b4

b3

INITIAL_VALUE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

CRC initial values and results.

Bit

Name

Description

31:16

CRC_VALUE[15:0]

Current result of CRC calculation

15:8

INITIAL_VALUE[15:0]

Initial CRC value

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

359

10.7.44

GPIF_BETA_DEASSERT
Beta Deassert Register

GPIF_BETA_DEASSERT
b31

Beta Deassert Register

b30

b29

b28

b27

0xE001412C
b26

b25

b24

APPLY_DEASSERT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b18

b17

b16

GPIF_BETA_DEASSERT
b23

Beta Deassert Register

b22

b21

b20

b19

APPLY_DEASSERT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

GPIF_BETA_DEASSERT
b15

Beta Deassert Register

b14

b13

b12

b11

APPLY_DEASSERT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b2

b1

b0

GPIF_BETA_DEASSERT
b7

Beta Deassert Register

b6

b5

b4

b3

APPLY_DEASSERT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

Controls the applicability of BETA_DEASSERT descriptor field to individual betas.

Bit

Name

31:0

APPLY_DEASSERT[31:0] 0
1

360

Description
BETA_DEASSERT does not apply. Betas remain asserted throughout the state.
BETA_DEASSERT from the waveform descriptor applies to this beta. This is not honored
for external betas, which always behave as if apply_deassert = 0.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.45

GPIF_FUNCTION
Transition Function Registers

There are 32 GPIF_FUNCTION registers. The address of each is calculated as GPIF_FUNCTION(x) = 0xE0014130 +
(x*0x4). Hence GPIF_FUNCTION(0) is at address 0xE0014130, GPIF_FUNCTION(1) is at address 0xE0014130 + 0x4 and
so on. The definition of each of these is the same.
GPIF_FUNCTION
b31

Transition Function Registers
b30

b29

b22

b21

b14

b13

GPIF_CRC_CONFIG
b23

b27

b26

b25

b24

b18

b17

b16

b10

b9

b8

CRC Configuration Register

GPIF_CRC_CONFIG
b15

b28

0xE0014130

b20

b19

CRC Configuration Register
b12

b11

FUNCTION[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

GPIF_CRC_CONFIG
b7

CRC Configuration Register
b4

FUNCTION[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Contains the truth tables for user-defined transition functions.

Bit

Name

Description

15:0

FUNCTION[15:0]

Truth table for transition function. Bit position X contains output when the 4 inputs constitute the value
X in binary. For example, bit 2 = 1 means in3 = 0, in2 = 0, in1 = 1 and in0 = 0 will evaluate true for this
function.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

361

10.7.46

GPIF_LEFT_WAVEFORM
Left Edge Waveform Memory Register

There are 256 GPIF_LEFT_WAVEFORM registers. The address of each is calculated as GPIF_LEFT_WAVEFORM(x) =
0xE0015000 + (x*0x10). Hence GPIF_LEFT_WAVEFORM(0) is at address 0xE0015000, GPIF_LEFT_WAVEFORM(1) is at
address 0xE0015000 + 0x10, and so on. The definition of each of these is the same.
GPIF_LEFT_WAVEFORM
b127

b126

Left Edge Waveform Memory Register
b125

b124

0xE0015000

b123

b122

b121

b120

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b115

b114

b113

b112

GPIF_LEFT_WAVEFORM
b119

b118

Left Edge Waveform Memory Register
b117

b116

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b107

b106

b105

b104

GPIF_LEFT_WAVEFORM
b111

b110

Left Edge Waveform Memory Register
b109

b108

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b99

b98

b97

b96

GPIF_LEFT_WAVEFORM
b103

b102

Left Edge Waveform Memory Register
b101

b100

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b90

b89

b88

GPIF_LEFT_WAVEFORM

Left Edge Waveform Memory Register

b95

b94

b93

VALID

BETA_DEASSERT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b82

b81

b80

b86

b91

REPEAT_COUNT[7:2]

GPIF_LEFT_WAVEFORM
b87

b92

Left Edge Waveform Memory Register
b85

b84

b83

REPEAT_COUNT[1:0]

Beta[31:26]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b75

b74

b73

b72

GPIF_LEFT_WAVEFORM
b79

b78

Left Edge Waveform Memory Register
b77

b76

Beta[25:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

362

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.46

GPIF_LEFT_WAVEFORM (continued)

GPIF_LEFT_WAVEFORM
b71

Left Edge Waveform Memory Register

b70

b69

b68

b67

b66

b65

b64

Beta[17:10]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b59

b58

b57

b56

GPIF_LEFT_WAVEFORM
b63

Left Edge Waveform Memory Register

b62

b61

b60

Beta[9:2]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b50

b49

b48

GPIF_LEFT_WAVEFORM
b55

Left Edge Waveform Memory Register

b54

b53

b52

b51

Beta[1:0]

Alpha_Right[7:2]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b42

b41

b40

GPIF_LEFT_WAVEFORM
b47

Left Edge Waveform Memory Register

b46

b45

b44

b43

Alpha_Right[1:0]

Alpha_Left[7:2]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b34

b33

GPIF_LEFT_WAVEFORM
b39

Left Edge Waveform Memory Register

b38

b37

b36

Alpha_Left[1:0]

b35

b32

f1[4:0]

f0[4]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b25

b24

GPIF_LEFT_WAVEFORM
b31

Left Edge Waveform Memory Register

b30

b29

b28

b27

b26

f0[3:0]

Fd[4:1]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

GPIF_LEFT_WAVEFORM
b23

b22

Left Edge Waveform Memory Register
b21

Fd[0]

b20

b19

Fc[4:0]

b16

Fb[4:3]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

363

10.7.46

GPIF_LEFT_WAVEFORM (continued)

GPIF_LEFT_WAVEFORM
b15

Left Edge Waveform Memory Register

b14

b13

b12

b11

Fb[2:0]

b10

b9

b8

Fa[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_LEFT_WAVEFORM
b7

Left Edge Waveform Memory Register

b6

b5

b4

b3

NEXT_STATE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This area stores the so-called left edge state transitions from a given state. Location 17 stores the left state transition from
state 17, and so on. This is a logical register implemented in 256x96b SRAM aligned on 128b boundaries. In other words the
left state transition for state 17 is stored in three 32-bit words at offset+4*17, offset+4*17+1, offset+4*17+2.

Bit

Name

Description

127:96

UNUSED

This entry is unused and does not map to RAM in the current implementation.
Writes are ignored and reads will return 0 in all cases.

95

VALID

0
1

94

BETA_DEASSERT

0
1

Keep betas asserted throughout the state
Deassert after asserting for exactly one clock cycle, irrespective of how many cycles the
state is active.
The normal (deassert) state of user defined betas is defined in GPIF_CTRL_BUS_DEFAULT. The
normal state of internal betas is fixed by hardware. This function is applied only to betas selected in
GPIF_BETA_DEASSERT.

93:86

REPEAT_COUNT[7:0]

Number of times to stay in this state – 1

85:54

Beta[31:0]

32 secondary outputs

53:46

Alpha_Right[7:0]

For the right edge

45:38

Alpha_Left{7:0]

Primary outputs for the left edge of the next state.

37:33

f1[4:0]

Index to select the second transition function from a choice of 32 functions. Truth-tables for the 32 4bit functions are defined using the GPIF_FUNCTION registers.

32:28

f0[4:0]

Index to select the first transition function from a choice of 32 functions. Truth-tables for the 32 4-bit
functions are defined using the GPIF_FUNCTION registers.

27:23

Fd[4:0]

Fourth input index

22:18

Fc[4:0]

Third input index.

17:13

Fb[4:0]

Second input index.

12:8

Fa[4:0]

Index to select the first input for transition functions out of 32 choices.

7:0

NEXT_STATE[7:0]

Next state on left transition

364

Entry not valid. (Not programmed or edge does not exist)
This entry is valid.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.47

GPIF_RIGHT_WAVEFORM
Right Edge Waveform Memory Register

There are 256 GPIF_RIGHT_WAVEFORM registers. The address of each is calculated as GPIF_RIGHT_WAVEFORM(x) =
0xE0016000 + (x*0x10). Hence GPIF_RIGHT_WAVEFORM(0) is at address 0xE0016000, GPIF_RIGHT_WAVEFORM(1) is
at address 0xE0016000 + 0x10, and so on. The definition of each of these is the same.
GPIF_RIGHT_WAVEFORM
b127

b126

Right Edge Waveform Memory Register
b125

b124

0xE0016000

b123

b122

b121

b120

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b115

b114

b113

b112

GPIF_RIGHT_WAVEFORM
b119

b118

Right Edge Waveform Memory Register
b117

b116

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b107

b106

b105

b104

GPIF_RIGHT_WAVEFORM
b111

b110

Right Edge Waveform Memory Register
b109

b108

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b99

b98

b97

b96

GPIF_RIGHT_WAVEFORM
b103

b102

Right Edge Waveform Memory Register
b101

b100

UNUSED
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b90

b89

b88

GPIF_RIGHT_WAVEFORM

Right Edge Waveform Memory Register

b95

b94

b93

VALID

BETA_DEASSERT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b82

b81

b80

b86

b91

REPEAT_COUNT[7:2]

GPIF_RIGHT_WAVEFORM
b87

b92

Right Edge Waveform Memory Register
b85

b84

b83

REPEAT_COUNT[1:0]

Beta[31:26]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b75

b74

b73

b72

GPIF_RIGHT_WAVEFORM
b79

b78

Right Edge Waveform Memory Register
b77

b76

Beta[25:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

365

10.7.47

GPIF_LEFT_WAVEFORM (continued)

GPIF_RIGHT_WAVEFORM
b71

Right Edge Waveform Memory Register

b70

b69

b68

b67

b66

b65

b64

Beta[17:10]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b59

b58

b57

b56

GPIF_RIGHT_WAVEFORM
b63

Right Edge Waveform Memory Register

b62

b61

b60

Beta[9:2]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b50

b49

b48

GPIF_RIGHT_WAVEFORM
b55

Right Edge Waveform Memory Register

b54

b53

b52

b51

Beta[1:0]

Alpha_Right[7:2]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b42

b41

b40

GPIF_RIGHT_WAVEFORM
b47

Right Edge Waveform Memory Register

b46

b45

b44

b43

Alpha_Right[1:0]

Alpha_Left[7:2]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b34

b33

GPIF_RIGHT_WAVEFORM
b39

Right Edge Waveform Memory Register

b38

b37

b36

Alpha_Left[1:0]

b35

b32

f1[4:0]

f0[4]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b25

b24

GPIF_RIGHT_WAVEFORM
b31

Right Edge Waveform Memory Register

b30

b29

b28

b27

b26

f0[3:0]

Fd[4:1]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

GPIF_RIGHT_WAVEFORM
b23

b22

Right Edge Waveform Memory Register
b21

Fd[0]

b20

b19

Fc[4:0]

b16

Fb[4:3]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

366

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.7.47

GPIF_LEFT_WAVEFORM (continued)

GPIF_RIGHT_WAVEFORM
b15

Right Edge Waveform Memory Register

b14

b13

b12

b11

Fb[2:0]

b10

b9

b8

Fa[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

GPIF_RIGHT_WAVEFORM
b7

Right Edge Waveform Memory Register

b6

b5

b4

b3

NEXT_STATE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This area stores the so-called right edge state transitions from a given state. Location 17 stores the right state transition from
state 17, and so on. This is a logical register implemented in 256x96b SRAM aligned on 128b boundaries. In other words the
right state transition for state 17 is stored in three 32-bit words at offset+4*17, offset+4*17+1, offset+4*17+2.

Bit

Name

Description

127:96

UNUSED

This entry is unused and does not map to RAM in the current implementation.
Writes are ignored and reads will return 0 in all cases.

95

VALID

0
1

94

BETA_DEASSERT

0
1

Keep betas asserted throughout the state
Deassert after asserting for exactly one clock cycle, irrespective of how many cycles the
state is active.
The normal (deassert) state of user defined betas is defined in GPIF_CTRL_BUS_DEFAULT. The
normal state of internal betas is fixed by hardware. This function is applied only to betas selected in
GPIF_BETA_DEASSERT.

93:86

REPEAT_COUNT[7:0]

Number of times to stay in this state – 1

85:54

Beta[31:0]

32 secondary outputs

53:46

Alpha_Right[7:0]

For the right edge

45:38

Alpha_Left{7:0]

Primary outputs for the left edge of the next state.

37:33

f1[4:0]

Index to select the second transition function from a choice of 32 functions. Truth-tables for the 32 4bit functions are defined using the GPIF_FUNCTION registers.

32:28

f0[4:0]

Index to select the first transition function from a choice of 32 functions. Truth-tables for the 32 4-bit
functions are defined using the GPIF_FUNCTION registers.

27:23

Fd[4:0]

Fourth input index

22:18

Fc[4:0]

Third input index.

17:13

Fb[4:0]

Second input index.

12:8

Fa[4:0]

Index to select the first input for transition functions out of 32 choices.

7:0

NEXT_STATE[7:0]

Next state on left transition

Entry not valid. (Not programmed or edge does not exist)
This entry is valid.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

367

10.8

P-Port Registers

10.8.1

PP_ID
P-Port Device ID Register

PP_ID

P-Port Device ID Register
b15

b14

b13

b12

b11

0xE0017E00
b10

b9

b8

DEVICE_ID[15:8]
R

R

R

R

R

R

R

R

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

b2

b1

b0

PP_ID

P-Port Device ID Register
b4

b3

DEVICE_ID[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Provides device ID information. This must be provided by boot ROM. This register is not writable when
GCTL_CONTROL.BOOTROM_EN = 0 to prevent spoofing.

Bit

Name

Description

15:0

DEVICE_ID[15:0]

Provides a device ID.

368

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.2

PP_INIT
P-Port Reset and Power Control Register

PP_INIT

P-Port Reset and Power Control Register

b15

b14

b13

0xE0017E04

b11

b10

BIG_ENDIAN

HARD_RESET_N

CPU_RESET_N

R/W

R/W0C

R/W

R

R

R

0

1

1

PP_INIT

b12

b9

b8

P-Port Reset and Power Control Register

b7

b6

b5

b4

b3

b2

b1

b0

WAKEUP_CLK

WAKEUP_PWR

WDT_RESET

SW_RESET

POR

R

R

R

R/W

R/W

R/W

R/W

R/W

R

R

0

0

0

0

1

This register is used for reset and power control and determines endian orientation of the P-port.

Bit

Name

Description

15

BIG_ENDIAN

0
1

11

HARD_RESET_N

Software clears this bit to effect a global hard reset (all blocks, all flops). This is equivalent to toggling
the RESET pin on the device. This function is also available to internal firmware in GCTL_CONTROL.

10

CPU_RESET_N

Software clears this bit to effect a CPU reset (aka reboot). No other blocks or registers are affected.
The CPU will enter the boot ROM, that will use the WARM_BOOT flag to determine whether to reload
firmware.
Unlike the same bit in GCTL_CONTROL, the software needs to explicitly clear and then set this bit to
bring the internal CPU out of reset. It is permissible to keep the ARM CPU in reset for an extended
period of time (although not advisable).

4

WAKEUP_CLK

Indicates system woke up from suspend state. If firmware does not clear this bit it will stay 1 even
through standby sequences. This bit is a shadow bit of GCTL_CONTROL.

3

WAKEUP_PWR

Indicates system woke up from standby mode. If firmware does not clear this bit it will stay 1 even
through suspend sequences. This bit is a shadow bit of GCTL_CONTROL.

2

WDT_RESET

Indicates system woke up from a watchdog timer induced hard reset (see GCTL_WATCHDOG_CS).
If firmware does not clear this bit it will stay 1 even through standby and suspend sequences. This bit
is a shadow bit of GCTL_CONTROL.

1

SW_RESET

Indicates system woke up from a software induced hard reset sequence (from
GCTL_CONTROL.HARD_RESET_N or PP_INIT.HARD_RESET_N). If firmware does not clear this
bit it will stay 1 even through standby and suspend sequences. This bit is a shadow bit of
GCTL_CONTROL.

0

POR

Indicates system woke up through a power-on-reset or RESET# pin reset sequence. If firmware does
not clear this bit it will stay 1 even through software reset, standby and suspend sequences. This bit
is a shadow bit of GCTL_CONTROL.

P-Port is Little Endian
P-Port is Big Endian

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

369

10.8.3

PP_CONFIG
P-Port Configuration Register

PP_CONFIG

P-Port Configuration Register

b15

b14

DACK_POLARITY DRQ_POLARITY

b13

b12

DRQ_VALUE

b11

DRQ_OVERRIDE INTR_POLARITY

0xE0017E08
b10

b9

INTR_VALUE

INTR_OVERRIDE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

b7

b6

b5

DRQMODE

CFGMODE

PP_CONFIG

b8

P-Port Configuration Register
b4

b3

b2

b1

b0

BURSTSIZE[3:0]

R/W

R/W

R/W

R/W

R/W

R/W

R

R/W

R

R

R

R

0

1

15

This register holds bits required to control PMMC interface.

Bit

Name

Description

15

DACK_POLARITY

0
1

DACK is active low
DACK is active high

14

DRQ_POLARITY

0
1

DRQ is active low
DRQ is active high

13

DRQ_VALUE

0
1

DRQ is deasserted when DRQ_OVERRIDE = 1
DRQ is asserted when DRQ_OVERRIDE = 1

12

DRQ_OVERRIDE

0
1

No override
DRQ signal is forced to DRQ_VALUE

11

INTR_POLARITY

0
INTR is deasserted when INTR_OVERRIDE = 1
1
INTR is asserted on override when INTR_OVERRIDE=1
This bit is used directly in hardware to generate INT signal.

10

INTR_VALUE

0
INTR is deasserted when INTR_OVERRIDE = 1
1
INTR is asserted on override when INTR_OVERRIDE = 1
This bit is used directly in hardware to generate INT signal.

9

INTR_OVERRIDE

0
No override
1
INTR signal is forced to INTR_VALUE
This bit is used directly in hardware to generate INT signal.

7

DRQMODE

DMA signaling mode. See DMA section for more information.
0
Pulse mode, DRQ will deassert when DACK deasserts and will remain d-asserted for a
specified time. After that DRQ may reassert depending on other settings.
1
Burst mode, DRQ will deassert when BURSTSIZE words are transferred and will not reassert until DACK is deasserted.

continued on next page

370

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.3

PP_CONFIG (continued)

6

CFGMODE

Initialization Mode
0
Normal operation mode.
1
Initialization mode.
This bit is cleared to “0” by firmware, by writing 0 to PIB_CONFIG.PP_CFGMODE, after completing
the initialization process. Specific usage of this bit is described in the software architecture. This bit is
mirrored directly by hardware in PIB_CONFIG.

3:0

BURSTSIZE

Size of DMA bursts; only relevant when DRQMODE=1.
0–14
DMA burst size is 2BURSTSIZE words
15
DMA burst size is infinite (DRQ deasserts on last cycle of transfer)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

371

10.8.4

PP_INTR_MASK
P-Port Interrupt Mask Register

PP_INTR_MASK

P-Port Interrupt Mask Register

b15

b14

b13

b12

b11

0xE0017E1C
b10

b9

b8

WAKEUP

WR_MB_EMPTY

RD_MB_FULL

DMA_READY_EV

DMA_WMARK_
EV

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

0

b6

b5

b4

b3

b2

b1

b0

GPIF_ERR

PIB_ERR

GPIF_INT

SOCK_AGG_BH

SOCK_AGG_BL

SOCK_AGG_AH

SOCK_AGG_AL

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

PP_INTR_MASK
b7

P-Port Interrupt Mask Register

This register holds bits required to control PMMC interface.

Bit

Name

Description

15

WAKEUP

1

Forward EVENT onto INT line

14

WR_MB_EMPTY

1

Forward EVENT onto INT line

13

RD_MB_FULL

1

Forward EVENT onto INT line

12

DMA_READY_EV

1

Forward EVENT onto INT line

11

DMA_WMARK_EV

1

Forward EVENT onto INT line

7

GPIF_ERR

1

Forward EVENT onto INT line

5

PIB_ERR

1

Forward EVENT onto INT line

4

GPIF_INT

1

Forward EVENT onto INT line

3

SOCK_AGG_BH

1

Forward EVENT onto INT line

2

SOCK_AGG_BL

1

Forward EVENT onto INT line

1

SOCK_AGG_AH

1

Forward EVENT onto INT line

0

SOCK_AGG_AL

1

Forward EVENT onto INT line

372

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.5

PP_DRQR5_MASK
P-Port DRQ/R5 Mask Register

PP_DRQR5_MASK
b15

P-Port DRQ/R5 Mask Register
b14

b13

b12

b11

0xE0017E20
b10

b9

b8

WAKEUP

WR_MB_EMPTY

RD_MB_FULL

DMA_READY_EV

DMA_WMARK_
EV

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

0

b6

b5

b4

b3

b2

b1

b0

GPIF_ERR

PIB_ERR

GPIF_INT

SOCK_AGG_BH

SOCK_AGG_BL

SOCK_AGG_AH

SOCK_AGG_AL

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

PP_DRQR5_MASK
b7

P-Port DRQ/R5 Mask Register

These registers have the same layout as PP_EVENT and mask which events lead to assertion of INTR or DRQ/R5 respectively. DRQR5 is a signal that can be put on any GPIF CTRL[x] line (see GPIF_BUS_SELECT) and R5 is an MMC event notification protocol relevant only in PMMC mode.

Bit

Name

Description

15

WAKEUP

1

Forward EVENT onto DRQ line

14

WR_MB_EMPTY

1

Forward EVENT onto DRQ line

13

RD_MB_FULL

1

Forward EVENT onto DRQ line

12

DMA_READY_EV

1

Forward EVENT onto DRQ line

11

DMA_WMARK_EV

1

Forward EVENT onto DRQ line

7

GPIF_ERR

1

Forward EVENT onto DRQ line

5

PIB_ERR

1

Forward EVENT onto DRQ line

4

GPIF_INT

1

Forward EVENT onto DRQ line

3

SOCK_AGG_BH

1

Forward EVENT onto DRQ line

2

SOCK_AGG_BL

1

Forward EVENT onto DRQ line

1

SOCK_AGG_AH

1

Forward EVENT onto DRQ line

0

SOCK_AGG_AL

1

Forward EVENT onto DRQ line

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

373

10.8.6

PP_SOCK_MASK
P-Port Socket Mask Register

PP_SOCK_MASK
b31

P-Port Socket Mask Register
b30

b29

b28

b27

0xE0017E24
b26

b25

b24

SOCK_MASK[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_SOCK_MASK
b23

P-Port Socket Mask Register
b20

b19

SOCK_MASK[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_SOCK_MASK
b15

P-Port Socket Mask Register
b12

b11

SOCK_MASK[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PP_SOCK_MASK
b7

P-Port Socket Mask Register
b4

b3

SOCK_MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

These registers contain a mask that indicates which sockets affect the SOCK_AGG_A and SOCK_AGG_B values, respectively.

Bit

Name

Description

31:0

SOCK_MASK[31:0]

For socket , bit  indicates:
0
Socket does not affect SOCK_AGG_A/B
1
Socket does affect SOCK_AGG_A/B

374

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.7

PP_ERROR
P-Port Error Indicator Register

PP_ERROR
b15

P-Port Error Indicator Register
b14

b13

b12

b11

0xE0017E28
b10

b9

b8

b1

b0

GPIF_ERR_CODE[4:0]
R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

b6

b5

PP_ERROR
b7

P-Port Error Indicator Register
b4

b3

b2

PIB_ERR_CODE[5:0]
R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

This register indicates the error codes associated with PIB_INTR.PIB_ERR, MMC_ERR and GPIF_ERR. The different values
for these error codes will be documented in the P-Port BROS document. This register is also visible to firmware as
PIB_ERROR.

Bit

Name

Description

14:10

GPIF_ERR_CODE[4:0]

Mirror of corresponding field in PIB_ERROR

5:0

PIB_ERR_CODE[5:0]

Mirror of corresponding field in PIB_ERROR

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

375

10.8.8

PP_DMA_XFER
P-Port DMA Transfer Register

PP_DMA_XFER

P-Port DMA Transfer Register

b15

b14

b13

b12

DMA_READY

DMA_ERROR

DMA_BUSY

SIZE_VALID

0xE0017E2C

b11

b10

b9

LONG_TRANSFER DMA_DIRECTION

b8

DMA_ENABLE

R

R

R

R

R/W

R/W

R/W

W

W

W

R/W

R

R

R/W

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PP_DMA_XFER

P-Port DMA Transfer Register

b7

b4

b3

DMA_SOCK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register is used to set up and control a DMA transfer.

Bit

Name

Description

15

DMA_READY

Indicates that the link controller is ready to exchange data.
0
Socket not ready for transfer
1
Socket ready for transfer; SIZE_VALID is also guaranteed 1

14

DMA_ERROR

0
No errors
1
DMA transfer error
This bit is set when a DMA error occurs and cleared when the next transfer is started using
DMA_ENABLE = 1.

13

DMA_BUSY

Indicates that link controller is busy processing a transfer. A zero length transfer would cause
DMA_READY to never assert.
0
No DMA is in progress
1
DMA is busy

12

SIZE_VALID

Indicates that DMA_SIZE value is valid and corresponds to the socket selected in PP_DMA_XFER.
SIZE_VALID will be 0 for a short period after PP_DMA_XFER is written into. AP will poll SIZE_VALID
or DMA_READY before reading DMA_SIZE.

10

LONG_TRANSFER

0
1

Short transfer (DMA_ENABLE clears at end of buffer
Long Transfer (DMA_ENABLE must be cleared by AP at end of transfer)

9

DMA_DIRECTION

0
1

Read (Transfer from FX3 – Egress direction)
Write (Transfer to FX3 – Ingress direction)

8

DMA_ENABLE

0
1

Disable ongoing transfer. If no transfer is ongoing ignore disable
Enable data transfer

7:0

DMA_SOCK[7:0]

Processor specified socket number for data transfer

376

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.9

PP_DMA_SIZE
P-Port DMA Transfer Size Register

PP_DMA_SIZE
b15

P-Port DMA Transfer Size Register
b14

b13

b12

b11

0xE0017E30
b10

b9

b8

DMA_SIZE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

PP_DMA_SIZE
b7

P-Port DMA Transfer Size Register
b4

DMA_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register indicates the (remaining) size of the transfer. It is initialized to the number of bytes available in the buffer for
egress transfers and the size of the buffer for ingress transfers. This register can be modified by the AP for shorter ingress
transfers. The value read from this register is not valid unless DMA_XFER.SIZE_VALID is true.

Bit

Name

Description

15:0

DMA_SIZE[15:0]

Size of DMA transfer. Number of bytes available for read/write when read, number of bytes to be
read/written when written.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

377

10.8.10

PP_WR_MAILBOX
P-Port Write (Ingress) Mailbox Registers

PP_WR_MAILBOX
b63

P-Port Write (Ingress) Mailbox Registers
b62

b61

b60

b59

0xE0017E34
b58

b57

b56

WR_MAILBOX[63:56]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b54

b53

b50

b49

b48

PP_WR_MAILBOX
b55

P-Port Write (Ingress) Mailbox Registers
b52

b51

WR_MAILBOX[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

PP_WR_MAILBOX
b47

P-Port Write (Ingress) Mailbox Registers
b44

b43

WR_MAILBOX[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

PP_WR_MAILBOX
b39

P-Port Write (Ingress) Mailbox Registers
b36

b35

WR_MAILBOX[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

PP_WR_MAILBOX
b31

P-Port Write (Ingress) Mailbox Registers
b28

b27

WR_MAILBOX[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_WR_MAILBOX
b23

P-Port Write (Ingress) Mailbox Registers
b20

b19

WR_MAILBOX[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_WR_MAILBOX
b15

P-Port Write (Ingress) Mailbox Registers
b12

b11

WR_MAILBOX[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

378

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.10

PP_WR_MAILBOX (continued)

PP_WR_MAILBOX
b7

P-Port Write (Ingress) Mailbox Registers
b6

b5

b4

b3

b2

b1

b0

WR_MAILBOX[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

These registers contain a message of up to 8 bytes from the Application Processor to firmware. The semantics of the possible
messages is defined as part of the software specification. These registers also appear in the P-Port MMIO space as
PIB_WR_MAILBOX. When the Application Processor writes data into the high word of PP_WR_MAILBOX the interrupt
PIB_INTR.WR_MB_FULL is set. The expected action is that firmware reads the message and then clears
PIB_INTR.WR_MB_FULL, which will set PP_EVENT.WR_MB_EMPTY to signal AP for the next message (if needed).

Bit

Name

Description

63:0

WR_MAILBOX[63:0]

Write mailbox message from AP

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

379

10.8.11

PP_MMIO_ADDR
P-Port MMIO Address Registers

PP_MMIO_ADDR
b31

P-Port MMIO Address Registers
b30

b29

b28

0xE0017E3C

b27

b26

b25

b24

MMIO_ADDR[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_MMIO_ADDR
b23

P-Port MMIO Address Registers
b20

b19

MMIO_ADDR[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_MMIO_ADDR
b15

P-Port MMIO Address Registers
b12

b11

MMIO_ADDR[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PP_MMIO_ADDR
b7

P-Port MMIO Address Registers
b4

b3

MMIO_ADDR[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

These registers together form a 32-bit address for accessing the FX3 internal MMIO space. The address can point to any
internal FX3 register. The bits PP_MMIO.MMIO_RD, PP_MMIO.MMIO_WR, PP_MMIO.MMIO_DONE are used to control the
operation.

Bit

Name

Description

31:0

MMIO_ADDR[31:0]

Address in MMIO register space to be used for access.

380

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.12

PP_MMIO_DATA
P-Port MMIO Data Registers

PP_MMIO_DATA
b31

P-Port MMIO Data Registers
b30

b29

b28

b27

0xE0017E40
b26

b25

b24

MMIO_DATA[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_MMIO_ADDR
b23

P-Port MMIO Address Registers
b20

b19

MMIO_DATA[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_MMIO_ADDR
b15

P-Port MMIO Address Registers
b12

b11

MMIO_DATA[15:18]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PP_MMIO_ADDR
b7

P-Port MMIO Address Registers
b4

b3

MMIO_DATA[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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 registers together form a 32-bit data word for accessing the FX3 internal MMIO space. Only full 32-bit accesses are
supported to FX3 registers. The bits PP_MMIO.MMIO_RD, PP_MMIO.MMIO_WR, PP_MMIO.MMIO_DONE are used to control the operation.
Reading from these registers will return the data from the last MMIO_RD operation or the data written by Application Processor, whichever is more recent.

Bit

Name

Description

31:0

MMIO_DATA[31:0]

32-bit data word for read or write transaction

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

381

10.8.13

PP_MMIO
P-Port MMIO Control Registers

PP_MMIO
b15

P-Port MMIO Control Registers
b14

b13

b6

b5

PP_MMIO
b7

b12

b11

0xE0017E44
b10

b9

b8

P-Port MMIO Control Registers
b4

b3

b2

b1

b0

MMIO_FAIL

MMIO_BUSY

MMIO_WR

MMIO_RD

R

R

R/W1S

R/W1S

R/W

R/W

R/W0C

R/W0C

0

0

0

0

This register controls the access to FX3’s MMIO space. The process for using the PP_MMIOxxx registers is described later in
a separate section.

Bit

Name

Description

3

MMIO_FAIL

0
1

Normal
MMIO operation was not executed because of security constraints
(PIB_CONFIG.MMIO_ENABLE = 0)

2

MMIO_BUSY

0
1

No MMIO operation is pending
MMIO operation is being executed

1

MMIO_WR

0
1

No action
Initiate write of MMIO_DATA to MMIO_ADDR

0

MMIO_RD

0
1

No action
Initiate read from MMIO_ADDR, place data in MMIO_DATA

382

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.14

PP_EVENT
P-Port Event Register

PP_EVENT

P-Port Event Register

b15

WAKEUP

b14

b13

b12

b11

DMA_READY_EV

DMA_WMARK_
EV

0xE0017E48
b10

b9

b8

WR_MB_EMPTY

RD_MB_FULL

R/W1C

R/W

R/W1C

R

R

W1S

R/W1C

W1S

R/W

R/W

0

1

0

0

0

b6

b5

b4

b3

b2

b1

b0

GPIF_ERR

PIB_ERR

GPIF_INT

SOCK_AGG_BH

SOCK_AGG_BL

SOCK_AGG_AH

SOCK_AGG_AL

R/W1C

R/W1C

R/W1C

R

R

R

R

W1S

W1S

W1S

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

PP_EVENT
b7

P-Port Event Register

This register indicates all types of events that can cause INTR or DRQ to assert.

Bit

Name

Description

15

WAKEUP

Reserved.
AP should read PP_INIT register's WAKEUP_PWR or WAKEUP_CLK to detect if there was a wake
up from standby or suspend.

14

WR_MB_EMPTY

1
WR Mailbox is empty - message can be written
This field is cleared by PIB when message is written to MBX, but can also be cleared by AP when
used as interrupt. This field is set by PIB only once when MBX is emptied by firmware.

13

RD_MB_FULL

1

RD Mailbox is full - message must be read

12

DMA_READY_EV

0
1

P-port not ready for data transfer
P-port ready for data transfer

11

DMA_WMARK_EV

0
1

P-Port has fewer than  words left (can be 0)
P-Port is ready for transfer and at least  words remain

7

GPIF_ERR

An error occurred in the GPIF. Firmware clears this bit after handling the error. The error code is indicated in PP_ERROR.GPIF_ERR_CODE

5

PIB_ERR

The socket based link controller encountered an error and needs attention. Firmware clears this bit
after handling the error. The error code is indicated in PP_ERROR.PIB_ERR_CODE

4

GPIF_INT

1

State machine raised host interrupt

3

SOCK_AGG_BH

0
1

SOCK_STAT_B[15:8] is all zeroes
At least one bit set in SOCK_STAT_B[15:8]

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

383

10.8.14

PP_EVENT (continued)

2

SOCK_AGG_BL

0
1

SOCK_STAT_B[7:0] is all zeroes
At least one bit set in SOCK_STAT_B[7:0]

1

SOCK_AGG_AH

0
1

SOCK_STAT_A[15:8] is all zeroes
At least one bit set in SOCK_STAT_A[15:8]

0

SOCK_AGG_AL

0
1

SOCK_STAT_A[7:0] is all zeroes
At least one bit set in SOCK_STAT_A[7:0]

384

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.15

PP_RD_MAILBOX
P-Port Read (Egress) Mailbox Registers

PP_RD_MAILBOX
b63

P-Port Read (Egress) Mailbox Registers
b62

b61

b60

b59

0xE0017E4C
b58

b57

b56

RD_MAILBOX[63:56]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b54

b53

b50

b49

b48

PP_RD_MAILBOX
b55

P-Port Read (Egress) Mailbox Registers
b52

b51

RD_MAILBOX[55:48]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

PP_RD_MAILBOX
b47

P-Port Read (Egress) Mailbox Registers
b44

b43

RD_MAILBOX[47:40]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

PP_RD_MAILBOX
b39

P-Port Read (Egress) Mailbox Registers
b36

b35

RD_MAILBOX[39:32]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

PP_RD_MAILBOX
b31

P-Port Read (Egress) Mailbox Registers
b28

b27

RD_MAILBOX[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_RD_MAILBOX
b23

P-Port Read (Egress) Mailbox Registers
b20

b19

RD_MAILBOX[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_RD_MAILBOX
b15

P-Port Read (Egress) Mailbox Registers
b12

b11

RD_MAILBOX[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

385

10.8.15

PP_RD_MAILBOX (continued)

PP_RD_MAILBOX
b7

P-Port Read (Egress) Mailbox Registers
b6

b5

b4

b3

b2

b1

b0

RD_MAILBOX[7:0]
R

R

R

R

R

R

R

R

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 registers contain a message of up to 8 bytes from firmware to the Application Processor. The semantics of the possible
messages will be defined as part of the software specification. These registers also appear in the P-Port MMIO space as
PIB_RD_MAILBOX*. When firmware writes data into the high word of PIB_RD_MAILBOX the event
PP_EVENT.RD_MB_FULL is set. The expected action is that the Application Processor reads the message and interprets it
and then clears PP_EVENT.RD_MB_FULL, which sets PIB_INTR.RD_MB_EMPTY to signal firmware for the next message
(if needed).

Bit

Name

Description

63:0

RD_MAILBOX[63:0]

Read mailbox message to AP

386

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.8.16

PP_SOCK_STAT
P-Port Socket Status Register

PP_SOCK_STAT
b31

P-Port Socket Status Register
b30

b29

b28

b27

0xE0017E54
b26

b25

b24

SOCK_STAT[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PP_SOCK_STAT
b23

P-Port Socket Status Register
b20

b19

SOCK_STAT[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PP_SOCK_STAT
b15

P-Port Socket Status Register
b12

b11

SOCK_STAT[15:18]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PP_SOCK_STAT
b7

P-Port Socket Status Register
b4

b3

SOCK_STAT[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

These registers contain one bit for each of the 32 sockets in the P-port, indicating the buffer availability of each socket.

Bit

Name

Description

31:0

SOCK_STAT[31:0]

For socket , bit  indicates:
0
Socket has no active descriptor or descriptor is not available (empty for write, occupied for
read)
1
Socket is available for reading or writing

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

387

10.8.17

PP_BUF_SIZE_CNT
P-Port Socket Buffer Size or Count Register

PP_BUF_SIZE_CNT
b15

P-Port Socket Buffer Size or Count Register
b14

b13

b12

b11

0xE0017E??
b10

b9

b8

SIZE_CNT[15:8]
R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

PP_DMA_SIZE
b7

P-Port DMA Transfer Size Register
b4

SIZE_CNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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 registers contain the buffer size or count, depending on direction, of the corresponding socket (0..31). This is equal to
buffer_size/buffer_count in the corresponding DSCR_SIZE/DSCR_COUNT register. These registers are present in the
PMMC P-Port space only! No registers exist in the PP space, only the socket registers are read for this from the adapter. The
value of PP_BUF_SIZE_CNT is valid only if the PP_SOCK_STAT indicates ready for the corresponding socket.

Bit

Name

Description

15:0

SIZE_CNT[15:0]

Buffer size of the corresponding write socket (0..31)

388

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.9

USB Port Registers

10.9.1

UIB_INTR
USB Interrupt Register

UIB_INTR

USB Interrupt Register

b31

b30

b29

b22

b21

b14

b13

UIB_INTR

b28

b27

0xE0030000
b26

b25

b24

b18

b17

b16

USB Interrupt Register

b23

UIB_INTR

b20

b19

USB Interrupt Register

b15

UIB_INTR

b12

b11

b10

b9

b8

EPM_URUN_
TIMEOUT

EPM_URUN

PROT_EP_INT

PROT_INT

LNK_INT

R/W1C

R/W1C

R

R

R

R/W1S

R/W1S

R/W

R/W

R/W

X

X

X

X

X

USB Interrupt Register

b7

b6

b5

b4

b3

b2

b1

b0

CHGDET_INT

OTG_INT

DEV_CTL_INT

DEV_EP_INT

OHCI_INT

EHCI_INT

HOST_EP_INT

HOST_INT

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

X

X

X

X

X

X

X

X

Master interrupt vector. UIB uses hierarchical interrupt structure due to the large number of interrupt causes. This register can
only be read from and not updated. Interrupts are cleared by clearing the leaf interrupt source.

Bit

Name

Description

12

EPM_URUN_TIMEOUT

SuperSpeed Egress EPM Interrupt

11

EPM_URUN

SuperSpeed Egress EPM Interrupt

10

PROT_EP_INT

SuperSpeed Device Endpoint Interrupt

9

PROT_INT

SuperSpeed Protocol Layer Interrupt

8

LNK_INT

SuperSpeed Link Controller Interrupt

7

CHGDET_INT

USB Charger Detect Interrupt

6

OTG_INT

USB OTG Interrupt

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

389

10.9.1

UIB_INTR (continued)

5

DEV_CTL_INT

Device USB Control Interrupt

4

DEV_EP_INT

Device EP Interrupt

3

OHCI_INT

OHCI Interrupt

2

EHCI_INT

EHCI Interrupt

1

HOST_EP_INT

Host EP Interrupt

0

HOST_INT

Host INT Status Register Interrupt

390

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.9.2

UIB_INTR_MASK
USB Interrupt Mask Register

UIB_INTR_MASK

USB Interrupt Mask Register

b31

b30

b29

b22

b21

b14

b13

UIB_INTR_MASK

b28

b27

0xE0030004
b26

b25

b24

b18

b17

b16

USB Interrupt Mask Register

b23

UIB_INTR_MASK

b20

b19

USB Interrupt Mask Register

b15

UIB_INTR_MASK

b12

b11

b10

b9

b8

EPM_URUN_
TIMEOUT

EPM_URUN

PROT_EP_INT

PROT_INT

LNK_INT

R/W1C

R/W1C

R

R

R

R/W1S

R/W1S

R/W

R/W

R/W

X

X

X

X

X

USB Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

CHGDET_INT

OTG_INT

DEV_CTL_INT

DEV_EP_INT

OHCI_INT

EHCI_INT

HOST_EP_INT

HOST_INT

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

X

X

X

X

X

X

X

X

Mask for UIB_INTR. Does not affect error logging, only reporting to VIC.

Bit

Name

Description

12

EPM_URUN_TIMEOUT

SuperSpeed Egress EPM Interrupt

11

EPM_URUN

SuperSpeed Egress EPM Interrupt

10

PROT_EP_INT

SuperSpeed Device Endpoint Interrupt

9

PROT_INT

SuperSpeed Protocol Layer Interrupt

8

LNK_INT

SuperSpeed Link Controller Interrupt

7

CHGDET_INT

USB Charger Detect Interrupt

6

OTG_INT

USB OTG Interrupt

5

DEV_CTL_INT

Device USB Control Interrupt

4

DEV_EP_INT

Device EP Interrupt

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

391

10.9.2

UIB_INTR_MASK (continued)

3

OHCI_INT

OHCI Interrupt

2

EHCI_INT

EHCI Interrupt

1

HOST_EP_INT

Host EP Interrupt

0

HOST_INT

Host INT Status Register Interrupt

392

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.9.3

UIB_ID
Block Identification and Version Number Register

UIB_ID

Block Identification and Version Number Register

b31

b30

b29

b28

b27

0xE0037F00

b26

b25

b24

BLOCK_VERSION[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b23

b22

b21

b18

b17

b16

UIB_ID

Block Identification and Version Number Register
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b10

b9

b8

0x0001

UIB_ID

Block Identification and Version Number Register

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b7

b6

b5

UIB_ID

Block Identification and Version Number Register
b4

b3

b2

b1

b0

BLOCK_ID[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0x0003

Every IP block will implement a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its
power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:8

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

393

10.9.4

UIB_POWER
Power, Clock, and Reset Control Registers

UIB_POWER
b31

Power, Clock, and Reset Control Registers
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0037F04
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R
W
0

UIB_POWER
b23

Power, Clock, and Reset Control Registers

UIB_POWER
b15

b19

Power, Clock, and Reset Control Registers

UIB_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control Registers
b4

b3

b0

ACTIVE
R/W
R
0

Every IP block will implement a few MMIO registers at offset 0x7F00 in its MMIO to space that identify the block and control
its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words, reading active = 1 indicates block is
initialized and ready for operation.

394

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.10 USB2 HS/FS/LS PHY Registers
10.10.1

PHY_CLK_AND_TEST
USB PHY Clocks and Testability Configuration Register

H

PHY_CLK_AND_TEST
b31

USB PHY Clocks and Testability Configuration Register
b30

b29

ON_DCD

SUSPEND_N

R/W
R
0

PHY_CLK_AND_TEST

b28

b27

b24

RESET

VDATSRCEEN

CHGRDET

R/W

R/W

R/W

R

R

R

R

R/W

0

1

0

0

b17

b16

b9

b8

USB PHY Clocks and Testability Configuration Register
b22

b21

b20

b19

CHGRMODE

CHGRDETEN

CHGRDETON

IDDIG

IDPULLUP

R/W

R/W

R/W

R

R/W

R

R

R

R/W

R

1

0

0

N

0

PHY_CLK_AND_TEST

b18

USB PHY Clocks and Testability Configuration Register
b14

PHY_CLK_AND_TEST
b7

0xE0031008
b25

b23

b15

b26

b13

b12

b11

b10

USB PHY Clocks and Testability Configuration Register
b6

b5

b1

b0

VLOAD

b4

b3

b2

ONCLOCK

DATABUS16_8

R/W

R/W

R/W

R

R

R

1

0

1

Bit

Name

Description

30

ON_DCD

MIPS PHY Enable Data Contact Detect Circuitry

29

SUSPEND_N

Suspend value applied to USB2 PHY (active low)

27

RESET

Reset value applied to USB2 PHY

25

VDATSRCEEN

Vdat source enable for charger detect

24

CHGRDET

MIPS PHY Charger Detector Output (0 = host detected, 1 = charger detected)

23

CHGRMODE

MIPS PHY Charger Detector Mode

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

395

10.10.1

PHY_CLK_AND_TEST (continued)

22

CHGRDETEN

MIPS PHY Charger Detector Enable
(not tested, used charger detection in CHGDET_CTRL instead)

21

CHGRDETON

MIPS PHY Charger Detector Power On Control
(not tested)

20

IDDIG

MIPS PHY Digital Value of ID line

19

IDPULLUP

MIPS PHY Enable Sampling of ID line by PHY

4

VLOAD

Vendor Control Register Load
Active Low

1

ONCLOCK

Enable 480-MHz Clock Output in Suspend

0

DATABUS16_8

Data Bus Size
0
RSVD
1
16-bit
(only 16-bit mode is tested)

396

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.10.2

PHY_CONF
USB PHY Programmability and Serial Interface Register

H

PHY_CONF

USB PHY Programmability and Serial Interface Register

b31

b30

PHY_CONF

b29

b28

b27

0xE003100C

b26

b25

b24

USB PHY Programmability and Serial Interface Register

b23

b22

PREEMDEPTH

ENPRE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

PHY_CONF

b21

b20

b19

FSRFTSEL[1:0]

b18

b17

LSRFTSEL[1:0]

1

b16

ICPCTRL[1:0]

1

USB PHY Programmability and Serial Interface Register

b15

b14

b13

HSTEDVSEL[1:0]

b12

b11

b10

FSTUNEVSEL[2:0]

b9

HSDEDVSEL[1:0]

b8

HSDRVSLOPE[3]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

2

4

PHY_CONF

2

0

USB PHY Programmability and Serial Interface Register

b7

b6

b5

HSDRVSLOPE[2:0]

b4

b3

HSDRVAMPLITUDE[1:0]

b2

b1

HSDRVTIMINGN[1:0]

b0

HSDRVTIMINGP

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

23

PREEMDEPTH

HS Driver Pre-emphasis Depth

22

ENPRE

HS Driver Pre-emphasis Enable

21:20

FSRFTSEL[1:0]

FS Driver Rise/Fall Time Control

19:18

LSRFTSEL[1:0]

LS Driver Rise/Fall Time Control

17:16

ICPCTRL[1:0]

PLL Charge Pump Current Control

15:14

HSTEDVSEL[1:0]

Reference Voltage for High Speed Transmission

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

397

10.10.2

PHY_CONF (continued)

13:11

FSTUNEVSEL[2:0]

Reference Voltage Control for Calibration Circuit

10:9

HSDEDVSEL[1:0]

Reference Voltage for High Speed Disconnect

8:5

HSDRVSLOPE[3:0]

HS Driver Slope Control

4:3

HSDRVAMPLITUDE[1:0]

HS Driver Amplitude Control

2:1

HSDRVTIMINGN[1:0]

HS NMOS Driver Timing Control

0

HSDRVTIMINGP

HS PMOS Driver Timing Control

398

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.10.3

PHY_CHIRP
USB PHY Chirp Control Register

PHY_CHIRP
b31

USB PHY Chirp Control Register
b30

b29

b28

b27

0xE0031014
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

b0

OVERRIDE_FSM
R/W
R
0

PHY_CHIRP
b23

USB PHY Chirp Control Register
b22

b21

b14

b13

b6

b5

PHY_CHIRP
b15

b19

USB PHY Chirp Control Register

PHY_CHIRP
b7

b20

b12

b11

USB PHY Chirp Control Register
b4

b3

CHIRP_STATE[4:0]
R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

Bit

Name

Description

30

OVERRIDE_FSM

Override chirp state machine

4:0

CHIRP_STATE[4:0]

Set chirp state machine state (if OVERRIDE_FSM == 1)
5'h00
FULL_SPEED
5'h01
FULL_SPEED_SUSPEND
5'h02
SWITCH_XCVR_TO_HSPD
5'h03
CHIRP
5'h04
LOOK_FOR_K1
5'h05
LOOK_FOR_J1
5'h06
LOOK_FOR_K2
5'h07
LOOK_FOR_J2
5'h08
LOOK_FOR_K3
5'h09
LOOK_FOR_J3
5'h0A
SWITCH_XCVR_TO_FSPD
5'h0B
WAIT_END_RESET_FSPD
5'h0D
HIGH_SPEED
5'h0E
SWITCH_XCVR_TO_FSPD_CHK_RESET
5'h0F
CHECK_RESET
5'h10
HIGH_SPEED_SUSPEND
5'h11
WAIT_END_OF_RESUME
5'h12
WAIT_PP_AFTER_RESUME

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

399

10.11 USB2 Device Controller Registers
10.11.1

DEV_CS
Device Controller Master Control and Status Register

DEV_CS

Device Controller Master Control and Status Register

b31

b30

b29

b28

b27

b26

0xE0031400
b25

b24

NAKALL

SETUP_CLR_
BUSY

R/W

R/W1C

R/W

R/W

R

R/W1S

R

R

0

0

0

0

b18

b17

b16

DEV_CS

TEST_MODE[2:1]

Device Controller Master Control and Status Register

b23

b22

b21

b20

b19

TEST_MODE[0]

DEVICEADDR[6:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

DEV_CS

Device Controller Master Control and Status Register

b15

b14

b13

b12

b11

b10

b9

b8

COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

DEV_CS

Device Controller Master Control and Status Register

b7

b6

b5

b4

b3

b2

b1

b0

ERR_LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

4

The hardware automatically retries the USB packet transfer; error recovery is transparent to the firmware. However
(ERR_LIMIT,COUNT) count can be used to check for the USB bus errors—CRC, bit stuff, etc., and it can trigger an interrupt
when the programmed limit is reached.
NAKALL can be used to temporarily NAK all transactions on the bus while modifying the EP configuration registers.

Bit

Name

Description

31

NAKALL

Set this bit to ‘1’, the hardware will NAK all transfers from the host in all endpoint1-31.

26

SETUP_CLR_BUSY

Allow device to ACK SETUP data/status phase packets

25:23

TEST_MODE[2:0]

USB Test Mode
000
Normal operation
001
Test_J
010
Test_K
011
Test_SE0_NAK
100
Test_Packet
[USB 2.0, §7.1.20, p 169; §9.4.9, Table 9−7, p 259]

continued on next page

400

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.1

DEV_CS (continued)

22:16

DEVICEADDR[6:0]

During the USB enumeration process, the host sends a device a unique 7-bit address, which the USB
core copies into this register. The USB Core will automatically respond only to its assigned address.
During the USB RESET, this register will be cleared to zero.

15:8

COUNT[7:0]

Number of errors detected
To clear the error count write 0 to these bits.

7:0

ERR_LIMIT[7:0]

Error interrupt limit (COUNT ERR_LIMIT will cause UIB_ERR_INTR.ERRLIMIT interrupt)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

401

10.11.2

DEV_FRAMECNT
FRAMECNT Register

DEV_FRAMECNT
b31

FRAMECNT Register
b30

b29

b22

b21

b14

b13

DEV_FRAMECNT
b23

b27

0xE0031404
b26

b25

b24

b18

b17

b16

b10

b9

b8

FRAMECNT Register

DEV_FRAMECNT
b15

b28

b20

b19

FRAMECNT Register
b12

b11

FRAMECNT[10:5]
R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

N/A

N/A

N/A

N/A

N/A

N/A

b1

b0

DEV_FRAMECNT
b7

FRAMECNT Register
b6

b5

b4

b3

b2

FRAMECNT[4:0]

MICROFRAME[2:0]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

N/A

N/A

N/A

N/A

N/A

N/A

N/A

N/A

USB SOF and uSOF frame counts USB.

Bit

Name

Description

13:3

FRAMECNT[10:0]

Every millisecond the host sends a SOF token indicating “Start Of Frame,” along with an 11-bit incrementing frame count. FX3 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.

2:0

MICROFRAME[2:0]

MICROFRAME contains a count 0-7 which indicates which of the eight 125-microsecond microframes last occurred. This register is active only when FX3 is operating at High Speed (480 Mbps).

402

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.3

DEV_PWR_CS
Power Management Control and Status Register

DEV_PWR_CS

Power Management Control and Status Register

b31

b29

b22

b21

b14

b13

b7

b6

b5

b4

b3

b2

HSM

FORCE_FS

DEV_SUSPEND

DISCON

NOSYNSOF

SIGRSUME

DEV_PWR_CS

b28

b27

b26

0xE0031408

b30

b25

b24

b17

b16

b9

b8

Power Management Control and Status Register

b23

DEV_PWR_CS

b20

b19

b18

Power Management Control and Status Register

b15

DEV_PWR_CS

b12

b11

b10

Power Management Control and Status Register
b1

b0

R

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

1

0

0

Bit

Name

Description

7

HSM

If HSM=1, the SIE is operating in High Speed Mode
0-1 transition of this bit causes a HSGRANT interrupt request.

6

FORCE_FS

Forces the device controller to enumerate as Full Speed device.

4

DEV_SUSPEND

Puts the USB device controller and PHY into suspend mode (pull up connected, drivers, PLLs etc
turned off).

3

DISCON

Setting this bit to “1” will disconnect hardware from the USB bus by removing the internal 1.5 K pullup resistor from the D+

2

NOSYNSOF

If set to 1, disable synthesizing missing SOFs.

0

SIGRSUME

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, waits 10-15 ms, then set SIGRSUME = 0.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

403

10.11.4

DEV_SETUPDAT
SETUPDAT0/1 Registers

DEV_SETUPDAT
b63

SETUPDAT0/1 Registers
b62

b61

b60

b59

0xE003140C
b58

b57

b56

SETUP_LENGTH[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b54

b53

b50

b49

b48

DEV_SETUPDAT
b55

SETUPDAT0/1 Registers
b52

b51

SETUP_LENGTH[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

DEV_SETUPDAT
b47

SETUPDAT0/1 Registers
b44

b43

SETUP_INDEX[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

DEV_SETUPDAT
b39

SETUPDAT0/1 Registers
b36

b35

SETUP_INDEX[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

DEV_SETUPDAT
b31

SETUPDAT0/1 Registers
b28

b27

SETUP_VALUE[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

DEV_SETUPDAT
b23

SETUPDAT0/1 Registers
b20

b19

SETUP_VALUE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

DEV_SETUPDAT
b15

SETUPDAT0/1 Registers
b12

b11

SETUP_REQUEST[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

continued on next page

404

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.4

DEV_SETUPDAT (continued)

DEV_SETUPDAT
b7

SETUPDAT0/1 Registers
b6

b5

b4

b3

b2

b1

b0

SETUP_REQUEST_TYPE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

8-byte (2-long word) Storage for USB SETUP data on endpoint0.

Bit

Name

Description

63:48

SETUP_LENGTH[15:0]

Setup data field

47:32

SETUP_INDEX[15:0]

Setup data field

31:16

SETUP_VALUE[15:0]

Setup data field

15:8

SETUP_REQUEST[7:0]

Setup data field

7:0

SETUP_REQUEST_TYPE[7:0]

Setup data field

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

405

10.11.5

DEV_TOGGLE
Data Toggle for Endpoints Register

DEV_TOGGLE
b31

Data Toggle for Endpoints Register
b30

b29

b22

b21

b14

b13

DEV_TOGGLE
b23

b27

0xE0031414
b26

b25

b24

b18

b17

b16

b10

b9

Data Toggle for Endpoints Register

DEV_TOGGLE
b15

b28

b20

b19

Data Toggle for Endpoints Register
b12

b11

b8

TOGGLE_VALID
R/W0C
R/W1S
1

DEV_TOGGLE

Data Toggle for Endpoints Register

b7

b6

b5

b4

Q

S

R

IO

b3

b2

b1

b0

ENDPOINT[3:0]

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Data toggles when all endpoints reset to ‘0’, on power-up, or on USB reset. In general, hardware maintains all the data toggle
bits, which are toggled between data packet transfers. The firmware might need to reset or set data toggle bit only following
conditions:
■

After a configuration changes (i.e., 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.

To change the value of the toggle bit, software must first write ENDPOINT and IO, then poll for TOGGLE_VALID=1, then
write to R/S, then poll again for TOGGLE_VALID=1.

Bit

Name

Description

8

TOGGLE_VALID

Indicates Q is valid for selected endpoint, may be polled in software.
After writing to R/S, indicates write completion.
This bit must be cleared by software to initiate an operation.

7

Q

Current value of toggle bit for EP selected in IO/ENDPOINT

6

S

Write ‘1’ to set data toggle to ‘1’. When both R and S are set, behavior is undefined.

5

R

Write ‘1’ to reset data toggle to ‘0’. When both R and S are set, behavior is undefined.

continued on next page

406

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.5

DEV_TOGGLE (continued)

4

IO

0
1

3:0

ENDPOINT[3:0]

Endpoint

OUT
IN

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

407

10.11.6

DEV_EPI_CS
IN Endpoint Control and Status Register

There are 16 DEV_EPI_CS registers corresponding to each of the possible IN endpoints. The address of each is calculated
as DEV_EPI_CS(x) = 0xE0031418 + (x*0x4). Hence DEV_EPI_CS(0) is at address 0xE0031418, DEV_EPI_CS(1) is at
address 0xE0031418 + 0x4 and so on. The definition of each of these is the same.
DEV_EPI_CS

IN Endpoint Control and Status Register

0xE0031418

b31

b30

b29

b28

b27

b26

ISOERR_MASK

SHORT_MASK

ZERO_MASK

DONE_MASK

BNAK_MASK

COMMIT_MASK

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

ISOERR

SHORT

ZERO

DONE

BNAK

COMMIT

STALL

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

0

0

0

0

0

0

0

b15

b14

b13

NAK

VALID

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

1

0

0

0

0

b6

b5

DEV_EPI_CS

b25

b24

IN Endpoint Control and Status Register

DEV_EPI_CS

b17

b16

IN Endpoint Control and Status Register
b12

b11

ISOINPKS[1:0]

DEV_EPI_CS

b10

b9

TYPE[1:0]

b8

PAYLOAD[9:8]

IN Endpoint Control and Status Register

b7

b4

b3

b2

b1

b0

PAYLOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x40

Endpoint IN Control and Status:
■

Set up USB Package buffering, ISO/BULK/INT, IN/OUT and enable/disable endpoint

■

Power up default the payload is 64-byte (Max payload count for Full Speed). In High Speed, the payload can be up to 512
for BULK and 1024 for ISO.

Bit

Name

Description

31

ISOERR_MASK

Interrupt mask for ISOERR bit

30

SHORT_MASK

Interrupt mask for SHORT bit

29

ZERO_MASK

Interrupt mask for ZERO bit

28

DONE_MASK

Interrupt mask for DONE bit

27

BNAK_MASK

Interrupt mask for BNAK bit

26

COMMIT_MASK

Interrupt mask for COMMIT bit

continued on next page

408

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.6

DEV_EPI_CS (continued)

23

ISOERR

The ISOERR is set when ISO data PIDs arrive out of sequence (applies to high speed only), or when
an ISO packet was dropped because no data was available (FS or HS).

22

SHORT

Indicates a shorter-than-maxsize packet was received, but UIB_EPI_XFER_CNT did not reach 0.

21

ZERO

Indicates a zero-length packet was returned to the host in an IN transaction. Must be cleared by software.

20

DONE

Indicates transfer is done (UIB_EPI_XFER_CNT = 0). This bit must be cleared by software.

19

BNAK

When the host sends an IN token to any Bulk IN endpoint which does not have data to send, the FX3
automatically NAKs the IN token and asserts this interrupt.
Note that this bit will not be set if either the Endpoint NAK or global NAK_ALL bits are set when the
NAK is transmitted

18

COMMIT

Set whenever an IN token was ACKed by the host.

16

STALL

Set this bit to “1” to stall an endpoint, and to “0” to clear a stall.

15

NAK

Setting this bit causes NAK on IN transactions.

14

VALID

Set VALID = 1 to activate an endpoint, and VALID = 0 to deactivate it. All USB endpoints default to
valid. An endpoint whose VALID bit is 0 does not respond to any USB traffic.

13:12

ISOINPKS[1:0]

Number of packets to be sent per microframe (aka high-bandwidth mode ISO). For this implementation only EP3 and EP7 support values other than 1. EP3 and EP7 support values 1..3. This field must
be 0 for non-ISO endpoints.

11:10

TYPE[1:0]

The End Point Type (Control on EP0 only)
00
Control
01
Isochronous
10
Bulk
11
Interrupt

9:0

PAYLOAD[9:0]

Max number of bytes transferred for each token
0
Value 0 means 1024. Power up default value is 64.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

409

10.11.7

DEV_EPI_XFER_CNT
IN Endpoint Remaining Transfer Length Register

There are 16 DEV_EPI_XFER_CNT registers. The address of each is calculated as DEV_EPI_XFER_CNT(x) = 0xE0031458
+ (x*0x4). Hence DEV_EPI_XFER_CNT(0) is at address 0xE0031458, DEV_EPI_XFER_CNT(1) is at address 0xE0031458 +
0x4 and so on. The definition of each of these is the same.
DEV_EPI_XFER_CNT
b31

IN Endpoint Remaining Transfer Length Register
b30

b29

b22

b21

DEV_EPI_XFER_CNT
b23

b28

b27

b26

0xE0031458
b25

b24

b18

b17

b16

IN Endpoint Remaining Transfer Length Register
b20

b19

BYTES_REMAINING[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

DEV_EPI_XFER_CNT
b15

IN Endpoint Remaining Transfer Length Register
b12

b11

BYTES_REMAINING[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

1

b6

b5

b2

b1

b0

DEV_EPI_XFER_CNT
b7

IN Endpoint Remaining Transfer Length Register
b4

b3

BYTES_REMAINING[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register counts down the remaining bytes left in the transfer.

Bit

Name

Description

23:0

BYTES_REMAINING[23:0] Number of bytes remaining in the transfer. This value will never go negative (if more bytes are transferred than remaining in counter, counter value stays at 0). The value in this register is used only for
generating the DONE interrupt for the endpoint, and does not affect the actual data transfers.

410

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.8

DEV_EPO_CS
OUT Endpoint Control and Status Register

There are 16 DEV_EPO_CS registers. The address of each is calculated as DEV_EPO_CS(x) = 0xE0031498 + (x*0x4).
Hence DEV_EPO_CS(0) is at address 0xE0031498, DEV_EPO_CS(1) is at address 0xE0031498 + 0x4 and so on. The definition of each of these is the same.
DEV_EPO_CS

OUT Endpoint Control and Status Register

0xE0031498

b31

b30

b29

b28

b27

b26

b25

ISOERR_MASK

SHORT_MASK

ZERO_MASK

DONE_MASK

BNAK_MASK

COMMIT_MASK

OVF_MASK

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

ISOERR

SHORT

ZERO

DONE

BNAK

COMMIT

OVF

STALL

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

0

0

0

0

0

0

0

0

b15

b14

b13

b10

b9

NAK

VALID

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

1

0

0

0

0

b6

b5

DEV_EPO_CS

b24

OUT Endpoint Control and Status Register

DEV_EPO_CS

OUT Endpoint Control and Status Register
b12

b11

ISOINPKS[1:0]

DEV_EPO_CS

TYPE[1:0]

b8

PAYLOAD[9:8]

OUT Endpoint Control and Status Register

b7

b4

b3

b2

b1

b0

PAYLOAD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x40

Endpoint OUT Control and Status:
■

Set up USB Package buffering, ISO/BULK/INT, IN/OUT and enable/disable endpoint

■

Power up default the payload is 64-byte (Max payload count for Full Speed). In High Speed, the payload can be up to 512
for BULK and 1024 for ISO.

Bit

Name

Description

31

ISOERR_MASK

Interrupt mask for ISOERR bit

30

SHORT_MASK

Interrupt mask for SHORT bit

29

ZERO_MASK

Interrupt mask for ZERO bit

28

DONE_MASK

Interrupt mask for DONE bit

27

BNAK_MASK

Interrupt mask for BNAK bit

26

COMMIT_MASK

Interrupt mask for COMMIT bit

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

411

10.11.8

DEV_EPO_CS (continued)

25

OVF_MASK

Interrupt mask for OVF bit

23

ISOERR

The ISO_ERR is set when ISO data PIDs arrive out of sequence (applies to high speed only), or
when an ISO packet was dropped because no data was available (FS or HS).

22

SHORT

Indicates a shorter-than-maxsize packet was received, but UIB_EPI_XFER_CNT did not reach 0).

21

ZERO

Indicates a zero-length packet was returned to the host in an IN transaction. Must be cleared by software.

20

DONE

Indicates transfer is done (UIB_EPI_XFER_CNT = 0). This bit must be cleared by software.

19

BNAK

When the host sends a PING/OUT token to any Bulk OUT endpoint, which does not have an empty
buffer, the FX3 automatically NAKs the token and asserts this interrupt.
Note that this bit will be set if there is no empty buffer at the receipt of the OUT Packet and if neither
the Endpoint NAK or global NAK_ALL bits are set when the NAK is transmitted.

18

COMMIT

Set whenever device controller ACKs an OUT token.

17

OVF

Indicates a packet was received in an OUT token with more bytes than PAYLOAD.

16

STALL

Set this bit to “1” to stall an endpoint, and to “0” to clear a stall.

15

NAK

Setting this bit causes NAK on OUT and PING transactions.

14

VALID

Set VALID = 1 to activate an endpoint, and VALID = 0 to deactivate it. All USB endpoints default to
valid. An endpoint whose VALID bit is 0 does not respond to any USB traffic.

13:12

ISOINPKS[1:0]

Number of packets to be sent per microframe (aka high-bandwidth mode ISO). For this implementation only EP3 and EP7 support values other than 1. EP3 and EP7 support values 1..3. This field must
be 0 for non-ISO endpoints.

11:10

TYPE[1:0]

The End Point Type (Control on EP0 only)
00
Control
01
Isochronous
10
Bulk
11
Interrupt

9:0

PAYLOAD[9:0]

Max number of bytes transferred for each token
0
Value 0 means 1024. Power up default value is 64.

412

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.9

DEV_EPO_XFER_CNT
OUT Endpoint Remaining Transfer Length Register

There are 16 DEV_EPO_XFER_CNT registers. The address of each is calculated as DEV_EPO_XFER_CNT(x) =
0xE00314D8 + (x*0x4). Hence DEV_EPO_XFER_CNT(0) is at address 0xE00314D8, DEV_EPO_XFER_CNT(1) is at
address 0xE00314D8 + 0x4 and so on. The definition of each of these is the same.
DEV_EPO_XFER_CNT
b31

OUT Endpoint Remaining Transfer Length Register
b30

b29

b22

b21

DEV_EPO_XFER_CNT
b23

b28

b27

b26

0xE00314D8
b25

b24

b18

b17

b16

OUT Endpoint Remaining Transfer Length Register
b20

b19

BYTES_REMAINING[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

DEV_EPO_XFER_CNT
b15

OUT Endpoint Remaining Transfer Length Register
b12

b11

BYTES_REMAINING[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b2

b1

b0

DEV_EPO_XFER_CNT
b7

OUT Endpoint Remaining Transfer Length Register
b6

b5

b4

b3

BYTES_REMAINING[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register counts down the remaining bytes left in the transfer.

Bit

Name

Description

23:0

BYTES_REMAINING[23:0] Number of bytes remaining in the transfer. This value will never go negative (if more bytes are transferred than remaining in counter, counter value stays at 0).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

413

10.11.10 DEV_CTRL_INTR_MASK
CONTROL Interrupt Mask Register
DEV_CTRL_INTR_MASK
b31

b30

CONTROL Interrupt Mask Register
b29

DEV_CTRL_INTR_MASK
b23

b22

b14

0xE0031518

b27

b26

b25

b24

b18

b17

b16

b10

b9

CONTROL Interrupt Mask Register
b21

DEV_CTRL_INTR_MASK
b15

b28

b20

b19

CONTROL Interrupt Mask Register
b13

DEV_CTRL_INTR_MASK

b12

b11

b8

STATUS_STAGE

URESUME

R/W

R/W

R

R

0

0

CONTROL Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

ERRLIMIT

SUDAV

SUTOK

HSGRANT

URESET

SUSP

SOF

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

b0

This register is used to mask/unmask the interrupt sources from the DEV_CTRL_INTR register. Setting any of the bits
enables the corresponding interrupt source.

Bit

Name

Description

11

STATUS_STAGE

Set when host completes Status Stage of a Control Transfer

8

URESUME

Set when the host has initiated USB RESUME (>2.5 µs K state on bus)

7

ERRLIMIT

USB Error limit detect from UIB_DEV_CS (COUNT ERR_LIMIT)

6

SUDAV

Set when a valid SETUP token and data is received. SETUP data is available from
UIB_DEV_SETUPDAT.

5

SUTOK

Set whenever a (valid of invalid) SETUP token is received

4

HSGRANT

Set when the host grants high speed communications.

3

URESET

Set when the host has initiated USB RESET (2.5 µs single ended 0 on bus)

2

SUSP

Set when the host suspends the USB bus (USB SUSPEND)

1

SOF

Set whenever a SOF occurs

414

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.11 DEV_CTRL_INTR
CONTROL Interrupt Request Register
DEV_CTRL_INTR_MASK
b31

b30

CONTROL Interrupt Request Register
b29

DEV_CTRL_INTR_MASK
b23

b22

b14

0xE003151C

b27

b26

b25

b24

b18

b17

b16

b10

b9

CONTROL Interrupt Request Register
b21

DEV_CTRL_INTR_MASK
b15

b28

b20

b19

CONTROL Interrupt Request Register
b13

DEV_CTRL_INTR_MASK

b12

b11

b8

STATUS_STAGE

URESUME

R/W1C

R/W1C

R/W1S

R/W1S

0

0

CONTROL Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

ERRLIMIT

SUDAV

SUTOK

HSGRANT

URESET

SUSP

SOF

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

b0

This register provides the interrupt status for various USB 2.0 related interrupt sources.

Bit

Name

Description

11

STATUS_STAGE

Set when host completes Status Stage of a Control Transfer

8

URESUME

Set when the host has initiated USB RESUME (>2.5 µs K state on bus)

7

ERRLIMIT

USB Error limit detect from UIB_DEV_CS (COUNT ERR_LIMIT)

6

SUDAV

Set when a valid SETUP token and data is received. SETUP data is available from
UIB_DEV_SETUPDAT.

5

SUTOK

Set whenever a (valid of invalid) SETUP token is received

4

HSGRANT

Set when the host grants high speed communications.

3

URESET

Set when the host has initiated USB RESET (2.5 µs single ended 0 on bus)

2

SUSP

Set when the host suspends the USB (USB SUSPEND)

1

SOF

Set whenever a SOF occurs

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

415

10.11.12 DEV_EP_INTR_MASK
USB EP Interrupt Mask Register
DEV_EP_INTR_MASK
b31

USB EP Interrupt Mask Register
b30

b29

b28

0xE0031520

b27

b26

b25

b24

EP_OUT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

DEV_EP_INTR_MASK
b23

USB EP Interrupt Mask Register
b20

EP_OUT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

DEV_EP_INTR_MASK
b15

USB EP Interrupt Mask Register
b12

EP_IN[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

DEV_EP_INTR_MASK
b7

USB EP Interrupt Mask Register
b4

EP_IN[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

USB Endpoint 0-31 interrupt masks.

Bit

Name

Description

31:16

EP_OUT[15:0]

Bit <16+x> masks any interrupt from EPO_CS[x].
1
Enable Interrupt
0
Mask (disable) Interrupt

15:8

EP_IN[15:0]

Bit  masks any interrupt from EPI_CS[x]
1
Enable Interrupt
0
Mask (disable) Interrupt

416

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.11.13 DEV_EP_INTR
USB EP Interrupt Request Register
DEV_EP_INTR
b31

USB EP Interrupt Request Register
b30

b29

b28

b27

0xE0031524
b26

b25

b24

EP_OUT[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

DEV_EP_INTR
b23

USB EP Interrupt Request Register
b20

b19

EP_OUT[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

DEV_EP_INTR
b15

USB EP Interrupt Request Register
b12

b11

EP_IN[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

DEV_EP_INTR
b7

USB EP Interrupt Request Register
b4

b3

EP_IN[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

USB Endpoint 0-31 interrupt status. The status bit indicates that at least one of the interrupts enabled by the DEV_EPI_CS/
DEV_EPO_CS register is active. The specific interrupt source should be identified by reading the DEV_EPI_CS/
DEV_EPO_CS register.

Bit

Name

Description

31:16

EP_OUT[15:0]

Bit <16+x> is set if any interrupts in EPO_CS[x] are active

15:8

EP_IN[15:0]

Bit  is set if any interrupt in EPI_CS[x] are active

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

417

10.12 USB Controller Miscellaneous Registers
10.12.1

CHGDET_CTRL
Charger Detect Control and Configuration Register

CHGDET_CTRL

Charger Detect Control and Configuration Register

b31

b30

b29

b28

b27

0xE0031800

b26

PHY_CHARGER_
DETECT_EN

b25

b24

ACA_RTRIM[2:0]

R/W

R/W

R/W

R/W

W

R

R

R

0

0

0

0

b17

b16

CHGDET_CTRL

Charger Detect Control and Configuration Register

b23

b22

b21

b20

b19

b18

ACA_ADC_OUT[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b9

b8

N/A

CHGDET_CTRL

Charger Detect Control and Configuration Register

b15

b14

b13

b12

CARKIT

ACA_CONN_
MODE

ACA_ENABLE

R/W

R/W

R/W

R

R

R

R

R

R

R/W

R/W

R/W

0

0

0

CHGDET_CTRL
b7

b11

b10

ACA_OTG_ID_VALUE[2:0]

N/A

Charger Detect Control and Configuration Register
b6

b5

b4

ACA_RTRIM_
OVERRIDE

b3

b2

b1

b0

PHY_CHG_
DETECTED

ACA_POLL_INTERVAL[3:0]

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R/W

0

0

0

0

0

0

Bit

Name

Description

31

PHY_CHARGER_DETECT_EN

PHY Charger Detection Enable

26:24

ACA_RTRIM[2:0]

ACA Comparison Resistor Trim

23:16

ACA_ADC_OUT[7:0]

ACA ADC Output

continued on next page

418

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.12.1

CHGDET_CTRL (continued)

14

CARKIT

Carkit Adaptor Enable
0
USB Mode (normal USB operation)
1
USB PHY UART mode
In UART mode D+/D- are routed (digitally) to carkit UART signals (P-Port pads or LPP
UART pads as selected by GCTL_IOMATRIX).

13

ACA_CONN_MODE

Charger Connection Mode
0
Standard ACA/Charger
1
Motorola Enhanced Mini-USB (EMU) Requirements

12

ACA_ENABLE

Enable ACA OTG ID Detection
0
Disabled
1
Enabled

11:9

ACA_OTG_ID_VALUE[2:0]

Decoded OTG ID Value
If ACA_CONN_MODE == 0 --> Standard ACA/Charger Mode
000
OTG 1.3 B-Device (RID_GND: 0...1kΩ)
001
OTG 1.3 A-Device (RID_FLOAT_CHG: >220 kΩ)
010
ACA A-Device (RID_A_CHG: 119...13 2 kΩ)
011
ACA B-Device (RID_B_CHG: 65...72 kΩ)
100
ACA C-Device (RID_C_CHG: 35...39 kΩ)
If ACA_CONN_MODE == 1 --> Motorola EMU Mode
000
OTG 1.3 B-Device (RID_GND: 0...1 kΩ)
001
OTG 1.3 A-Device (RID_FLOAT_CHG: >1000 kΩ)
010
MPX.200 VPA (RPROP_ID1: <10.1 kΩ)
011
Non-Intelligent Charging Device (RPROP_ID2: 101...103 kΩ)
100
Mid-Rate Charger (RPROP_ID3: 198...202 kΩ)
101
Fast Charger (RPROP_ID4: 435.6...444.4 kΩ)
[Battery Charging Specification: Table 5-3, p 29]
[Motorola Enhanced Mini-USB (EMU) Requirements: §4.1.2, Table 1, p 9; §4.2.3, Table 4, p
12; §4.2.6, p 15...16; Appendix A, p 24...25]
[ll65aca25 BROS 001-47035*D: Tables 5 & 6, p 32]]

5

ACA_RTRIM_OVERRIDE

ACA Comparison Resistor Trim Override

4:1

ACA_POLL_INTERVAL[3:0]

ACA OTG ID Polling Interval in 16ms increments, 0000 = 16ms

0

PHY_CHG_DETECTED

PHY USB Charger Present

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

419

10.12.2

CHGDET_INTR
Charger Detect Interrupt Register

CHGDET_INTR
b31

Charger Detect Interrupt Register
b30

b29

b22

b21

b14

b13

b6

b5

CHGDET_INTR
b23

0xE0031804
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

Charger Detect Interrupt Register

CHGDET_INTR
b7

b27

Charger Detect Interrupt Register

CHGDET_INTR
b15

b28

b12

b11

Charger Detect Interrupt Register
b4

b3

b2

b1

b0

CHG_DET_
CHANGE

OTG_ID_CHANGE

R/W1C

R/W1C

W1S

W1S

0

0

Bit

Name

Description

1

CHG_DET_CHANGE

USB Charger Detect Change Interrupt

0

OTG_ID_CHANGE

OTG ID Change Interrupt
Indicates that the decoded value of the USB OTG ID signal has changed.

420

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.12.3

CHGDET_INTR_MASK
Charger Detect Interrupt Mask Register

CHGDET_INTR_MASK
b31

Charger Detect Interrupt Mask Register
b30

b29

b22

b21

b14

b13

b6

b5

CHGDET_INTR_MASK
b23

0xE0031808
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

Charger Detect Interrupt Mask Register

CHGDET_INTR_MASK
b7

b27

Charger Detect Interrupt Mask Register

CHGDET_INTR_MASK
b15

b28

b12

b11

Charger Detect Interrupt Mask Register
b4

b3

Bit

Name

Description

1

CHG_DET_CHANGE

0
1

Mask interrupt
Report interrupt to higher level

0

OTG_ID_CHANGE

0
1

Mask interrupt
Report interrupt to higher level

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

b2

b1

b0

CHG_DET_
CHANGE

OTG_ID_CHANGE

R/W

R/W

R

R

0

0

421

10.12.4

OTG_CTRL
OTG Control Register

OTG_CTRL

OTG Control Register

b31

b29

b22

b21

b14

b13

b12

b11

b10

b9

b8

DEV_ENABLE

HOST_ENABLE

B_END_SESS

B_SESS_VALID

A_SESS_VALID

DSCHG_VBUS

OTG_CTRL

b28

b27

0xE003180C

b30

b26

b25

b24

b18

b17

b16

OTG Control Register

b23

OTG_CTRL

b20

b19

OTG Control Register

b15

SSEPM_ENABLE SSDEV_ENABLE
R/W

R/W

R/W

R/W

R

R

R

R/W

R

R

R

R

R/W

R/W

R/W

R

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

CHG_VBUS

VBUS_VALID

DM

DP

DP_PD_EN

DM_PD_EN

DP_PU_EN

OTG_ENABLE

OTG_CTRL

OTG Control Register

R/W

R

R

R

R/W

R/W

R/W

R/W

R

R/W

R/W

R/W

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

15

SSEPM_ENABLE

EPM role select
0
EPM connected to high-speed host/device
1
EPM connected to superspeed device
This bit is required because SSDEVE_ENABLE and DEV_ENABLE can be used concurrently.

14

SSDEV_ENABLE

Enables the Super Speed device function.
Behavior depends on settings of HOST_ENABLE, and DEV_ENABLE fields and is defined in the
HOST_ENABLE field.

13

DEV_ENABLE

Enables the USB 1.1/2.0 device function.
Behavior depends on settings of HOST_ENABLE, and SSDEV_ENABLE fields and is defined in the
HOST_ENABLE field.

continued on next page

422

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.12.4

OTG_CTRL (continued)

12

HOST_ENABLE

Host/Peripheral Role Select, Enables the host function.
Complete description depends on fields: DEV_ENABLE, and SSDEV_ENABLE. Combined Behavior
is as follows for the following combination of fields:
DEV_ENABLE: HOST_ENABLE: SSDEV_ENABLE
0:
0:
0:
No USB Functionality Enabled
0:
0:
1:
USB 3.0 SS Device only is enabled.
0:
1:
0:
OTG Host function only is enabled. Both SS and USB
1.1/2.0 device functions are disabled
0:
1:
1:
****ILLEGAL******
1:
0:
0:
USB 1.1/2.0 Device function enabled. SS Device and
OTG Host function disabled.
1:
0:
1:
USB 1.1/2.0 Device with USB 3.0 SS Device along
with Rx Detect functions are allowed. OTG Host
Function not allowed
1:
1:
0:
***** ILLEGAL except as intermediate value during
switching between 010 and 100 *****
1:
1:
1:
****ILLEGAL******

11

B_SESS_VALID

Vbus B Session End
0
Vbus > 0.8V
1
Vbus < 0.2V

10

B_SESS_VALID

Vbus Valid for B Session
0
Vbus < 0.8V
1
Vbus > 4.0V

9

A_SESS_VALID

bus Valid for A Session
0
Vbus < 0.8V
1
Vbus > 2.0V

8

DSCHG_VBUS

Discharge Vbus

7

CHG_VBUS

Charge Vbus

6

VBUS_VALID

Vbus Valid
0
Vbus < 4.4V
1
Vbus > 4.7V

5

DM

D– line state

4

DP

D+ line state

3

DP_PD_EN

D+ line state

2

DM_PD_EN

D– Pull-down Enable

1

DP_PU_EN

D+ Pull-up Enable

0

OTG_ENABLE

OTG Enable

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

423

10.12.5

OTG_INTR
OTG Interrupt Register

OTG_INTR
b31

OTG Interrupt Register
b30

b29

b22

b21

b14

b13

b6

b5

OTG_INTR
b23

b20

b19

b12

b11

b25

b24

b18

b17

b16

b10

b9

b8

b1

b0

OTG Interrupt Register
b3

b2

SRP_VBUS_INT

SRP_DP_INT

B_END_SESS_
INT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

OTG_TIMER_
TIMEOUT

b4

Bit

Name

Description

5

OTG_TIMER_TIMEOUT

OTG Timer Timeout Interrupt
The OTG Timer has reached its terminal count of 0.

4

SRP_VBUS_INT

VBUS SRP Interrupt
A B-Device initiated SRP by pulsing the VBUS line.

3

SRP_DP_INT

D+ SRP Interrupt
A B-Device initiated SRP by pulsing the D+ signal.

2

B_END_SESS_INT

B_END_SESS Interrupt
Set when B_END_SESS goes active

1

B_SESS_VALID_INT

B_SESS_VALID Change Interrupt
Set when B_SESS_VALID changes.

0

A_SESS_VALID_INT

A_SESS_VALID Change Interrupt
Set when A_SESS_VALID changes.

424

b26

OTG Interrupt Register

OTG_INTR
b7

0xE0031810

b27

OTG Interrupt Register

OTG_INTR
b15

b28

B_SESS_VALID_I A_SESS_VALID_
NT
INT

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.12.6

OTG_INTR_MASK
OTG Interrupt Mask Register

OTG_INTR_MASK
b31

OTG Interrupt Mask Register
b30

b29

b22

b21

b14

b13

b6

b5

b28

OTG_INTR_MASK
b23

b20

b25

b24

b19

b18

b17

b16

b10

b9

b8

b1

b0

OTG Interrupt Mask Register
b12

OTG_INTR_MASK
b7

b26

OTG Interrupt Mask Register

OTG_INTR_MASK
b15

0xE0031814

b27

b11

OTG Interrupt Mask Register
b4

b3

b2

SRP_VBUS_INT

SRP_DP_INT

B_END_SESS_
INT

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

OTG_TIMER_
TIMEOUT

Bit

Name

Description

5

OTG_TIMER_TIMEOUT

1
0

Report OTG Timer Timeout to higher level
Mask OTG Timer Timeout event

4

SRP_VBUS_INT

1
0

Report VBUS SRP event to higher level
Mask VBUS SRP event

3

SRP_DP_INT

1
0

Report D+ SRP Interrupt to higher level
Mask D+ SRP event

2

B_END_SESS_INT

1
0

Report B_END_SESS Interrupt to higher level
Mask B_END_SESS event

1

B_SESS_VALID_INT

1
0

Report B_SESS_VALID changes to higher level
Mask B_SESS_VALID change event

0

A_SESS_VALID_INT

1
0

Report A_SESS_VALID changes to higher level
Mask A_SESS_VALID change event

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

B_SESS_VALID_I A_SESS_VALID_
NT
INT

425

10.12.7

OTG_TIMER
OTG Timer Register

OTG_TIMER
b31

OTG Timer Register
b30

b29

b28

b27

0xE0031818
b26

b25

b24

OTG_TIMER_LOAD_VAL[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

OTG_TIMER
b23

OTG Timer Register
b20

b19

OTG_TIMER_LOAD_VAL[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

OTG_TIMER
b15

OTG Timer Register
b12

b11

OTG_TIMER_LOAD_VAL[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

OTG_TIMER
b7

OTG Timer Register
b4

b3

OTG_TIMER_LOAD_VAL[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

General timer register to create OTG timeouts. This counter decrements down at 32-kHz standby clock.

Bit

Name

Description

31:0

OTG_TIMER_LOAD_VAL[31:0]

Initial counter value. After OTG_TIMER_LOAD_VAL clocks, OTG_TIMER_TIMEOUT will
trigger. Disable counter by writing 0 to this register.

426

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.13 USB End Point Manager Registers
10.13.1

EEPM_CS
Egress EPM Retry Buffer Status Register

EEPM_CS
b31

Egress EPM Retry Buffer Status
b30

b29

b28

b27

0xE0031C00
b26

b25

b24

EG_EPNUM[3:0]
R

R

R

R

R/W

R/W

R/W

R/W

0

0

0

0

b22

b21

EEPM_CS
b23

Egress EPM Retry Buffer Status
b20

b19

b18

URUN_EP_NUM[3:1]

b16

URUN_REPAIR_
EN

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R

R

0

0

0

0

1

1

b10

b9

b8

EEPM_CS
b15

b17

URUN_REPAIR_
TIMEOUT_EN

Egress EPM Retry Buffer Status
b14

b13

b12

b11

VALID_PACKETS[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

EEPM_CS
b7

Egress EPM Retry Buffer Status
b4

b3

VALID_PACKETS[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register provides the status of the retry buffer in the Egress EPM for debug purposes only. In SuperSpeed mode, the
retry buffer is a circular buffer of 16x1KB holding the last packets bursted out. Software is expected to 'unroll' the corresponding socket when a retry buffer is flushed by the protocol layer (based on Protocol Layer error interrupts). In High-Speed mode,
there is a single 1-KB retry buffer for each endpoint. The data contained can remain in the buffer indefinitely; there is no need
for a software rollback in this case.

Bit

Name

Description

31:28

EG_EPNUM[3:0]

Active Endpoint Number

21:18

URUN_EP_NUM[3:0]

The Endpoint that the underrun occurred.

17

URUN_REPAIR_TIMEOUT_EN

If an under run occurs and the URUN_REPAIR_EN is set and this register bit is set, then
EPM will start a timer (16-bit counter). If the repair is not complete after 65535*epm clock,
EPM will raise the UIB_INTR.EPM_URUN_TIMEOUT interrupt.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

427

10.13.1

EEPM_CS (continued)

16

URUN_REPAIR_EN

This bit will repair the EPM whenever there is under run due to SYSTEM EPM will keep on reading
the packet from SYSMEM whenever data is ready from SYSMEM. If an underrun occurs, EPM will
raise the UIB_INTR.EPM_URUN interrupt.

15:0

VALID_PACKETS

Bit vector indicating which of the 16 retry buffer contain a valid packet.
In SuperSpeed mode, this buffer functions as a circular buffer trailing packets that can be retried
behind the WRITE_PTR. In High-Speed mode, each End Point has 1 retry buffer that may independently valid or invalid.
These bits are cleared when the Protocol Layer 'activates' an End Point (as opposed to 'reactivating'
it). In SuperSpeed mode all bits are cleared at once, in High-Speed mode only the bit for the Endpoint
being activated is cleared.

428

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.13.2

IEPM_CS
Ingress EPM Control and Status Register

IEPM_CS

Ingress EPM Control and Status

b31

b30

b28

EPM_MUX_RESET

EPM_FLUSH

R/w

R/w

R

R

R

R

R

R

R/W

R/W

R/W

R/W

0

0

0

0

0

0

b18

b17

b16

IEPM_CS

b27

0xE0031C04

b29

b26

b25

b24

WRITE_PTR[11:8]

Ingress EPM Control and Status

b23

b22

b21

b20

b19

WRITE_PTR[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b9

b8

IEPM_CS

Ingress EPM Control and Status

b15

b12

b11

b10

READ_PTR[11:8]

IEPM_CS

R

R

R

R

R/W

R/W

R/W

R/W

0

0

0

0

b2

b1

b0

Ingress EPM Control and Status

b7

b6

b5

b4

b3

READ_PTR[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register contains the read/write pointers for the ingress buffer and allows popping of entries from the FIFO. It is for
debugging purposes only.

Bit

Name

Description

29

EPM_MUX_RESET

This will reset the EPM Mux.

28

EPM_FLUSH

This will flush both the Egress and Ingress EPM.

27:16

WRITE_PTR[11:0]

Write pointer of the ingress buffer.

11:0

READ_PTR[11:0]

Read pointer of the ingress buffer.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

429

10.13.3

IEPM_MULT
Ingress EPM MULT Function Control Register

IEPM_MULT
b31

Ingress EPM MULT Function Control Register
b30

b29

b28

b27

0xE0031C08
b26

b25

b24

MULT_THRSHOLD[10:9]

IEPM_MULT
b23

R/W

R/W

R

R

b18

b17

b16

Ingress EPM MULT Function Control Register
b22

b21

b20

b19

MULT_THRSHOLD[8:1]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b14

b13

b10

b9

b8

IEPM_MULT
b15

Ingress EPM MULT Function Control Register
b12

MULT_
THRSHOLD[0]

b11

MULT_EN[14:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

IEPM_MULT
b7

Ingress EPM MULT Function Control Register
b4

MULT_EN[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register contains the MULT enables and threshold value used by all the ingress EP except EP0.

Bit

Name

Description

25:15

MULT_THRSHOLD[10:0]

This field is used to when evaluate the mult signal from ingress adapter.
If number of packet space available in the buffer goes down by this field, then mult signal from
adapter will be evaluated and if it is set the original buffer space (number of packets) is added to
NUM_PACKETS in the IEPM_ENDPOINT register.

14:0

MULT_EN[14:0]

Mult Enable for EP1-15.

430

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.13.4

EEPM_ENDPOINT
Egress EPM Retry Buffer Status

There are 16 EEPM_ENDPOINT registers. The address of each is calculated as EEPM_ENDPOINT(x) = 0xE0031C40 +
(x*0x4). Hence EEPM_ENDPOINT(0) is at address 0xE0031C40, EEPM_ENDPOINT(1) is at address 0xE0031C40 + 0x4
and so on. The definition of each of these is the same.
EEPM_ENDPOINT
b31

Egress EPM Retry Buffer Status
b30

b29

b28

SOCKET_FLUSH EEPM_EP_READY

b27

0xE0031C40
b26

ZLP

b25

b24

EEPM_BYTE_COUNT[15:13]

R/W

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

b18

b17

b16

EEPM_ENDPOINT
b23

Egress EPM Retry Buffer Status
b22

b21

b20

b19

EEPM_BYTE_COUNT[12:5]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b9

b8

EEPM_ENDPOINT
b15

Egress EPM Retry Buffer Status
b12

b11

b10

EEPM_BYTE_COUNT[4:0]

PACKET_SIZE[10:8]

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

EEPM_ENDPOINT
b7

Egress EPM Retry Buffer Status
b4

b3

PACKET_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

These registers contain the status fields for each end point (or mapped stream in SuperSpeed Streams mode). The number
of packets available on each end point is computed from the SIZE and BYTE_COUNT of the currently loaded descriptor and
the availability of a next descriptor (using the credit counters in the DMA Adapter). If the current buffer is completely full
(BYTE_COUNT==SIZE) and the next buffer is already available, the available packet count is (BYTE_COUNT/
PACKET_SIZE)+1, otherwise it is round-up integral value of (BYTE_COUNT/PACKET).

Bit

Name

Description

31

SOCKET_FLUSH

This bit will flush the corresponding socket.

30

EEPM_EP_READY

The EPM condition used by USB block

27

ZLP

ZLP present in the current buffer

26:11

EEPM_BYTE_COUNT[15:0]

Number of bytes in the current buffer

10:0

PACKET_SIZE[10:0]

Maximum packet size for this end-point. Typically this value is 1024, 512, 64, 1023 (last 2
for USB2 only).

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

431

10.13.5

IEPM_ENDPOINT
Ingress EPM Per Endpoint Control and Status Register

IEPM_ENDPOINT

Ingress EPM Per Endpoint Control and Status Register

b31

b30

SOCKET_FLUSH

EOT_EOP

R/W

R/W

R

R

0

0

b29

IEPM_ENDPOINT

b28

b27

b26

0xE0031C80
b25

b24

b17

b16

Ingress EPM Per Endpoint Control and Status Register

b23

b22

b21

b20

b19

EP_READY
R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

b9

b8

IEPM_ENDPOINT
b15

b18

NUM_IN_PACKETS[10:5]

Ingress EPM Per Endpoint Control and Status Register
b14

b13

b12

b11

b10

NUM_IN_PACKETS[4:0]

PACKET_SIZE[10:8]

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

0

0

0

0

0

b2

b1

b0

IEPM_ENDPOINT
b7

Ingress EPM Per Endpoint Control and Status Register
b6

b5

b4

b3

PACKET_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1024

These register contain the status fields for each end-point (or mapped stream in SuperSpeed Streams mode). The number of
packets for which space is available on each end point is computed from the SIZE and BYTE_COUNT of the currently loaded
descriptor and the availability of a next descriptor (using the credit counter in the DMA Adapter). If the next descriptor is available, available packet count is Round-down integral value of ((2*SIZE-BYTE_COUNT)/PACKET_SIZE), otherwise it is
Round-down integral value of ((SIZE-BYTE_COUNT)/PACKET_SIZE)).

Bit

Name

31

SOCKET_FLUSH

This bit will flush the corresponding socket.

30

EOT_EOP

Configure end-of-packet signalling to DMA adapter.
0
Send EOP at the end of a full packet and EOT for short/zlp packets
1
Send EOT at the end of every packet
Setting this bit to 1 is useful for variable size packet endpoints only.

22

EP_READY

The EPM condition used by USB block.

21:11

NUM_IN_PACKETS[10:0

Number of packets that are guaranteed to fit in the remaining buffer space of the current and next
buffers. If the computed number of packets available is larger than 16, this number will be assumed to
be 16 in the protocol block.

10:0

PACKET_SIZE[10:0]

Maximum packet size for this end-point. Typically this value is 1024, 512, 64, 1023 (last 2 for USB2
only).

432

Description

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.13.6

IEPM_FIFO
Ingress EPM FIFO Entry Register

IEPM_FIFO
b31

Ingress EPM FIFO Entry Register
b30

b29

b22

b21

IEPM_FIFO
b23

b28

b27

0xE0031CC0
b26

b25

b18

b17

b24

Ingress EPM FIFO Entry Register
b20

b19

b16

EP_VALID
R
R/W
0

IEPM_FIFO
b15

Ingress EPM FIFO Entry Register
b14

b13

b12

b11

IN_EPNUM[3:0]

b10

EOT

b9

b8

BYTES[10:8]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

IEPM_FIFO
b7

Ingress EPM FIFO Entry Register
b4

b3

BYTES[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register provides the status of the EP that is on the top of the queue in the Ingress EPM.

Bit

Name

Description

16

EP_VALID

Entry is valid

15:12

IN_EPNUM[3:0]

Endpoint number for this packet

11

EOT

End of Transfer. Set for by the protocol layer short and zero length packets; forwarded to DMA
Adapter.

10:0

BYTES[10:0]

Number of bytes in the packet

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

433

10.14 USB2 Host Controller Registers
10.14.1

HOST_CS
Host Controller Command and Status Bits Register

HOST_CS
b31

Host Controller Command and Status Bits Register
b30

b29

b28

b27

b26

0xE0032000
b25

b24

DEACTIVATE_ON
_IN_EP_SHORT_
PKT
R/W
R
1

HOST_CS
b23

Host Controller Command and Status Bits Register
b22

b21

b20

DISABLE_EHCI_
HOSTERR

b19

b18

b17

b16

FRAME_FIT_OFFSET[14:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

HOST_CS
b15

Host Controller Command and Status Bits Register
b12

b11

FRAME_FIT_OFFSET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

HOST_CS
b7

Host Controller Command and Status Bits Register
b6

b5

b4

b3

0

DEV_ADDR[6:0]

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

24

DEACTIVATE_ON_IN_EP_SHORT_PKT

0
1

In a case where Device is sending a short packet and the total byte count
does NOT reach zero, host does not deactivate that EP.
In a case where Device is sending a short packet and the total byte count
does NOT reach zero, host deactivates that EP.

23

DISABLE_EHCI_HOSTERR

0
1

22:8

FRAME_FIT_OFFSET[14:0]

This register is used for frame fit calculation in the host controller. The recommended values are listed in below:
EHCI Mode:
212
OHCI (Full Speed)
190
OHCI (Low Speed)
20

6:0

DEV_ADDR[6:0]

This register contains device address to which host wishes to communicate. Host
sends this address to device using set_address command. This address also used
by SIE to append this address with different tokens.

434

EHCI_INTR.HOST_SYS_ERR_IE works as documented (normal)
HOST_SYS_ERR functionality is disabled

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.2

HOST_EP_INTR
Host End Point Interrupt Register

HOST_EP_INTR
b31

Host End Point Interrupt Register
b30

b29

b28

b27

0xE0032004
b26

b25

b24

EPI_IRQ_TOP[15:8]
R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

HOST_EP_INTR
b23

Host End Point Interrupt Register
b20

b19

EPI_IRQ_TOP[7:0]
R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

HOST_EP_INTR
b15

Host End Point Interrupt Register
b12

b11

EPO_IRQ_TOP[15:8]
R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

HOST_EP_INTR
b7

Host End Point Interrupt Register
b4

b3

EPO_IRQ_TOP[7:0]
R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

This register contains interrupt status bit for 32 EPs. CPU reads this register to determine, which EP has triggered interrupt.

Bit

Name

Description

31:16

EPI_IRQ_TOP[15:0]

Interrupt Requests for IN endpoints 0..15 when the EP is deactivated by Host Controller.

15:8

EPO_IRQ_TOP[15:0]

Interrupt Requests for OUT endpoints 0..15 when the EP is deactivated by Host Controller.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

435

10.14.3

HOST_EP_INTR_MASK
Host End Point Interrupt Mask Register

HOST_EP_INTR_MASK
b31

Host End Point Interrupt Mask Register

b30

b29

b28

b27

0xE0032008
b26

b25

b24

EPI_IRQ_MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

HOST_EP_INTR_MASK
b23

Host End Point Interrupt Mask Register
b20

b19

EPI_IRQ_MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

HOST_EP_INTR_MASK
b15

Host End Point Interrupt Mask Register
b12

b11

EPO_IRQ_MASK[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

HOST_EP_INTR_MASK
b7

Host End Point Interrupt Mask Register
b4

b3

EPO_IRQ_MASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register contains interrupt status bit for 32 EPs. CPU reads this register to determine, which EP has triggered interrupt.

Bit

Name

Description

31:16

EPI_IRQ_MASK[15:0]

1

Report IN endpoint interrupt to CPU

15:8

EPO_IRQ_MASK[15:0]

1

Report OUT endpoint interrupt to CPU

436

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.4

HOST_TOGGLE
Data Toggle for Endpoints Register

HOST_TOGGLE
b31

Data Toggle for Endpoints Register
b30

b29

b22

b21

b14

b13

HOST_TOGGLE
b23

b27

0xE003200C
b26

b25

b24

b18

b17

b16

b10

b9

Data Toggle for Endpoints Register

HOST_TOGGLE
b15

b28

b20

b19

Data Toggle for Endpoints Register
b12

b11

b8

VALID
R/W0C
R/W1S
0

HOST_TOGGLE

Data Toggle for Endpoints Register

b7

b6

b5

b4

Q

S

R

IO

b3

b2

b1

b0

ENDPOINT[3:0]

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Power-up and USB Reset all the endpoints data toggle will reset to ‘0’. In general, hardware maintains all the data toggle bits,
which are toggled between data packet transfers. The firmware might need to reset or set data toggle bit only following conditions:
■

After a configuration changes (that is, after the host issues a Set Configuration request).

■

After an interface’s alternate setting changes (that is, after the host issues a Set Interface request).

■

After the host sends a Clear Feature - Endpoint Stall request to an endpoint.

To change the value of the toggle bit, software must first write ENDPOINT and IO, then poll for VALID=1, then write to R or S,
then poll again for VALID=1.

Bit

Name

Description

8

VALID

Indicates Q is valid for selected endpoint, may be polled in software.
After writing to R/S, indicates write completion.
This bit must be cleared by software to initiate an operation.

7

Q

Current value of toggle bit for EP selected in IO/ENDPOINT

6

S

Write ‘1’ to set data toggle to ‘1’ When both R and S are set, behavior is undefined.

5

R

Write ‘1’ to reset data toggle to ‘0’. When both R and S are set, behavior is undefined.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

437

10.14.4

DEV_TOGGLE (continued)

4

IO

0
1

3:0

ENDPOINT[3:0]

Endpoint

438

OUT
IN

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.5

HOST_SHDL_CS
Scheduler Memory Pointer Register

HOST_SHDL_CS
b31

Scheduler Memory Pointer Register
b30

b29

b22

b21

HOST_SHDL_CS
b23

b27

0xE0032010
b26

b25

b24

Scheduler Memory Pointer Register

HOST_SHDL_CS
b15

b28

b20

b19

b18

b17

b16

ASYNC_SHDL_
STATUS

PERI_SHDL_
STATUS

PERI_SHDL_
CHNG

ASYNC_SHDL_
CHNG

R

R

R/W1S

R/W1S

R/W

R/W

R/W0C

R/W0C

0

0

0

0

b10

b9

b8

Scheduler Memory Pointer Register
b14

b13

b12

b11

BULK_CNTRL_PTR1[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

HOST_SHDL_CS
b7

Scheduler Memory Pointer Register
b6

b5

b4

b3

BULK_CNTRL_PTR0[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

19

ASYNC_SHDL_STATUS

This bit will inform the software about which portion of the memory should be used for Async/nonperiodic list update both for EHCI and OHCI.
0
Indicates that the scheduler is currently using the lower portion of the scheduler memory for
processing the Async/Non-periodic list with the starting location of ASYNC_PTR0 register.
1
Indicates that the scheduler is currently using the upper portion of the scheduler memory for
processing the Async/Non-periodic list with the starting location of AYSNC_PTR1 register.

18

PERI_SHDL_STATUS

This bit will inform the software about which portion of the memory should be used for periodic list
update both for EHCI and OHCI.
0
Indicates that the scheduler is currently using the lower portion of the scheduler memory for
processing the periodic list with the starting location at base address of lower portion of the
scheduler memory.
1
Indicates that the scheduler is currently using the upper portion of the scheduler memory for
processing the periodic list with the starting location at base address of upper portion of the
scheduler memory.

17

PERI_SHDL_CHNG

This bit is set by software to indicate that periodic schedule is changed, and the scheduler may flip to
the alternate schedule at the next frame boundary. This bit is cleared by hardware upon switching to
new schedule.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

439

10.14.5

HOST_SHDL_CS (continued)
This bit is set by software to indicate that only the Async schedule is changed, and the scheduler may
flip to the alternate schedule at the next microframe boundary. This bit is cleared by hardware upon
switching to new schedule.

16

ASYNC_SHDL_CHNG

15:8

BULK_CNTRL_PTR1[7:0] Asynchronous list pointer 1. Indicates the first Async schedule entry number in schedule 1. This
pointer is used for the upper portion of the scheduler memory (schedule entry location 96-191).

7:0

BULK_CNTRL_PTR0[7:0] Asynchronous list pointer 0. Indicates the first Async schedule entry number in schedule 0. This
pointer is used for the lower portion of the scheduler memory (schedule entry location 0-95).

440

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.6

HOST_SHDL_SLEEP
Scheduler Sleep Register

HOST_SHDL_SLEEP
b31

Scheduler Sleep Register
b30

b29

b22

b21

b14

b13

HOST_SHDL_SLEEP
b23

b27

0xE0032014
b26

b25

b24

b18

b17

b16

b9

b8

Scheduler Sleep Register

HOST_SHDL_SLEEP
b15

b28

b20

b19

Scheduler Sleep Register
b12

b11

b10

ASYNC_SLEEP_TIMMER[8:7]

HOST_SHDL_SLEEP
b7

R/W

R/W

R

R

Scheduler Sleep Register
b6

b5

b4

b3

b2

b1

b0

ASYNC_SLEEP_
EN

ASYNC_SLEEP_TIMMER[6:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x12C

Bit

Name

Description

9:1

ASYNC_SLEEP_TIMMER[8:0]

When the Async list is empty and the ASYNC_SLEEP_EN is set then the scheduler will
stop traversing the async list for the amount of ASYNC_SLEEP_TIMMER*sie clock.
Per EHCI spec the sleep time should be 10 µs.

0

ASYNC_SLEEP_EN

This bit will enable the sleep feature for the EHCI.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

441

10.14.7

HOST_RESP_BASE
Response Base Address Register

HOST_RESP_BASE
b31

Response Base Address Register
b30

b29

b28

b27

0xE0032018
b26

b25

b24

BASE_ADDRESS[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

HOST_RESP_BASE
b23

Response Base Address Register
b20

b19

BASE_ADDRESS[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

HOST_RESP_BASE
b15

Response Base Address Register
b12

b11

BASE_ADDRESS[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

HOST_RESP_BASE
b7

Response Base Address Register
b4

b3

BASE_ADDRESS[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31:0

BASE_ADDRESS[31:0]

Base address where scheduler responses are written into memory. Responses are written in order of
completion, wrapping at end of buffer (see UIB_HOST_RESP_CS)

442

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.8

HOST_RESP_CS
Scheduler Response Command and Control Register

HOST_RESP_CS
b31

Scheduler Response Command and Control Register
b30

b29

b28

b27

b26

0xE003201C
b25

b24

LIM_ERROR

WR_RESP_COND

R/W0C

R/W

R/W1S

R

0

0

HOST_RESP_CS
b23

Scheduler Response Command and Control Register
b22

b21

b20

b19

b18

b17

b16

WR_PTR[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

HOST_RESP_CS
b15

Scheduler Response Command and Control Register
b14

b13

b12

b11

b10

b9

b8

LIMIT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

HOST_RESP_CS
b7

Scheduler Response Command and Control Register
b6

b5

b4

b3

MAX_ENTRY[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31

LIM_ERROR

Hardware will set this bit as a scheduler response is written with WR_PTR = LIMIT (this indicates and
overflow in response memory). Software must clear this bit by writing 0 to it.

24

WR_RESP_COND

This is a condition used counting the packet on USB bus. The packet counter is used for the
RESP_RATE specified in the scheduler memory.
0
The packet counter increments when the device does not NAK. The response from device
could be: ACK, STALL, NYET, PID_ERROR, Data toggle mismatch, CRC16_ERROR,
Time-Out.
1
The packet counter increments when the transaction is successful. The successful transaction definition is:
IN-Token: No CRC16/PID/PHY Error, No toggle mismatch, No Babble,
No STALL, No NYET, No NAK, No Timeout
OUT-TOKEN: No CRC16/PID/PHY Error, No STALL, No NAK,
No NYET for PING token

23:16

WR_PTR

Position at which next schedule response entry will be written (not itself a valid entry).

15:8

LIMIT

Response entry which, when written, would constitute an overflow error.

7:0

MAX_ENTRY

Maximum number of entries scheduler responses are written into memory. Responses are written in
order of completion, wrapping at end of buffer (see UIB_HOST_RESP_CS)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

443

10.14.9

HOST_ACTIVE_EP
Active Endpoint Register

HOST_ACTIVE_EP
b31

Active Endpoint Register
b30

b29

b28

b27

0xE0032020
b26

b25

b24

IN_EP_ACTIVE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

HOST_ACTIVE_EP
b23

Active Endpoint Register
b20

b19

IN_EP_ACTIVE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

HOST_ACTIVE_EP
b15

Active Endpoint Register
b12

b11

OUT_EP_ACTIVE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

HOST_ACTIVE_EP
b7

Active Endpoint Register
b4

b3

OUT_EP_ACTIVE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31:16

IN_EP_ACTIVE[15:0]

This indicates if the IN-EP is active or not. If there is a new schedule entry, this register needs to be
Updated after the ASYNC_SHDL_CHNG or PERI_SHDL_CHNG is being set. Software should first
clear the corresponding active bit upon HOST_EP_INTR interrupt and then read
HOST_EP_DEACTIVATE to clear it.

15:8

OUT_EP_ACTIVE[15:0]

This indicates if the OUT-EP is active or not. If there is a new schedule entry, this register needs to be
Updated after the ASYNC_SHDL_CHNG or PERI_SHDL_CHNG is being set. Software should first
clear the corresponding active bit upon HOST_EP_INTR interrupt and then read
HOST_EP_DEACTIVATE to clear it.

444

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.10 OHCI_REVISION
OHCI Host Controller Revision Number Register
OHCI_REVISION
b31

OHCI Host Controller Revision Number Register
b30

b29

b22

b21

b14

b13

b6

b5

OHCI_REVISION
b23

b26

0xE0032010
b25

b24

b20

b19

b18

b17

b16

b9

b8

OHCI Host Controller Revision Number Register

OHCI_REVISION
b7

b27

OHCI Host Controller Revision Number Register

OHCI_REVISION
b15

b28

b12

b11

b10

OHCI Host Controller Revision Number Register
b4

b3

b2

b1

b0

REV[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0x10

Bit

Name

Description

7:0

REV[7:0]

Revision

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

445

10.14.11 OHCI_CONTROL
Host Controller Operating Mode Control Register
OHCI_CONTROL
b31

Host Controller Operating Mode Control Register
b30

b29

b22

b21

b14

b13

b6

b5

b4

b3

b2

BLE

CLE

IE

PLE

OHCI_CONTROL
b23

b26

0xE0032028
b25

b24

b20

b19

b18

b17

b16

b9

b8

b1

b0

Host Controller Operating Mode Control Register

OHCI_CONTROL
b7

b27

Host Controller Operating Mode Control Register

OHCI_CONTROL
b15

b28

b12

b11

b10

Host Controller Operating Mode Control Register

HCFS[1:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

0

0

Bit

Name

Description

7:6

HCFS[1:0]

HostControllerFunctionalState

5

BLE

BulkListEnable

4

CLE

ControlListEnable

3

IE

IsochronousEnable
Note PLE and IE must both be set to 1 for the periodic list to be enabled. There is no difference in
behavior between these two bits.

2

PLE

PeriodicListEnable

446

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.12 OHCI_COMMAND_STATUS
Command and Status Register
OHCI_COMMAND_STATUS
b31

b30

Command and Status Register
b29

OHCI_COMMAND_STATUS
b23

b22

b14

b6

b20

0xE003202C
b26

b25

b17

b24

b19

b18

HC_HALTED

RS

b16

SOC[1:0]

R

R/W

R

R

R/W

R

R/W

R/W

1

0

0

0

b10

b9

b8

b2

b1

b0

Command and Status Register
b13

OHCI_COMMAND_STATUS
b7

b27

Command and Status Register
b21

OHCI_COMMAND_STATUS
b15

b28

b12

b11

Command and Status Register
b5

b4

b3

Bit

Name

Description

19

HC_HALTED

This bit is a zero whenever the Run/Stop bit is a one.
The HC sets this bit to one after it has stopped executing as a result of the Run/Stop bit being set to 0
by software.

18

RS

Run/Stop (Replacing the OwnerShipChangeRequest)
0
Stop
1
Run

17:16

SOC

SchedulingOverrunCount

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

447

10.14.13 OHCI_INTERRUPT_STATUS
OHCI Host Controller Interrupt Status Register
OHCI_INTERRUPT_STATUS
b31

b30

OHCI Host Controller Interrupt Status Register
b29

OHCI_INTERRUPT_STATUS
b23

b22

b14

b20

b12

b25

b24

b19

b18

b17

b16

b11

b10

b9

b8

OHCI Host Controller Interrupt Status Register

b6

b5

b3

b2

RHSC

FNO

b4

SF

SF

SO

R

R/W1C

R/W1C

R/W1C

R/W1C

R

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

Bit

Name

Description

6

RHSC

RootHubStatusChange

5

FNO

FrameNumberOverflow

3

RD

ResumeDetected

2

SF

StartofFrame

0

SO

SchedulingOverrun

448

0xE0032030

b26

OHCI Host Controller Interrupt Status Register
b13

OHCI_INTERRUPT_STATUS
b7

b27

OHCI Host Controller Interrupt Status Register
b21

OHCI_INTERRUPT_STATUS
b15

b28

b1

b0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.14 OHCI_INTERRUPT_ENABLE
OHCI Interrupt Enable Register
OHCI_INTERRUPT_ENABLE
b31

b30

OHCI Interrupt Enable Register
b29

b28

b27

0xE0032034
b26

b25

b24

b18

b17

b16

b10

b9

b8

b1

MIE
R/W1S
R
0

OHCI_INTERRUPT_ENABLE
b23

b22

OHCI Interrupt Enable Register
b21

OHCI_INTERRUPT_ENABLE
b15

b14

b19

OHCI Interrupt Enable Register
b13

OHCI_INTERRUPT_ENABLE
b7

b20

b12

b11

OHCI Interrupt Enable Register

b6

b5

b3

b2

RHSC

FNO

b4

SF

SF

SO

b0

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R

R

R

R

r

0

0

0

0

0

This register can be used to enable any of the OHCI interrupts. To clear an interrupt enable bit, write to
UIB_OHCI_INTERRUPT_DISABLE.

Bit

Name

Description

31

MIE

Master Interrupt Enable

6

RHSC

RootHubStatusChange

5

FNO

FrameNumberOverflow

3

RD

ResumeDetected

2

SF

StartofFrame

0

SO

SchedulingOverrun

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

449

10.14.15 OHCI_INTERRUPT_DISABLE
OHCI Interrupt Disable Register
OHCI_INTERRUPT_DISABLE
b31

b30

OHCI Interrupt Disable Register
b29

b28

b27

0xE0032038
b26

b25

b24

b18

b17

b16

b10

b9

b8

b1

MIE
R/W1C
R
0

OHCI_INTERRUPT_DISABLE
b23

b22

OHCI Interrupt Disable Register
b21

OHCI_INTERRUPT_DISABLE
b15

b14

b19

OHCI Interrupt Disable Register
b13

OHCI_INTERRUPT_DISABLE
b7

b20

b12

b11

OHCI Interrupt Disable Register

b6

b5

b3

b2

RHSC

FNO

b4

SF

SF

SO

b0

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R

R

R

R

R

0

0

0

0

0

This register can be used to disable any of the OHCI interrupts. To clear an interrupt enable bit, write to
UIB_OHCI_INTERRUPT_ENABLE.

Bit

Name

Description

31

MIE

Master Interrupt Enable

6

RHSC

RootHubStatusChange

5

FNO

FrameNumberOverflow

3

RD

ResumeDetected

2

SF

StartofFrame

0

SO

SchedulingOverrun

450

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.16 OHCI_FM_INTERVAL
OHCI Frame Control Information Register
OHCI_FM_INTERVAL
b31

OHCI Frame Control Information Register
b30

b29

b28

FIT

b27

0xE003203C
b26

b25

b24

FSMPS[14:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

b19

b18

b17

b16

0

OHCI_FM_INTERVAL
b23

OHCI Frame Control Information Register
b20

FSMPS[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

0x27F0

OHCI_FM_INTERVAL
b15

OHCI Frame Control Information Register
b14

b13

b12

b11

FI[14:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

b6

b5

b3

b2

b1

b0

OHCI_FM_INTERVAL
b7

OHCI Frame Control Information Register
b4

FI[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x752F

Bit

Name

Description

31

FIT

FrameIntervalToggle

30:16

FSMPS[14:0]

FSLargestDataPacket

14:0

FI[14:0]

FrameInterval

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

451

10.14.17 OHCI_FM_REMAINING
Current Value of Remaining Frame Count Register
OHCI_FM_REMAINING
b31

Current Value of Remaining Frame Count Register

b30

b29

b22

b21

b14

b13

b28

b27

0xE0032040

b26

b25

b24

b18

b17

b16

b10

b9

b8

FRT
R
R/W
0

OHCI_FM_INTERVAL
b23

OHCI Frame Control Information Register

OHCI_FM_INTERVAL
b15

b20

b19

OHCI Frame Control Information Register
b12

b11

FR[14:8]
R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

OHCI_FM_INTERVAL
b7

OHCI Frame Control Information Register
b4

b3

FR[7:0]
R

R

R

R

R

R

R

R

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

31

FRT

FrameRemainingToggle

14:0

FR[14:0]

FrameRemaining

452

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.18 OHCI_FM_NUMBER
Full Speed Frame Number Register
OHCI_FM_NUMBER
b31

Full Speed Frame Number Register
b30

b29

b22

b21

b14

b13

OHCI_FM_NUMBER
b23

b27

0xE0032044
b26

b25

b24

b18

b17

b16

b10

b9

b8

Full Speed Frame Number Register

OHCI_FM_NUMBER
b15

b28

b20

b19

Full Speed Frame Number Register
b12

b11

FN[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

OHCI_FM_NUMBER
b7

Full Speed Frame Number Register
b4

b3

FN[7:0]
R

R

R

R

R

R

R

R

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

15:0

FN[15:0]

FrameNumber

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

453

10.14.19 OHCI_PERIODIC_START
Periodic Schedule Start Register
OHCI_PERIODIC_START
b31

b30

Periodic Schedule Start Register
b29

OHCI_PERIODIC_START
b23

b22

b14

b27

0xE0032048
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

Periodic Schedule Start Register
b21

OHCI_PERIODIC_START
b15

b28

b20

b19

Periodic Schedule Start Register
b13

b12

PS[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b3

b2

b1

b0

OHCI_PERIODIC_START
b7

b6

Periodic Schedule Start Register
b5

b4

PS[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x6977

Value indicating time where HC should start executing periodic schedule.

Bit

Name

Description

15:0

PS[15:0]

PeriodicStart
The Default is: 90% * FI = 90% * 0x752F = 0x6977

454

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.20 OHCI_LS_THRESHOLD
LSTHRESHOLD Register
OHCI_LS_THRESHOLD
b31

LSTHRESHOLD Register

b30

b29

OHCI_LS_THRESHOLD
b23

b27

0xE003204C
b26

b25

b24

b18

b17

b16

b9

b8

LSTHRESHOLD Register

b22

b21

OHCI_LS_THRESHOLD
b15

b28

b20

b19

LSTHRESHOLD Register

b14

b13

b12

b11

b10

LST[11:8]

OHCI_LS_THRESHOLD
b7

R/W

R/W

R/W

R/W

R

R

R

R

b3

b2

b1

b0

LSTHRESHOLD Register

b6

b5

b4

LST[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x628

Value which is compared to the FrameRemaining field prior to initiating a Low Speed.

Bit

Name

Description

11:0

LST[11:0]

LSThreshold

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

455

10.14.21 OHCI_RH_PORT_STATUS
Root Hub Port Status Register
OHCI_RH_PORT_STATUS
b31

b30

PORT_RESUME_
FW

OC

R/W

R

R/W

R

0

0

Root Hub Port Status Register
b29

OHCI_RH_PORT_STATUS
b23

b22

b14

b6

0xE0032054
b26

b25

b24

b18

b17

b16

PRSC

b20

b19

PSSC

PESC

CSC

R/W1C

R/W1C

R/W1C

R/1C

R/W1S

R/W1S

R/W1S

R/W

0

0

0

0

b10

b9

b8

Root Hub Port Status Register
b13

OHCI_RH_PORT_STATUS
b7

b27

Root Hub Port Status Register
b21

OHCI_RH_PORT_STATUS
b15

b28

b12

b11

Root Hub Port Status Register
b5

b4

PRS

b3

b2

b1

b0

PSS

PES

CCS

R/W1S

R/W1S

R/W1S

R

R/W0C

R/W0C

R/W

R/W

0

0

0

0

Bit

Name

Description

31

PORT_RESUME_FW

Port Resume (virtual register of PSS from firmware).
For an OHCI resume initiated by the host, firmware clears the PSS bit. However, this bit is not supposed to go low until the resume is complete. The PORT_RESUME_FW bit will give us a way to signal to the Host Logic that it should do a resume and then go clear the PSS bit. There is no real
functionality being added, this is only trying to emulate the OHCI interface better.

20

PRSC

PortResetStatusChange

18

PSSC

PortSuspendStatusChange

17

PESC

PortEnableStatusChange

16

CSC

ConnectStatusChange

continued on next page

456

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.21

OHCI_RH_PORT_STATUS (continued)

4

PRS

(read) PortResetStatus
(write) SetPortReset

2

PSS

(read) PortSuspendStatus
(write) SetPortSuspend

1

PES

(read) PortEnableStatus
(write) SetPortEnable

0

CCS

(read) CurrentConnectStatus
(write) ClearPortEnable

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

457

10.14.22 OHCI_EOF
OHCI End of Frame Times Register
OHCI_EOF
b31

OHCI End of Frame Times Register
b30

b29

b28

0xE0032058

b27

b26

b25

b24

EOF2[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

b19

b18

b17

b16

OHCI_EOF
b23

OHCI End of Frame Times Register
b20

EPF2[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b11

b10

b9

b8

0x0019

OHCI_EOF
b15

OHCI End of Frame Times Register
b14

b13

b12

EOF1[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b3

b2

b1

b0

OHCI_EOF
b7

OHCI End of Frame Times Register
b4

EOF1[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x0050

Bit

Name

Description

31:16

EOF2[15:0]

EOF2 Time (default: 10 bit times * 2.5 clocks/bit => 25)

15:0

EOF1[15:0]

EOF1 Time (default: 32 bit times * 2.5 clocks/bit => 80)

458

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.23 EHCI_HCCPARAMS
Multiple Mode Control Register
OHCI_RH_PORT_STATUS
b31

b30

Root Hub Port Status Register
b29

OHCI_RH_PORT_STATUS
b23

b22

b14

b6

0xE003205C
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

Root Hub Port Status Register
b13

OHCI_RH_PORT_STATUS
b7

b27

Root Hub Port Status Register
b21

OHCI_RH_PORT_STATUS
b15

b28

b12

b11

Root Hub Port Status Register
b5

b4

b3

ISO_SHDL_THR[3:0]

b0

ASYNC_PARK_
CAP

ADDR_64_BIT_
CAP

R

R

R

R

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

Multiple mode control (time-base bit functionality), addressing capability.

Bit

Name

Description

7:4

ISO_SHDL_THR[3:0]

Isochronous Scheduling Threshold (In this implementation the scheduler will cache 1 micro-frame
worth of data. Appropriate value will be programmed to ensure correct functionality).

2

ASYNC_PARK_CAP

Asynchronous Schedule Park Capability

0

ADDR_64_BIT_CAP

64-bit Addressing Capability

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

459

10.14.24 EHCI_USBCMD
EHCI Command Register
OHCI_RH_PORT_STATUS
b31

Root Hub Port Status Register

b30

b29

b28

OHCI_RH_PORT_STATUS
b23

b27

0xE0032060
b26

b25

b24

b18

b17

b16

Root Hub Port Status Register

b22

b21

b20

b19

INT_THRESHOLD_CTRL[7:0]
R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R

R

R

R

R

R

R

R

b10

b9

b8

8

OHCI_RH_PORT_STATUS
b15

Root Hub Port Status Register

b14

b13

b12

b11

ASYNC_SHDL_
PRK_EN

OHCI_RH_PORT_STATUS
b7

R/w

R/w

R/w

R

R

R

0

0

0

b1

b0

Root Hub Port Status Register

b6

b5

b4

ASYNC_SHDL_
EN

b3

PER_SHDL_EN

RS

R/w

R/w

R/W

R

R

R/W

0

0

0

Bit

Name

23:16

INT_THRESHOLD_CTRL[7:0]

Interrupt Threshold Control

11

ASYNC_SHDL_PRK_EN

Asynchronous Schedule Park Mode Enable

9:8

ASYNC_SHDL_PRK_CNT[1:0]

Asynchronous Schedule Park Mode Count

5

ASYNC_SHDL_EN

Asynchronous Schedule Enable

4

PER_SHDL_EN

Periodic Schedule Enable

0

RS

Run/Stop

460

ASYNC_SHDL_PRK_CNT[1:0]

b2

Description

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.25 EHCI_USBSTS
Host Controller States and Pending Interrupts Register
EHCI_USBSTS
b31

Host Controller States and Pending Interrupts Register
b30

EHCI_USBSTS
b23

b28

b26

0xE0032064
b25

b24

b21

b20

b19

b18

b17

b16

b9

b8

Host Controller States and Pending Interrupts Register
b14

ASYNC_SHDL_ST PER_SHDL_ST

b13

b12

RECLAMATION

HC_HALTED

R

R

R

R

R/w

R/W

R/W

R/W

0

0

0

1

EHCI_USBSTS
b7

b27

Host Controller States and Pending Interrupts Register
b22

EHCI_USBSTS
b15

b29

b11

b10

Host Controller States and Pending Interrupts Register
b6

b5

b4

b3

b2

b1

b0

HOST_SYS_ERR

PORT_CHNG_
DET

USBERRINT

USBINT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

Pending interrupts and various states of the Host Controller

Bit

Name

Description

15

ASYNC_SHDL_ST

Asynchronous Schedule Status

14

PER_SHDL_ST

Periodic Schedule Status

13

RECLAMATION

Reclamation

12

HC_HALTED

This bit is a zero whenever the Run/Stop bit is a one. The HC sets this bit to one after it has stopped
executing as a result of the Run/Stop bit being set to 0 by software.

4

HOST_SYS_ERR

Host System Error. EHCI over scheduling Status

2

PORT_CHNG_DET

Port Change Detect

1

USBERRINT

USB Error Interrupt

0

USBINT

USB Interrupt.
Note This field does not assert for SETUP+IN(STATUS) qTDs with no data phase. The workaround
is to use the HOST_EP_INTR[0] along with the transaction response that gets written into SRAM for
HCD.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

461

10.14.26 EHCI_USBINTR
EHCI Interrupt Register
EHCI_USBINTR
b31

EHCI Interrupt Register
b30

b29

b22

b21

b14

b13

b6

b5

b28

EHCI_USBINTR
b23

b20

b12

b24

b19

b18

b17

b16

b11

b10

b9

b8

EHCI Interrupt Register
b2

b1

b0

HOST_SYS_ERR
_IE

b4

PORT_CHANGE_
DET_IE

USBERRINT_IE

USBINT_IE

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

Bit

Name

Description

4

HOST_SYS_ERR_IE

Host System Error Interrupt Enable

2

PORT_CHANGE_DET_IE

Port Change Interrupt Enable

1

USBERRINT_IE

USB Error Interrupt Enable

0

USBINT_IE

USB Interrupt Enable

462

b25

EHCI Interrupt Register

EHCI_USBINTR
b7

0xE0032068
b26

EHCI Interrupt Register

EHCI_USBINTR
b15

b27

b3

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.27 EHCI_FRINDEX
Frame Index Register
EHCI_FRINDEX
b31

Frame Index Register
b30

b29

b22

b21

b14

b13

EHCI_FRINDEX
b23

0xE003206C

b27

b26

b25

b24

b18

b17

b16

b10

b9

b8

Frame Index Register

EHCI_FRINDEX
b15

b28

b20

b19

Frame Index Register
b12

b11

FRINDEX[13:8]
R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

b2

b1

b0

EHCI_FRINDEX
b7

Frame Index Register
b6

b5

b4

b3

FRINDEX[7:0]
R

R

R

R

R

R

R

R

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

13:0

FRINDEX[13:0]

The value indicates the Frame on which the scheduler is operating. This value is also used to achieve
interrupt endpoint polling duration.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

463

10.14.28 EHCI_CONFIGFLAG
Configure Flag Register
EHCI_CONFIGFLAG
b31

Configure Flag Register
b30

b29

b22

b21

b14

b13

b6

b5

EHCI_CONFIGFLAG
b23

0xE0032070
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

Configure Flag Register

EHCI_CONFIGFLAG
b7

b27

Configure Flag Register

EHCI_CONFIGFLAG
b15

b28

b12

b11

Configure Flag Register
b4

b3

b0

CF
R/W
R
0

Bit

Name

Description

0

CF

Configure Flag

464

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.29 EHCI_PORTSC
Port Status and Control Register
EHCI_PORTSC

Port Status and Control Register

b31

b30

PORT_RESET_
FW

PORT_RESUME_
HW

R/q

R

R

R/W

0

0

b29

EHCI_PORTSC

b28

b27

0xE0032074
b26

b25

b24

b18

b17

b16

b10

b9

Port Status and Control Register

b23

b22

b21

b14

b13

EHCI_PORTSC

b20

b19

Port Status and Control Register

b15

b12

b11

PORT_OWNER

EHCI_LINE_STATE[1:0]

b8

PORT_RESET

R/W

R

R

R/W1S

R/W

R/W

R/W

R/W

1

0

0

0

EHCI_PORTSC

Port Status and Control Register

b7

b6

PORT_SUSPEND

F_PORT_
RESUME

b5

b4

b3

b2

PORT_EN_C

PORT_EN

R/W

R/W

R/W1C

R/W0C

R/W1C

R

R/W

R/W

R/W1S

R/W

R/W1S

R/W

0

0

0

0

0

0

Bit

Name

Description

31

PORT_RESET_FW

Port Reset (virtual register of PORT_RESET from firmware)

30

PORT_RESUME_HW

Hardware Initiated Resume Active

13

PORT_OWNER

Port Owner

b1

b0

PORT_CONNECT
PORT_CONNECT
_C

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

465

10.14.29

EHCI_PORTSC (continued)

11:10

EHCI_LINE_STATE[1:0]

Line Status

8

PORT_RESET

Port Reset
Firmware sets this bit to initiate Port Reset and subsequently writes a 0 to it to initiate the end of Port
Reset. When the Host has completed Port Reset, it will clear this bit. Firmware must poll this bit to
determine the end of the Port Reset, and also whether the attached device is High-Speed (PORT_EN
== 1).

7

PORT_SUSPEND

Suspend

6

F_PORT_RESUME

Force Port Resume

3

PORT_EN_C

Port Enable/Disable Change

2

PORT_EN

Port Enabled/Disabled

1

PORT_CONNECT_C

Connect Status Change

0

PORT_CONNECT

Current Connect Status

466

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.30 EHCI_EOF
EHCI End of Frame Times Register
EHCI_EOF
b31

EHCI End of Frame Times Register
b30

b29

b28

0xE0032078

b27

b26

b25

b24

EOF2[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

b19

b18

b17

b16

EHCI_EOF
b23

EHCI End of Frame Times Register
b20

EPF2[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b11

b10

b9

b8

0x0004

EHCI_EOF
b15

EHCI End of Frame Times Register
b14

b13

b12

EOF1[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b3

b2

b1

b0

EHCI_EOF
b7

EHCI End of Frame Times Register
b4

EOF1[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x0023

Bit

Name

Description

31:16

EOF2[15:0]

EOF2 Time (default: 64 bit times / 16 bits/clock -> 4)

15:0

EOF1[15:0]

EOF1 Time (default: 560 bit times / 16 bits/clock -> 35)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

467

10.14.31 SHDL_CHNG_TYPE
Scheduler Change Type Register
SHDL_CHNG_TYPE
b31

Scheduler Change Type Register
b30

b29

b28

b27

0xE003207C
b26

b25

b24

EPI_CHNG_TYPE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

SHDL_CHNG_TYPE
b23

Scheduler Change Type Register
b20

b19

EPI_CHNG_TYPE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

SHDL_CHNG_TYPE
b15

Scheduler Change Type Register
b12

b11

EP0_CHNG_TYPE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

SHDL_CHNG_TYPE
b7

Scheduler Change Type Register
b4

b3

EP0_CHNG_TYPE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This register is used along with the HOST_SHDL_CS ASYNC_SHDL_CHNG/PERI_SHDL_CHNG requests.
This register defines when the Scheduler should update its internal active bits with the HOST_ACTIVE_EP register per each
EP.

Bit

Name

Description

31:16

EOF2[15:0]

0
1

Update at Micro-frame boundary
Update at Frame boundary

15:0

EOF1[15:0]

0
1

Update at Micro-frame boundary
Update at Frame boundary

468

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.32 SHDL_STATE_MACHINE
Scheduler State Machine Register
SHDL_STATE_MACHINE
b31

b30

Scheduler State Machine Register
b29

SHDL_STATE_MACHINE
b23

b22

b28

b27

0xE0032080
b26

b25

b24

b18

b17

b16

Scheduler State Machine Register
b21

b20

b19

WAIT_EOF

SHDL_STATE_MACHINE

SCRATCH_WRITE
WAIT_SHDL_EN
2

R

R

R

R/W

R/W

R/W

0

0

0

Scheduler State Machine Register

b15

b14

b13

b12

b11

b10

b9

b8

SCRATCH_WRITE
1

SHDL_WRITE

LAST_EVAL

WAIT_TP_STUPD

EXECUTE

ASYNC_SLEEP

FIRST_EVAL0

READ_EP0_1

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b2

b1

b0

FETCH

LOAD_PTR

IDLE

SHDL_STATE_MACHINE
b7

b6

READ_EP0_0

LOAD_SHDL_
MEM

Scheduler State Machine Register
b5

b4

b3

SCRATCH_READ SCRATCH_READ SCRATCH_READ
2
1
0

R

R

R

R

R

R

R

R

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

18

WAIT_EOF

Wait for EOF state

17

WAIT_SHDL_EN

Wait for scheduler enable state

16

SCRATCH_WRITE2

Scratch Write state2

15

SCRATCH_WRITE1

Scratch Write state1

14

SHDL_WRITE

Scheduler write state

13

LAST_EVAL

Last Eval State

12

WAIT_TP_STUPD

Wait for TP status state

11

EXECUTE

Execute State

10

ASYNC_SLEEP

Async Sleep state

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

469

10.14.32

SHDL_STATE_MACHINE (continued)

9

FIRST_EVAL

First Eval State

8

READ_EP0_1

Read EP0 state1

7

READ_EP0_0

Read EP0 state0

6

LOAD_SHDL_MEM

Load scheduler memory state

5

SCRATCH_READ2

Scratch Read state2

4

SCRATCH_READ1

Scratch Read state1

3

SCRATCH_READ0

Scratch Read state0

2

FETCH

Fetch State

1

LOAD_PTR

Load Pointer State

0

IDLE

Idle

470

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.33 SHDL_INTERNAL_STATUS
Scheduler Internal Status Register
SHDL_INTERNAL_STATUS
b31

b30

Scheduler Internal Status Register
b29

SHDL_INTERNAL_STATUS
b23

b22

TP_TIMEOUT

b14

TP_PID_ERROR

b27

0xE0032084
b26

b25

b24

Scheduler Internal Status Register
b21

SHDL_INTERNAL_STATUS
b15

b28

b20

b19

b18

b17

b16

TP_EPM_
OVERRUN

TP_EPM_
UNDERRUN

R

R

R/W

R/W

0

0

b10

b9

b8

TP_CRC16_
ERROR

TP_DT_
MISMATCH

TP_STALL

Scheduler Internal Status Register
b13

b12

TP_BABBLE

b11

TP_PORT_ERROR TP_PHY_ERROR

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

SHDL_INTERNAL_STATUS

Scheduler Internal Status Register

b7

b6

b5

b4

b3

b2

b1

b0

TP_NYET

TP_NAK

TP_ACK

EP0_IN

EP0_OUT

EP0_SETUP

FRAME_FIT

EP_DONE

R

R

R

R

R

R

R

R

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

17

TP_EPM_OVERRUN

TP EPM over-run

16

TP_EPM_UNDERRUN

TP EPM under-run

15

TP_TIMEOUT

TP timeout

14

TP_PID_ERROR

TP PID error

13

TP_BABBLE

TP Babble

12

TP_PORT_ERROR

TP Port error

11

TP_PHY_ERROR

TP PHY rxerror

10

TP_CRC16_ERROR

TP CRC16 Error

9

TP_DT_MISMATCH

TP DT mismatch

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

471

10.14.33

SHDL_INTERNAL_STATUS (continued)

8

TP_STALL

TP STALL

7

TP_NYET

TP NYET

6

TP_NAK

TP NAK

5

TP_ACK

TP ACK

4

EP0_IN

EP0 IN state

3

EP0_OUT

EP0 OUT state

2

EP0_SETUP

EP0 SETUP state

1

FRAME_FIT

Frame Fit

0

EP_DONE

EP Done

472

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.34 SHDL_OHCI
Scheduler Memory Register, OHCI Format
There are 64 SHDL_OHCI registers. The address of each is calculated as SHDL_OHCI(x) = 0xE0032400 + (x*0x4). Hence
SHDL_OHCI(0) is at address 0xE0032400, SHDL_OHCI(1) is at address 0xE0032400 + 0x4 and so on. The definition of
each of these is the same.
SHDL_OHCI
b95

Scheduler Memory Register, OHCI Format
b94

b93

b92

b91

0xE0032400
b90

b89

b88

IOC_RATE[7]
R/W
R
0

SHDL_OHCI
b87

Scheduler Memory Register, OHCI Format
b86

b85

b84

b83

b82

b81

IOC_RATE[6:0]

b80

TRNS_MODE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b78

b77

b74

b73

b72

SHDL_OHCI
b79

Scheduler Memory Register, OHCI Format
b76

b75

TOTAL_BYTE_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b70

b69

b66

b65

b64

SHDL_OHCI
b71

Scheduler Memory Register, OHCI Format
b68

b67

TOTAL_BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b62

b61

b57

b56

SHDL_OHCI
b63

Scheduler Memory Register, OHCI Format

EP0_CODE[1:0]

b60

BYPASS_ERROR

b59

b58

MMULT[1:0]

RESP_RATE[7:5]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b54

b53

b49

b48

SHDL_OHCI
b55

Scheduler Memory Register, OHCI Format
b52

b51

b50

RESP_RATE[4:0]

POLLING_RATE[7:5]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b41

b40

SHDL_OHCI
b47

Scheduler Memory Register, OHCI Format
b44

b43

b42

POLLING_RATE[4:0]

MAX_PKT_SIZE[10:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

473

10.14.34

SHDL_OHCI (continued)

SHDL_OHCI
b39

Scheduler Memory Register, OHCI Format
b38

b37

b36

b35

b34

b33

b32

MAX_PKT_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

SHDL_OHCI
b31

Scheduler Memory Register, OHCI Format
b28

b27

UFRAME_SMASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

SHDL_OHCI
b23

Scheduler Memory Register, OHCI Format

PING

b20

b19

b18

RL[3:0]

b17

MULT[1:0]

b16

ISO_EPM

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b9

b8

SHDL_OHCI
b15

Scheduler Memory Register, OHCI Format
b12

CERR[1:0]

b11

b10

NAK_CNT[3:0]

HALT

T

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

SHDL_OHCI
b7

Scheduler Memory Register, OHCI Format

ZPLEN

b4

b3

EPT[1:0]

EPND[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This area exposes the scheduler memory in OHCI format. Please note that the EHCI and OHCI scheduler memories are
using the same physical memory, so overwriting one will also overwrite the other. Scheduler memory consists of three sections:
1. Lower Section:
2. Upper Section:
3. Scratch Section:
This register exposes only the Lower and Upper section. The Scratch section is only used by Hardware and it is not accessible by Software. The Lower and Upper sections each consist of 32 End Points and each End Point requires 3 32-bit scheduler
memory locations. In result, the MMIO address for lower section would be x400-x57C and for upper portion would be x580x6FC. Software can update the appropriate portion of the memory based on the PERI_SHDL_STATUS/
ASYNC_SHDL_STATUS bits in the UIB_HOST_SHDL_CS register.

continued on next page

474

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.34

SHDL_OHCI (continued)

Bit

Name

Description

127:96

SHDL_NOT_USED[31:0]

Not used and not mapped to RAM, only present for alignment reasons

88:81

IOC_RATE[7:0]

Should be programmed to zero for OHCI.
After IOC_rate*resp_rate the scheduler will issue interrupt at the next interrupt threshold
(UIB_EHCI_USBCMD.INT_THRESHOLD_CTRL)

80

TRNS_MODE

0
1

79:64

TOTAL_BYTE_COUNT[15:0] Total number of byte count for the transaction.

63:62

EP0_CODE[1:0]

This field represents the EP0 type of transaction:
00
Reserved
01
Setup + Data Phase(OUT) + Status Phase(IN)
10
Setup + Data Phase(IN) + Status Phase(OUT)
11
Setup + Status Phase(IN)

61

BYPASS_ERROR

This bit will disable any error that would cause an EP to be de-activated. This bit should be used only
for Isochronous Endpoint.

60:59

MMULT[1:0]

This field is used to expand the MULT field to support the OHCI ControlBulkServiceRatio bandwidth
allocation.

58:51

RESP_RATE[7:0]

After how many packet the response should be written into SRAM.
The
packet
counter
increments
based
on
the
condition
UIB_HOST_RESP_CS.WR_RESP_COND.

Packet mode
Stream mode

specified

in

the

50:43

POLLING_RATE[7:0]

00h
Reserved
01h
1 ms (Every frame)
02h
2 ms (Every 2 frames)
04h
4 ms (Every 4 frames)
08h
8 ms (Every 8 frames)
10h
16 ms (Every 16 frames)
20h
32 ms (Every 32 frames)
This will be on top of the Interrupt Schedule Mask in EHCI case.

42:32

MAX_PKT_SIZE[10:0]

This directly corresponds to the maximum packet size of the associated endpoint (wMaxPacketSize).
The maximum value this field may contain is 0x400 (1024).

31:24

UFRAME_SMASK[7:0]

Should be programmed to zero for OHCI.
The host controller uses the value of the three low-order bits of the FRINDEX register as an index into
a bit position in this bit vector. If the μFrame S-mask field has a one at the indexed bit position then
this queue head is a candidate for transaction execution.

23

PING

Should be programmed to zero for OHCI.
This field enables the host to issue Ping token when Direction is OUT and it is high-speed.
0
Do not issue ping token for high-speed OUT
1
Do issue ping token for high-speed OUT

22:19

RL[3:0]

Should be programmed to zero for OHCI.
Nak Count Reload (RL). This field contains a value, which is used by the host controller to reload the
Nak Counter field.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

475

10.14.34

SHDL_OHCI (continued)

18:17

MULT[1:0]

High-Bandwidth Pipe Multiplier. This field is a multiplier used to key the host controller as the number
of successive packets the host controller may submit to the endpoint in the current execution. This
field should be programmed according to the EPM configuration for that EP. This field will get decremented only if the transfer is successful. If not successful, the original value will be reloaded.
00
Reserved. A zero in this field yields undefined results.
01
One transaction to be issued for this endpoint per micro-frame
10
Two transactions to be issued for this endpoint per micro-frame
11
Three transactions to be issued for this endpoint per micro-frame

16

ISO_EPM

0
1

For ISO-OUT when EPM is empty for that EP then a ZLP will be issued by TP.
For ISO-IN when EPM is full for that EP then and ISO-IN will be issued.
For ISO-OUT when EPM is empty for that EP then that entry will be skipped.
For ISO-IN when EPM is full for that EP then that entry will be skipped.

15:14

CERR[1:0]

This field is a 2-bit down counter that keeps track of the number of consecutive Errors detected while
executing this qTD.
If this field is programmed with a nonzero value during setup, the Host Controller decrements the
count and writes it back to the qTD if the transaction fails. If the counter counts from one to zero, the
Host Controller marks the qTD inactive, sets the Halted bit to a one and error status bit for the error
that caused CERR to decrement to zero. An interrupt will be generated if the USB Error Interrupt
Enable bit in the USBINTR register is set to a one. If HCD programs this field to zero during setup, the
Host Controller will not count errors for this qTD and there will be no limit on the retries of this qTD.

13:10

NAK_CNT[1:0]

Should be programmed to zero for OHCI.
This field is a counter the host controller decrements whenever a transaction for the endpoint associated with this queue head results in a Nak or Nyet response.

9

HALT

This will indicate that the EP is halted.
Skip this qTD and move to next qTD.

8

T

0
Not End of the Period/Asynchronous list
1
End of the Period/Asynchronous list
This bit indicates that there are no more valid entries in the current list.

7

ZPLEN

This field is used only for non-ISO endpoints.
0
Scheduler will set the active bit to zero when the total byte count reaches zero.
1
Scheduler will set the active bit to zero when the total byte count is zero and a ZLP is sent/
received.

6:5

EPT[1:0]

The End Point Type.
00
Control
01
Isochronous
10
Bulk
11
Interrupt

4:0

EPND[4:0]

[3:0]: EP number, Values: 0-15
[4]: EP Direction, 1: OUT, 0: IN
The direction bit is not used for EP0. Scheduler uses the EP0_code to determine the direction of the
EP0 transaction.

476

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.35 SHDL_EHCI
Scheduler Memory Register, EHCI Format
There are 64 SHDL_EHCI registers. The address of each is calculated as SHDL_EHCI(x) = 0xE0032800 + (x*0x4). Hence
SHDL_EHCI(0) is at address 0xE0032800, SHDL_EHCI(1) is at address 0xE0032800 + 0x4 and so on. The definition of each
of these is the same.
SHDL_EHCI
b95

Scheduler Memory Register, EHCI Format
b94

b93

b92

b91

0xE0032800
b90

b89

b88

IOC_RATE[7]
R/W
R
0

SHDL_EHCI
b87

Scheduler Memory Register, EHCI Format
b86

b85

b84

b83

b82

b81

IOC_RATE[6:0]

b80

TRNS_MODE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b78

b77

b74

b73

b72

SHDL_EHCI
b79

Scheduler Memory Register, EHCI Format
b76

b75

TOTAL_BYTE_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b70

b69

b66

b65

b64

SHDL_EHCI
b71

Scheduler Memory Register, EHCI Format
b68

b67

TOTAL_BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b62

b61

b57

b56

SHDL_EHCI
b63

Scheduler Memory Register, EHCI Format

EP0_CODE[1:0]

b60

BYPASS_ERROR

b59

b58

MMULT[1:0]

RESP_RATE[7:5]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b54

b53

b49

b48

SHDL_EHCI
b55

Scheduler Memory Register, EHCI Format
b52

b51

b50

RESP_RATE[4:0]

POLLING_RATE[7:5]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b46

b45

b41

b40

SHDL_EHCI
b47

Scheduler Memory Register, EHCI Format
b44

b43

b42

POLLING_RATE[4:0]

MAX_PKT_SIZE[10:8]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

477

10.14.35

SHDL_OHCI (continued)

SHDL_EHCI
b39

Scheduler Memory Register, EHCI Format
b38

b37

b36

b35

b34

b33

b32

MAX_PKT_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

SHDL_EHCI
b31

Scheduler Memory Register, EHCI Format
b28

b27

UFRAME_SMASK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

SHDL_EHCI
b23

Scheduler Memory Register, EHCI Format

PING

b20

b19

b18

RL[3:0]

b17

MULT[1:0]

b16

ISO_EPM

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b9

b8

SHDL_EHCI
b15

Scheduler Memory Register, EHCI Format
b12

CERR[1:0]

b11

b10

NAK_CNT[3:0]

HALT

T

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

SHDL_EHCI
b7

Scheduler Memory Register, EHCI Format

ZPLEN

b4

b3

EPT[1:0]

EPND[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

This area exposes the scheduler memory in EHCI format. Please note that the EHCI and OHCI scheduler memories are
using the same physical memory, so overwriting one will also overwrite the other. Scheduler memory consists of three sections:
1. Lower Section:
2. Upper Section:
3. Scratch Section:
This register exposes only the Lower and Upper section. The Scratch section is only used by Hardware and it is not accessible by Software. The Lower and Upper sections each consist of 32 End Points and each End Point requires 3 scheduler
memory locations. In result, the MMIO address for lower section would be x800-x97C and for upper portion would be x980xAFC. Software can update the appropriate portion of the memory based on the PERI_SHDL_STATUS/
ASYNC_SHDL_STATUS bits in the UIB_HOST_SHDL_CS register.

continued on next page

478

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.14.35

SHDL_OHCI (continued)

Bit

Name

Description

127:96

SHDL_NOT_USED[31:0]

Not used and not mapped to RAM, only present for alignment reasons

88:81

IOC_RATE[7:0]

After IOC_rate*resp_rate the scheduler will issue interrupt at the next interrupt threshold
(UIB_EHCI_USBCMD.INT_THRESHOLD_CTRL)

80

TRNS_MODE

0
1

79:64

TOTAL_BYTE_COUNT[15:0] Total number of byte count for the transaction.

63:62

EP0_CODE[1:0]

This field represents the EP0 type of transaction:
00
Reserved
01
Setup + Data Phase(OUT) + Status Phase(IN)
10
Setup + Data Phase(IN) + Status Phase(OUT)
11
Setup + Status Phase(IN)

61

BYPASS_ERROR

This bit will disable any error that would cause an EP to be de-activated. This bit should be used only
for Isochronous Endpoint.

60:59

MMULT[1:0]

Should be programmed to zero for EHCI.
This field is used to expand the MULT field to support the OHCI ControlBulkServiceRatio bandwidth
allocation.

58:51

RESP_RATE[7:0]

After how many packet the response should be written into SRAM.
The packet counter increments based on the condition specified in the
UIB_HOST_RESP_CS.WR_RESP_COND.

50:43

POLLING_RATE[7:0]

00h
Reserved
01h
1 ms (Every frame)
02h
2 ms (Every 2 frames)
04h
4 ms (Every 4 frames)
08h
8 ms (Every 8 frames)
10h
16 ms (Every 16 frames)
20h
32 ms (Every 32 frames)
This will be on top of the Interrupt Schedule Mask in EHCI case.

42:32

MAX_PKT_SIZE[10:0]

This directly corresponds to the maximum packet size of the associated endpoint (wMaxPacketSize).
The maximum value this field may contain is 0x400 (1024).

31:24

UFRAME_SMASK[7:0]

The host controller uses the value of the three low-order bits of the FRINDEX register as an index into
a bit position in this bit vector. If the μFrame S-mask field has a one at the indexed bit position then
this queue head is a candidate for transaction execution.

23

PING

Should be programmed to zero for OHCI.
This field enables the host to issue Ping token when Direction is OUT and it is high-speed.
0
Do not issue ping token for high-speed OUT
1
Do issue ping token for high-speed OUT

22:19

RL[3:0]

Nak Count Reload (RL). This field contains a value, which is used by the host controller to reload the
Nak Counter field.

Packet mode
Stream mode

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

479

10.14.35

SHDL_OHCI (continued)

18:17

MULT[1:0]

High-Bandwidth Pipe Multiplier. This field is a multiplier used to key the host controller as the number
of successive packets the host controller may submit to the endpoint in the current execution. This
field should be programmed according to the EPM configuration for that EP. This field will get decremented only if the transfer is successful. If not successful, the original value will be reloaded.
00
Reserved. A zero in this field yields undefined results.
01
One transaction to be issued for this endpoint per micro-frame
10
Two transactions to be issued for this endpoint per micro-frame
11
Three transactions to be issued for this endpoint per micro-frame

16

ISO_EPM

0
1

For ISO-OUT when EPM is empty for that EP then a ZLP will be issued by TP.
For ISO-IN when EPM is full for that EP then and ISO-IN will be issued.
For ISO-OUT when EPM is empty for that EP then that entry will be skipped.
For ISO-IN when EPM is full for that EP then that entry will be skipped.

15:14

CERR[1:0]

This field is a 2-bit down counter that keeps track of the number of consecutive Errors detected while
executing this qTD.
If this field is programmed with a nonzero value during setup, the Host Controller decrements the
count and writes it back to the qTD if the transaction fails. If the counter counts from one to zero, the
Host Controller marks the qTD inactive, sets the Halted bit to a one and error status bit for the error
that caused CERR to decrement to zero. An interrupt will be generated if the USB Error Interrupt
Enable bit in the USBINTR register is set to a one. If HCD programs this field to zero during setup, the
Host Controller will not count errors for this qTD and there will be no limit on the retries of this qTD.

13:10

NAK_CNT[1:0]

This field is a counter the host controller decrements whenever a transaction for the endpoint associated with this queue head results in a Nak or Nyet response.

9

HALT

This will indicate that the EP is halted.
Skip this qTD and move to next qTD.

8

T

0
Not End of the Period/Asynchronous list
1
End of the Period/Asynchronous list
This bit indicates that there are no more valid entries in the current list.

7

ZPLEN

This field is used only for non-ISO endpoints.
0
Scheduler will set the active bit to zero when the total byte count reaches zero.
1
Scheduler will set the active bit to zero when the total byte count is zero and a ZLP is sent/
received.

6:5

EPT[1:0]

The End Point Type.
00
Control
01
Isochronous
10
Bulk
11
Interrupt

4:0

EPND[4:0]

[3:0]: EP number, Values: 0-15
[4]: EP Direction, 1: OUT, 0: IN
The direction bit is not used for EP0. Scheduler uses the EP0_code to determine the direction of the
EP0 transaction.

480

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15 USB3 Link Controller Registers
10.15.1

LNK_CONF
Link Configuration Register

LNK_CONF
b31

Link Configuration Register
b30

b29

b22

b21

b14

b13

b28

LNK_CONF
b23

b26

b25

b24

b18

b17

b16

b10

b9

b8

Link Configuration Register
b20

LNK_CONF
b15

0xE0033000

b27

b19

Link Configuration Register
b12

b11

CREDIT_ADV_
HOLDOFF

EPM_FIRST_DELAY[3:0]

FORCE_POWER_
LDN_DETECTION
PRESENT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

b2

b1

b0

5

LNK_CONF
b7

Link Configuration Register
b6

b5

b4

b3

LCW_IGNORE_
RSVD
R/W
R
1

Configuration Settings for Link Layer Block. (for debug and compatibility testing)

Bit

Name

Description

15:12

EPM_FIRST_DELAY[3:0]

Delay sending of first Header in a egress burst in PCLK cycles (125 MHz). This is to give
the DMA network time to warm up the data pipeline.

10

CREDIT_ADV_HOLDOFF

Hold-off Credit Advertisement until Sequence Number Advertisement Received

9

LDN_DETECTION

Enable host LDN detection (see USB ECN#001)

8

FORCE_POWER_PRESENT

Force PowerPresent from PHY On

6

LCW_IGNORE_RSVD

0
1

Check reserved bits in Link Control Word are 0 (LCW)
Ignore reserved bits in Link Control Word (LCW)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

481

10.15.2

LNK_INTR
Link Interrupt Register

LNK_INTR

Link Interrupt Register

b31

b30

b29

b22

b21

LNK_INTR

b28

b27

0xE0033004
b26

b25

b24

b18

b17

b16

LTSSM_RESET

LTSSM_
DISCONNECT

R/W1C

R/W1C

R/W1S

R/W1S

0

0

Link Interrupt Register

b23

LNK_INTR

b20

b19

Link Interrupt Register

b15

b14

b13

b12

b11

b10

b9

b8

LTSSM_
CONNECT

U2_INACTIVITY_
TIMEOUT

PHY_ERROR

LINK_ERROR

BAD_LCW

LPMA

LXU

LAU

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

LNK_INTR

Link Interrupt Register

b7

b4

b3

LGO_U3

LGO_U2

LGO_U1

LCRD

LBAD

LRTY

LGOOD

LTSSM_STATE_
CHG

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

[USB 3.0, §7.2.2.2, p 7−11…7−14]

Bit

Name

Description

17

LTSSM_RESET

LTSSM Reset Received (Hot or Warm)

16

LTSSM_DISCONNECT

LTSSM Transitions to SS.Disabled

15

LTSSM_CONNECT

LTSSM Transition to Polling — indicating successful SuperSpeed far-end receiver termination detection

14

U2_INACTIVITY_TIMEOUT U2 Inactivity Timeout Interrupt

13

PHY_ERROR

PHY Error Count Threshold Reached

12

LINK_ERROR

Link Error Count Threshold Reached

11

BAD_LCW

Illegal LCW received (see LNK_CONTROL_WORD for details)

continued on next page

482

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.2

LNK_INTR (continued)

10

LPMA

LPMA Received Interrupt

9

LXU

LXU Received Interrupt

8

LAU

LAU Received Interrupt

7

LGO_U3

LGO_U3 Received Interrupt

6

LGO_U2

LGO_U2 Received Interrupt

5

LGO_U1

LGO_U1 Received Interrupt

4

LCRD

LCRD Received Interrupt

3

LBAD

LBAD Received Interrupt

2

LRTY

LRTY Received Interrupt

1

LGOOD

LGOOD Received Interrupt

0

LTSSM_STATE_CHG

LTSSM State Change Interrupt

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

483

10.15.3

LNK_INTR_MASK
Link Interrupt Mask Register

LNK_INTR_MASK

Link Interrupt Mask Register

b31

b30

b29

b22

b21

LNK_INTR_MASK

b28

b27

0xE0033008
b26

b25

b24

b18

b17

b16

LTSSM_RESET

LTSSM_
DISCONNECT

R/W

R/W

R

R

0

0

Link Interrupt Mask Register

b23

LNK_INTR_MASK

b20

b19

Link Interrupt Mask Register

b15

b14

b13

b12

b11

b10

b9

b8

LTSSM_
CONNECT

U2_INACTIVITY_
TIMEOUT

PHY_ERROR

LINK_ERROR

BAD_LCW

LPMA

LXU

LAU

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

LNK_INTR_MASK

Link Interrupt Mask Register

b7

b4

b3

LGO_U3

LGO_U2

LGO_U1

LCRD

LBAD

LRTY

LGOOD

LTSSM_STATE_
CHG

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Mask bits for each of the interrupt causes in the LNK_INTR register. Setting one of these bits to ‘1’, enables reporting of the
corresponding interrupt to the higher level.

Bit

Name

Description

17

LTSSM_RESET

LTSSM Reset Received (Hot or Warm)

16

LTSSM_DISCONNECT

LTSSM Transitions to SS.Disabled

15

LTSSM_CONNECT

LTSSM Transition to Polling — indicating successful SuperSpeed far-end receiver termination detection

14

U2_INACTIVITY_TIMEOUT U2 Inactivity Timeout Interrupt

13

PHY_ERROR

PHY Error Count Threshold Reached

12

LINK_ERROR

Link Error Count Threshold Reached

11

BAD_LCW

Illegal LCW received (see LNK_CONTROL_WORD for details)

continued on next page

484

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.3

LNK_INTR (continued)

10

LPMA

LPMA Received Interrupt

9

LXU

LXU Received Interrupt

8

LAU

LAU Received Interrupt

7

LGO_U3

LGO_U3 Received Interrupt

6

LGO_U2

LGO_U2 Received Interrupt

5

LGO_U1

LGO_U1 Received Interrupt

4

LCRD

LCRD Received Interrupt

3

LBAD

LBAD Received Interrupt

2

LRTY

LRTY Received Interrupt

1

LGOOD

LGOOD Received Interrupt

0

LTSSM_STATE_CHG

LTSSM State Change Interrupt

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

485

10.15.4

LNK_ERROR_CONF
Link Error Counter Configuration Register

LNK_ERROR_CONF
b31

Link Error Counter Configuration Register
b30

b29

b22

b21

b14

b13

b12

CREDIT_ADV_
LGO_EN

CREDIT_ADV_
HP_EN

CREDIT_ADV_
TIMEOUT_EN

R/W

R/W

R/W

R/W

R

R

R

R

1

1

1

1

b6

b5

LNK_ERROR_CONF
b23

0xE003300C
b26

b25

b24

b20

b19

b18

b17

b16

Link Error Counter Configuration Register

LNK_ERROR_CONF
b7

b27

Link Error Counter Configuration Register

LNK_ERROR_CONF
b15

b28

b11

b10

b9

b8

HDR_ADV_HP_
EN

HDR_ADV_
TIMEOUT_EN

R/W

R/W

R/W

R

R

R

1

1

1

b1

b0

HDR_ADV_LGO_ HDR_ADV_LCRD
EN
_EN

Link Error Counter Configuration Register

TX_SEQ_NUM_ PM_LC_TIMEOUT
ERR_EN
_EN

b4

CREDIT_HP_
TIMEOUT_EN

b3

b2

MISSING_LCRD_ MISSING_LGOOD
RX_HP_FAIL_EN
EN
_EN

RX_SEQ_NUM_
HP_TIMEOUT_EN
ERR_EN

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

Link Error Count [USB 3.0: §7.3, p 7−26…7−33, esp Table 7−11, p 7−32]
The Link Error Count keeps track of the number of errors for which the Link Layer Block had to transition to the Recovery
State before resuming normal operation. Each error class can be enabled (default on) for debugging purposes.

Bit

Name

Description

14

CREDIT_ADV_LGO_EN

Rx Header Buffer Credit Advertisement LGO_Ux Received Error Count Enable
LGO_Ux Link Command received during Rx Header Buffer Credit Advertisement.
[USB 3.0: §7.3.7, p 7−30…7−31]

13

CREDIT_ADV_HP_EN

Rx Header Buffer Credit Advertisement HP Received Error Count Enable
Header Packet received during Rx Header Buffer Credit Advertisement.
[USB 3.0: §7.3.7, p 7−30…7−31]

12

CREDIT_ADV_TIMEOUT_EN

Rx Header Buffer Credit Advertisement CREDIT_HP_TIMER Timeout Count Enable
CREDIT_HP_TIMER timeout before receipt of LCRD_x Link Command during Rx Header
Buffer Credit Advertisement
[USB 3.0: §7.3.7, p 7−30…7−31]

continued on next page

486

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.4

LNK_ERROR_CONF (continued)

11

HDR_ADV_LGO_EN

Header Sequence Number Advertisement LGO_Ux Received Error Count Enable
LGO_Ux Link Command received during Header Sequence Number Advertisement
[USB 3.0: §7.3.6, p 7−30]

10

HDR_ADV_LCRD_EN

Header Sequence Number Advertisement LCRD_x Received Error Count Enable
LCRD_x Link Command received during Header Sequence Number Advertisement
[USB 3.0: §7.3.6, p 7−30]

9

HDR_ADV_HP_EN

Header Sequence Number Advertisement HP Received Error Count Enable
Header Packet received during Header Sequence Number Advertisement
[USB 3.0: §7.3.6, p 7−30]

8

HDR_ADV_TIMEOUT_EN

Header Sequence Number Advertisement PENDING_HP_TIMER Timeout Count Enable
PENDING_HP_TIMER timeout before receipt of Header Sequence Number LGOOD_n Link
Command
[USB 3.0: §7.3.6, p 7−30]

7

TX_SEQ_NUM_ERR_EN

ACK Tx Header Sequence Number Error Count Enable
Received LGOOD_n does not match ACK Tx Header Sequence Number.
[USB 3.0: §7.3.5, p 7−30]

6

PM_LC_TIMEOUT_EN

PM_LC_TIMER Timeout Count Enable
This indicates that an LGO_Ux, LAU, or LXU Link Command is missed.
[USB 3.0: §7.3.4, p 7−29]

5

CREDIT_HP_TIMEOUT_EN

CREDIT_HP_TIMER Timeout Count Enable
Remote Rx Header Buffer Credit has not been received by CREDIT_HP_TIMEOUT.
[USB 3.0: §7.2.4.1.10, p 7−21…7−22]

4

MISSING_LCRD_EN

Missing LCRD_x Detection Count Enable
LCRD_x Sequence does not match what is expected.
[USB 3.0: §7.3.4, p 7−29]

3

MISSING_LGOOD_EN

Missing LGOOD_n Detection Count Enable
LGOOD_n Sequence Number does not match what is expected.
[USB 3.0: §7.3.4, p 7−29]

2

RX_HP_FAIL_EN

Receive Header Packet Fail Count Enable
Link Layer Block has failed to receive a Header Packet for three consecutive times. Failures
are CRC errors or spurious K-symbols.
[USB 3.0: §7.3.3.2, p 7−28]

1

RX_SEQ_NUM_ERR_EN

Rx Header Sequence Number Error Count Enable
Received Rx Header Sequence Number does not match what is expected.
[USB 3.0: §7.3.3.3, p 7−28]

0

HP_TIMEOUT_EN

PENDING_HP_TIMER Timeout Count Enable
Header Packet acknowledgement has not been received by PENDING_HP_TIMEOUT.
[USB 3.0: §7.2.4.1.10, p 7−21]

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

487

10.15.5

LNK_ERROR_STATUS
Link Error Status Register

LNK_ERROR_STATUS
b31

Link Error Status Register
b30

b29

b28

b22

b21

b14

b13

b12

CREDIT_ADV_
LGO_EV

CREDIT_ADV_
HP_EV

CREDIT_ADV_
TIMEOUT_EV

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

b6

b5

LNK_ERROR_STATUS
b23

b20

b25

b24

b19

b18

b17

b16

Link Error Status Register

LNK_ERROR_STATUS
b7

0xE0033010
b26

Link Error Status Register

LNK_ERROR_STATUS
b15

b27

b11

b10

b9

b8

HDR_ADV_HP_
EV

HDR_ADV_
TIMEOUT_EV

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

0

0

0

HDR_ADV_LGO_ HDR_ADV_LCRD
EV
_EV

Link Error Status Register

TX_SEQ_NUM_ PM_LC_TIMEOUT
ERR_EV
_EV

b4

CREDIT_HP_
TIMEOUT_EV

b3

b2

MISSING_LCRD_ MISSING_LGOOD
RX_HP_FAIL_EV
EV
_EV

b1

b0

RX_SEQ_NUM_
ERR_EV

HP_TIMEOUT_EV

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

The LNK_ERROR_STATUS register indicates whether any of the USB 3.0 link error conditions is detected by the FX3 device
since the corresponding status was previously cleared.

Bit

Name

Description

14

CREDIT_ADV_LGO_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

13

CREDIT_ADV_HP_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

12

CREDIT_ADV_TIMEOUT_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

11

HDR_ADV_LGO_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

10

HDR_ADV_LCRD_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

continued on next page

488

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.5

LNK_ERROR_STATUS (continued)

9

HDR_ADV_HP_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

8

HDR_ADV_TIMEOUT_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

7

TX_SEQ_NUM_ERR_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

6

PM_LC_TIMEOUT_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

5

CREDIT_HP_TIMEOUT_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

4

MISSING_LCRD_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

3

MISSING_LGOOD_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

2

RX_HP_FAIL_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

1

RX_SEQ_NUM_ERR_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

0

HP_TIMEOUT_EV

Indicates this error (see LNK_ERROR_CONF for description) occurred since this bit was
last cleared by firmware.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

489

10.15.6

LNK_ERROR_COUNT
Error Counter Register

LNK_ERROR_COUNT
b31

Error Counter Register
b30

b29

b28

b27

0xE0033014
b26

b25

b24

PHY_ERROR_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

LNK_ERROR_COUNT
b23

Error Counter Register
b20

b19

PHY_ERROR_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

LNK_ERROR_COUNT
b15

Error Counter Register
b12

b11

LINK_ERROR_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

LNK_ERROR_COUNT
b7

Error Counter Register
b4

b3

LINK_ERROR_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Error counter register keeps track of errors from PHY and Link Controller. Only errors enabled in LNK_PHY_ERROR_CONF
and LNK_LINK_ERROR_CONF are counted.

Bit

Name

31:16

PHY_ERROR_COUNT[15:0]

Count of receive errors from the USB 3.0 PHY. This is for debug purposes.

15:0

LINK_ERROR_COUNT[15:0]

The Link Error Count keeps track of the number of errors for which the Link Layer Block had
to transition to the Recovery State before resuming normal operation. Counting of errors in
each class can be enabled through the LINK_ERROR_CONF register.

490

Description

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.7

LNK_ERROR_COUNT_THRESHOLD
Error Count Threshold Register

LNK_ERROR_COUNT_THRESHOLD
b31

b30

Error Count Threshold Register
b29

b28

b27

0xE0033018
b26

b25

b24

PHY_ERROR_THRESHOLD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b18

b17

b16

LNK_ERROR_COUNT_THRESHOLD
b23

b22

Error Count Threshold Register
b21

b20

b19

PHY_ERROR_THRESHOLD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b10

b9

b8

LNK_ERROR_COUNT_THRESHOLD
b15

b14

Error Count Threshold Register
b13

b12

b11

LINK_ERROR_THRESHOLD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

LNK_ERROR_COUNT_THRESHOLD
b7

b6

Error Count Threshold Register
b5

b4

b3

LINK_ERROR_THRESHOLD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Threshold values for asserting Error Count Interrupts. These values are the error count limits after which the respective interrupts are generated.

Bit

Name

Description

31:16

PHY_ERROR_THRESHOLD[15:0]

PHY Error Count Threshold for Interrupt Generation

15:0

LINK_ERROR_THRESHOLD[15:0]

Link Error Count Threshold for Interrupt Generation

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

491

10.15.8

LNK_PHY_CONF
USB 3.0 PHY Configuration Register

LNK_PHY_CONF
b31

USB 3.0 PHY Configuration Register
b30

b29

b28

b27

0xE003301C
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RX_TERMINATIO RX_TERMINATIO RX_TERMINATIO
N_ENABLE
N_OVR_VAL
N_OVR
R/W

R/W

R/w

R

R

R

0

0

0

b22

b21

b14

b13

b6

b5

LNK_PHY_CONF
b23

USB 3.0 PHY Configuration Register

LNK_PHY_CONF
b15

b19

USB 3.0 PHY Configuration Register

LNK_PHY_CONF
b7

b20

b12

b11

USB 3.0 PHY Configuration Register
b4

b3

b0

PHY_MODE[1:0]
R

R

R

R
1

[PIPE 3.0]

Bit

Name

Description

31

RX_TERMINATION_ENABLE

PHY Receiver Termination Enable

30

RX_TERMINATION_OVR_VAL

PHY Receiver Termination Override Value
0
Removed
1
Present

29

RX_TERMINATION_OVR

PHY Receiver Termination Override

1:0

PHY_MODE[1:0]

PHY Operation Mode
01
USB Super Speed

492

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.9

LNK_PHY_MPLL_STATUS
USB 3.0 PHY MPLL Status Register

LNK_PHY_MPLL_STATUS
b31

USB 3.0 PHY MPLL Status Register

b30

b29

LNK_PHY_MPLL_STATUS

b28

b27

0xE003302C
b26

b25

b24

b18

b17

b16

USB 3.0 PHY MPLL Status Register

b23

b22

b21

REF_CLKREQ_N

REF_CLKDIV2

REF_SSP_EN

b20

b19

SSC_REF_CLK_SEL[7:3]

R

R

R/W

R

R

R

R

R

R/W

R/W

R

R/W

R/W

R/W

R/W

R/W

1

0

0

b9

b8

LNK_PHY_MPLL_STATUS
b15

USB 3.0 PHY MPLL Status Register

b14

b13

b12

SSC_REF_CLK_SEL[2:0]

b11

SSC_RANGE[1:0]

b10

SSC_EN

MPLL_MULTIPLIER[6:5]

R

R

R

R/W

R/W

R/W

R

R

R/W

R/W

R/W

R

R

R

R/W

R/W

0

0

1

H

H

b2

b1

b0

0x88

LNK_PHY_MPLL_STATUS
b7

USB 3.0 PHY MPLL Status Register

b6

b5

b4

b3

MPLL_MULTIPLIER[4:0]
R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

Bit

Name

Description

23

REF_CLKREQ_N

PHY output signal ref_clkreq_n

22

REF_CLKDIV2

USB 3.0 PHY Input Reference Clock Divider Control

21

REF_SSP_EN

USB 3.0 PHY Reference Clock Enable for SSP PHY
Enables the reference clock to the PHY prescaler. This signal must remain deasserted until the reference clock is stable.

20:13

SSC_REF_CLK_SEL[7:0]

Spread Spectrum Reference Clock Shifting

12:11

SSC_RANGE[1:0]

Spread Spectrum Clock Range

10

SSC_EN

Spread Spectrum Enable

9:3

MPLL_MULTIPLIER[6:0]

MPLL Frequency Multiplier Control
Default values (based on clock crystal frequency):
19.2 MHz  0x02
26 MHz  0x60
38.4 MHz  0x41
52 MHz  0x30

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

493

10.15.10 LNK_PHY_TX_TRIM
USB 3.0 PHY Transmitter Config Register
LNK_PHY_TX_TRIM
b31

USB 3.0 PHY Transmitter, Config Register
b30

b29

b28

b27

0xE003303C
b26

b25

b24

PCS_TX_SWING_LOW[6:3]

LNK_PHY_TX_TRIM
b23

R/w

R/w

R/w

R/w

R

R

R

R

b18

b17

b16

USB 3.0 PHY Transmitter, Config Register
b22

b21

b20

b19

PCS_TX_SWING_LOW[2:0]

PCS_TX_SWING_FULL[6:2]

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R/w

R

R

R

R

R

R

R

R

b10

b9

b8

105

LNK_PHY_TX_TRIM
b15

USB 3.0 PHY Transmitter, Config Register
b14

b13

b12

b11

PCS_TX_SWING_FULL[1:0]

PCS_TX_DEEMPH_6DB[5:1]

R/w

R/w

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

b2

b1

b0

105

LNK_PHY_TX_TRIM
b7

USB 3.0 PHY Transmitter, Config Register
b6

b5

b4

PCS_TX_DEEMP
H_6DB[0]

b3

PCS_TX_DEEMPH_3P5DB[5:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

32

21

See Synopsys USB3 SSP PHY Databook

Bit

Name

Description

27:21

PCS_TX_SWING_LOW[6:0]

TX Amplitude (Low Swing Mode) in 10 mv units

20:14

PCS_TX_SWING_FULL[6:0]

TX Amplitude (Full Swing Mode) in 10 mv units

12:7

PCS_TX_DEEMPH_6DB[5:0]

TX de-emphasis at 6dB

5:0

PCS_TX_DEEMPH_3P5DB[5:0]

TX de-emphasis at 3.5dB

494

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.11 LNK_PHY_ERROR_CONF
PHY Error Counter Configuration Register
LNK_PHY_ERROR_CONF
b31

PHY Error Counter Configuration Register

b30

b29

LNK_PHY_ERROR_CONF
b23

b27

0xE0033040
b26

b25

b24

b18

b17

b16

b10

b9

PHY Error Counter Configuration Register

b22

b21

LNK_PHY_ERROR_CONF
b15

b28

b20

b19

PHY Error Counter Configuration Register

b14

b13

b12

b11

b8

PHY_LOCK_EN
R/W
R
1

LNK_PHY_ERROR_CONF

PHY Error Counter Configuration Register

b7

b6

b5

b4

TRAINING_
ERROR_EN

RX_ERROR_
CRC32_EN

RX_ERROR_
CRC16_EN

RX_ERROR_
CRC5_EN

b3

b2

b1

b0

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

1

1

1

1

1

1

1

PHY_ERROR_DIS PHY_ERROR_EB PHY_ERROR_EB PHY_ERROR_DE
PARITY_EN
_UND_EN
_OVR_EN
CODE_EN

From RxStatus[2:0] [PIPE, p 22]
Configuration of receive error counter for the USB 3.0 PHY errors. This is for debug purposes.

Bit

Name

Description

8

PHY_LOCK_EN

Enable Counting of PHY Lock Loss. Lock Indicator To Be Determined

7

TRAINING_ERROR_EN

Enable Counting of Training Sequence Error

6

RX_ERROR_CRC32_EN

Enable Counting of Receive CRC-32 Error

5

RX_ERROR_CRC16_EN

Enable Counting of Receive CRC-16 Error

4

RX_ERROR_CRC5_EN

Enable Counting of Receive CRC-5 Error

3

PHY_ERROR_DISPARITY_EN

Enable Counting of Receive Disparity Error (RxStatus == 3'b111)

2

PHY_ERROR_EB_UND_EN

Enable Counting of Elastic Buffer Underflow (RxStatus == 3'b110)

1

PHY_ERROR_EB_OVR_EN

Enable Counting of Elastic Buffer Overflow (RxStatus == 3'b101)

0

PHY_ERROR_DECODE_EN

Enable Counting of 8b/10b Decode Errors (RxStatus == 3'b100)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

495

10.15.12 LNK_PHY_ERROR_STATUS
PHY Error Status Register
LNK_PHY_ERROR_STATUS
b31

b30

PHY Error Status Register
b29

LNK_PHY_ERROR_STATUS
b23

b22

b14

b27

0xE0033044
b26

b25

b24

b18

b17

b16

b10

b9

PHY Error Status Register
b21

LNK_PHY_ERROR_STATUS
b15

b28

b20

b19

PHY Error Status Register
b13

b12

b11

b8

PHY_LOCK_EV
R/W1C
R/W1S
0

LNK_PHY_ERROR_STATUS

PHY Error Status Register

b7

b6

b5

b4

TRAINING_
ERROR_EV

RX_ERROR_
CRC32_EV

RX_ERROR_
CRC16_EV

RX_ERROR_
CRC5_EV

b3

b2

b1

b0

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

PHY_ERROR_DIS PHY_ERROR_EB PHY_ERROR_EB PHY_ERROR_DE
PARITY_EV
_UND_EV
_OVR_EV
CODE_EV

Indicates the occurrence of each PHY error type since it was last cleared by firmware.

Bit

Name

Description

8

PHY_LOCK_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit was last
cleared by firmware.

7

TRAINING_ERROR_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit was last
cleared by firmware.

6

RX_ERROR_CRC32_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit was last
cleared by firmware.

5

RX_ERROR_CRC16_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit was last
cleared by firmware.

4

RX_ERROR_CRC5_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit was last
cleared by firmware.

continued on next page

496

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.12

LNK_PHY_TEST (continued)

3

PHY_ERROR_DISPARITY_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit
was last cleared by firmware.

2

PHY_ERROR_EB_UND_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit
was last cleared by firmware.

1

PHY_ERROR_EB_OVR_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit
was last cleared by firmware.

0

PHY_ERROR_DECODE_EV

Indicates this error (see LNK_PHY_ERROR_CONF for description) occurred since this bit
was last cleared by firmware.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

497

10.15.13 LNK_DEVICE_POWER_CONTROL
USB 3.0 Device Power State Control Register
LNK_DEVICE_POWER_CONTROL

USB 3.0 Device Power State Control Register

0xE0033050

b31

b30

b29

b28

b27

b26

YES_U2

YES_U1

NO_U2

NO_U1

AUTO_U2

AUTO_U1

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

LNK_DEVICE_POWER_CONTROL
b23

b22

b14

b24

b17

b16

USB 3.0 Device Power State Control Register
b21

LNK_DEVICE_POWER_CONTROL
b15

b25

b20

b19

b18

USB 3.0 Device Power State Control Register
b13

LNK_DEVICE_POWER_CONTROL

b12

b11

b10

b9

b8

EXIT_LP

TX_LXU

R/W1S

R/W1S

R/W0C

R/W0C

0

0

USB 3.0 Device Power State Control Register

b7

b6

b5

b4

TX_LAU

RX_U3

RX_U2

RX_U1

b3

b2

b1

b0

TX_U3

TX_U2

TX_U1

R/W1S

R

R

R

R/W1S

R/W1S

R/W1S

R/W0C

R/W

R/W

R/W

R/W0C

R/W0C

R/W0C

0

0

0

0

0

0

0

This register controls the power state change request LCW protocol

Bit

Name

Description

31

YES_U2

When host requests transition to U2, automatically accept (send LAU). The interrupt RX_U2 is still
raised for firmware to monitor, take additional power saving actions.

30

YES_U1

When host requests transition to U1, automatically accept (send LAU). The interrupt RX_U1 is still
raised for firmware to monitor, take additional power saving actions.

29

NO_U2

When host requests transition to U2, automatically reject (send LXU). The interrupt RX_U2 is still
raised for firmware to monitor, take additional actions. This bit must be cleared by firmware when
FORCE_PM_ACCEPT is received from host.

28

NO_U1

When host requests transition to U1, automatically reject (send LXU). The interrupt RX_U1 is still
raised for firmware to monitor, take additional actions. This bit must be cleared by firmware when
FORCE_PM_ACCEPT is received from host.

27

AUTO_U2

When host requests transition to U2, automatically accept (send LAU) or rejects (send LXU) depending on pending activity. The interrupt RX_U2 is still raised for firmware to monitor, take additional
power saving actions.

continued on next page

498

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.13

LNK_DEVICE_POWER_CONTROL (continued)

26

AUTO_U1

When host requests transition to U1, automatically accept (send LAU) or rejects (send LXU) depending on pending activity. The interrupt RX_U1 is still raised for firmware to monitor, take additional
power saving actions.

9

EXIT_LP

Exit Low Power State
This bit is cleared by hardware when the Link Layer has exited U1/U2/U3.

8

TX_LXU

Transmit LXU (NAK) in response to RX_U1/RX_U2/RX_U3. Do not transition to requested power
state (LTSSM). This bit is cleared when the acknowledgement is sent.

7

TX_LAU

Transmit LAU (ACK) in response to RX_U1/RX_U2/RX_U3. Transition to requested power state
(LTSSM). This bit is cleared when the acknowledgement is sent.

6

RX_U3

LGO_U3 Received - Request to go to U3 Power State, clear to NAK (send LXU). This bit is cleared
by hardware concurrent with TX_LAU/TX_LXU being cleared.
Note that an upstream port is not allowed to reject entry to U3.
[USB 3.0: §7.2.4.2.4, p 7−25]

5

RX_U2

LGO_U2 Received - Request to go to U2 Power State, clear to NAK (send LXU). This bit is cleared
by hardware concurrent with TX_LAU/TX_LXU being cleared.

4

RX_U1

LGO_U1 Received - Request to go to U1 Power State. This bit is cleared by hardware concurrent
with TX_LAU/TX_LXU being cleared.

2

TX_U3

Transmit LGO_U3 - Request to go to U3 Power State (send LGO_U3). This bit is cleared by hardware when the LCW is transmitted.
Note that an upstream port is not allowed to initiate entry to U3, so this should not be used for device
mode.
[USB 3.0: §7.2.4.2.4, p 7−25]

1

TX_U2

Transmit LGO_U2 - Request to go to U2 Power State (send LGO_U2). This bit is cleared by hardware when the LCW is transmitted.

0

TX_U1

Transmit LGO_U1 - Request to go to U1 Power State (send LGO_U1). This bit is cleared by hardware when the LCW is transmitted.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

499

10.15.14 LNK_LTSSM_STATE
Link Training Status State Machine (LTSSM) State Register
LNK_LTSSM_STATE
b31

Link Training Status State Machine (LTSSM) State Register
b30

LNK_LTSSM_STATE
b23

b27

b26

0xE0033054
b25

b24

b21

b20

b19

b18

b17

b16

b9

b8

b1

b0

Link Training Status State Machine (LTSSM) State Register
b14

LNK_LTSSM_STATE
b7

b28

Link Training Status State Machine (LTSSM) State Register
b22

LNK_LTSSM_STATE
b15

b29

b13

b12

b11

b10

Link Training Status State Machine (LTSSM) State Register
b6

b5

b4

b3

b2

LTSSM_STATE[5:0]
R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

USB 3.0 interface link layer state control and status

Bit

Name

5:0

LTSSM_STATE[5:0]

500

Description
LTSSM State. See USBLNK_LTSSM Tab in USB-RegMap.xls for more details.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.15 LNK_LFPS_OBSERVE
LFPS Receiver Observability Register
LNK_LFPS_OBSERVE
b31

LFPS Receiver Observability Register
b30

b29

b22

b21

LNK_LFPS_OBSERVE
b23

b28

0xE0033064

b27

b26

b25

b24

b18

b17

b16

LFPS Receiver Observability Register
b20

b19

POLLING_LFPS_SENT[3:0]

POLLING_LFPS_RCVD[3:0]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

b6

b5

b4

b3

b2

b1

b0

LOOPBACK_DET

U3_EXIT_DET

U2_EXIT_DET

U1_EXIT_DET

RESET_DET

PING_DET

POLLING_DET

R/W0C

R/W0C

R/W0C

R/W0C

R/W0C

R/W0C

R/W0C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

LNK_LFPS_OBSERVE
b15

LFPS Receiver Observability Register

LNK_LFPS_OBSERVE
b7

b12

b11

LFPS Receiver Observability Register

Debug register for observability of detected LFPS sequences.

Bit

Name

Description

23:20

POLLING_LFPS_SENT[3:0] Number of LFPS Polling Bursts Sent since last Polling.LFPS entry

19:16

POLLING_LFPS_RCVD[3:0] Number of LFPS Polling Bursts Received since last Polling.LFPS entry

6

LOOPBACK_DET

LFPS Sequence detected since last cleared by CPU

5

U3_EXIT_DET

LFPS Sequence detected since last cleared by CPU

4

U2_EXIT_DET

LFPS Sequence detected since last cleared by CPU

3

U1_EXIT_DET

LFPS Sequence detected since last cleared by CPU

2

RESET_DET

LFPS Sequence detected since last cleared by CPU

1

PING_DET

LFPS Sequence detected since last cleared by CPU

0

POLLING_DET

LFPS Sequence detected since last cleared by CPU

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

501

10.15.16 LNK_COMPLIANCE_PATTERN_0
Compliance Pattern CP0 Register
LNK_COMPLIANCE_PATTERN_0
b31

b30

Compliance Pattern CP0 Register
b29

LNK_COMPLIANCE_PATTERN_0
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP0 Register
b13

LNK_COMPLIANCE_PATTERN_0
b7

0xE0033138

b27

Compliance Pattern CP0 Register
b21

LNK_COMPLIANCE_PATTERN_0
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

1

0

b3

b2

b1

b0

Compliance Pattern CP0 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x00

This register determines the behavior of the FX3 device when sending any of the USB 3.0 compliance patterns. The default
value of this register corresponds to compliance pattern 0.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

502

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.17 LNK_COMPLIANCE_PATTERN_1
Compliance Pattern CP1 Register
LNK_COMPLIANCE_PATTERN_1
b31

b30

Compliance Pattern CP1 Register
b29

LNK_COMPLIANCE_PATTERN_1
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP1 Register
b13

LNK_COMPLIANCE_PATTERN_1
b7

0xE003313C

b27

Compliance Pattern CP1 Register
b21

LNK_COMPLIANCE_PATTERN_1
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

0

b3

b2

b1

b0

Compliance Pattern CP1 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x4A

USB 3.0 PHY configuration values for compliance pattern 1.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

503

10.15.18 LNK_COMPLIANCE_PATTERN_2
Compliance Pattern CP2 Register
LNK_COMPLIANCE_PATTERN_2
b31

b30

Compliance Pattern CP2 Register
b29

LNK_COMPLIANCE_PATTERN_2
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP2 Register
b13

LNK_COMPLIANCE_PATTERN_2
b7

0xE0033140

b27

Compliance Pattern CP2 Register
b21

LNK_COMPLIANCE_PATTERN_2
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

0

b3

b2

b1

b0

Compliance Pattern CP2 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x78

USB 3.0 PHY configuration values for compliance pattern 2.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

504

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.19 LNK_COMPLIANCE_PATTERN_3
Compliance Pattern CP3 Register
LNK_COMPLIANCE_PATTERN_3
b31

b30

Compliance Pattern CP3 Register
b29

LNK_COMPLIANCE_PATTERN_3
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP3 Register
b13

LNK_COMPLIANCE_PATTERN_3
b7

0xE0033144

b27

Compliance Pattern CP3 Register
b21

LNK_COMPLIANCE_PATTERN_3
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

1

b3

b2

b1

b0

Compliance Pattern CP3 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xBC

USB 3.0 PHY configuration values for compliance pattern 3.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

505

10.15.20 LNK_COMPLIANCE_PATTERN_4
Compliance Pattern CP4 Register
LNK_COMPLIANCE_PATTERN_4
b31

b30

Compliance Pattern CP4 Register
b29

LNK_COMPLIANCE_PATTERN_4
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP4 Register
b13

LNK_COMPLIANCE_PATTERN_4
b7

0xE0033148

b27

Compliance Pattern CP4 Register
b21

LNK_COMPLIANCE_PATTERN_4
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

1

1

0

0

b3

b2

b1

b0

Compliance Pattern CP4 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x00

USB 3.0 PHY configuration values for compliance pattern 4.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

506

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.21 LNK_COMPLIANCE_PATTERN_5
Compliance Pattern CP5 Register
LNK_COMPLIANCE_PATTERN_5
b31

b30

Compliance Pattern CP5 Register
b29

LNK_COMPLIANCE_PATTERN_5
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP5 Register
b13

LNK_COMPLIANCE_PATTERN_5
b7

0xE003314C

b27

Compliance Pattern CP5 Register
b21

LNK_COMPLIANCE_PATTERN_5
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

0

1

b3

b2

b1

b0

Compliance Pattern CP5 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFC

USB 3.0 PHY configuration values for compliance pattern 5.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

507

10.15.22 LNK_COMPLIANCE_PATTERN_6
Compliance Pattern CP6 Register
LNK_COMPLIANCE_PATTERN_6
b31

b30

Compliance Pattern CP6 Register
b29

LNK_COMPLIANCE_PATTERN_6
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP6 Register
b13

LNK_COMPLIANCE_PATTERN_6
b7

0xE0033150

b27

Compliance Pattern CP6 Register
b21

LNK_COMPLIANCE_PATTERN_6
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

1

b3

b2

b1

b0

Compliance Pattern CP6 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFC

USB 3.0 PHY configuration values for compliance pattern 6.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

508

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.15.23 LNK_COMPLIANCE_PATTERN_7
Compliance Pattern CP7 Register
LNK_COMPLIANCE_PATTERN_7
b31

b30

Compliance Pattern CP7 Register
b29

LNK_COMPLIANCE_PATTERN_7
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP7 Register
b13

LNK_COMPLIANCE_PATTERN_7
b7

0xE0033154

b27

Compliance Pattern CP7 Register
b21

LNK_COMPLIANCE_PATTERN_7
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

1

0

1

0

0

b3

b2

b1

b0

Compliance Pattern CP7 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x00

USB 3.0 PHY configuration values for compliance pattern 7.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

509

10.15.24 LNK_COMPLIANCE_PATTERN_8
Compliance Pattern CP8 Register
LNK_COMPLIANCE_PATTERN_8
b31

b30

Compliance Pattern CP8 Register
b29

LNK_COMPLIANCE_PATTERN_8
b23

b22

b14

b6

b20

b26

b25

b24

b19

b18

b17

b16

Compliance Pattern CP8 Register
b13

LNK_COMPLIANCE_PATTERN_8
b7

0xE0033158

b27

Compliance Pattern CP8 Register
b21

LNK_COMPLIANCE_PATTERN_8
b15

b28

b12

b11

b10

b9

b8

TXONESZEROS

LFPS

DEEMPHASIS

SCRAMBLED

K_D

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

1

0

0

0

0

b3

b2

b1

b0

Compliance Pattern CP8 Register
b5

b4

CP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0x00

USB 3.0 PHY configuration values for compliance pattern 8.

Bit

Name

Description

12

TXONESZEROS

Enable TXONESZEROS (PIPE PHY Transmit Signal)

11

LFPS

LFPS On/Off

10

DEEMPHASIS

De-emphasis On/Off

9

SCRAMBLED

Scramble On/Off

8

K_D

Symbol Type
0
Data (D)
1
Symbol (K)

7:0

CP[7:0]

Compliance Pattern

510

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16 USB3 Protocol Layer Registers
10.16.1

PROT_CS
Protocol Layer Control and Status Register

PROT_CS
b31

Protocol Layer Control and Status Register
b30

b29

b28

b27

MULT_TIMER[4:0]

0xE0033400
b26

b25

b24

DISABLE_IDLE_
DET

SEQ_NUM_
CONFIG

PROT_HOST_RE
SET_RESP

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

b18

b17

b16

NRDY_ALL

SETUP_CLR_
BUSY

0x18

PROT_CS
b23

Protocol Layer Control and Status Register
b22

b21

b20

b19

TP_THRESHOLD[5:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W1C

R

R

R

R

R

R

R

R/W1S

0

0

b10

b9

b8

b2

b1

b0

58

PROT_CS
b15

Protocol Layer Control and Status Register
b14

b13

b6

b5

PROT_CS
b7

b12

b11

Protocol Layer Control and Status Register
b4

b3

DEVICEADDR[6:0]
R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

NRDYALL can be used to temporarily NRDY all transactions on the bus while modifying the EP configuration registers.
SETUP_CLR_BUSY Is used by firmware to process the setup token/data.

Bit

Name

Description

31:27

MULT_TIMER[4:0]

This timer indicates how long protocol should wait for data (MULT is enabled) to be available by EPM
before terminating a burst.
Protocol will multiply the value programmed by 4.

26

DISABLE_IDLE_DET

This bit will control the idle detection logic in the protocol.
0
Logic is not disabled.
1
Logic is disabled.

25

SEQ_NUM_CONFIG

This bit indicates if the seq numbers are EP based or Stream ID (Socket) based
0
EP based
1
Stream ID (Socket) based

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

511

10.16.1

PROT_CS (continued)

24

PROT_HOST_RESET_RESP This bit is used to inform the protocol of what the response to incoming TP/DPH should be after
warm/host reset. This register will be used by Protocol until the LINK_INTR.LTSSM_RESET is
cleared by CPU.
0
Issue NRDY
1
Ignore TP

23:18

TP_THRESHOLD[5:0]

Ingress TP response transmit buffer threshold for almost full flag. When buffer contains
TP_THRESHOLD items or more, controller will stop issuing credits to host. This field must be larger
than 0. The transmit buffer can hold up to 64 responses.

17

NRDY_ALL

Set this bit to ‘1’, the hardware will send NRDY all transfers from the host in all endpoint1-31.

16

SETUP_CLR_BUSY

Allow device to ACK SETUP status phase packets

6:0

DEVICEADDR[6:0]

During the USB enumeration process, the host sends a device a unique 7-bit address, which the USB
core copies into this register. The USB Core will automatically respond only to its assigned address.
During the USB RESET, this register will be cleared to zero.

512

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.2

PROT_INTR
Protocol Layer Interrupt Register

PROT_INTR

Protocol Layer Interrupt Register

b31

b30

b29

b28

b22

b21

b15

b14

b13

b12

SET_ADDR0_EV

EP0_STALLED_
EV

LMP_INVALID_
PORT_CFG_EV

LMP_INVALID_
PORT_CAP_EV

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

0

0

0

PROT_INTR

b27

0xE0033404
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

STATUS_STAGE

HOST_ERR_EV

SUTOK_EV

ITP_EV

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

b2

b1

b0

Protocol Layer Interrupt Register

b23

b20

PROT_INTR

b19

Protocol Layer Interrupt Register

PROT_INTR

Protocol Layer Interrupt Register

b7

b6

b5

b4

b3

TIMEOUT_HOST_ TIMEOUT_PING_ TIMEOUT_PORT_ TIMEOUT_PORT_ LMP_PORT_CFG LMP_PORT_CAP LMP_UNKNOWN_
ACK_EV
EV
CFG_EV
CAP_EV
_EV
_EV
EV

LMP_RCV_EV

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

Contains the miscellaneous (not endpoint related) interrupts causes from the Protocol Layer.

Bit

Name

Description

15

SET_ADDR0_EV

Device sets this interrupt when it receives a set address 0 command.

14

EP0_STALLED_EV

Device sets this interrupt based on the following conditions:
1: When Host sends more data than it is suppose to in ingress.
2: When Device sends more data that it suppose to in egress.
3: During STATUS Stage, host sends/asks to/for data from device.
Device will come out of stall condition when it receives a valid SETUP(SUTOK_EV interrupt
will be generated).

13

LMP_INVALID_PORT_CFG_EV

Set whenever a LMP port configuration is received but the Link Speed is not ‘1’.

12

LMP_INVALID_PORT_CAP_EV

Set whenever a LMP port capability is received but the Link Speed is not ‘1’ or Num HP buffer is not ‘4’ or bit zero of the Direction is not ‘1’.

11

STATUS_STAGE

Set when host completes Status Stage of a Control Transfer

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

513

10.16.2

PROT_INTR (continued)

10

HOST_ERR_EV

Set whenever an ACK TP is received with HE=1
[USB 3.0: section 8.5.1, Table 8-12, p 8-13]

9

SUTOK_EV

Set whenever a (valid of invalid) SETUP DPP is received that is not a set_address. The
set_address DPP is handled entirely in hardware and does not require any firmware intervention.

8

ITP_EV

Set whenever an ITP(SOF) occurs

7

TIMEOUT_HOST_ACK_EV

The Host Ack Response Timer expired

6

TIMEOUT_PING_EV

The Ping Timer expired

5

TIMEOUT_PORT_CFG_EV

The Port ConfiguratIon LMP Timer expired

4

TIMEOUT_PORT_CAP_EV

The Port Capabilities LMP Timer expired

3

LMP_PORT_CFG_EV

A Port Configuration LMP was received. A response may have been sent automatically
depending on settings for PROT_LMP_PORT_CONFIGURATION_TIMER.

2

LMP_PORT_CAP_EV

A Port Capabilities LMP was received. A response may have been sent automatically
depending on settings for PROT_LMP_PORT_CAPABILITIES_TIMER.

1

LMP_UNKNOWN_EV

An unkNown LMP was received and placed in PROT_LMP_PACKET_RX. The LMP was
not recognized and no response LMP was sent back.

0

LMP_RCV_EV

A LMP was received and placed in PROT_LMP_PACKET_RX. The LMP may have been
recognized and processed as well (leading to other interrupts in this register).

514

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.3

PROT_INTR_MASK
Protocol Interrupts Mask Register

PROT_INTR_MASK
b31

Protocol Interrupts Mask Register
b30

b29

b28

b22

b21

b15

b14

b13

b12

SET_ADDR0_EN

EP0_STALLED_
EN

LMP_INVALID_
PORT_CFG_EN

LMP_INVALID_
PORT_CAP_EN

R/W

R/W

R/W

R

R

R

0

0

0

PROT_INTR_MASK
b23

0xE0033408
b26

b25

b24

b18

b17

b16

b11

b10

b9

b8

STATUS_STAGE

HOST_ERR_EN

SUTOK_EN

ITP_EN

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

b2

b1

b0

Protocol Interrupts Mask Register
b20

PROT_INTR_MASK

b19

Protocol Interrupts Mask Register

PROT_INTR_MASK
b7

b27

Protocol Interrupts Mask Register
b6

b5

b4

b3

TIMEOUT_HOST_ TIMEOUT_PING_ TIMEOUT_PORT_ TIMEOUT_PORT_ LMP_PORT_CFG LMP_PORT_CAP LMP_UNKNOWN_
ACK_EN
EN
CFG_EN
CAP_EN
_EN
_EN
EN

LMP_RCV_EN

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Controls whether protocol layer interrupts are reported to the CPU.

Bit

Name

Description

15

SET_ADDR0_EN

1

Report interrupt to CPU

14

EP0_STALLED_EN

1

Report interrupt to CPU

13

LMP_INVALID_PORT_CFG_EN

1

Report interrupt to CPU

12

LMP_INVALID_PORT_CAP_EN

1

Report interrupt to CPU

11

STATUS_STAGE

1

Report interrupt to CPU

10

HOST_ERR_EN

1

Report interrupt to CPU

9

SUTOK_EN

1

Report interrupt to CPU

8

ITP_EN

1

Report interrupt to CPU

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

515

10.16.3

PROT_INTR (continued)

7

TIMEOUT_HOST_ACK_EN

1

Report interrupt to CPU

6

TIMEOUT_PING_EN

1

Report interrupt to CPU

5

TIMEOUT_PORT_CFG_EN

1

Report interrupt to CPU

4

TIMEOUT_PORT_CAP_EN

1

Report interrupt to CPU

3

LMP_PORT_CFG_EN

1

Report interrupt to CPU

2

LMP_PORT_CAP_EN

1

Report interrupt to CPU

1

LMP_UNKNOWN_EN

1

Report interrupt to CPU

0

LMP_RCV_EN

1

Report interrupt to CPU

516

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.4

PROT_FRAMECNT
Frame Counter Register

PROT_FRAMECNT
b31

Frame Counter Register
b30

b29

b28

b27

0xE0033428
b26

b25

b24

DELTA[12:10]

PROT_FRAMECNT
b23

R

R

R

R/W

R/W

R/W

0

0

0

b18

b17

b16

Frame Counter Register
b22

b21

b20

b19

DELTA[9:2]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PROT_FRAMECNT
b15

Frame Counter Register
b12

DELTA[1:0]

b11

SS_MICROFRAME[13:8]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PROT_FRAMECNT
b7

Frame Counter Register
b4

b3

SS_MICROFRAME[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Provides micro-frame number received from host in ITP packets.

Bit

Name

Description

26:14

DELTA[12:0]

The delta value in the last ITP received

13:0

SS_MICROFRAME[13:0]

MICROFRAME counter which indicates which of the 8 125-microsecond micro-frames last occurred.
This is based on ITPs received from Host

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

517

10.16.5

PROT_ITP_TIME
ITP Time Free Running Counter Register

PROT_ITP_TIME
b31

ITP Time Free Running Counter
b30

b29

b22

b21

PROT_ITP_TIME
b23

b28

b27

0xE0033430
b26

b25

b24

b18

b17

b16

ITP Time Free Running Counter
b20

b19

COUNTER24[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

b14

b13

b10

b9

b8

PROT_ITP_TIME
b15

ITP Time Free Running Counter
b12

b11

COUNTER24[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

b6

b5

b2

b1

b0

PROT_ITP_TIME
b7

ITP Time Free Running Counter
b4

b3

COUNTER24[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

This register contains a free running counter running at 125MHz (spread clock) and is used for the PROT_ITP_TIMESTAMP
time stamps.

Bit

Name

Description

23:0

COUNTER24[23:0]

Current counter value.

518

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.6

PROT_ITP_TIMESTAMP
ITP Time Stamp Register

PROT_ITP_TIMESTAMP
b31

ITP Time Stamp Register

b30

b29

b28

b27

0xE0033434
b26

b25

b24

MICROFRAME_LSB[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PROT_ITP_TIMESTAMP
b23

ITP Time Stamp Register
b20

b19

TIMESTAMP[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PROT_ITP_TIMESTAMP
b15

ITP Time Stamp Register
b12

b11

TIMESTAMP[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PROT_ITP_TIMESTAMP
b7

ITP Time Stamp Register
b4

b3

TIMESTAMP[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register contains a time-stamp of the last ITP received that can be used to calculate BIA messages when needed.

Bit

Name

Description

31:24

MICROFRAME_LSB[7:0]

LSBs of MICROFRAME field of ITP when timestamp was taken.

23:0

TIMESTAMP[23:0]

Timestamp from a free running counter at 125MHz of the last ITP reception.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

519

10.16.7

PROT_SETUP_DAT
Received SETUP Packet Data Register

PROT_SETUP_DAT
b63

Received SETUP Packet Data Register
b62

b61

b60

b59

0xE0033438
b58

b57

b56

SETUP_LENGTH[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b54

b53

b50

b49

b48

PROT_SETUP_DAT
b55

Received SETUP Packet Data Register
b52

b51

SETUP_LENGTH[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

PROT_SETUP_DAT
b47

Received SETUP Packet Data Register
b44

b43

SETUP_INDEX[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

PROT_SETUP_DAT
b39

Received SETUP Packet Data Register
b36

b35

SETUP_INDEX[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

PROT_SETUP_DAT
b31

Received SETUP Packet Data Register
b28

b27

SETUP_VALUE[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PROT_SETUP_DAT
b23

Received SETUP Packet Data Register
b20

b19

SETUP_VALUE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PROT_SETUP_DAT
b15

Received SETUP Packet Data Register
b12

b11

SETUP_REQUEST[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

continued on next page

520

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.7

PROT_SETUP_DAT (continued)

PROT_SETUP_DAT
b7

Received SETUP Packet Data Register
b6

b5

b4

b3

b2

b1

b0

SETUP_REQUEST_TYPE[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

8-byte (2-long word) Storage for USB SETUP data received on EP0

Bit

Name

Description

63:48

SETUP_LENGTH[15:0]

Setup data field

47:32

SETUP_INDEX[15:0]

Setup data field

31:16

SETUP_VALUE[15:0]

Setup data field

15:8

SETUP_REQUEST[7:0]

Setup data field

7:0

SETUP_REQUEST_TYPE[7:0]

Setup data field

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

521

10.16.8

PROT_SEQ_NUM
Sequence Number Register

PROT_SEQ_NUM

Sequence Number

b31

b30

SEQ_VALID

COMMAND

R/W0C

R/W

R/W1S

R

1

0

b29

b28

b21

b20

PROT_SEQ_NUM
b23

0xE0033440

b27

b26

b25

b24

b18

b17

b16

Sequence Number
b22

b19

LAST_COMMITTED[4:0]

PROT_SEQ_NUM
b15

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

b10

b9

b8

Sequence Number
b14

b13

b12

b11

SEQUENCE_NUMBER[4:0]

PROT_SEQ_NUM
b7

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

b1

b0

Sequence Number
b6

b5

b4

b3

b2

DIR

ENDPOINT[3:0]

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

0

0

0

At power-up and USB Reset all the endpoints data toggle will reset to ‘0’. In general, hardware maintains all the data toggle
bits, which are toggled between data packet transfers. The firmware might need to reset or set data toggle bit only following
conditions:
■

After a configuration changes (i.e., 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.

Warm Reset
Hot Reset
Set Address 0
Disconnect
To read the sequence number field:
1. Software should poll for SEQ_VALID to be 1
2. Software must first write ENDPOINT and DIR field, and then set the COMMAND to 0 and write 0 to SEQ_VALID to initiate
the read operation.
3. Then software should poll for SEQ_VALID to go 1 to and that will return the End-point’s sequence numbers.
To write the sequence number field:
1. Software should poll for SEQ_VALID to be 1

522

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

2. Software must first write ENDPOINT and DIR field, write the SEQ_NUMBER, set the COMMAND to 1 and write 0 to
SEQ_VALID to initiate the write operation.
3. Then software should poll for SEQ_VALID to go 1 to confirm that write has taken place.

Bit

Name

Description

31

SEQ_VALID

Set by hardware when read/write operation has completed. Must be cleared by software to initiate a
read/write operation.

30

COMMAND

0
1

20:16

LAST_COMMITTED[4:0]

Sequence number of last packet that was transmitted (can be higher than SEQUENCE NUMBER).
Returned as part of a read operation.

12:8

SEQUENCE_NUMBER[4:0] Packet sequence number of next packet to receive/transmit. Set by hardware if COMMAND=0, set by
software when COMMAND=1.

4

DIR

0
1

3:0

ENDPOINT[3:0]

Endpoint Number

Read
Write

OUT
IN

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

523

10.16.9

PROT_EP_INTR
Endpoint Interrupt Register

PROT_EP_INTR
b31

Endpoint Interrupts
b30

b29

b28

b27

0xE0033474
b26

b25

b24

EP_OUT[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PROT_EP_INTR
b23

Endpoint Interrupts
b20

b19

EP_OUT[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PROT_EP_INTR
b15

Endpoint Interrupts
b12

b11

EP_IN[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PROT_EP_INTR
b7

Endpoint Interrupts
b4

b3

EP_IN[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

USB Endpoint 0-31 interrupt request register. This is a intermediate register in the UIB interrupt hierarchy. Interrupts are
cleared by clearing the respective cause bits in EPI_CS/EPO_CS registers.

Bit

Name

Description

31:16

EP_OUT[15:0]

Bit <16+x> indicates an interrupt from EPO_CS[x]

15:0

EP_IN[15:0]

Bit  indicates an interrupt from EPI_CS[x]

524

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.10 PROT_EP_INTR_MASK
Endpoint Interrupt Mask Register
PROT_EP_INTR_MASK
b31

Endpoint Interrupt Mask

b30

b29

b28

0xE0033478

b27

b26

b25

b24

EP_OUT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

PROT_EP_INTR_MASK
b23

Endpoint Interrupt Mask
b20

EP_OUT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

PROT_EP_INTR_MASK
b15

Endpoint Interrupt Mask
b12

EP_IN[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

PROT_EP_INTR_MASK
b7

Endpoint Interrupt Mask
b4

EP_IN[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Per endpoint masking of interrupt reporting.

Bit

Name

Description

31:16

EP_OUT[15:0]

Bit <16+x> masks any interrupt from EPO_CS[x]

15:0

EP_IN[15:0]

Bit  masks any interrupt from EPI_CS[x]

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

525

10.16.11 PROT_EPI_CS1
SuperSpeed IN Endpoint Control and Status Register
There are 16 PROT_EPI_CS1 registers. The address of each is calculated as PROT_EPI_CS1(x) = 0xE0033500 + (x*0x4).
Hence PROT_EPI_CS1(0) is at address 0xE0033500, PROT_EPI_CS1(1) is at address 0xE0033500 + 0x4 and so on. The
definition of each of these is the same.
PROT_EPI_CS1

SuperSpeed IN Endpoint Control and Status

b31

b30

b29

b28

b27

FIRST_ACK_
STREAM_ERROR
DBTERM_MASK
NUMP_0_MASK
_MASK

b25

b24

HBTERM_MASK

OOSERR_MASK

SHORT_MASK

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

b19

b18

b17

b16

RETRY_MASK

COMMIT_MASK

FIRST_ACK_
NUMP_0

STREAM_ERROR

DBTERM

PROT_EPI_CS1

SuperSpeed IN Endpoint Control and Status

b23

ZERO_MASK

0xE0033500
b26

b22

b21

b20

STREAMNRDY_ FLOWCONTROL_
MASK
MASK

R/W

R/W

R/W

R/W

R/W

R/W1C

R/W1C

R/W1C

R

R

R

R

R

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

HBTERM

OOSERR

SHORT

ZERO

STREAMNRDY

FLOWCONTROL

RETRY

COMMIT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b6

b5

b4

b3

b2

b1

b0

STREAM_ERROR
_STALL_EN

EP_RESET

STREAM_EN

STALL

NRDY

VALID

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

PROT_EPI_CS1

SuperSpeed IN Endpoint Control and Status

PROT_EPI_CS1
b7

SuperSpeed IN Endpoint Control and Status

Endpoint IN Control and Status:
■

Setup USB Package buffering, ISO/BULK/INT, IN/OUT and enable/disable endpoint

■

Power up default the payload is 64-byte (Max payload count for Full Speed). In High Speed the payload can be up to 512
for BULK and 1024 for ISO

Bit

Name

Description

29

FIRST_ACK_NUMP_0_MASK

Interrupt mask for FIRST_ACK_NUMP_0 bit

28

STREAM_ERROR_MASK

Interrupt mask for STREAM_ERROR bit

27

DBTERM_MASK

Interrupt mask for DBTERM bit

26

HBTERM_MASK

Interrupt mask for HBTERM bit

25

OOSERR_MASK

Interrupt mask for OOSERR bit

continued on next page

526

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.11

PROT_EPI_CS1 (continued)

24

SHORT_MASK

Interrupt mask for SHORT bit

23

ZERO_MASK

Interrupt mask for ZERO bit

22

STREAMNRDY_MASK

Interrupt mask for STREAMNRDY bit

21

FLOWCONTROL_MASK

Interrupt mask for FLOWCONTROL bit

20

RETRY_MASK

Interrupt mask for RETRY bit

19

COMMIT_MASK

Interrupt mask for COMMIT bit

18

FIRST_ACK_NUMP_0

The NumP for the first ACK is zero.

17

STREAM_ERROR

Stream Error occurred.

16

DBTERM

The Burst was terminated by the device when the MULT_TIMER expires.

15

HBTERM

The Burst Was terminated by the host.

14

OOSERR

Out Of Sequence Error. Anytime an ACK is received with unexpected sequence number
request, the ACK will be dropped and intr will be raised

13

SHORT

Indicates a shorter-than-maxsize packet was received, but UIB_EPI_XFER_CNT did not
reach 0).

12

ZERO

Indicates a zero length packet was returned to the host in an IN transaction. Must be
cleared by software.

11

STREAMNRDY

Nrdy was sent for a bulk stream request because of EP-stream not present in the mapper.

10

FLOWCONTROL

EP in flow control due to EPM not being available.

9

RETRY

Whenever the USB3.0 does a retry it will asserts this interrupt.

8

COMMIT

Set whenever an IN token was ACKed by the host.

5

STREAM_ERROR_STALL_EN

Issue STALL whenever Stream error occurs.

4

EP_RESET

Per End Point Reset.

3

STREAM_EN

Enables bulk stream protocol handling for this EP

2

STALL

Set this bit to “1” to stall an endpoint, and to “0” to clear a stall.

1

NRDY

Setting this bit causes NRDY on IN transactions.

0

VALID

Set VALID=1 to activate an endpoint, and VALID=0 to de-activate it. All USB endpoints
default to invalid. An endpoint whose VALID bit is 0 does not respond to any USB traffic.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

527

10.16.12 PROT_EPI_CS2
SuperSpeed IN Endpoint Control and Status Register
There are 16 PROT_EPI_CS2 registers. The address of each is calculated as PROT_EPI_CS2(x) = 0xE0033540 + (x*0x4).
Hence PROT_EPI_CS2(0) is at address 0xE0033540, PROT_EPI_CS2(1) is at address 0xE0033540 + 0x4 and so on. The
definition of each of these is the same.
PROT_EPI_CS2
b31

SuperSpeed IN Endpoint Control and Status
b30

b29

b22

b21

b28

PROT_EPI_CS2
b23

b27

0xE0033540
b26

b25

b18

b17

b24

SuperSpeed IN Endpoint Control and Status
b20

b19

b16

BTERM_NUMP[4]
R
R/W
0

PROT_EPI_CS2
b15

SuperSpeed IN Endpoint Control and Status
b14

b13

b12

b11

b10

BTERM_NUMP[3:0]

b9

b8

MAXBURST[3:0]

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

PROT_EPI_CS2
b7

SuperSpeed IN Endpoint Control and Status
b4

b3

ISOINPKS[5:0]

b0

TYPE[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

16

Endpoint IN Control and Status:
■

Setup USB Package buffering, ISO/BULK/INT, IN/OUT and enable/disable endpoint

■

Power up default the payload is 64-byte (Max payload count for Full Speed). In High Speed the payload can be up to 512
for BULK and 1024 for ISO

Bit

Name

Description

16:12

BTERM_NUMP[4:0]

Number of packets that need to be cleaned up by CPU whenever there is a BTERM interrupt.

11:8

MAXBURST[3:0]

Maximum number of packets the endpoint can send.

7:2

ISOINPKS[5:0]

Number of packets to be sent per service interval. Maximum can be 48 (Max burst size* Mult field)

1:0

TYPE[1:0]

Endpoint type (EP0 supports CONTROL only)
0
ISO
1
INT
2
BULK
3
CONTROL (only valid for EP0)

528

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.13 PROT_EPI_UNMAPPED_STREAM
Unmapped Stream Request Register
There
are
16
PROT_EPI_UNMAPPED_STREAM
registers.
The
address
of
each
is
calculated
as
PROT_EPI_UNMAPPED_STREAM(x) = 0xE0033580 + (x*0x4). Hence PROT_EPI_UNMAPPED_STREAM(0) is at address
0xE0033580, PROT_EPI_UNMAPPED_STREAM(1) is at address 0xE0033580 + 0x4 and so on. The definition of each of these is
the same.
PROT_EPI_UNMAPPED_STREAM
b31

b30

Unmapped Stream Request
b29

PROT_EPI_UNMAPPED_STREAM
b23

b22

b28

b27

0xE0033580
b26

b25

b24

b18

b17

b16

Unmapped Stream Request
b21

b20

b19

SPSM_STATE[3:0]

PROT_EPI_UNMAPPED_STREAM
b15

b14

R

R

R

R

R/W

R/W

R/W

R/W

0

0

0

0

b10

b9

b8

Unmapped Stream Request
b13

b12

b11

STREAM_ID[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b2

b1

b0

PROT_EPI_UNMAPPED_STREAM
b7

b6

Unmapped Stream Request
b5

b4

b3

STREAM_ID[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

A register for each Endpoint to handle a request for a StreamID that is not currently mapped to a socket.

Bit

Name

Description

19:16

SPSM_STATE[3:0]

Stream Protocol State Machine (SPSM) State for this EndPoint:
0
Not Configured
1
Disabled
2
Prime Pipe
3
DFR Prime Pipe
4
Idle
5
Start Stream
6
Move Data
7
End
8
Error

15:0

STREAM_ID[15:0]

The StreamID of the current stream activated (or requested to be activated) by the protocol layer.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

529

10.16.14 PROT_EPI_MAPPED_STREAM
Mapped Streams Registers
There
are
16
PROT_EPI_MAPPED_STREAM
registers.
The
address
of
each
is
calculated
as
PROT_EPI_MAPPED_STREAM(x) = 0xE00335C0 + (x*0x4). Hence PROT_EPI_MAPPED_STREAM(0) is at address
0xE00335C0, PROT_EPI_MAPPED_STREAM(1) is at address 0xE00335C0 + 0x4 and so on. The definition of each of these
is the same.
PROT_EPI_MAPPED_STREAM

Mapped Streams Register

b31

b30

b29

ENABLE

UNMAP

UNMAPPED

R/W

R/W

R

R

R

R/W

0

0

0

PROT_EPI_MAPPED_STREAM
b23

b22

b28

b27

0xE00335C0
b26

b25

b24

b18

b17

b16

Mapped Streams Register
b21

b20

b19

EP_NUMBER[3:0]

PROT_EPI_MAPPED_STREAM
b15

b14

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b10

b9

b8

Mapped Streams Register
b13

b12

b11

STREAM_ID[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

PROT_EPI_MAPPED_STREAM
b7

b6

Mapped Streams Register
b5

b4

b3

STREAM_ID[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

A register for each socket indicating which EP and which StreamID is mapped to it.

Bit

Name

Description

31

ENABLE

Set by firmware if a stream is mapped to the corresponding socket. If this bit is set, the endpoint number corresponding to this socket number can no longer be used in non-streaming mode (that would
create a conflict of two endpoints wanting to use the same socket).

30

UNMAP

Request to unmap this stream. May be cleared to revert/withdraw request.

29

UNMAPPED

Stream is unmapped (not in use by the corresponding EP's SPSM).

19:16

EP_NUMBER[3:0]

The Endpoint number of the stream connected to the corresponding socket by firmware.

15:0

STREAM_ID[15:0]

The StreamID of the stream connected to the corresponding socket by firmware.

530

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.15 PROT_EPO_CS1
SuperSpeed OUT Endpoint Control and Status Register
There are 16 PROT_EPO_CS1 registers. The address of each is calculated as PROT_EPO_CS1(x) = 0xE0033600 +
(x*0x4). Hence PROT_EPO_CS1(0) is at address 0xE0033600, PROT_EPO_CS1(1) is at address 0xE0033600 + 0x4 and
so on. The definition of each of these is the same.
PROT_EPO_CS1

SuperSpeed OUT Endpoint Control and Status

b31

b30

b29

b28

b27

FIRST_ACK_
STREAM_ERROR
DBTERM_MASK
NUMP_0_MASK
_MASK

b26

b25

b24

HBTERM_MASK

OOSERR_MASK

SHORT_MASK

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

b19

b18

b17

b16

RETRY_MASK

COMMIT_MASK

FIRST_ACK_
NUMP_0

STREAM_ERROR

DBTERM

PROT_EPO_CS1

SuperSpeed OUT Endpoint Control and Status

b23

ZERO_MASK

0xE0033600

b22

b21

b20

STREAMNRDY_ FLOWCONTROL_
MASK
MASK

R/W

R/W

R/W

R/W

R/W

R/W1C

R/W1C

R/W1C

R

R

R

R

R

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

HBTERM

OOSERR

SHORT

ZERO

STREAMNRDY

FLOWCONTROL

RETRY

COMMIT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

b6

b5

b4

b3

b2

b1

b0

STREAM_ERROR
_STALL_EN

EP_RESET

STREAM_EN

STALL

NRDY

VALID

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

0

0

PROT_EPO_CS1

SuperSpeed OUT Endpoint Control and Status

PROT_EPO_CS1
b7

SuperSpeed OUT Endpoint Control and Status

Endpoint OUT Control and Status

Bit

Name

Description

29

FIRST_ACK_NUMP_0_MASK

Interrupt mask for FIRST_ACK_NUMP_0 bit

28

STREAM_ERROR_MASK

Interrupt mask for STREAM_ERROR bit

27

DBTERM_MASK

Interrupt mask for DBTERM bit

26

HBTERM_MASK

Interrupt mask for HBTERM bit

25

OOSERR_MASK

Interrupt mask for OOSERR bit

24

SHORT_MASK

Interrupt mask for SHORT bit

23

ZERO_MASK

Interrupt mask for ZERO bit

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

531

10.16.15

PROT_EPO_CS1 (continued)

22

STREAMNRDY_MASK

Interrupt mask for STREAMNRDY bit

21

FLOWCONTROL_MASK

Interrupt mask for FLOWCONTROL bit

20

RETRY_MASK

Interrupt mask for RETRY bit

19

COMMIT_MASK

Interrupt mask for COMMIT bit

18

FIRST_ACK_NUMP_0

The NumP for the first ACK is zero.

17

STREAM_ERROR

Stream Error occurred.

16

DBTERM

The Burst was terminated by the device when the MULT_TIMER expires.

15

HBTERM

The Burst Was terminated by the host.

14

OOSERR

Out Of Sequence Error. Anytime an OUT-DATA is received with unexpected sequence
number request, the data will be dropped and intr will be raised

13

SHORT

Indicates a shorter-than-maxsize packet was received.

12

ZERO

Indicates a zero length packet was received by the device in an OUT transaction. Must be
cleared by software.

11

STREAMNRDY

Nrdy was sent for a bulk stream request because of EP-stream not present in the mapper.

10

FLOWCONTROL

EP in flow control due to EPM not being available.

9

RETRY

Whenever the USB3.0 does a retry it will asserts this interrupt.

8

COMMIT

Set whenever an OUT DATA was committed into the EPM.

5

STREAM_ERROR_STALL_EN

Issue STALL whenever Stream error occurs.

4

EP_RESET

Per End Point Reset.

3

STREAM_EN

Enables bulk stream protocol handling for this EP

2

STALL

Set this bit to “1” to stall an endpoint, and to “0” to clear a stall.

1

NRDY

Setting this bit causes NRDY on IN transactions.

0

VALID

Set VALID=1 to activate an endpoint, and VALID=0 to de-activate it. All USB endpoints
default to invalid. An endpoint whose VALID bit is 0 does not respond to any USB traffic.

532

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.16 PROT_EPO_CS2
SuperSpeed OUT Endpoint Control and Status Register
There are 16 PROT_EPO_CS2 registers. The address of each is calculated as PROT_EPO_CS2(x) = 0xE0033640 +
(x*0x4). Hence PROT_EPO_CS2(0) is at address 0xE0033640, PROT_EPO_CS2(1) is at address 0xE0033640 + 0x4 and
so on. The definition of each of these is the same.
PROT_EPO_CS2
b31

SuperSpeed OUT Endpoint Control and Status
b30

b29

b22

b21

b14

b13

PROT_EPO_CS2
b23

b27

b26

b25

b24

b17

b16

b9

b8

SuperSpeed OUT Endpoint Control and Status

PROT_EPO_CS2
b15

b28

0xE0033640

b20

b19

b18

SuperSpeed OUT Endpoint Control and Status
b12

b11

b10

MAXBURST[3:0]

PROT_EPO_CS2
b7

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b2

b1

SuperSpeed OUT Endpoint Control and Status
b6

b5

b4

b3

ISOINPKS[5:0]

b0

TYPE[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

16

Endpoint IN Control and Status:
■

Setup USB Package buffering, ISO/BULK/INT, IN/OUT and enable/disable endpoint

■

Power up default the payload is 64-byte (Max payload count for Full Speed). In High Speed the payload can be up to 512
for BULK and 1024 for ISO

Bit

Name

Description

11:8

MAXBURST[3:0]

Maximum number of packets the endpoint can send. (truncated to 4b, 0 means 16)

7:2

ISOINPKS[5:0]

Number of packets to be sent per service interval. Maximum can be 48 (Max burst size* Mult field)

1:0

TYPE[1:0]

Endpoint type (EP0 supports CONTROL only)
0
ISO
1
INT
2
BULK
3
CONTROL (only valid for EP0)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

533

10.16.17 PROT_EPO_UNMAPPED_STREAM
Unmapped Stream Request Register
There are 16 PROT_EPO_UNMAPPED_STREAM registers. The address of each is calculated as
PROT_EPO_UNMAPPED_STREAM(x) = 0xE0033680 + (x*0x4). Hence PROT_EPO_UNMAPPED_STREAM(0) is at
address 0xE0033680, PROT_EPO_UNMAPPED_STREAM(1) is at address 0xE0033680 + 0x4 and so on. The definition of
each of these is the same.
PROT_EPO_UNMAPPED_STREAM
b31

b30

Unmapped Stream Request
b29

PROT_EPO_UNMAPPED_STREAM
b23

b22

b28

b27

0xE0033680
b26

b25

b24

b18

b17

b16

Unmapped Stream Request
b21

b20

b19

SPSM_STATE[3:0]

PROT_EPO_UNMAPPED_STREAM
b15

b14

R

R

R

R

R/W

R/W

R/W

R/W

0

0

0

0

b10

b9

b8

Unmapped Stream Request
b13

b12

b11

STREAM_ID[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b2

b1

b0

PROT_EPO_UNMAPPED_STREAM
b7

b6

Unmapped Stream Request
b5

b4

b3

STREAM_ID[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

A register for each Endpoint to handle a request for a StreamID that is not currently mapped to a socket.

Bit

Name

Description

19:16

SPSM_STATE[3:0]

Stream Protocol State Machine (SPSM) State for this EndPoint:
0
Not Configured
1
Disabled
2
Prime Pipe
3
DFR Prime Pipe
4
Idle
5
Start Stream
6
Move Data
7
End
8
Error

15:0

STREAM_ID[15:0]

The StreamID of the current stream activated (or requested to be activated) by the protocol layer.

534

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.16.18 PROT_EPO_MAPPED_STREAM
Mapped Streams Registers
There are 16 PROT_EPO_MAPPED_STREAM registers. The address of each is calculated as
PROT_EPO_MAPPED_STREAM(x) = 0xE00336C0 + (x*0x4). Hence PROT_EPO_MAPPED_STREAM(0) is at address
0xE00336C0, PROT_EPO_MAPPED_STREAM(1) is at address 0xE00336C0 + 0x4 and so on. The definition of each of
these is the same.
PROT_EPO_MAPPED_STREAM

Mapped Streams Register

b31

b30

b29

ENABLE

UNMAP

UNMAPPED

R/W

R/W

R

R

R

R/W

0

0

0

PROT_EPO_MAPPED_STREAM
b23

b22

b28

b27

0xE00336C0
b26

b25

b24

b18

b17

b16

Mapped Streams Register
b21

b20

b19

EP_NUMBER[3:0]

PROT_EPO_MAPPED_STREAM
b15

b14

R/W

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b10

b9

b8

Mapped Streams Register
b13

b12

b11

STREAM_ID[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

PROT_EPO_MAPPED_STREAM
b7

b6

Mapped Streams Register
b5

b4

b3

STREAM_ID[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

A register for each socket indicating which EP and which StreamID is mapped to it. Before clearing ENABLE or changing
STREAM_ID/EP_NUMBER while ENABLE=1, firmware must ensure the socket is not in use by setting UNMAP and checking
UNMAPPED went high. If UNMAP=1 is not followed by UNMAPPED=1 within ~100ns, the firmware can withdraw the request
by resetting UNMAP to 0.

Bit

Name

Description

31

ENABLE

Set by firmware if a stream is mapped to the corresponding socket. If this bit is set, the endpoint number corresponding to this socket number can no longer be used in non-streaming mode (that would
create a conflict of two endpoints wanting to use the same socket).

30

UNMAP

Request to unmap this stream. May be cleared to revert/withdraw request.

29

UNMAPPED

Stream is unmapped (not in use by the corresponding EP's SPSM).

19:16

EP_NUMBER[3:0]

The Endpoint number of the stream connected to the corresponding socket by firmware.

15:0

STREAM_ID[15:0]

The StreamID of the stream connected to the corresponding socket by firmware.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

535

10.17 USB Port - SuperSpeed Ingress Socket Registers
10.17.1

UIBIN_ID
Block Identification and Version Number Register

UIBIN_ID

Block Identification and Version Number Register

b31

b30

b29

b28

b27

0xE0040000

b26

b25

b24

BLOCK_VERSION[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b22

b21

b18

b17

b16

UIBIN_ID

Block Identification and Version Number Register

b23

b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b10

b9

b8

0x0001

UIBIN_ID

Block Identification and Version Number Register

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b6

b5

UIBIN_ID

Block Identification and Version Number Register

b7

b4

b3

b2

b1

b0

BLOCK_ID[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0x0004

Every IP block will implement a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its
power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:8

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

536

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.17.2

UIBIN_POWER
Power, Clock, and Reset Control Register

UIBIN_POWER
b31

Power, Clock, and Reset Control Registers
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0040004
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
W
0

UIBIN_POWER
b23

Power, Clock, and Reset Control Registers

UIBIN_POWER
b15

b19

Power, Clock, and Reset Control Registers

UIBIN_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control Registers
b4

b3

b0

ACTIVE
R
W
0

Every IP block will implement a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its
power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active low reset signal for all logic in the block. Note that reset is active on all flops in the block when
either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit is nonfunctional for UIBIN and will not reset anything. Use UIB_POWER register instead.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words, reading active = 1 indicates block is
initialized and ready for operation.
This bit is a copy of UIB_POWER.active. Preferably use UIB_POWER register instead.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

537

10.18 I2S Registers
10.18.1

I2S_CONFIG
I2S Configuration and Mode Register

I2S_CONFIG

I2S Configuration and Mode Register

b31

b30

ENABLE

TX_CLEAR

R/W

R/W

R

R

0

0

b29

I2S_CONFIG

b28

b27

0xE0000000
b26

b25

b24

b18

b17

b16

b9

b8

I2S Configuration and Mode Register

b23

b22

b21

b14

b13

I2S_CONFIG

b20

b19

I2S Configuration and Mode Register

b15

b12

b11

b10

MODE[1:0]

I2S_CONFIG

BIT_WIDTH[2:0]

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

0

0

1

I2S Configuration and Mode Register

b7

b6

b5

b4

b3

b2

b1

b0

DMA_MODE

MONO

FIXED_SCK

WSMODE

ENDIAN

MUTE

PAUSE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

1

0

Bit

Name

Description

31

ENABLE

Enable block here, but only after all the configuration is set. Do not set this bit to 1 while changing any
other value in this register. This bit will be synchronized to the core clock.
Setting this bit to 0 will complete transmission of current sample. When DMA_MODE=1 any remaining samples in the pipeline are discarded. When DMA_MODE=0 no samples are lost.

30

TX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear transmit FIFO
(After TX_CLEAR is set, software must wait for TX*_DONE before clearing it)

12:11

MODE[1:0]

0,3
1
2

I2S Mode
Left Justified Mode
Right Justified Mode.

continued on next page

538

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.1

I2S_CONFIG (continued)

10:8

BIT_WIDTH[2:0]

0
1
2
3
4
5-7

8-bit
16-bit
18-bit
24-bit
32-bit
Reserved

6

DMA_MODE

0
1

Register-based transfers
DMA-based transfers

5

MONO

0
1

Stereo
Mono> Read samples from the left channel and send in out on both the channels.

4

FIXED_SCK

0
1

SCK = 16*WS, 32*WS or 64* WS for 8-bit, 16-bit and 32-bit width, 64*WS otherwise.
SCK=64*WS

3

WSMODE

I2S_MODE:
0
WS=0 will denote the left Channel
1
WS=0 will denote the right channel.
In left/right justified modes:
1
WS=0 will denote the left Channel
0
WS=0 will denote the right channel.

2

ENDIAN

0
1

1

MUTE

Discard the value read from the DMA and transmit zeros instead. Continue to read input samples at
normal rate.

0

PAUSE

Pause transmission, transmit 0s.
Setting this bit to 1 will not discard any samples. Later clearing this bit will resume output at exact
same spot. In paused mode the I2S clock will continue to transmit 0-value samples.
A small, integral, but undefined number of samples will be transmitted after this bit is set to 1 (to
ensure no hanging samples).
When one of the descriptors is modified in socket, no samples from the old descriptor will be output
(all FIFO's will be cleared).

MSB First
LSB First

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

539

10.18.2

I2S_STATUS
I2S Status Register

I2S_STATUS

I2S Status Register

b31

b30

b29

b28

b27

0xE0000004
b26

BUSY

b24

ERROR_CODE[3:0]

R

R

R

R

R

W

W

W

W

W

b18

b17

b16

b10

b9

0

I2S_STATUS

b25

0xF

I2S Status Register

b23

b22

b21

b20

b14

b13

b12

I2S_STATUS

b19

I2S Status Register

b15

b11

b8

ERROR
R/W1C
R/W1S
0

I2S_STATUS

I2S Status Register

b7

b6

b5

b4

b3

b2

b1

b0

NO_DATA

PAUSED

TXR_HALF

TXR_SPACE

TXR_DONE

TXL_HALF

TXL_SPACE

TXL_DONE

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

1

1

0

1

1

0

Status and error register. Most status bits are used to generate an interrupt on positive edge into INTR register.

Bit

Name

Description

28

BUSY

Indicates the block is busy transmitting data. This field may remain asserted after the block is suspended and must be polled before changing any configuration values.

27:24

ERROR_CODE[3:0]

Error code, only relevant when ERROR=1. ERROR logs only the FIRST error to occur and will never
change value as long as ERROR=1.
11
Left TX FIFO/DMA socket underflow
12
Right TX FIFO/DMA socket underflow
13
Write to left TX FIFO when FIFO full
14
Write to right TX FIFO when FIFO full
15
No error

8

ERROR

An internal error has occurred with cause ERROR_CODE. Must be cleared by software. Sticky

7

NO_DATA

No data is currently available for output, but socket does not indicate empty. Only relevant when
DMA_MODE=1. Non sticky.

6

PAUSED

Output is paused (PAUSE has taken effect). Non sticky

continued on next page

540

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.2

I2S_STATUS (continued)

5

TXR_HALF

Indicates that the right TX FIFO is at least half empty. This bit can be used to create burst-based
interrupts. This bit is updated immediately after writes to EGRESS_DATA_RIGHT register. Only relevant when DMA_MODE=0. Non sticky.

4

TXR_SPACE

Indicates space is available in the right TX FIFO. This bit is updated immediately after writes to
EGRESS_DATA_RIGHT register. Only relevant when DMA_MODE=0. Non sticky.

3

TXR_DONE

Indicates no more data is available for transmission on right channel. Non sticky. If DMA_MODE=0
this is defined as TX FIFO empty and shift register empty but will assert only when ENABLE=0. If
DMA_MODE=1 this is defined as socket is end of transfer (EOT) and shift register empty. Note that
this field will only assert after a transmission was started - it's power up state is 0.

2

TXL_HALF

Indicates that the left TX FIFO is at least half empty. This bit can be used to create burst-based interrupts. This bit is updated immediately after writes to EGRESS_DATA_LEFT register. Only relevant
when DMA_MODE=0. Non sticky.

1

TXL_SPACE

Indicates space is available in the left TX FIFO. This bit is updated immediately after writes to
EGRESS_DATA_LEFT register. Only relevant when DMA_MODE=0. Non sticky.

0

TXL_DONE

Indicates no more data is available for transmission on left channel. Non sticky. If DMA_MODE=0 this
is defined as TX FIFO empty and shift register empty but will assert only when ENABLE=0. If
DMA_MODE=1 this is defined as socket is EOT and shift register empty. Note that this field will only
assert after a transmission was started - it's power up state is 0.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

541

10.18.3

I2S_INTR
I2S Interrupt Request Register

I2S_INTR

I2S Interrupt Request Register

b31

b30

b29

b22

b21

b14

b13

I2S_INTR

b28

b27

0xE0000008
b26

b25

b24

b18

b17

b16

b10

b9

I2S Interrupt Request Register

b23

I2S_INTR

b20

b19

I2S Interrupt Request Register

b15

b12

b11

b8

ERROR
R/W1C
R/W1S
0

I2S_INTR

I2S Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

b0

NO_DATA

PAUSED

TXR_HALF

TXR_SPACE

TXR_DONE

TXL_HALF

TXL_SPACE

TXL_DONE

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

Interrupt requests. Derived from STATUS register. Interrupt requests must be cleared by CPU and are generated regardless
of values in INTR_MASK register.

Bit

Name

Description

8

ERROR

Set by hardware when corresponding STATUS asserts, cleared by software.

7

NO_DATA

Set by hardware when corresponding STATUS asserts, cleared by software.

6

PAUSED

Set by hardware when corresponding STATUS asserts, cleared by software.

5

TXR_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

4

TXR_SPACE

Set by hardware when corresponding STATUS asserts, cleared by software.

3

TXR_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

2

TXL_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

1

TXL_SPACE

Set by hardware when corresponding STATUS asserts, cleared by software.

0

TXL_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

542

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.4

I2S_INTR_MASK
I2S Interrupt Mask Register

I2S_INTR_MASK

I2S Interrupt Mask Register

b31

b30

b29

b22

b21

b14

b13

b28

I2S_INTR_MASK

b27

0xE000000C
b26

b25

b24

b18

b17

b16

b10

b9

I2S Interrupt Mask Register

b23

b20

I2S_INTR_MASK

b19

I2S Interrupt Mask Register

b15

b12

b11

b8

ERROR
R/W
R
0

I2S_INTR_MASK

I2S Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

NO_DATA

PAUSED

TXR_HALF

TXR_SPACE

TXR_DONE

TXL_HALF

TXL_SPACE

TXL_DONE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Interrupt mask bits. Determine if INTR bits are reported to CPU. Have no effect on creation of INTR bits.

Bit

Name

Description

8

ERROR

1

Report interrupt to CPU

7

NO_DATA

1

Report interrupt to CPU

6

PAUSED

1

Report interrupt to CPU

5

TXR_HALF

1

Report interrupt to CPU

4

TXR_SPACE

1

Report interrupt to CPU

3

TXR_DONE

1

Report interrupt to CPU

2

TXL_HALF

1

Report interrupt to CPU

1

TXL_SPACE

1

Report interrupt to CPU

0

TXL_DONE

1

Report interrupt to CPU

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

543

10.18.5

I2S_EGRESS_DATA_LEFT
I2S Egress Data Register (Left)

I2S_EGRESS_DATA_LEFT
b31

b30

I2S Egress Data Register (Left)
b29

b28

0xE0000010

b27

b26

b25

b24

DATA[31:24]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

I2S_EGRESS_DATA_LEFT
b23

b22

I2S Egress Data Register (Left)
b21

b20

DATA[23:16]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

I2S_EGRESS_DATA_LEFT
b15

b14

I2S Egress Data Register (Left)
b13

b12

DATA[15:8]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

I2S_EGRESS_DATA_LEFT
b7

b6

I2S Egress Data Register (Left)
b5

b4

DATA[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Accepts egress data one sample at a time, LSB justified. Writing to this register adds one sample to the FIFO if the FIFO has
space available. It will result in ERROR if the FIFO is full. The size of the transmit FIFO is configured at design time.

Bit

Name

Description

31:0

DATA[31:0]

Sample to be written to the peripheral in registered mode. Number of bits taken depends on sample
size (see I2S_CONFIG), other bits are ignored.

544

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.6

I2S_EGRESS_DATA_RIGHT
I2S Egress Data Register (Right)

I2S_EGRESS_DATA_RIGHT
b31

b30

I2S Egress Data Register (Right)
b29

b28

0xE0000014

b27

b26

b25

b24

DATA[31:24]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

I2S_EGRESS_DATA_RIGHT
b23

b22

I2S Egress Data Register (Right)
b21

b20

DATA[23:16]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

I2S_EGRESS_DATA_RIGHT
b15

b14

I2S Egress Data Register (Right)
b13

b12

DATA[15:8]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

I2S_EGRESS_DATA_RIGHT
b7

b6

I2S Egress Data Register (Right)
b5

b4

DATA[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Accepts egress data one sample at a time, LSB justified. Writing to this register adds one sample to the FIFO if the FIFO has
space available. It will result in ERROR if the FIFO is full. The size of the transmit FIFO is configured at design time.

Bit

Name

Description

31:0

DATA[31:0]

Sample to be written to the peripheral in registered mode. Number of bits taken depends on sample
size (see I2S_CONFIG), other bits are ignored.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

545

10.18.7

I2S_COUNTER
I2S Sample Counter Register

I2S_COUNTER
b31

I2S Sample Counter Register
b30

b29

b28

b27

0xE0000018
b26

b25

b24

COUNTER[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

I2S_COUNTER
b23

I2S Sample Counter Register
b20

b19

COUNTER[23:16]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

I2S_COUNTER
b15

I2S Sample Counter Register
b12

b11

COUNTER[15:8]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

I2S_COUNTER
b7

I2S Sample Counter Register
b4

b3

COUNTER[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Counts number of samples written to output (L+R counts as one), can be used in software PLL to control audio decode
thread.

Bit

Name

Description

31:0

COUNTER[31:0]

Counter increments by one for every sample written on output. Counts L+R as one sample in stereo
mode. This counter is more reliable to implement a software PLL because of more periodic behavior.
This counter will be reset to 0 when I2S_CONFIG.ENABLE=0.

546

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.8

I2S_SOCKET
I2S Socket Register

I2S_SOCKET
b31

I2S Socket Register
b30

b29

b22

b21

b14

b13

I2S_SOCKET
b23

b27

0xE0000304
b26

b25

b24

b18

b17

b16

b10

b9

b8

I2S Socket Register

I2S_SOCKET
b15

b28

b20

b19

I2S Socket Register
b12

b11

RIGHT_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

I2S_SOCKET
b7

I2S Socket Register
b4

b3

LEFT_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Indicates sockets used for DMA based operation. Left and right socket must be different for stereo operation.

Bit

Name

Description

15:8

RIGHT_SOCKET[7:0]

Socket number for right data samples
0-7
Supported
8-..
Reserved

7:0

LEFT_SOCKET[7:0]

Socket number for left data samples
0-7
Supported
8-..
Reserved

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

547

10.18.9

I2S_ID
Block Identification and Version Number Register

I2S_ID

Block Identification and Version Number
b31

b30

b29

b28

b27

0xE00003F0
b26

b25

b24

R

R

R

b18

b17

b16

R

R

R

b10

b9

b8

R

R

R

b3

b2

b1

b0

R

R

R

R

BLOCK_VERSION[15:8]
R

R

R

b23

b22

b21

I2S_ID

R

R

Block Identification and Version Number
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R
0x0001

I2S_ID

Block Identification and Version Number
b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

b7

b6

b5

I2S_ID

R

R

Block Identification and Version Number
b4

BLOCK_ID[7:0]
R

R

R

R
0x0000

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

548

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.18.10 I2S_POWER
Power, Clock, and Reset Control Register
I2S_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE00003F4
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

I2S_POWER
b23

Power, Clock, and Reset Control

I2S_POWER
b15

b19

Power, Clock, and Reset Control

I2S_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10 µs for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

549

10.19 I2C Registers
10.19.1

I2C_CONFIG
I2C Configuration and Mode Register
I2C Configuration and Mode Register

I2C_CONFIG
b31

b30

b29

ENABLE

TX_CLEAR

RX_CLEAR

R/W

R/W

R/W

R

R

R

0

0

0

b22

b21

b14

b13

b6

b5

b25

b24

b20

b19

b18

b17

b16

b12

b11

b10

b9

b8

b2

b1

b0

I2C_100KHz

CONTINUE_ON_
NACK

DMA_MODE

R/W

R/W

R/W

R

R

R

1

0

0

I2C Configuration and Mode Register

I2C_CONFIG
b7

0xE0000400
b26

I2C Configuration and Mode Register

I2C_CONFIG
b15

b27

I2C Configuration and Mode Register

I2C_CONFIG
b23

b28

b4

b3

Various modes of the I2C block

Bit

Name

Description

31

ENABLE

Enable block here, but only after all the configuration is set. Do not set this bit to 1 while changing any
other configuration value in this register. This bit will be synchronized to the core clock. Disabling
blocks resets all I2C controller state machine and stops all transfers at the end of current byte. When
DMA_MODE=1, data hanging in the transmit pipeline may be lost. Any unread data in the ingress
data register is lost.

30

TX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear transmit FIFO
(After TX_CLEAR is set, software must wait for TX_DONE before clearing it)

29

RX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear receive FIFO
(Software must wait for RX_DATA=0 before clearing this bit again)

continued on next page

550

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.1
2

I2C_CONFIG (continued)

I2C_100KHz

0

Other speeds, use 40% duty cycle while generating SCLK from 10X clock.

1

I2C is in 100KHz mode, use 50% duty cycle.

1

CONTINUE_ON_NACK

1

Continue transmission even if NAK is received. It is strongly advised to use this bit for
debugging purposes only. This bit is overridden in preamble repeat feature.

0

DMA_MODE

0
1

Register-based transfers
DMA-based transfers

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

551

10.19.2

I2C_STATUS
I2C Status Register
I2C Status Register

I2C_STATUS
b31

b30

b29

b28

SDA_STAT

SCL_STAT

BUS_BUSY

BUSY

b27

0xE0000404
b26

b25

b24

ERROR_CODE[3:0]

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

b18

b17

b16

b10

b9

0xF

I2C Status Register

I2C_STATUS
b23

b22

b21

b20

b19

I2C Status Register

I2C_STATUS
b15

b14

b13

b12

b11

b8

ERROR
R/W1C
R/W1S
0
2

I2C_STATUS

I C Status Register

b7

b6

b5

b4

b3

b2

b1

b0

LOST_
ARBITRATION

TIMEOUT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W1C

R/W1C

R

R

R

R

R

R

R/W1S

R/W1S

W

W

W

W

W

W

0

0

1

1

0

0

0

0

Status and error register. Most status bits are used to generate an interrupt on positive edge into INTR register.

Bit

Name

Description

31

SDA_STAT

Status of the SDA line.

30

SCL_STAT

Status of the SCL line.

29

BUS_BUSY

Asserts when the block has detected that it cannot start an operation (TX/RX) since the bus is kept
busy by another master. Deasserts and resets when a stop condition is detected or when the block is
disabled.

28

BUSY

Indicates the block is busy transmitting data. This field may remain asserted after the block is suspended and must be polled before changing any configuration values.

continued on next page

552

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.2

I2C_STATUS (continued)

27:24

ERROR_CODE

Error code, only relevant when ERROR=1. ERROR codes 0 through 7 are relevant for TIMEOUT as
well and are used to pin-point when timeout happened (at pre-amble byte X). ERROR logs only the
FIRST error to occur and will never change value as long as ERROR=1. Values detailed in BROS
0-7
Slave NAKed the corresponding byte in the preamble.
8
Slave NAKed in data phase.
9
Preamble Repeat exited due to NACK or ACK.
10
Preamble repeat-count reached without satisfying NACK.ACK conditions.
11
TX Underflow
12
Write to TX FIFO when FIFO full
13
Read from RX FIFO when FIFO empty
14
RX Overflow
15
No error

8

ERROR

An internal error has occurred with cause ERROR_CODE. Must be cleared by software. Sticky

7

LOST_ARBITRATION

Master lost arbitration during command. Software is responsible for resetting socket (in DMA_MODE)
and reissuing command. Sticky

6

TIMEOUT

An I2C bus timeout occurred (see I2C_TIMEOUT register). Sticky

5

TX_HALF

Indicates that the TX FIFO is at least half empty. This bit can be used to create burst-based interrupts. This bit is updated immediately after writes to EGRESS_DATA register. Non sticky.

4

TX_SPACE

Indicates space is available in the TX FIFO. This bit is updated immediately after writes to
EGRESS_DATA register. Non sticky.

3

TX_DONE

Indicates no more data is available for transmission. Non sticky.
If DMA_MODE=0 this is defined as TX FIFO empty and shift register empty. If DMA_MODE=1 this is
defined as BYTES_TARNSFERRED=BYTE_COUNT and shift register empty. Note that this field will
only assert after a transmission was started - it's power up state is 0.

2

RX_HALF

Indicates that the RX FIFO is at least half full (only relevant when DMA_MODE=0). This bit can be
used to create burst based interrupts. This bit is updated immediately after reads from
INGRESS_DATA register. Non sticky

1

RX_DATA

Indicates data is available in the RX FIFO (only relevant when DMA_MODE=0). This bit is updated
immediately after reads from INGRESS_DATA register. Non sticky

0

RX_DONE

Indicates receive operation completed. Non sticky, Does not need software intervention to clear it.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

553

10.19.3

I2C_INTR
I2C Interrupt Request Register
I2C Interrupt Request Register

I2C_INTR
b31

b30

b29

b28

b27

0xE0000408
b26

b25

b24

b18

b17

b16

b10

b9

I2C Interrupt Request Register

I2C_INTR
b23

b22

b21

b20

b19

I2C Interrupt Request Register

I2C_INTR
b15

b14

b13

b12

b11

b8

ERROR
R/W1C
R/W1S
0
2

I2C_INTR

I C Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

b0

LOST_
ARBITRATION

TIMEOUT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

Interrupt requests. Derived from STATUS register. Interrupt requests must be cleared by CPU and are generated regardless
of values in INTR_MASK register.

Bit

Name

Description

8

ERROR

Set by hardware when corresponding STATUS asserts, cleared by software.

7

LOST_ARBITRATION

Set by hardware when corresponding STATUS asserts, cleared by software.

6

TIMEOUT

Set by hardware when corresponding STATUS asserts, cleared by software.

5

TX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

4

TX_SPACE

Set by hardware when corresponding STATUS asserts, cleared by software.

3

TX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

2

RX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

1

RX_DATA

Set by hardware when corresponding STATUS asserts, cleared by software.

0

RX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

554

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.4

I2C_INTR_MASK
I2C Interrupt Mask Register
I2C Interrupt Mask Register

I2C_INTR_MASK
b31

b30

b29

b28

b27

0xE000040C
b26

b25

b24

b18

b17

b16

b10

b9

I2C Interrupt Mask Register

I2C_INTR_MASK
b23

b22

b21

b20

b19

I2C Interrupt Mask Register

I2C_INTR_MASK
b15

b14

b13

b12

b11

b8

ERROR
R/W
R
0

I2 C

I2C_INTR_MASK

Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

LOST_
ARBITRATION

TIMEOUT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Interrupt mask bits. Determine if INTR bits are reported to CPU. Have no effect on creation of INTR bits.

Bit

Name

Description

8

ERROR

1

Report interrupt to CPU

7

LOST_ARBITRATION

1

Report interrupt to CPU

6

TIMEOUT

1

Report interrupt to CPU

5

TX_HALF

1

Report interrupt to CPU

4

TX_SPACE

1

Report interrupt to CPU

3

TX_DONE

1

Report interrupt to CPU

2

RX_HALF

1

Report interrupt to CPU

1

RX_DATA

1

Report interrupt to CPU

0

RX_DONE

1

Report interrupt to CPU

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

555

10.19.5

I2C_TIMEOUT
Timeout Register

I2C_TIMEOUT
b31

Timeout Register
b30

b29

b28

b27

0xE0000410
b26

b25

b24

TIMEOUT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

b20

b18

b17

b16

I2C_TIMEOUT
b23

Timeout Register
b19

TIMEOUT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b14

b13

b12

b10

b9

b8

I2C_TIMEOUT
b15

Timeout Register
b11

TIMEOUT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b4

b3

b2

b1

b0

I2C_TIMEOUT
b7

Timeout Register
TIMEOUT[7:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFFFFFF

Bus timeout interval. 0xFFFF_FFFFF means no timeout, otherwise, count the number of core clock cycles.

Bit

Name

Description

31:0

TIMEOUT[31:0]

Number of core clocks SCK can be held low by the slave byte transmission before triggering a timeout error.

556

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.6

I2C_DMA_TIMEOUT
DMA Timeout Register

I2C_DMA_TIMEOUT
b31

DMA Timeout Register
b30

b29

b22

b21

b14

b13

I2C_DMA_TIMEOUT
b23

b27

0xE0000414
b26

b25

b24

b18

b17

b16

b10

b9

b8

DMA Timeout Register

I2C_DMA_TIMEOUT
b15

b28

b20

b19

DMA Timeout Register
b12

b11

TIMEOUT16[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

b2

b1

b0

I2C_DMA_TIMEOUT
b7

DMA Timeout Register
b4

b3

TIMEOUT16[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFF

Bus timeout interval for DMA. 0xFFFF means no timeout, otherwise, count the number of core clock cycles of DMA not being
ready before raising error.

Bit

Name

Description

15:0

TIMEOUT16[15:0]

Number of core clocks DMA has to be not ready before the condition is reported as error condition.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

557

10.19.7

I2C_PREAMBLE_CTRL
I2C Preamble Control Register
I2C Preamble Control Register

I2C_PREAMBLE_CTRL
b31

b30

b29

b22

b21

0xE0000418
b26

b25

b24

b20

b18

b17

b16

b11

b10

b9

b8

b19

I2C Preamble Control Register

I2C_PREAMBLE_CTRL
b15

b27

I2C Preamble Control Register

I2C_PREAMBLE_CTRL
b23

b28

b14

b13

b12

STOP[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b3

b2

b1

b0

2

I2C_PREAMBLE_CTRL
b7

I C Preamble Control Register
b6

b5

b4

START[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Indicates whether each preamble byte will be followed by a repeated start or stop/start sequence.

Bit

Name

Description

15:8

STOP[7:0]

If bit  is 1, issue a stop after byte  of the preamble (if both START and STOP are set, STOP
will take priority).

7:0

START[7:0]

If bit  is 1, issue a start after byte  of the preamble.

558

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.8

I2C_PREAMBLE_DATA
I2C Preamble Data Register
I2C Preamble Data Register

I2C_PREAMBLE_DATA
b63

b62

b61

b60

0xE000041C

b59

b58

b57

b56

DATA[63:56]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b51

b50

b49

b48

I 2C

I2C_PREAMBLE_DATA
b55

b54

b53

Preamble Data Register
b52

DATA[55:48]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b43

b42

b41

b40

I 2C

I2C_PREAMBLE_DATA
b47

b46

b45

Preamble Data Register
b44

DATA[47:40]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b35

b34

b33

b32

I 2C

I2C_PREAMBLE_DATA
b39

b38

b37

Preamble Data Register
b36

DATA[39:32]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b27

b26

b25

b24

I2C Preamble Data Register

I2C_PREAMBLE_DATA
b31

b30

b29

b28

DATA[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b19

b18

b17

b16

I 2C

I2C_PREAMBLE_DATA
b23

b22

b21

Preamble Data Register
b20

DATA[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b11

b10

b9

b8

2

I2C_PREAMBLE_DATA
b15

I C Preamble Data Register

b14

b13

b12

DATA[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

559

10.19.8

I2C_PREAMBLE_DATA (continued)
I2C Preamble Data Register

I2C_PREAMBLE_DATA
b7

b6

b5

b4

b3

b2

b1

b0

DATA[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Contains the bytes that precede the data phase of the I2C command. This includes the slave address, R/W command, possible internal address and repeated start command. The number of bytes used is indicated in I2C_COMMAND.

Bit

Name

Description

63:0

DATA[63:0]

Command and initial data bytes.

560

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.9

I2C_PREAMBLE_RPT
I2C Preamble Repeat Register
I2C Preamble Repeat Register

I2C_PREAMBLE_RPT
b31

b30

b29

b28

0xE0000424

b27

b26

b25

b24

COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b19

b18

b17

b16

I2C Preamble Repeat Register

I2C_PREAMBLE_RPT
b23

b22

b21

b20

COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b11

b10

b9

b8

I2C Preamble Repeat Register

I2C_PREAMBLE_RPT
b15

b14

b13

b12

COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0xFFFFFF

I2C Preamble Repeat Register

I2C_PREAMBLE_RPT
b7

b6

b5

b4

b3

b2

b1

b0

STOP_ON_NACK

STOP_ON_ACK

RPT_ENABLE

R/W

R/W

R/W

R

R

R

0

1

0

Offers the facility to reuse preamble in a programmable fashion. Useful for waiting on busy parts during time-consuming operations such as EEPROM programming. ERROR Code 9 or 10 when repeat feature exits. This register is only valid if
RPT_ENABLE is true and takes precedence over other settings when valid.

Bit

Name

Description

31:8

COUNT[23:0]

Preamble stops after reaching the count or earlier if other conditions are satisfied. The maximum
number of times a preamble can repeat is 0xFFFFFF.

2

STOP_ON_NACK

1

Preamble will stop repeating if the NACK is received after any byte. Unless this byte is set,
continue on NACK if repeat is enabled.

1

STOP_ON_ACK

1

Preamble will stop repeating if the ACK is received after any byte.

0

RPT_ENABLE

1

Turns on preamble repeat feature. The sequence from IDLE to preamble_complete will
repeat in a programmable fashion. START_FIRST will be honored. Repeating will always
start at the first byte and end at the last byte. The only exception is if timeout is enabled and
happens during byte transmission, in which case preamble will stop at the end of the current
byte. Data phase is not entered if preamble repeat feature is enabled.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

561

10.19.10 I2C_COMMAND
I2C Command Register
I2C Command Register

I2C_COMMAND
b31

b30

b29

b28

I2C_STAT[1:0]

b27

0xE0000428
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

b0

READ

R

R

R/W

W

W

R

0

0

0

I2C Command Register

I2C_COMMAND
b23

b22

b21

b20

b19

I2C Command Register

I2C_COMMAND
b15

b14

b13

b12

b11

I2C Command Register

I2C_COMMAND
b7

b6

b5

b4

PREAMBLE_VALI
D

b3

START_FIRST

STOP_LAST

NAK_LAST

PREAMBLE_LEN[3:0]

R/W

R/W

R/W

R/W1S

R/W

R/W

R/W

R/W

R

R

R

R/W0C

R

R

R

R

1

0

1

0

0

0

0

0

This register initiates a read or write command on the I2C bus. If DMA_MODE=0 data is read/written one byte at a time from
I2C_INGRESS_DATA/I2C_EGRESS_DATA. After all data bytes have been transferred, the command must be explicitly terminated by writing to this register, or I2C_BYTE_COUNT must be used to do so. If DMA_MODE=1 data is read/written from
the relevant DMA sockets. In this case, the size of the DMA transfer in the socket determines the number of bytes transferred.
Bit

Name

Description

31:30

I2C_STAT[1:0]

00
01
10
11

28

READ

0
Write command (data phase)
1
Read command (data phase)
After command, the hardware will idle if no valid preamble exists, will play preamble if it does exist.
Valid preamble is indicated by preamble valid bit. Data phase is not entered if preamble repeat feature is enabled.

I2C is idle
I2C is playing the preamble
I2C is receiving data
I2C is transmitting data.

continued on next page

562

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.10

I2C_COMMAND (continued)

7

START_FIRST

0
1

Do nothing before the first byte of preamble
Send START before the first byte of preamble

6

STOP_LAST

0
1

Send (repeated) START on last byte of data phase
Send STOP on last byte of data phase

5

NAK_LAST

0
1

Send ACK on last byte of read
Send NAK on last byte of read

4

PREAMBLE_VALID

Software sets this bit to indicate valid preamble. Hardware resets it to indicate that it has finished
transmitting the preamble so that new preamble, such as one for doing restarts, can be populated.

3:0

PREAMBLE_LEN[3:0]

Number of bytes in preamble. For preamble length = 1, set this to 1 etc. From 1 through 8. 0 and values > 8 are not supported.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

563

10.19.11 I2C_EGRESS_DATA
I2C Egress Data Register
I2C Egress Data Register

I2C_EGRESS_DATA
b31

b30

b29

b22

b21

b14

b13

b25

b24

b20

b18

b17

b16

b10

b9

b8

b3

b2

b1

b0

b19

b12

b11

I2C Egress Data Register

I2C_EGRESS_DATA
b7

0xE000042C
b26

I2C Egress Data Register

I2C_EGRESS_DATA
b15

b27

I2C Egress Data Register

I2C_EGRESS_DATA
b23

b28

b6

b5

b4

DATA[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Accepts egress data one byte at a time. Writing to this register adds one byte to the FIFO if the FIFO has space available. It
will result in ERROR if the FIFO is full. The size of the transmit FIFO is configured at design time.

Bit

Name

Description

7:0

DATA[7:0]

Data byte to be written to the peripheral in registered mode.

564

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.12 I2C_INGRESS_DATA
I2C Ingress Data Register
I2C Ingress Data Register

I2C_INGRESS_DATA
b31

b30

b29

b22

b21

b14

b13

b25

b24

b20

b19

b18

b17

b16

b12

b11

b10

b9

b8

b2

b1

b0

I2C Ingress Data Register

I2C_INGRESS_DATA
b7

b26

I2C Ingress Data Register

I2C_INGRESS_DATA
b15

b27

I2C Ingress Data Register

I2C_INGRESS_DATA
b23

b28

0xE0000430

b6

b5

b4

b3

DATA[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

Presents ingress data 1 byte at a time. Reading from this register removes one byte from the FIFO if the FIFO has data available. It will result in ERROR if the FIFO is empty. The size of the receive FIFO is configured at design time.

Bit

Name

Description

7:0

DATA[7:0]

Data byte read from the peripheral when DMA_MODE=0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

565

10.19.13 I2C_CLOCK_LOW_COUNT
I2C Clock Low Count Register
I2C Clock Low Count Register

I2C_CLOCK_LOW_COUNT
b31

b30

b29

b28

b27

0xE0000434
b26

b25

b24

CLOCK_LOW_COUNT[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b18

b17

b16

I2C Clock Low Count Register

I2C_CLOCK_LOW_COUNT
b23

b22

b21

b20

b19

CLOCK_LOW_COUNT[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b10

b9

b8

I2 C

I2C_CLOCK_LOW_COUNT
b15

b14

b13

Clock Low Count Register
b12

b11

CLOCK_LOW_COUNT[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b2

b1

b0

2

I2C_CLOCK_LOW_COUNT
b7

b6

I C Clock Low Count Register
b5

b4

b3

CLOCK_LOW_COUNT[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

This register is for hardware’s internal use for clock synchronization in F/S mode. It appears here in the MMIO space for
debug purposes.

Bit

Name

Description

31:0

CLOCK_LOW_COUNT[31:0]

Indicates the low period of the last clock pulse on the I2C bus, measured using the I2C core
clock.

566

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.14 I2C_BYTE_COUNT
I2C Byte Count Register
I2C Byte Count Register

I2C_BYTE_COUNT
b31

b30

b29

b28

b27

0xE0000438
b26

b25

b24

BYTE_COUNT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b18

b17

b16

I2C Byte Count Register

I2C_BYTE_COUNT
b23

b22

b21

b20

b19

BYTE_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

I2C Byte Count Register

I2C_BYTE_COUNT
b15

b14

b13

b12

b11

BYTE_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b2

b1

b0

I2C Byte Count Register

I2C_BYTE_COUNT
b7

b6

b5

b4

b3

BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFFFFFF

Indicates number of bytes left to read/write in data phase of I2C command (excluding the preamble). Software specifies this
number which does not change during the transfer. Data phase is not entered if preamble repeat feature is enabled.

Bit

Name

Description

31:0

BYTE_COUNT[31:0]

Number of bytes in the data phase of the transfer. Please perform transfers in terms of fixed byte
count and perform dummy transactions at the end if required to complete the byte count.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

567

10.19.15 I2C_BYTES_TRANSFERRED
I2C Byte Transfer Register
I2C_BYTES_TRANSFERRED
b31

b30

Number of Bytes Transferred in the Data Phase
b29

b28

b27

0xE000043C

b26

b25

b24

BYTE_COUNT[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b18

b17

b16

I2C_BYTES_TRANSFERRED
b23

b22

Number of Bytes Transferred in the Data Phase
b21

b20

b19

BYTE_COUNT[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b10

b9

b8

I2C_BYTES_TRANSFERRED
b15

b14

Number of Bytes Transferred in the Data Phase
b13

b12

b11

BYTE_COUNT[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b2

b1

b0

I2C_BYTES_TRANSFERRED
b7

b6

Number of Bytes Transferred in the Data Phase
b5

b4

b3

BYTE_COUNT[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

Indicates number of bytes left to read/write in data phase of I2C command (excluding the preamble). When this counter
reaches 0 during read, block will stop reading bytes and NAK the last byte.

Bit

Name

Description

31:0

BYTE_COUNT[31:0]

Indicates number of bytes transferred in the data phase (with ACK or without) so far. Does not include preamble bytes. Useful for determining when NACK happened in data transmission. If data NACK error happens on at the end of fifth byte, the value in this register will be 5. If timeout happens while transmitting the
1 st bit of the 11th byte, this value will be 11 and so on.

568

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.16 I2C_SOCKET
I2C Socket Register
I2C Socket Register

I2C_SOCKET
b31

b30

b29

b22

b21

b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

I2C Socket Register

I2C_SOCKET
b15

b27

I2C Socket Register

I2C_SOCKET
b23

b28

0xE0000440

b14

b13

b12

b11

INGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b2

b1

b0

I2 C

I2C_SOCKET
b7

b6

b5

Socket Register

b4

b3

EGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Indicates sockets used for DMA based operation.

Bit

Name

Description

15:8

INGRESS_SOCKET[7:0]

Socket number for ingress data
0-7
Supported
8-..
Reserved

7:0

EGRESS_SOCKET[7:0]

Socket number for egress data
0-7
Supported
8-..
Reserved

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

569

10.19.17 I2C_ID
Block Identification and Version Number Register
I2C_ID

Block Identification and Version Number

b31

b30

b29

b28

b27

0xE00007F0
b26

b25

b24

R

R

R

b18

b17

b16

R

R

R

b10

b9

b8

R

R

R

b3

b2

b1

b0

R

R

R

R

BLOCK_VERSION[15:8]
R

R

R

b23

b22

b21

I2C_ID

R

R

Block Identification and Version Number
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R
0x0001

I2C_ID

Block Identification and Version Number

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

b7

b6

b5

I2C_ID

R

R

Block Identification and Version Number
b4

BLOCK_ID[7:0]
R

R

R

R
0x0001

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

570

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.19.18 I2C_POWER
Power, Clock, and Reset Control Register
I2C_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE00007F4
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

I2C_POWER
b23

Power, Clock, and Reset Control

I2C_POWER
b15

b19

Power, Clock, and Reset Control

I2C_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10 µs for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

571

10.20 UART Registers
10.20.1

UART_CONFIG
UART Configuration and Mode Register

UART_CONFIG

UART Configuration and Mode Register

b31

b30

b29

ENABLE

TX_CLEAR

RX_CLEAR

R/W

R/W

R/W

R

R

R

0

0

0

b22

b21

UART_CONFIG

b28

b27

0xE0000800
b26

b25

b24

b17

b16

UART Configuration and Mode Register

b23

b20

b19

b18

RX_POLL[3:0]

UART_CONFIG

R/W

R/W

R/W

R

R

R

R

0

0

0

0

b10

b9

b8

UART Configuration and Mode Register

b15

TX_BREAK

R/W

b14

b13

b12

RX_FLOW_CTRL TX_FLOW_CTRL
_ENBL
_ENBL

b11

RTS

DMA_MODE

STOP_BITS[1:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

1

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

RX_STICKY_BIT

TX_STICKY_BIT

PARITY_STICKY

PARITY_ODD

PARITY

LOOP_BACK

TX_ENABLE

RX_ENABLE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

1

0

UART_CONFIG

UART Configuration and Mode Register

Various modes of the UART block.

Bit

Name

Description

31

ENABLE

Enable block here, but only after all the configuration is set. Do not set this bit to 1 while changing any
other value in this register. This bit will be synchronized to the core clock.
Setting this bit to 0 will complete transmission of current sample. When DMA_MODE=1 any remaining samples in the pipeline are discarded. When DMA_MODE=0 no samples are lost.

30

TX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear transmit FIFO
(After TX_CLEAR is set, software must wait for TX_DONE before clearing it)

29

RX_CLEAR

0
Do nothing
1
Clear receive FIFO
(Software must wait for RX_DATA=0 before clearing this bit again)

continued on next page

572

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.1

UART_CONFIG (continued)

19:16

RX_POLL[3:0]

Set timing when to sample for RX input:
0
Sample on bits 0,1,2
1
Sample on bits 1,2,3
2
Sample on bits 2,3,4
3
Sample on bits 3,4,5
4
Sample on bits 4,5,6
5
Sample on bits 5,6,7

15

TX_BREAK

0
1

Default Behavior
Wait for the currently transmitting byte to complete (including the stop bit) and then transmit
0's indefinitely until this bit is cleared. Do not transmit other bytes or discard any data while
BREAK is being transmitted. CDT52575.

14

RX_FLOW_CTRL_ENBL

1

Enable hardware flow control for RX data

13

TX_FLOW_CTRL_ENBL

1

Enable hardware flow control for TX data

12

RTS

When RX hardware flow control is disabled, the software may use this bit to perform software flow
control. 1 would signal the transmitter that we are ready to receive data. (Request to send).
Modify only when ENABLE=0.

10

DMA_MODE

0
1

9:8

STOP_BITS[1:0]

00
Reserved
01
1 Stop bit.
10
2 Stop bits
11
Reserved for 1.5 stop bits (not supported)
Note STOP_BITS=2 is supported only when PARITY=0. Behavior is undefined otherwise.

7

RX_STICKY_BIT

If sticky parity is effective, log interrupt request if the received bit does not match this value.

6

TX_STICKY_BIT

Append this value at parity bit if sticky parity is effective.

5

PARITY_STICKY

Only relevant when PARITY=1
0
Computed parity
1
Sticky parity

4

PARITY_ODD

Only relevant when PARITY=1 and PARITY_STICKY=0
0
Even Parity
1
Odd parity

3

PARITY

0
1

No parity
Include parity bit

2

LOOP_BACK

0
1

No effect
Connect the value being transmitted to the receive buffer. Disable external transmit and
receive.

1

TX_ENABLE

0
1

Transmitter disable, do not transmit data
Transmitter enabled

0

RX_ENABLE

0
1

Receiver disabled, ignore incoming data
Receive enabled

Register-based transfers
DMA-based transfers

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

573

10.20.2

UART_STATUS
UART Status Register

UART_STATUS

UART Status Register

b31

b30

b29

b28

b27

BUSY

0xE0000804
b26

b24

ERROR_CODE[3:0]

R

R

R

R

R

W

W

W

W

W

b17

b16

0

UART_STATUS

b25

0xF

UART Status Register

b23

b22

b21

b14

b13

UART_STATUS

b20

b19

b18

UART Status Register

b15

UART_STATUS

b12

b11

b10

b9

b8

ERROR

BREAK

R/W1C

R

R/W1S

W

0

0

UART Status Register

b7

b6

b5

b4

b3

b2

b1

b0

CTS_TOGGLE

CTS_STAT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W1C

R

R

R

R

R

R

R

R/W1S

W

W

W

W

W

W

W

0

0

1

1

0

0

0

0

Status and error register. Most status bits are used to generate an interrupt on positive edge into INTR register.

Bit

Name

Description

28

BUSY

Indicates the block is busy transmitting data. This field may remain asserted after the block is suspended and must be polled before changing any configuration values.

27:24

ERROR_CODE

Error code, only relevant when ERROR=1. ERROR logs only the FIRST error to occur and will never
change value as long as ERROR=1.
0
Missing Stop bit
1
RX Parity error (received parity bit does not match RX_STICKY_BIT in sticky parity mode,
or the computed parity in non-sticky mode.)
12
Write to TX FIFO when FIFO full
13
Read from RX FIFO when FIFO empty
14
RX FIFO overflow or DMA Socket Overflow
15
No error

9

ERROR

A protocol error has occurred with cause ERROR_CODE. Must be cleared by software. Sticky

8

BREAK

Break condition is detected. Non sticky.

7

CTS_TOGGLE

Set when CTS toggles.

continued on next page

574

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.2

UART_STATUS (continued)

6

CTS_STAT

CTS Status, polarity inverted from the pin. (CTS pin 0 = CTS_STAT 1 means FX3 can transmit) Non
sticky

5

TX_HALF

Indicates that the TX FIFO is at least half empty. This bit can be used to create burst-based interrupts. This bit is updated immediately after writes to EGRESS_DATA register. Non sticky.

4

TX_SPACE

Indicates space is available in the TX FIFO. This bit is updated immediately after writes to
EGRESS_DATA register. Non sticky.

3

TX_DONE

Indicates no more data is available for transmission. Non sticky.
If DMA_MODE=0 this is defined as TX FIFO empty and shift register empty. If DMA_MODE=1 this is
defined as BYTE_COUNT=0 and shift register empty. Note that this field will only assert after a transmission was started - its power up state is 0.

2

RX_HALF

Indicates that the RX FIFO is at least half full (only relevant when DMA_MODE=0). This bit can be
used to create burst based interrupts. This bit is updated immediately after reads from
INGRESS_DATA register. Non sticky

1

RX_DATA

Indicates data is available in the RX FIFO (only relevant when DMA_MODE=0). This bit is updated
immediately after reads from INGRESS_DATA register. Non sticky

0

RX_DONE

Indicates receive operation completed. Only relevant when DMA_MODE=1). Receive operation is
complete when transfer size bytes in socket have been received. Non sticky. Does not need software
intervention to clear it.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

575

10.20.3

UART_INTR
UART Interrupt Request Register

UART_INTR

UART Interrupt Request Register

b31

b30

b29

b22

b21

b14

b13

UART_INTR

b28

b27

0xE0000808
b26

b25

b24

b18

b17

b16

UART Interrupt Request Register

b23

UART_INTR

b20

b19

UART Interrupt Request Register

b15

UART_INTR

b12

b11

b10

b9

b8

ERROR

BREAK

R/W1C

R/W1C

R/W1S

R/W1S

0

0

UART Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

b0

CTS_TOGGLE

CTS_STAT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

0

Interrupt requests. Derived from STATUS register. Interrupt requests must be cleared by CPU and are generated regardless
of values in INTR_MASK register.

Bit

Name

Description

9

ERROR

Set by hardware when corresponding STATUS asserts, cleared by software.

8

BREAK

Set by hardware when corresponding STATUS asserts, cleared by software.

7

CTS_TOGGLE

Set by hardware when corresponding STATUS asserts, cleared by software.

6

CTS_STAT

Set by hardware when corresponding STATUS asserts, cleared by software.

5

TX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

4

TX_SPACE

Set by hardware when corresponding STATUS asserts, cleared by software.

3

TX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

2

RX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

1

RX_DATA

Set by hardware when corresponding STATUS asserts, cleared by software.

0

RX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

576

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.4

UART_INTR_MASK
UART Interrupt Mask Register

UART_INTR_MASK

UART Interrupt Mask Register

b31

b30

b29

b22

b21

b14

b13

b28

UART_INTR_MASK

b27

0xE000080C
b26

b25

b24

b18

b17

b16

UART Interrupt Mask Register

b23

b20

UART_INTR_MASK

b19

UART Interrupt Mask Register

b15

b12

UART_INTR_MASK

b11

b10

b9

b8

ERROR

BREAK

R/W

R/W

R

R

0

0

UART Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

CTS_TOGGLE

TIMEOUT

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Interrupt mask bits. Determine if INTR bits are reported to CPU. Have no effect on creation of INTR bits.

Bit

Name

Description

9

ERROR

1

Report interrupt to CPU

8

BREAK

1

Report interrupt to CPU

7

CTS_TOGGLE

1

Report interrupt to CPU

6

CTS_STAT

1

Report interrupt to CPU

5

TX_HALF

1

Report interrupt to CPU

4

TX_SPACE

1

Report interrupt to CPU

3

TX_DONE

1

Report interrupt to CPU

2

RX_HALF

1

Report interrupt to CPU

1

RX_DATA

1

Report interrupt to CPU

0

RX_DONE

1

Report interrupt to CPU

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

577

10.20.5

UART_EGRESS_DATA
UART Egress Data Register

UART_EGRESS_DATA
b31

UART Egress Data Register
b30

b29

b22

b21

b14

b13

b6

b5

UART_EGRESS_DATA
b23

0xE0000810
b26

b25

b24

b20

b18

b17

b16

b10

b9

b8

b3

b2

b1

b0

b19

UART Egress Data Register

UART_EGRESS_DATA
b7

b27

UART Egress Data Register

UART_EGRESS_DATA
b15

b28

b12

b11

UART Egress Data Register
b4

DATA[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Accepts egress data one byte at a time. Writing to this register adds one byte to the FIFO if the FIFO has space available. It
will result in ERROR if the FIFO is full. The size of the transmit FIFO is configured at design time.

Bit

Name

Description

7:0

DATA[7:0]

Data byte to be written to the peripheral in registered mode.

578

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.6

UART_INGRESS_DATA
UART Ingress Data Register

UART_INGRESS_DATA
b31

UART Ingress Data Register
b30

b29

b22

b21

b14

b13

b6

b5

UART_INGRESS_DATA
b23

0xE0000814
b26

b25

b24

b20

b19

b18

b17

b16

b10

b9

b8

b2

b1

b0

UART Ingress Data Register

UART_INGRESS_DATA
b7

b27

UART Ingress Data Register

UART_INGRESS_DATA
b15

b28

b12

b11

UART Ingress Data Register
b4

b3

DATA[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

Presents ingress data 1 byte at a time. Reading from this register removes one byte from the FIFO if the FIFO has data available. It will result in ERROR if the FIFO is empty. The size of the receive FIFO is configured at design time.

Bit

Name

Description

7:0

DATA[7:0]

Data byte read from the peripheral when DMA_MODE=0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

579

10.20.7

UART_SOCKET
UART Socket Register

UART_SOCKET
b31

UART Socket Register
b30

b29

b22

b21

b14

b13

UART_SOCKET
b23

b27

0xE0000818
b26

b25

b24

b18

b17

b16

b10

b9

b8

UART Socket Register

UART_SOCKET
b15

b28

b20

b19

UART Socket Register
b12

b11

INGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

UART_SOCKET
b7

UART Socket Register
b4

b3

EGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Indicates sockets used for DMA based operation.

Bit

Name

Description

15:8

INGRESS_SOCKET[7:0]

Socket number for ingress data
0-7
Supported
8-..
Reserved

7:0

EGRESS_SOCKET[7:0]

Socket number for egress data
0-7
Supported
8-..
Reserved

580

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.8

UART_RX_BYTE_COUNT
UART Receive Byte Count Register

UART_RX_BYTE_COUNT
b31

b30

UART Receive Byte Count Register
b29

b28

b27

0xE000081C
b26

b25

b24

BYTE_COUNT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b18

b17

b16

UART_RX_BYTE_COUNT
b23

b22

UART Receive Byte Count Register
b21

b20

b19

BYTE_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

UART_RX_BYTE_COUNT
b15

b14

UART Receive Byte Count Register
b13

b12

b11

BYTE_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b2

b1

b0

UART_RX_BYTE_COUNT
b7

b6

UART Receive Byte Count Register
b5

b4

b3

BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFFFFFF

Indicates the number of bytes to receive. This register is relevant only if DMA_MODE=1.
No end-of-packet (EOP) will be sent to the DMA adapter. If receive flow control is enabled it will be set to off. If flow control is
not enabled and data is received and the socket remains active, it will be forwarded to the adapter regardless of
BYTE_COUNT. BYTE_COUNT will stay 0 in this case (not decrement).

Bit

Name

Description

31:0

BYTE_COUNT[31:0]

Number of bytes left to receive
0xFFFFFFFF indicates infinite (counter will not decrement)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

581

10.20.9

UART_TX_BYTE_COUNT
UART Transmit Byte Count Register

UART_TX_BYTE_COUNT
b31

b30

UART Transmit Byte Count Register
b29

b28

b27

0xE0000820
b26

b25

b24

BYTE_COUNT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b18

b17

b16

UART_TX_BYTE_COUNT
b23

b22

UART Transmit Byte Count Register
b21

b20

b19

BYTE_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b10

b9

b8

UART_TX_BYTE_COUNT
b15

b14

UART Transmit Byte Count Register
b13

b12

b11

BYTE_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b2

b1

b0

UART_TX_BYTE_COUNT
b7

b6

UART Transmit Byte Count Register
b5

b4

b3

BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFFFFFF

Indicates the number of bytes to transmit. This register is relevant only if DMA_MODE=1.
On transmit a command will complete (TX_DONE) when BYTE_COUNT=0. No more bytes will be sent until BYTE_COUNT is
modified again. Any EOP signalling from the DMA adapter will be ignored.

Bit

Name

Description

31:0

BYTE_COUNT[31:0]

Number of bytes left to transmit
0xFFFFFFFF indicates infinite (counter will not decrement)

582

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.20.10 UART_ID
Block Identification and Version Number Register
I2C_ID

Block Identification and Version Number

b31

b30

b29

b28

b27

0xE0000BF0
b26

b25

b24

R

R

R

b18

b17

b16

R

R

R

b10

b9

b8

R

R

R

b3

b2

b1

b0

R

R

R

R

BLOCK_VERSION[15:8]
R

R

R

b23

b22

b21

I2C_ID

R

R

Block Identification and Version Number
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R
0x0001

I2C_ID

Block Identification and Version Number

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

b7

b6

b5

I2C_ID

R

R

Block Identification and Version Number
b4

BLOCK_ID[7:0]
R

R

R

R
0x0002

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

583

10.20.11 UART_POWER
Power, Clock, and Reset Control Register
UART_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0000BF4
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

UART_POWER
b23

Power, Clock, and Reset Control

UART_POWER
b15

b19

Power, Clock, and Reset Control

UART_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10 µs for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

584

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21 SPI Registers
10.21.1

SPI_CONFIG
SPI Configuration and Modes Register

SPI_CONFIG

SPI Configuration and Modes Register

b31

b30

b29

ENABLE

TX_CLEAR

RX_CLEAR

R/W

R/W

R/W

R

R

R

0

0

0

b22

b21

SPI_CONFIG

b28

b27

0xE0000C00
b26

b25

b18

b17

b24

SPI Configuration and Modes Register

b23

b20

DESELECT

b19

b16

WL[5:0]

SSPOL

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

8

SPI_CONFIG

0

SPI Configuration and Modes Register

b15

b14

b13

LAG[1:0]

b12

LEAD[1:0]

b11

b10

CHPA

CPOL

b9

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

1

1

SPI_CONFIG
b7

b8

SSNCTRL[1:0]
R/W
R
1

SPI Configuration and Modes Register
b6

b5

b4

b3

b2

b1

b0

LOOPBACK

SSN_BIT

ENDIAN

DMA_MODE

TX_ENABLE

RX_ENABLE

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

0

0

0

0

1

0

Various modes of the SPI block.

Bit

Name

Description

31

ENABLE

Enable block here, but only after all the configuration is set. Do not set this bit to 1 while changing any
other value in this register. This bit will be synchronized to the core clock.
Setting this bit to 0 will complete transmission of current sample. When DMA_MODE=1 any remaining samples in the pipeline are discarded. When DMA_MODE=0 no samples are lost.

30

TX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear transmit FIFO
(After TX_CLEAR is set, software must wait for TX_DONE before clearing it)

29

RX_CLEAR

Use only when ENABLE=0; behavior undefined when ENABLE=1
0
Do nothing
1
Clear receive FIFO
(Software must wait for RX_DATA=0 before clearing this bit again)

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

585

10.21.1

SPI_CONFIG (continued)

23

DESELECT

0
1

22:17

WL[5:0]

SPI transaction-unit length from 4 to 32 bits. 0-3 reserved.

16

SSPOL

0

15:14

LAG[1:0]

SCK-SSN lag time. Indicates the number of half-clock cycles for which SSN needs to remain
asserted after the last SCK cycle including zero.
Note that LAG must be >0 when CHPA=1.

13:12

LEAD[1:0]

SSN-SCK lead time.Encodings are: 0, 0.5, 1 or 1.5 SCK cycles. Indicates the number of half-clock
cycles SSN need to assert ahead of the first SCK cycle. However zero lead is not supported.

11

CPHA

Transaction start mode. See section 3.2.2.2

10

CPOL

0
1

SCK idles low
SCK idles high

9:8

SSNCTRL[1:0]

00
01
10
11

SSN is toggled by firmware.
SSN remains asserted between each 8-bit transfer.
SSN asserts high at the end of the transfer.
SSN is governed by CPHA

5

LOOPBACK

0
1

No effect
Send the value being transmitted to the receive buffer. Disable external transmit and
receive.

4

SSN_BIT

This bit controls SSN behavior at the end of each received and transmitted “byte” if SSNCTRL indicate firmware SSN control. This bit is transmitted over SSN line *as is* and without regards to how
many cycles it is going out. SSPOL is applied. The firmware is expected to send one word at a time in
this mode. DESELECT bit takes precedence over this bit.
Typically the firmware will keep this bit asserted for the entire transaction that can span multiple
words. If SSN needs to be de-asserted between words, only single word transfers are possible when
SSN is under firmware control.
Modify only when ENABLE=0.

3

ENDIAN

0
1

MSB First
LSB First

2

DMA_MODE

0
1

Register-based transfers
DMA-based transfers

1

TX_ENABLE

0
1

Transmitter disable, do not transmit data
Transmitter enabled

0

RX_ENABLE

0
1

Receiver disabled, ignore incoming data
Receive enabled

586

Normal SSN behavior.
Never assert SSN. Used to direct SPI traffic to non-default slaves whose SSN are connected to GPIO.

SSN is active low, else active high.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.2

SPI_STATUS
SPI Status Register

SPI_STATUS

SPI Status Register

b31

b30

b29

b28

b27

BUSY

0xE0000C04
b26

b24

ERROR_CODE[3:0]

R

R

R

R

R

W

W

W

W

W

b18

b17

b16

b10

b9

b8

0

SPI_STATUS

b25

0xF

SPI Status Register

b23

b22

b21

b20

b14

b13

b12

b6

b5

b4

b3

b2

b1

b0

ERROR

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

SPI_STATUS

b19

SPI Status Register

b15

SPI_STATUS

b11

SPI Status Register

b7

R/W1C

R

R

R

R

R

R

R/W1S

W

W

W

W

W

W

0

1

1

0

0

0

0

Status and error register. Most status bits are used to generate an interrupt on positive edge into INTR register.

Bit

Name

Description

28

BUSY

Indicates the block is busy transmitting data. This field may remain asserted after the block is suspended and must be polled before changing any configuration values.

27:24

ERROR_CODE

Error code, only relevant when ERROR=1. ERROR logs only the FIRST error to occur and will never
change value as long as ERROR=1.
12
Write to TX FIFO when FIFO full
13
Read from RX FIFO when FIFO empty
15
No error

6

ERROR

An internal error has occurred with cause ERROR_CODE. Must be cleared by software. Sticky

5

TX_HALF

Indicates that the TX FIFO is at least half empty. This bit can be used to create burst-based interrupts. This bit is updated immediately after writes to EGRESS_DATA register. Non sticky.

4

TX_SPACE

Indicates space is available in the TX FIFO. This bit is updated immediately after writes to
EGRESS_DATA register. Non sticky.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

587

10.21.2

SPI_STATUS (continued)

3

TX_DONE

Indicates no more data is available for transmission. Non sticky.
If DMA_MODE=0 this is defined as TX FIFO empty and shift register empty. If DMA_MODE=1 this is
defined as BYTE_COUNT=0 and shift register empty. Note that this field will only assert after a transmission was started - its power up state is 0.

2

RX_HALF

Indicates that the RX FIFO is at least half full (only relevant when DMA_MODE=0). This bit can be
used to create burst based interrupts. This bit is updated immediately after reads from
INGRESS_DATA register. Non sticky

1

RX_DATA

Indicates data is available in the RX FIFO (only relevant when DMA_MODE=0). This bit is updated
immediately after reads from INGRESS_DATA register. Non sticky

0

RX_DONE

Indicates receive operation completed. Only relevant when DMA_MODE=1). Receive operation is
complete when transfer size bytes in socket have been received. Non sticky. Does not need software
intervention to clear it.

588

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.3

SPI_INTR
SPI Interrupt Request Register

SPI_INTR

SPI Interrupt Request Register

b31

b29

b22

b21

b14

b13

b6

b5

b4

b3

b2

b1

b0

ERROR

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

0

SPI_INTR

b28

b27

0xE0000C08

b30

b26

b25

b24

b18

b17

b16

b10

b9

b8

SPI Interrupt Request Register

b23

SPI_INTR

b20

b19

SPI Interrupt Request Register

b15

SPI_INTR

b12

b11

SPI Interrupt Request Register

b7

Interrupt requests. Derived from STATUS register. Interrupt requests must be cleared by CPU and are generated regardless
of values in INTR_MASK register.

Bit

Name

Description

6

ERROR

Set by hardware when corresponding STATUS asserts, cleared by software.

5

TX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

4

TX_SPACE

Set by hardware when corresponding STATUS asserts, cleared by software.

3

TX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

2

RX_HALF

Set by hardware when corresponding STATUS asserts, cleared by software.

1

RX_DATA

Set by hardware when corresponding STATUS asserts, cleared by software.

0

RX_DONE

Set by hardware when corresponding STATUS asserts, cleared by software.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

589

10.21.4

SPI_INTR_MASK
SPI Interrupt Mask Register

SPI_INTR_MASK
b31

SPI Interrupt Mask Register
b28

b29

b22

b21

b14

b13

b6

b5

b4

b3

b2

b1

b0

ERROR

TX_HALF

TX_SPACE

TX_DONE

RX_HALF

RX_DATA

RX_DONE

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

SPI_INTR_MASK
b23

b20

b25

b24

b19

b18

b17

b16

b10

b9

b8

SPI Interrupt Mask Register
b12

SPI_INTR_MASK
b7

b26

SPI Interrupt Mask Register

SPI_INTR_MASK
b15

b27

0xE0000C0C

b30

b11

SPI Interrupt Mask Register

Interrupt mask bits. Determine if INTR bits are reported to CPU. Have no effect on creation of INTR bits.

Bit

Name

Description

6

ERROR

1

Report interrupt to CPU

5

TX_HALF

1

Report interrupt to CPU

4

TX_SPACE

1

Report interrupt to CPU

3

TX_DONE

1

Report interrupt to CPU

2

RX_HALF

1

Report interrupt to CPU

1

RX_DATA

1

Report interrupt to CPU

0

RX_DONE

1

Report interrupt to CPU

590

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.5

SPI_EGRESS_DATA
SPI Egress Data Register

SPI_EGRESS_DATA
b31

SPI Egress Data Register
b30

b29

b28

0xE0000C10

b27

b26

b25

b24

DATA32[31:24]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

SPI_EGRESS_DATA
b23

SPI Egress Data Register
b20

DATA32[23:16]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

SPI_EGRESS_DATA
b15

SPI Egress Data Register
b12

DATA32[15:8]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

SPI_EGRESS_DATA
b7

SPI Egress Data Register
b4

DATA32[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Accepts egress data one word at a time, LSB justified. Writing to this register adds one word to the FIFO if the FIFO has
space available. It will result in ERROR if the FIFO is full. The size of the transmit FIFO is configured at design time.

Bit

Name

Description

31:0

DATA32[31:0]

Data word to be written to the peripheral in registered mode. Only the least significant SPI_CONF.WL bits
are used. Other bits are ignored.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

591

10.21.6

SPI_INGRESS_DATA
SPI Ingress Data Register

SPI_INGRESS_DATA
b31

SPI Ingress Data Register
b30

b29

b28

0xE0000C14

b27

b26

b25

b24

DATA32[31:24]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b19

b18

b17

b16

SPI_INGRESS_DATA
b23

SPI Ingress Data Register
b20

DATA32[23:16]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b14

b13

b11

b10

b9

b8

SPI_INGRESS_DATA
b15

SPI Ingress Data Register
b12

DATA32[15:8]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b3

b2

b1

b0

SPI_INGRESS_DATA
b7

SPI Ingress Data Register
b4

DATA32[7:0]
W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Presents ingress data one word at a time, LSB justified. Reading from this register removes one word from the FIFO if the
FIFO has data available. It will result in ERROR if the FIFO is empty. The size of the receive FIFO is configured at design
time.

Bit

Name

Description

31:0

DATA32[31:0]

Data word read from the peripheral when DMA_MODE=0. Only the least significant SPI_CONF.WL bits
are provided. Other bits are set to 0.

592

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.7

SPI_SOCKET
SPI Socket Register

SPI_SOCKET
b31

SPI Socket Register
b30

b29

b22

b21

b14

b13

SPI_SOCKET
b23

b27

0xE0000C18
b26

b25

b24

b18

b17

b16

b10

b9

b8

SPI Socket Register

SPI_SOCKET
b15

b28

b20

b19

SPI Socket Register
b12

b11

INGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

SPI_SOCKET
b7

SPI Socket Register
b4

b3

EGRESS_SOCKET[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Indicates sockets used for DMA based operation.

Bit

Name

Description

15:8

INGRESS_SOCKET[7:0]

Socket number for ingress data
0-7
Supported
8-..
Reserved

7:0

EGRESS_SOCKET[7:0]

Socket number for egress data
0-7
Supported
8-..
Reserved

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

593

10.21.8

SPI_RX_BYTE_COUNT
SPI Receive Byte Count Register

SPI_RX_BYTE_COUNT
b31

SPI Receive Byte Count Register
b30

b29

b28

b27

0xE0000C1C
b26

b25

b24

WORD_COUNT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b22

b21

b18

b17

b16

SPI_RX_BYTE_COUNT
b23

SPI Receive Byte Count Register
b20

b19

WORD_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b14

b13

b10

b9

b8

SPI_RX_BYTE_COUNT
b15

SPI Receive Byte Count Register
b12

b11

WORD_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b6

b5

b2

b1

b0

SPI_RX_BYTE_COUNT
b7

SPI Receive Byte Count Register
b4

b3

WORD_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0xFFFFFFFF

Indicates the number of bytes to receive. This register is relevant only if DMA_MODE=1.
On receive BYTE_COUNT bytes will be received and forwarded to the DMA adapter. No EOP will be sent to the DMA
adapter. If receive flow control is enabled it will be set to off. If flow control is not enabled and data is received and the socket
remains active, it will be forwarded to the adapter regardless of BYTE_COUNT. BYTE_COUNT will stay 0 in this case (not
decrement). Words can consist of 4-32 bits.

Bit

Name

Description

31:0

WORD_COUNT[31:0]

Number of words left to read or write
0xFFFFFFFF indicates infinite (counter will not decrement)

594

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.9

SPI_TX_BYTE_COUNT
SPI Transmit Byte Count Register

SPI_TX_BYTE_COUNT
b31

SPI Transmit Byte Count Register
b30

b29

b28

b27

0xE0000C20
b26

b25

b24

WORD_COUNT[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b22

b21

b18

b17

b16

SPI_TX_BYTE_COUNT
b23

SPI Transmit Byte Count Register
b20

b19

WORD_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b14

b13

b10

b9

b8

SPI_TX_BYTE_COUNT
b15

SPI Transmit Byte Count Register
b12

b11

WORD_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

b6

b5

b2

b1

b0

SPI_TX_BYTE_COUNT
b7

SPI Transmit Byte Count Register
b4

b3

WORD_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0xFFFFFFFF

Indicates the number of bytes to transmit. This register is relevant only if DMA_MODE=1.
On transmit a command will complete (TX_DONE) when BYTE_COUNT=0. No more bytes will be sent until BYTE_COUNT is
modified again. Any EOP signalling from the DMA adapter will be ignored. Words can consist of 4-32 bits.

Bit

Name

Description

31:0

WORD_COUNT[31:0]

Number of words left to read or write
0xFFFFFFFF indicates infinite (counter will not decrement)

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

595

10.21.10 SPI_ID
Block Identification and Version Number Register
SPI_ID

Block Identification and Version Number

b31

b30

b29

b28

b27

0xE0000FF0
b26

b25

b24

R

R

R

b18

b17

b16

R

R

R

b10

b9

b8

R

R

R

b3

b2

b1

b0

R

R

R

R

BLOCK_VERSION[15:8]
R

R

R

b23

b22

b21

SPI_ID

R

R

Block Identification and Version Number
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R
0x0001

SPI_ID

Block Identification and Version Number

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

b7

b6

b5

SPI_ID

R

R

Block Identification and Version Number
b4

BLOCK_ID[7:0]
R

R

R

R
0x0003

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

596

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.21.11 SPI_POWER
Power, Clock, and Reset Control Register
SPI_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0000FF4
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

SPI_POWER
b23

Power, Clock, and Reset Control

SPI_POWER
b15

b19

Power, Clock, and Reset Control

SPI_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10 µs for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

597

10.22 General Purpose IO Block Registers
10.22.1

GPIO_SIMPLE
Simple General Purpose IO Register (one pin)

There are 61 GPIO_SIMPLE registers. The address of each is calculated as GPIO_SIMPLE(x) = 0xE0001100 + (x*0x4).
Hence GPIO_SIMPLE(0) is at address 0xE0001100, GPIO_SIMPLE(1) is at address 0xE0001100 + 0x4 and so on. The definition of each of these is the same.
GPIO_SIMPLE

Simple General Purpose IO Register (one pin)

b31

b30

b29

b28

b27

0xE0001100
b26

b25

b24

ENABLE

INTR

R/W

R/W1C

R/W

R/W

R/W

R

R/W1S

R

R

R

0

0

0

0

0

b18

b17

b16

b10

b9

b8

GPIO_SIMPLE

INTRMODE[2:0]

Simple General Purpose IO Register (one pin)

b23

b22

b21

b14

b13

b6

b5

b4

INPUT_EN

DRIVE_HI_EN

DRIVE_LO_EN

R/W

R/W

R

R

0

0

GPIO_SIMPLE

b20

b19

Simple General Purpose IO Register (one pin)

b15

GPIO_SIMPLE

b12

b11

Simple General Purpose IO Register (one pin)

b7

b3

b2

b1

b0

IN_VALUE

OUT_VALUE

R/W

R

R/W

R

W

R

0

0

1

This register controls mode of operation and configuration for a single IO Pin. It also exposes status and read value.

Bit

Name

Description

31

ENABLE

Enable GPIO logic for this pin.

27

INTR

Registers edge triggered interrupt condition. Only relevant when INTRMODE=1,2,3,6,7. When
INTRMODE=4,5 pin status is fed directly to interrupt controller; condition can be observed through
IN_VALUE in this case.

continued on next page

598

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.22.1

GPIO_SIMPLE (continued)

26:24

INTRMODE[2:0]

Interrupt mode
0
No interrupt
1
Interrupt on positive edge
2
Interrupt on negative edge
3
Interrupt on any edge
4
Interrupt when pin is low
5
Interrupt when pin is high
6-7
Reserved

6

INPUT_EN

0
1

5

DRIVE_HI_EN

Output driver enable when OUT_VALUE=1
0
Output driver is tristated
1
Output driver is active (weak/strong is determined in IO Matrix)

4

DRIVE_LO_EN

Output driver enable when OUT_VALUE=0
0
Output driver is tristated
1
Output driver is active (weak/strong is determined in IO Matrix)

1

IN_VALUE

Present input measurement
0
Low
1
High

0

OUT_VALUE

Output value used for output drive (if DRIVE_EN=1)
0
Driven Low
1
Driven High

Input stage is disabled
Input stage is enabled, value is readable in IN_VALUE

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

599

10.22.2

GPIO_INVALUE0
GPIO Input Value Vector Register

GPIO_INVALUE0
b31

GPIO Input Value Vector
b30

b29

b28

b27

0xE00013D0
b26

b25

b24

INVALUE0[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIO_INVALUE0
b23

GPIO Input Value Vector
b20

b19

INVALUE0[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIO_INVALUE0
b15

GPIO Input Value Vector
b12

b11

INVALUE0[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIO_INVALUE0
b7

GPIO Input Value Vector
b4

b3

INVALUE0[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

One bit for each GPIO pin indicating interrupt status

Bit

Name

Description

31:0

INVALUE0[31:0]

If bit  is set, IN_VALUE is active for GPIO .

600

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.22.3

GPIO_INVALUE1
GPIO Input Value Vector Register

GPIO_INVALUE1
b31

GPIO Input Value Vector
b30

b29

b28

0xE00013D4

b27

b26

b25

b24

INVALUE1[28:24]

GPIO_INVALUE1
b23

R

R

R

R

R

W

W

W

W

W

0

0

0

0

0

b18

b17

b16

GPIO Input Value Vector
b22

b21

b20

b19

INVALUE1[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIO_INVALUE1
b15

GPIO Input Value Vector
b12

b11

INVALUE1[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIO_INVALUE1
b7

GPIO Input Value Vector
b4

b3

INVALUE1[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

One bit for each GPIO pin indicating interrupt status

Bit

Name

Description

28:0

INVALUE1[28:0]

If bit  is set, IN_VALUE is active for GPIO .

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

601

10.22.4

GPIO_INTR0
GPIO Interrupt Vector Register

GPIO_INTR0
b31

GPIO Interrupt Vector
b30

b29

b28

b27

0xE00013E0
b26

b25

b24

INTR0[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

GPIO_INTR0
b23

GPIO Interrupt Vector
b20

b19

INTR0[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIO_INTR0
b15

GPIO Interrupt Vector
b12

b11

INTR0[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIO_INTR0
b7

GPIO Interrupt Vector
b4

b3

INTR0[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

One bit for each GPIO pin indicating interrupt status

Bit

Name

Description

31:0

INTR0[31:0]

If bit  is set, INTR is active for GPIO .

602

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.22.5

GPIO_INTR1
GPIO Interrupt Vector Register

GPIO_INTR1
b31

GPIO Interrupt Vector
b30

b29

b28

b27

0xE00013E4
b26

b25

b24

INTR1[28:24]

GPIO_INTR1
b23

R

R

R

R

R

W

W

W

W

W

0

0

0

0

0

b18

b17

b16

GPIO Interrupt Vector
b22

b21

b20

b19

INTR1[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

GPIO_INTR1
b15

GPIO Interrupt Vector
b12

b11

INTR1[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

GPIO_INTR1
b7

GPIO Interrupt Vector
b4

b3

INTR1[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

One bit for each GPIO pin indicating interrupt status

Bit

Name

Description

28:0

INTR1[28:0]

If bit  is set, INTR is active for GPIO .

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

603

10.22.6

GPIO_INTR
GPIO Interrupt Vector for PINs Register

GPIO_INTR
b31

GPIO Interrupt Vector for PINs
b29

b22

b21

b14

b13

b7

b6

b5

b4

b3

b2

b1

b0

INTR7

INTR6

INTR5

INTR4

INTR3

INTR2

INTR1

INTR0

GPIO_INTR
b23

b27

b26

b25

b24

b18

b17

b16

b10

b9

b8

GPIO Interrupt Vector for PINs

GPIO_INTR
b15

b28

0xE00013E8

b30

b20

b19

GPIO Interrupt Vector for PINs

GPIO_INTR

b12

b11

GPIO Interrupt Vector for PINs

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

One bit for each GPIO PIN structure indicating its interrupt status. The actual pin associated with a PIN structure (if any) is set
in GCTL_GPIO_COMPLEX.

Bit

Name

Description

7

INTR7

Set by hardware when corresponding STATUS asserts, cleared by software.

6

INTR6

Set by hardware when corresponding STATUS asserts, cleared by software.

5

INTR5

Set by hardware when corresponding STATUS asserts, cleared by software.

4

INTR4

Set by hardware when corresponding STATUS asserts, cleared by software.

3

INTR3

Set by hardware when corresponding STATUS asserts, cleared by software.

2

INTR2

Set by hardware when corresponding STATUS asserts, cleared by software.

1

INTR1

Set by hardware when corresponding STATUS asserts, cleared by software.

0

INTR0

Set by hardware when corresponding STATUS asserts, cleared by software.

604

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.22.7

GPIO_ID
Block Identification and Version Number Register

GPIO_ID

Block Identification and Version Number

b31

b30

b29

b28

b27

0xE00013F0
b26

b25

b24

R

R

R

b18

b17

b16

R

R

R

b10

b9

b8

R

R

R

b3

b2

b1

b0

R

R

R

R

BLOCK_VERSION[15:8]
R

R

R

b22

b21

GPIO_ID

R

R

Block Identification and Version Number

b23

b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R
0x0001

GPIO_ID

Block Identification and Version Number

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

b6

b5

GPIO_ID

R

R

Block Identification and Version Number

b7

b4

BLOCK_ID[7:0]
R

R

R

R
0x0004

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

605

10.22.8

GPIO_POWER
Power, Clock, and Reset Control Register

GPIO_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE00013F4
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

GPIO_POWER
b23

Power, Clock, and Reset Control

GPIO_POWER
b15

b19

Power, Clock, and Reset Control

GPIO_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every low performance peripheral IP block will implement a few MMIO registers at a fixed offset in its MMIO to space that
identify the block and control its power/clock/reset state. These registers are located in the CPU/Interconnect power and clock
domains and are accessible even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10 µs for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

606

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.23 General Purpose IO Registers (one pin)
10.23.1

PIN_STATUS
IO Pin Status Register (one pin)

PIN_STATUS

Configuration, mode and status of IO Pin

b31

b30

ENABLE

b29

b28

TIMER_MODE[2:0]

b27

0xE0001000
b26

INTR

b25

b24

INTRMODE[2:0]

R/W

R/W

R/W

R/W

R/W1C

R/W

R/W

R/W

R

R

R

R

R/W1S

R

R

R

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

b14

b13

b9

b8

PIN_STATUS

Configuration, mode and status of IO Pin

b23

PIN_STATUS

b20

b19

Configuration, mode and status of IO Pin

b15

b12

b11

b10

MODE[3:0]

PIN_STATUS

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

Configuration, mode and status of IO Pin

b7

b6

b5

b4

INPUT_EN

DRIVE_HI_EN

DRIVE_LO_EN

R/W

R/W

R

R

0

0

b3

b2

b1

b0

IN_VALUE

OUT_VALUE

R/W

R

R/W

R

W

R/W

0

0

1

This register controls mode of operation and configuration for a single IO Pin. It also exposes status and read value.

Bit

Name

Description

31

ENABLE

Enable GPIO logic for this pin.

30:28

TIMER_MODE[2:0]

0
Shutdown GPIO_TIMER
1
Use high frequency (e.g. 50MHz)
2
Use low frequency (e.g. 1MHz)
3
Use standby frequency (32KHz)
4
Use positive edge (sampled using high frequency)
5
Use negative edge (sampled using high frequency)
6
Use any edge (sampled using high frequency)
7
Reserved
Note: Changing TIMER_MODE when ENABLE=1 will result in undefined behavior.

27

INTR

Registers edge triggered interrupt condition. Only relevant when INTRMODE=1,2,3,6,7. When
INTRMODE=4,5 pin status is fed directly to interrupt controller; condition can be observed through
IN_VALUE in this case.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

607

10.23.1

GPIO_SIMPLE (continued)

26:24

INTRMODE[2:0]

Interrupt mode
0
No interrupt
1
Interrupt on positive edge on IN_VALUE
2
Interrupt on negative edge on IN_VALUE
3
Interrupt on any edge on IN_VALUE
4
Interrupt when IN_VALUE is low
5
Interrupt when IN_VALUE is high
6
Interrupt on TIMER = THRESHOLD
7
Interrupt on TIMER = 0

11:8

MODE[3:0]

Mode/command. Behavior is undefined when MODE>2 and TIMER_MODE=4,5,6.
0
STATIC
1
TOGGLE
2
SAMPLENOW
3
PULSENOW
4
PULSE
5
PWM
6
MEASURE_LOW
7
MEASURE_HIGH
8
MEASURE_LOW_ONCE
9
MEASURE_HIGH_ONCE
10
MEASURE_NEG
11
MEASURE_POS
12
MEASURE_ANY
13
MEASURE_NEG_ONCE
14
MEASURE_POS_ONCE
15
MEASURE_ANY_ONCE
Note that when setting TOGGLE/SAMPLENOW/PULSENOW while ENABLE=0 the behavior is undefined)

6

INPUT_EN

0
1

5

DRIVE_HI_EN

Output driver enable when OUT_VALUE=1
0
Output driver is tristated
1
Output driver is active (weak/strong is determined in IO Matrix)

4

DRIVE_LO_EN

Output driver enable when OUT_VALUE=0
0
Output driver is tristated
1
Output driver is active (weak/strong is determined in IO Matrix)

1

IN_VALUE

Present input measurement
0
Low
1
High

0

OUT_VALUE

Output value used for output drive (if DRIVE_EN=1)
0
Driven Low
1
Driven High

608

Input stage is disabled
Input stage is enabled, value is readable in IN_VALUE

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.23.2

PIN_TIMER
IO Pin Timer/Counter Register

PIN_TIMER
b31

Timer/counter for pulse and measurement modes
b30

b29

b28

b27

b26

0xE0001004
b25

b24

TIMER[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b22

b21

b17

b16

PIN_TIMER
b23

Timer/counter for pulse and measurement modes
b20

b19

b18

TIMER[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b9

b8

PIN_TIMER
b15

Timer/counter for pulse and measurement modes
b12

b11

b10

TIMER[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b1

b0

PIN_TIMER
b7

Timer/counter for pulse and measurement modes
b4

b3

b2

TIMER[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

32-bit revolving counter, using period (GPIO_PERIOD+1).
Note that each GPIO has its own independent timer/counter

Bit

Name

Description

31:0

TIMER[31:0]

32-bit timer-counter value. Use MODE=SAMPLE_NOW (in PIN_STATUS register) to sample the timer
into PIN_THRESHOLD. When TIMER reaches GPIO_PERIOD it resets to 0.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

609

10.23.3

PIN_PERIOD
Pin Period Length Register

PIN_PERIOD
b31

Period length for revolving counter GPIO_TIMER
b30

b29

b28

0xE0001008

b27

b26

b25

b24

PERIOD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b22

b21

PIN_PERIOD
b23

Period length for revolving counter GPIO_TIMER
b20

b19

b18

b17

b16

PERIOD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b14

b13

PIN_PERIOD
b15

Period length for revolving counter GPIO_TIMER
b12

b11

b10

b9

b8

PERIOD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

b6

b5

PIN_PERIOD

Period length for revolving counter GPIO_TIMER

b7

b4

b3

b2

b1

b0

PERIOD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0xFFFFFFFF

Period of 32-bit revolving counter (actual period is PERIOD+1)
Note that each GPIO has its own independent timer/counter.
Note: In FX3 PIN_PERIOD must be 1 or greater.

Bit

Name

Description

31:0

PERIOD[31:0]

32-bit period for GPIO_TIMER (counter resets to 0 when PERIOD=TIMER)

610

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.23.4

PIN_THRESHOLD
Threshold or Measurement Register

PIN_THRESHOLD
b31

Threshold or Measurement Register
b30

b29

b28

b27

0xE000100C
b26

b25

b24

THRESHOLD[31:24]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

PIN_THRESHOLD
b23

Threshold or Measurement Register
b20

b19

THRESHOLD[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

PIN_THRESHOLD
b15

Threshold or Measurement Register
b12

b11

THRESHOLD[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

PIN_THRESHOLD
b7

Threshold or Measurement Register
b4

b3

THRESHOLD[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

A 32-bit threshold or measurement. Usage depends on MODE field in PIN_STATUS register.
Note that each GPIO has its own independent timer/counter.

Bit

Name

Description

31:0

THRESHOLD[31:0]

32-bit threshold or measurement for counter.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

611

10.24 Low Performance Peripherals Registers
10.24.1

LPP_ID
Block Identification and Version Number Register

LPP_ID

Block Identification and Version Number

b31

b30

b29

b28

b27

0xE0007F00
b26

b25

b24

BLOCK_VERSION[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b23

b22

b21

b18

b17

b16

LPP_ID

Block Identification and Version Number
b20

b19

BLOCK_VERSION[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b10

b9

b8

0x0001

LPP_ID

Block Identification and Version Number

b15

b14

b13

b12

b11

BLOCK_ID[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

b7

b6

b5

b3

b2

b1

b0

LPP_ID

Block Identification and Version Number
b4

BLOCK_ID[7:0]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0xFFFE

Every IP block will implement a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its
power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31:16

BLOCK_VERSION[15:0]

Version number for the IP

15:0

BLOCK_ID[15:0]

A unique number identifying the IP in the memory space

612

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.24.2

LPP_POWER
Power, Clock, and Reset Control Register

LPP_POWER
b31

Power, Clock, and Reset Control
b30

b29

b22

b21

b14

b13

b6

b5

b28

b27

0xE0007F04
b26

b25

b24

b18

b17

b16

b10

b9

b8

b2

b1

RESETN
R/W
R
0

LPP_POWER
b23

Power, Clock, and Reset Control

LPP_POWER
b15

b19

Power, Clock, and Reset Control

LPP_POWER
b7

b20

b12

b11

Power, Clock, and Reset Control
b4

b3

b0

ACTIVE
R
W
0

Every IP block will implement a few MMIO registers at offset 0 in its MMIO to space that identify the block and control its
power/clock/reset state. These registers are located in the CPU/Interconnect power and clock domains and are accessible
even when power/clock of the block is switched off.

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block. Note that reset is active on all flops in the block
when either system reset is asserted (RESET# pin or SYSTEM_POWER.RESETN is asserted) or
this signal is active.
After setting this bit to 1, firmware will poll and wait for the ‘active’ bit to assert. Reading ‘1’ from
‘resetn’ does not indicate the block is out of reset – this may take some time depending on initialization tasks and clock frequencies.
This bit must be asserted ('0') for at least 10us for effective reset.

0

ACTIVE

For blocks that must perform initialization after reset before becoming operational, this signal will
remain deasserted until initialization is complete. In other words reading active=1 indicates block is
initialized and ready for operation.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

613

10.25 DMA Socket and Descriptor Registers
Each functional block (LPP, PIB, UIB, and UIBIN) has its own set of DMA socket registers that use the offset address of that
block. Table 10-3 shows the offset address for each block.
Table 10-3. Offset Addresses
Functional Block

Offset Address

LPP

0xE0008000

PIB

0xE0018000

UIB

0xE0038000

UIBIN

0xE0048000

Each functional block has more than one DMA socket and each DMA socket has the same set of DMA Socket registers. The
offset of each DMA Socket register set is 0x80 (that is, the offset of DMA #0 is 0, DMA #1 is 0x80, DMA #2 is 0x100, and so
on). The address of a DMA Socket register can be calculated as:
functional block address + DMA # * 0x80 + register address
For example, the address of the DMA_STATUS register of DMA #2 in the UIB functional block can be calculated as:
0xE0038000 + 2 (DMA #2) * 80 + 0x0C = 0xE0038000 + 0x100 + 0x0C = 0xE003810C

10.25.1

SCK_DSCR
Descriptor Chain Pointer Register

SCK_DSCR

Descriptor Chain Pointer

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R

R

R

R

X

X

X

X

b22

b21

b27

0x00
b26

b25

b24

R/W

R/W

R/W

R/W

R

R

R

R

X

X

X

X

b18

b17

b16

DSCR_LOW[7:0]

SCK_DSCR
b23

Descriptor Chain Pointer
b20

b19

DSCR_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

SCK_DSCR
b15

Descriptor Chain Pointer
b12

b11

DSCR_NUMBER[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

SCK_DSCR
b7

Descriptor Chain Pointer
b4

b3

DSCR_NUMBER[7:0]

614

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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 FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

This register describes the current descriptor chain for this socket. Only write to this register when socket is in suspend state
or disabled state.

Bit

Name

Description

31:24

DSCR_LOW[31:24]

The low watermark for dscr_count. When dscr_count is equal or less than dscr_low the status bit
dscr_is_low is set and an interrupt can be generated (depending on int mask).

23:16

DSCR_COUNT[7:0]

Number of descriptors still left to process. This value is unrelated to actual number of descriptors in
the list. It is used only to generate an interrupt to the CPU when the value goes low or zero (or both).
When this value reaches 0 it will wrap around to 255. The socket will not suspend or be otherwise
affected unless the descriptor chains ends with 0xFFFF descriptor number.

15:0

DSCR_NUMBER[15:0]

Descriptor number of currently active descriptor. A value of 0xFFFF designates no (more) active
descriptors available. When activating a socket CPU will write number of first descriptor in here. Only
modify this field when go_suspend=1 or go_enable=0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

615

10.25.2

SCK_SIZE
Transfer Size Register

SCK_SIZE

Transfer Size Register

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R

R

R

R

X

X

X

X

b22

b21

b27

0x04
b26

b25

b24

R/W

R/W

R/W

R/W

R

R

R

R

X

X

X

X

b18

b17

b16

TRANS_SIZE[31:24]

SCK_SIZE
b23

Transfer Size Register
b20

b19

TRANS_SIZE[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

SCK_SIZE
b15

Transfer Size Register
b12

b11

TRANS_SIZE[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

X

X

X

X

X

X

X

X

b6

b5

b2

b1

b0

SCK_SIZE
b7

Transfer Size Register
b4

b3

TRANS_SIZE[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

X

X

X

X

X

X

X

X

Only write to this register when socket is in suspend state or disabled state.

Bit

Name

Description

31:0

TRANS_SIZE[31:0]

The number of bytes or buffers (depends on unit bit in SCK_STATUS) that are part of this transfer. A
value of 0 signals an infinite/undetermined transaction size.
Valid data bytes remaining in the last buffer beyond the transfer size will be read by socket and passed on
to the core. Firmware must ensure that no additional bytes beyond the transfer size are present in the last
buffer.

616

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.3

SCK_COUNT
Transfer Count Register

SCK_COUNT

Transfer Count Register

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b22

b21

b27

0x08
b26

b25

b24

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b18

b17

b16

TRANS_COUNT[31:24]

SCK_COUNT
b23

Transfer Count Register
b20

b19

TRANS_COUNT[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

SCK_COUNT
b15

Transfer Count Register
b12

b11

TRANS_COUNT[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

SCK_COUNT
b7

Transfer Count Register
b4

b3

TRANS_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

Only write to this register when socket is in suspend state or disabled state.

Bit

Name

Description

31:0

TRANS_COUNT[31:0]

The number of bytes or buffers (depends on unit bit in SCK_STATUS) that have been transferred
through this socket so far. If trans_size is >0 and trans_count >= trans_size the ‘trans_done’ bits in
SCK_STATUS is both set. If SCK_STATUS.susp_trans=1 the socket is also suspended and the ‘suspend’ bit set. This count is updated only when a descriptor is completed and the socket proceeds to
the next one.
Exception: When socket suspends with PARTIAL_BUF=1, this value is (incorrectly) incremented by 1
(UNIT=1) or DSCR_SIZE.BYTE_COUNT (UNIT=0). Firmware must correct this before resuming the
socket.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

617

10.25.4

SCK_STATUS
Socket Status Register

SCK_STATUS

Socket Status Register

0x0C

b31

b30

b29

b28

b27

b26

b25

b24

GO_ENABLE

GO_SUSPEND

UNIT

WRAPUP

SUSP_EOP

SUSP_TRANS

SUSP_LAST

SUSP_PARTIAL

R/W

R/W

R/W

R/W1S

R/W

R/W

R/W

R/W

R

R

R

R/W0C

R

R

R

R

0

0

0

0

0

1

0

0

b23

b22

b21

b20

b19

b18

b17

b16

EN_CONS_
EVENTS

EN_PROD_
EVENTS

TRUNCATE

ENABLED

SUSPENDED

ZLP_RCVD

R/W

R/W

R/W

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

1

1

1

0

0

0

0

0

b14

b13

b10

b9

SCK_STATUS

Socket Status Register

SCK_STATUS

STATE[2:1]

Socket Status Register

b15

b12

b11

STATE[0]

AVL_ENABLE

b8

AVL_MIN[4:3]

R

R/W

R/W

R/W

R/W

R

R

R

0

0

0

0

b2

b1

b0

SCK_STATUS

Socket Status Register

b7

b6

b5

b4

b3

AVL_MIN[2:0]

AVL_COUNT[4:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register contains the status and interrupt control bits. The interrupt request bits are independent of the interrupt mask
bits. The mask bits affect which interrupt request bits are reported to CPU only.

Bit

Name

Description

31

GO_ENABLE

Indicates whether socket is enabled. When go_enable is cleared while socket is active, ongoing
transfers are aborted after an unspecified amount of time. No update occurs from the descriptor registers back into memory. When go_enable is changed from 0 to 1, the socket will reload the active
descriptor from memory regardless of the contents of DSCR_ registers. The socket will not wait for an
EVENT to become active if the descriptor is available and ready for transfer (has space or data).
The 'enabled' bit indicates whether the socket is actually enabled or not. This field lags go_enable by
a short but unspecified time.

30

GO_SUSPEND

Directs a socket to go into suspend mode when the current descriptor completes. The main use of
this bit is to safely append descriptors to an active socket without actually suspending it (in most
cases). The process looks as follows:
1. GO_SUSPEND=1
2. Modify the chain in memory
3. Check if active descriptor is 0xFFFF or last in chain
4. If so, make corrections as necessary (complicated)
5. Clear any pending suspend interrupts (SCK_INTR[9:5])
6. GO_SUSPEND=0
Note that the socket resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

continued on next page

618

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.4

SCK_STATUS (continued)

29

UNIT

Indicates whether descriptors (1) or bytes (0) are counted by trans_count and trans_size. Descriptors
are counting regardless of whether they contain any data or have eop set.

28

WRAPUP

Setting this bit will forcibly wrap-up a socket, whether it is out of data or not. This option is intended
mainly for ingress sockets, but works also for egress sockets. Any remaining data in fetch buffers is
ignored, in write buffers is flushed. Transaction and buffer counts are updated normally, and suspend
behavior also happens normally (depending on various other settings in this register).G45

27

SUSP_EOP

When set, the socket will suspend after wrapping up the first buffer with dscr.eop=1. Note that this
function will work the same for both ingress and egress sockets.

26

SUSP_TRANS

When set, the socket will suspend when trans_count >= trans_size. This equation is checked (and
hence the socket will suspend) only at the boundary of buffers and packets (ie. buffer wrapup or EOP
assertion).

25

SUSP_LAST

When
set,
the
socket
will
suspend
before
activating
a
descriptor
with
TRANS_COUNT+BUFFER_SIZE>=TRANS_SIZE. This is relevant for both ingress and egress sockets.

24

SUSP_PARTIAL

When
set,
the
socket
will
suspend
before
activating
BYTE_COUNT=TRANS_SIZE. When enabled, ensures that an ingress transfer
never contains more bytes then allowed. This function is needed to implement burst-based protocols
that can only transmit full bursts of more than 1 byte.

20

ENABLED

Indicates the socket is currently enabled when asserted. After go_enable is changed, it may take
some time for enabled to make the same change. This value can be polled to determine this fact.

19

SUSPENDED

Indicates the socket is currently in suspend state. In suspend mode there is no active descriptor; any
previously active descriptor is wrapped up, copied back to memory and SCK_DSCR.dscr_number is
updated
using
DSCR_CHAIN
as
needed.
If
the
next
descriptor
is
known
(SCK_DSCR.dscr_number!=0xFFFF), this descriptor will be loaded after the socket resumes from
suspend state.
A socket can only be resumed by changing go_suspend from 1 to 0. If the socket is suspended while
go_suspend=0, it must first be set and then again cleared.

18

ZLP_RCVD

Indicates the socket received a ZLP

a

descriptor

with

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

619

10.25.4
17:15

SCK_STATUS (continued)

STATE[2:0]

State

Internal operating state of the socket. This field is used for debugging and to safely modify active
sockets (see go_suspend).
Default Description

DESCR

9

Descriptor state. This is the default initial state indicating the descriptor registers are NOT valid in the
Adapter. The Adapter will start loading the descriptor from memory if the socket becomes enabled and not
suspended. Suspend has no effect on any other state.

STALL

1

Stall state. Socket is stalled waiting for data to be loaded into the Fetch Queue or waiting for an event.

ACTIVE

2

Active state. Socket is available for core data transfers.

EVENT

3

Event state. Core transfer is done. Descriptor is being written back to memory and an event is being
generated if enabled.

CHECK1

4

Check states. An active socket gets here based on the core’s EOP request to check the Transfer size and
determine whether the buffer should be wrapped up. Depending on result, socket will either go back to
Active state or move to the Event state.

SUSPENDED

5

Socket is suspended

CHECK2

6

Check states. An active socket gets here based on the core’s EOP request to check the Transfer size and
determine whether the buffer should be wrapped up. Depending on result, socket will either go back to
Active state or move to the Event state.

WAITING

7

Waiting for confirmation that event was sent.

10

AVL_ENABLE

Enables the functioning of AVL_COUNT and AVL_MIN. When 0, it will disable both stalling on
AVL_MIN and generation of the sck_more_buf_avl signal described above.

9:5

AVL_MIN

Minimum number of available buffers required by the adapter before activating a new one. This can
be used to guarantee a minimum number of buffers available with old data to implement rollback. If
AVL_ENABLE, the socket will remain in STALL state until AVL_COUNT>=AVL_MIN.

4:0

AVL_COUNT

Number of available (free for ingress, occupied for egress) descriptors beyond the current one. This
number is incremented by the adapter whenever an event is received on this socket and decremented whenever it activates a new descriptor. This value is used to create a signal to the IP Cores
that indicates at least one buffer is available beyond the current one (sck_more_buf_avl).

620

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.5

SCK_INTR
Socket Interrupt Request Register

SCK_INTR

Socket Interrupt Request Register

b31

b30

b29

b22

b21

b14

b13

SCK_INTR

b28

b27

0x10
b26

b25

b24

b18

b17

b16

Socket Interrupt Request Register

b23

SCK_INTR

b20

b19

Socket Interrupt Request Register

b15

SCK_INTR

b12

b11

b10

b9

b8

LAST_BUF

PARTIAL_BUF

R/W1C

R/W1C

W1S

W1S

0

0

Socket Interrupt Request Register

b7

b6

b5

b4

b3

b2

b1

b0

PRODUCE_
EVENT

TRANS_DONE

ERROR

SUSPEND

STALL

DSCR_NOT_AVL

DSCR_IS_LOW

CONSUME_
EVENT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

0

0

This register contains the interrupt request bits. The interrupt request bits are independent of the interrupt mask bits. The
mask bits affect which interrupt request bits are reported to CPU only. If a socket is disabled, all pending interrupts are cleared
automatically.

Bit

Name

Description

9

LAST_BUF

Indicates that the socket was suspended because of SUSP_LAST condition. Note that the socket
resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

8

PARTIAL_BUF

Indicates that the (egress) socket was suspended because of SUSP_PARTIAL condition. Note that
the socket resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

7

TRANS_DONE

Indicates that TRANS_COUNT has reached the limit TRANS_SIZE. This flag is only set when
SUSP_TRANS=1. Note that because TRANS_COUNT is updated only at the granularity of entire buffers, it is possible that TRANS_COUNT exceeds TRANS_SIZE before the socket suspends. Software
must detect and deal with these situations. When asserting EOP to the adapter on ingress, the
trans_count is not updated unless the socket actually suspends (see SUSP_TRANS).
Note that the socket resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

621

10.25.5

SCK_INTR (continued)

6

ERROR

Indicates the socket is suspended because of an error condition (internal to the adapter) – if error=1
then suspend=1 as well. Possible error causes are:
- dscr_size.buffer_error bit already set in the descriptor.
- dscr_size.byte_count > dscr_size.buffer_size
- core writes into an inactive socket.
- core did not consume all the data in the buffer.
Note that the socket resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

5

SUSPEND

Indicates the socket has gone into suspend mode. This may be caused by any hardware initiated
condition (e.g. DSCR_NOT_AVL, any of the SUSP_*) or by setting GO_SUSPEND=1. Note that this
bit will remain asserted until cleared by software, regardless of whether the suspend condition is
resolved.
Note that the socket resumes only when SCK_INTR[9:5]=0 and GO_SUSPEND=0.

4

STALL

Indicates the socket has stalled, waiting for an event signaling its descriptor has become available.
Note that this bit will remain asserted until cleared by software, regardless of whether the socket
resumes.

3

DSCR_NOT_AVL

Indicates the no descriptor is available. Not available means that the current descriptor number is
0xFFFF. Note that this bit will remain asserted until cleared by software, regardless of whether a new
descriptor number is loaded.

2

DSCR_IS_LOW

Indicates that dscr_count has fallen below its watermark dscr_low. If dscr_count wraps around to 255
dscr_is_low will remain asserted until cleared by software

1

CONSUME_EVENT

Indicates that a consume event is received or transmitted since last cleared.

0

PRODUCE_EVENT

Indicates that a produce event is received or transmitted since last cleared.

622

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.6

SCK_INTR_MASK
Socket Interrupt Mask Register

SCK_INTR_MASK

Socket Interrupt Mask Register

b31

b30

b29

b22

b21

b14

b13

SCK_INTR_MASK

b28

b27

0x14
b26

b25

b24

b18

b17

b16

Socket Interrupt Mask Register

b23

SCK_INTR_MASK

b20

b19

Socket Interrupt Mask Register

b15

SCK_INTR_MASK

b12

b11

b10

b9

b8

LAST_BUF

PARTIAL_BUF

R/W1C

R/W1C

W1S

W1S

0

0

Socket Interrupt Mask Register

b7

b6

b5

b4

b3

b2

b1

b0

PRODUCE_
EVENT

TRANS_DONE

ERROR

SUSPEND

STALL

DSCR_NOT_AVL

DSCR_IS_LOW

CONSUME_
EVENT

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

W1S

W1S

W1S

W1S

W1S

W1S

W1S

W1S

0

0

0

0

0

0

0

0

The interrupt request bits in SCK_INTR function independent of the interrupt mask bits. The mask bits affect which interrupt
request bits are reported to CPU only.

Bit

Name

Description

9

LAST_BUF

1: Report interrupt to CPU

8

PARTIAL_BUF

1: Report interrupt to CPU

7

TRANS_DONE

1: Report interrupt to CPU

6

ERROR

1: Report interrupt to CPU

5

SUSPEND

1: Report interrupt to CPU

4

STALL

1: Report interrupt to CPU

3

DSCR_NOT_AVL

1: Report interrupt to CPU

2

DSCR_IS_LOW

1: Report interrupt to CPU

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

623

10.25.6

SCK_INTR_MASK (continued)

1

CONSUME_EVENT

1: Report interrupt to CPU

0

PRODUCE_EVENT

1: Report interrupt to CPU

624

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.7

DSCR_BUFFER
Descriptor Buffer Base Address Register

DSCR_BUFFER

Descriptor Buffer Base Address Register

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b22

b21

b27

0x20
b26

b25

b24

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b18

b17

b16

BUFFER_ADDR[31:24]

SCK_COUNT
b23

Transfer Count Register
b20

b19

BUFFER_ADDR[23:16]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

SCK_COUNT
b15

Transfer Count Register
b12

b11

BUFFER_ADDR[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

SCK_COUNT
b7

Transfer Count Register
b4

b3

BUFFER_ADDR[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

This register is only modified by the adapter when being read from memory. This register is not intended to be modified by
software directly.

Bit

Name

Description

31:0

BUFFER_ADDR[31:0]

The base address of the buffer where data is written. This address is not necessarily word-aligned to
allow for header/trailer/length modification.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

625

10.25.8

DSCR_SYNC
Descriptor Synchronization Pointers Register

DSCR_SYNC

Descriptor Synchronization Pointers Register

b31

b30

b29

b28

b27

EN_PROD_INT

EN_PROD_EVENT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

b22

b21

0x24
b26

b25

b24

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

b18

b17

b16

PROD_IP[5:0]

DSCR_SYNC

Descriptor Synchronization Pointers Register

b23

b20

b19

PROD_SCK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b15

b14

b13

b10

b9

b8

EN_CONS_INT

EN_CONS_EVENT

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

DSCR_SYNC

Descriptor Synchronization Pointers Register
b12

b11

CONS_IP[5:0]

DSCR_SYNC

Descriptor Synchronization Pointers Register

b7

b4

b3

CONS_SCK[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

This register is only modified by the adapter when being read from memory. This register is not intended to be modified by
software directly.

Bit

Name

Description

31

EN_PROD_INT

Enable generation of a produce event interrupt for this descriptor only. This interrupt will only be seen
by the CPU if SCK_STATUS. int_mask has this interrupt enabled as well. Note that this flag influences the logging of the interrupt in SCK_STATUS; it has no effect on the reporting of the interrupt to
the CPU similar to the SCK_STATUS.int_mask.

30

EN_PROD_EVENT

Enable sending of a produce events from this descriptor only. Events are sent only if
SCK_STATUS.en_produce_ev=1. If 0, events will be suppressed, and the descriptor will not be copied back into memory when completed.

29:24

PROD_IP[5:0]

The IP number of the producing socket to which the consume event will be sent. Use 0x3F to designate ARM CPU (so software) as producer; the event will be lost in this case and an interrupt should
also be generated to observe this condition.

23:16

PROD_SCK[7:0]

The socket number of the producing socket to which the consume event will be sent. If prod_ip and
prod_sck matches the socket's IP and socket number then the matching socket becomes consuming
socket.

continued on next page

626

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.8

DSCR_SYNC (continued)

15

EN_CONS_INT

Enable generation of a consume event interrupt for this descriptor only. This interrupt will only be
seen by the CPU if SCK_STATUS.int_mask has this interrupt enabled as well. Note that this flag
influences the logging of the interrupt in SCK_STATUS; it has no effect on the reporting of the interrupt to the CPU similar to the SCK_STATUS.int_mask.

14

EN_CONS_EVENT

Enable sending of consume events from this descriptor only. Events are sent only if
SCK_STATUS.en_consume_ev=1. When events are disabled, the adapter also does not update the
descriptor in memory to clear its occupied bit.

13:8

CONS_IP[5:0]

The IP number of the consuming socket to which the produce event will be sent. Use 0x3F to designate ARM CPU (so software) as consumer; the event will be lost in this case and an interrupt should
also be generated to observe this condition.

7:0

CONS_SCK[7:0]

The socket number of the consuming socket to which the produce event will be sent.
If cons_ip and cons_sck matches the socket's IP and socket number then the matching socket
becomes consuming socket.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

627

10.25.9

DSCR_CHAIN
Descriptor Chain Pointers Register

DSCR_CHAIN

Descriptor Chain Pointers Register

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b22

b21

b27

0x28
b26

b25

b24

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b18

b17

b16

WR_NEXT_DSCR[15:8]

DSCR_CHAIN
b23

Descriptor Chain Pointers Register
b20

b19

WR_NEXT_DSCR[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

DSCR_CHAIN
b15

Descriptor Chain Pointers Register
b12

b11

RD_NEXT_DSCR[15:8]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

DSCR_CHAIN
b7

Descriptor Chain Pointers Register
b4

b3

RD_NEXT_DSCR[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

This register is only modified by the adapter when being read from memory. Only write to this register when socket is in suspend state or disabled state.

Bit

Name

Description

31:16

WR_NEXT_DSCR[15:0]

Descriptor number of the next task for producer. A value of 0xFFFF signals end of this list.

15:0

RD_NEXT_DSCR[15:0]

Descriptor number of the next task for consumer. A value of 0xFFFF signals end of this list.

628

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.10 DSCR_SIZE
Descriptor Size Register
DSCR_SIZE

Descriptor Size Register

b31

b30

b29

b28

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b22

b21

0x02C

b27

b26

b25

b24

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

b18

b17

b16

BYTE_COUNT[15:8]

DSCR_SIZE
b23

Descriptor Size Register
b20

b19

BYTE_COUNT[7:0]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

b14

b13

b10

b9

b8

DSCR_SIZE
b15

Descriptor Size Register
b12

b11

BUFFER_SIZE[11:4]
R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

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

DSCR_SIZE
b7

Descriptor Size Register
b4

BUFFER_SIZE[3:0]

b3

b2

b1

b0

BUFFER_
OCCUPIED

BUFFER_ERROR

EOP

MARKER

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

X

X

X

X

X

X

X

X

The error and start/end of packet markers are provided by the IP through hardware signals when streaming data into the
socket. These signal are optional and are used only for IP that can produce packets larger than on buffer and/or IP that can
detect errors and produce meaningful packets in these cases.
Only eop,byte_count,error,buffer_occupied are modified by the adapter after the initial read from memory. This is the only register that is written back into memory by the adapter. This register is not intended to be modified by software directly.

Bit

Name

Description

31:16

BYTE_COUNT[15:0]

The number of data bytes present in the buffer. An occupied buffer is not always full, in particular
when variable length packets are transferred.

15:4

BUFFER_SIZE[11:0]

The size of the buffer in multiples of 16 bytes

3

BUFFER_OCCUPIED

Indicates the buffer is in use (1) or empty (0). A consumer will interpret this as:
0
Buffer is empty, wait until filled.
1
Buffer has data that can be consumed
A producer will interpret this as:
0
Buffer is ready to be filled
1
Buffer is occupied, wait until empty

2

BUFFER_ERROR

Indicates the buffer data is valid (0) or in error (1).

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

629

10.25.10

DSCR_SIZE (continued)

1

EOP

A marker indicating this descriptor refers to the last buffer of a packet or transfer. Packets/transfers
may span more than one buffer. The producing IP provides this marker by providing the EOP signal
to its DMA adapter. The consuming IP observes this marker by inspecting its EOP return signal from
its own DMA adapter. For more information, refer to the section on packets, buffers and transfers in
the FX3 DMA Subsystem chapter on page 61.

0

MARKER

A marker that is provided by software and can be observed by the IP. Its meaning is defined by the IP
that uses it. This bit has no effect on the other DMA mechanisms.

630

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.25.11 EVENT
Event Communication Register
EVENT

Event Communication Register

b31

b30

b29

b22

b21

EVENT

b28

b27

0x7C
b26

b25

b18

b17

b24

Event Communication Register

b23

b20

b19

b16

EVENT_TYPE
W
R/W
0

EVENT

Event Communication Register

b15

b14

b13

b12

b11

b10

b9

b8

ACTIVE_DSCR[15:8]
W

W

W

W

W

W

W

W

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

b2

b1

b0

EVENT

Event Communication Register
b4

b3

ACTIVE_DSCR[7:0]
W

W

W

W

W

W

W

W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

This register is located in the top of the MMIO map for each socket in each IP block. This register is write-only and cannot be
read from (it represents an action that impacts the descriptor registers, not a state). Writing to this register signals a produce/
consume event (depending on whether the socket is consuming or producing).
A read to this location will return undefined data.

Bit

Name

Description

16

EVENT_TYPE

Type of event
0
Consume event descriptor is marked empty - BUFFER_OCCUPIED=0)
1
Produce event descriptor is marked full = BUFFER_OCCUPIED=1)

15:0

ACTIVE_DSCR[15:0]

The active descriptor number for which the event is sent.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

631

10.26 DMA Adapter Global Registers
Each functional block (LPP, PIB, UIB, and UIBIN) has its own set of DMA registers that use the offset address of that block.
Table 10-4 shows the offset address for each block.
Table 10-4. Offset Addresses
Functional Block
LPP

Offset Address
0xE000FF00

PIB

0xE001FF00

UIB

0xE003FF00

UIBIN

0xE00FF000

Each functional block has more than one DMA and each DMA has the same set of DMA Socket registers. The offset of each
DMA Socket register set is 0x80 (that is, the offset of DMA #0 is 0, DMA #1 is 0x80, DMA #2 is 0x100, and so on). The
address of a DMA Socket register can be calculated as:
functional block address + DMA # * 0x80 + register address
For example, the address of the ADAPTER_DEBUG register of DMA #2 in the UIB functional block can be calculated as:
0xE003FF00 + 2 (DMA #2) * 80 + 0xF4 = 0xE003FF00 + 0x100 + 0xF4 = 0xE00400F4.

10.26.1

SCK_INTR
Socket Interrupt Request Register

SCK_INTR

Socket Interrupt Request Register
b251

0x00

b255

b254

b253

b252

b250

b249

b248

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b246

b245

b243

b241

b240

SCKINTR[255:248]

SCK_INTR
b247

Socket Interrupt Request Register
b244

b243

SCKINTR[247:240]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b238

b237

b234

b233

b232

SCK_INTR
b239

Socket Interrupt Request Register
b236

b235

SCKINTR[239:232]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b230

b229

b226

b225

b224

SCK_INTR
b231

Socket Interrupt Request Register
b228

b227

SCKINTR[231:224]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

continued on next page

632

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.1

SCK_INTR (continued)

SCK_INTR
b223

Socket Interrupt Request Register
b222

b221

b220

b219

b218

b217

b216

SCKINTR[223:216]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b214

b213

b210

b209

b208

SCK_INTR
b215

Socket Interrupt Request Register
b212

b211

SCKINTR[215:208]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b206

b205

b202

b201

b200

SCK_INTR
b207

Socket Interrupt Request Register
b204

b203

SCKINTR[207:200]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b194

b193

b192

SCK_INTR
b199

Socket Interrupt Request Register
b198

b197

b196

b195

SCKINTR[199:192]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b190

b189

b186

b185

b184

SCK_INTR
b191

Socket Interrupt Request Register
b188

b187

SCKINTR[191:184]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b182

b181

b178

b177

b176

SCK_INTR
b183

Socket Interrupt Request Register
b180

b179

SCKINTR[183:176]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b174

b173

b170

b169

b168

SCK_INTR
b175

Socket Interrupt Request Register
b172

b171

SCKINTR[175:168]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

633

10.26.1

SCK_INTR (continued)

SCK_INTR
b167

Socket Interrupt Request Register
b166

b165

b164

b163

b162

b161

b160

SCKINTR[167:160]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b158

b157

b154

b153

b152

SCK_INTR
b159

Socket Interrupt Request Register
b156

b155

SCKINTR[159:152]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b150

b149

b146

b145

b144

SCK_INTR
b151

Socket Interrupt Request Register
b148

b147

SCKINTR[151:144]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b142

b141

b138

b137

b136

SCK_INTR
b143

Socket Interrupt Request Register
b140

b139

SCKINTR[143:136]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b134

b133

b130

b129

b128

SCK_INTR
b135

Socket Interrupt Request Register
b132

b131

SCKINTR[135:128]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b126

b125

b122

b121

b120

SCK_INTR
b127

Socket Interrupt Request Register
b124

b123

SCKINTR[127:120]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b118

b117

b114

b113

b112

SCK_INTR
b119

Socket Interrupt Request Register
b116

b115

SCKINTR[119:112]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

continued on next page

634

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.1

SCK_INTR (continued)

SCK_INTR
b111

Socket Interrupt Request Register
b110

b109

b108

b107

b106

b105

b104

SCKINTR[111:104]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b102

b101

b98

b97

b96

SCK_INTR
b103

Socket Interrupt Request Register
b100

b99

SCKINTR[103:96]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b94

b93

b90

b89

b88

SCK_INTR
b95

Socket Interrupt Request Register
b92

b91

SCKINTR[95:88]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b82

b81

b80

SCK_INTR
b87

Socket Interrupt Request Register
b86

b85

b84

b83

SCKINTR[87:80]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b78

b77

b74

b73

b72

SCK_INTR
b79

Socket Interrupt Request Register
b76

b75

SCKINTR[79:72]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b70

b69

b66

b65

b64

SCK_INTR
b71

Socket Interrupt Request Register
b68

b67

SCKINTR[71:64]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b62

b61

b58

b57

b56

SCK_INTR
b63

Socket Interrupt Request Register
b60

b59

SCKINTR[63:56]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

635

10.26.1

SCK_INTR (continued)

SCK_INTR
b55

Socket Interrupt Request Register
b54

b53

b52

b51

b50

b49

b48

SCKINTR[55:48]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b46

b45

b42

b41

b40

SCK_INTR
b47

Socket Interrupt Request Register
b44

b43

SCKINTR[47:40]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b38

b37

b34

b33

b32

SCK_INTR
b39

Socket Interrupt Request Register
b36

b35

SCKINTR[39:32]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b30

b29

b26

b25

b24

SCK_INTR
b31

Socket Interrupt Request Register
b28

b27

SCKINTR[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b22

b21

b18

b17

b16

SCK_INTR
b23

Socket Interrupt Request Register
b20

b19

SCKINTR[23:16]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b14

b13

b10

b9

b8

SCK_INTR
b15

Socket Interrupt Request Register
b12

b11

SCKINTR[15:8]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b6

b5

b2

b1

b0

SCK_INTR
b7

Socket Interrupt Request Register
b4

b3

SCKINTR[7:0]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

continued on next page

636

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.1

SCK_INTR (continued)

The SCK_INTR registers contain the interrupt request bits for each socket in the respective IP, which is the logical OR of all
interrupt request bits in each socket. This register is read-only – interrupt bits are cleared by clearing the interrupt cause or bit
in the socket itself.

Bit

Name

Description

255:0

SCKINTR[255:0]

Socket  asserts interrupt when bit  is set in this vector. Multiple bits may be set to 1
simultaneously.
This register is only as wide as the number of sockets in the adapter; 256 is just the maximum width.
All other bits always return 0.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

637

10.26.2

ADAPTER_STATUS
Adapter Global Status Register

ADAPTER_STATUS

Adapter Global Status Fields

b31

b30

b29

b22

b21

ADAPTER_STATUS

b28

b27

0xFC
b26

b25

b24

b18

b17

b16

Adapter Global Status Fields

b23

b20

b19

WORD_SIZE[1:0]

FQ_SIZE[5:0]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

b14

b13

b10

b9

b8

ADAPTER_STATUS

Adapter Global Status Fields

b15

b12

b11

IG_ONLY[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

b6

b5

b2

b1

b0

ADAPTER_STATUS

Adapter Global Status Fields

b7

b4

b3

TTL_SOCKETS[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

H

H

H

H

H

H

H

H

Bit

Name

Description

23:22

WORD_SIZE[1:0]

Internal word size of the prefetch queue (FQ); not the same as bus width of AHB bus or thread interface to the IP.
0
32b
1
64b
2
128b
3
256b

21:16

FQ_SIZE[5:0]

Number of words in a socket fetch queue (FQ). The total buffer space in the adapter is
EG_SOCKETS*FQ_SIZE words of size WORD_SIZE.

15:8

IG_ONLY[7:0]

First socket number that is ingress only.
0..IG_ONLY-1: Sockets capable of both in and egress
IG_ONLY..TTL_SOCKETS-1: Ingress sockets only

7:0

TTL_SOCKETS[7:0]

Total number of sockets in this adapter. This number is different for each instance of the adapter and
varies with the core IP needs.

638

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.3

SIB_ID
Storage Interface Block ID Register
SIB_ID
Storage Interface Block ID register
0xE0027F00

b31

b30

b29

b28

b27

b26

b25

b24

BLOCK_VERSION[15:8]
R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

1

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

R

0

0

0

0

0

0

1

0

BLOCK_VERSION[7:0]

BLOCK_ID[15:8]

BLOCK_ID[7:0]

Bit

Name

Description

16:31

BLOCK_VERSION

Version number for the SIB block IP. Set to 0x0001.

0:15

BLOCK_ID

Block ID for the SIB IP. Set to 0x0002.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

639

10.26.4

SIB_POWER
Power Control Register for Storage Interface Block

A single block controls both storage ports (S0 and S1) on the FX3S device. The clock for at least one of the storage port
needs to be enabled before the block is powered on.
SIB_POWER
SIB Power Control
0xE0027F04
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

RESETN
R
R/W
0

b0
ACTIVE
W
R
0

Bit

Name

Description

31

RESETN

Active LOW reset signal for all logic in the block.
After setting this bit to 1, firmware will poll and wait for the 'active' bit to assert.

0

ACTIVE

Indicates whether the block is powered up and active.

640

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.5

SDMMC_CMD_IDX
SDMMC Command Index Register

The cmd field specifies the command-index that is to be included in the command sent. When the command is sent, HW send
out start and transmission-bit followed by (SDMMC_CMD_FMT.CMDFRMT + 1 bits), 7-bit CRC, and end bit. The
(SDMMC_CMD_FMT.CMDFRMT + 1) bits include as many bits as necessary in the following order: command index (6 bits),
argument (starting from bit 31 of SDMMC_CMD_ARG0), SDMMC_CMD_ARG1.
There are two copies of this register corresponding to the two storage ports. The address of each register is calculated as
0xe0020000 + (port * 0x0400).
SDMMC_CMD_IDX
SDMMC Command Index
0xE0020000
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0

0

0

0

CMD[5:0]
R
R/W
0

0

Bit

Name

Description

5:0

CMD

6-bit command index.

0

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

641

10.26.6

SDMMC_CMD_ARG0
SDMMCC Command Argument Register

The SDMMC_CMD_ARG0 register holds the lower 32 bits of the SD/MMC/SDIO command argument. Any additional argument bits for expanded command may be placed in the SDMMC_CMD_ARG1 register. There are two copies of this register
corresponding to the two storage ports. The address of each register is calculated as 0xe0020004 + (port * 0x0400).
SDMMC_CMD_ARG0
SDMMC Command Argument 0
0xE0020004
b31

b30

b29

b28

b27

b26

b25

b24

ARG[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

ARG[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

ARG[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

ARG[7:0]

Bit

Name

Description

31:0

ARG

Lower 32 bits of the command argument.

642

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.7

SDMMC_CMD_ARG1
SDMMCC Command Argument Register

The SDMMC_CMD_ARG1 register holds the upper 32 bits of the SD/MMC/SDIO command argument, if the argument is longer than 32 bits. There are two copies of this register corresponding to the two storage ports. The address of each register is
calculated as 0xe0020008 + (port * 0x0400).
SDMMC_CMD_ARG1
SDMMC Command Argument 1
0xE0020008
b31

b30

b29

b28

b27

b26

b25

b24

ARG[63:56]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

ARG[55:48]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

ARG[47:40]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

ARG[39:32]

Bit

Name

Description

31:0

ARG

Upper 32 bits of the command argument.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

643

10.26.8

SDMMC_RESP_IDX
SDMMC Response Index Register

The first eight bits of the response is captured in the RESP_IDX register. These eight bits include start, transmission, and
command index fields. There are two copies of this register corresponding to the two storage ports. The address of each register is calculated as 0xe002000C + (port * 0x0400).
SDMMC_RESP_IDX
SDMMC Response Index
0xE002000C
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

b5

b4

b3

b2

b1

b0

b7

b6

ST_BIT

TR_BIT

W

W

W

W

W

W

W

W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

CMD[5:0]

Bit

Name

Description

7

ST_BIT

Start-bit: As received in response.

6

TR_BIT

Transmission bit: As received in response.

5:0

CMD

Command index. As received in response

644

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.9

SDMMC_RESP_REG0
SDMMC Response Register0

Response data received from the card on the response pin. The response from bit 8 is placed in this register starting at the
MSB of the register. There are two copies of this register corresponding to the two storage ports. The address of each register
is calculated as 0xe0020010 + (port * 0x0400).
SDMMC_RESP_REG0
SDMMC Command Response 0
0xE0020010
b31

b30

b29

b28

b27

b26

b25

b24

RESP[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

RESP[7:0]

Bit

Name

Description

31:0

RESP

Bits 8 to 39 of the command response from MSB to LSB.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

645

10.26.10 SDMMC_RESP_REG1
SDMMC Response Register1
Response data received from the card on the response pin. The response from bit 40 is placed in this register starting at the
MSB of the register. There are two copies of this register corresponding to the two storage ports. The address of each register
is calculated as 0xe0020014 + (port * 0x0400).
SDMMC_RESP_REG1
SDMMC Command Response 1
0xE0020014
b31

b30

b29

b28

b27

b26

b25

b24

RESP[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

RESP[7:0]

Bit

Name

Description

31:0

RESP

Bits 40 to 71 of the command response from MSB to LSB.

646

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.11 SDMMC_RESP_REG2
SDMMC Response Register2
Response data received from the card on the response pin. The response from bit 72 is placed in this register starting at the
MSB of the register. There are two copies of this register corresponding to the two storage ports. The address of each register
is calculated as 0xe0020018 + (port * 0x0400).
SDMMC_RESP_REG2
SDMMC Command Response 2
0xE0020018
b31

b30

b29

b28

b27

b26

b25

b24

RESP[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

RESP[7:0]

Bit

Name

Description

31:0

RESP

Bits 72 to 103 of the command response from MSB to LSB.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

647

10.26.12 SDMMC_RESP_REG3
SDMMC Response Register3
Response data received from the card on the response pin. The response from bit 104 is placed in this register starting at the
MSB of the register. There are two copies of this register corresponding to the two storage ports. The address of each register
is calculated as 0xe002001C + (port * 0x0400).
SDMMC_RESP_REG3
SDMMC Command Response 3
0xE002001C
b31

b30

b29

b28

b27

b26

b25

b24

RESP[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

RESP[7:0]

Bit

Name

Description

31:0

RESP

Bits 104 to 135 of the command response from MSB to LSB.

648

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.13 SDMMC_RESP_REG4
SDMMC Response Register4
Response data received from the card on the response pin. The response from bit 136 is placed in this register starting at the
MSB of the register. There are two copies of this register corresponding to the two storage ports. The address of each register
is calculated as 0xe0020020 + (port * 0x0400).
SDMMC_RESP_REG4
SDMMC Command Response 4
0xE0020020
b31

b30

b29

b28

b27

b26

b25

b24

RESP[31:24]
R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

RESP[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

W

W

W

W

W

W

W

W

0

0

0

0

0

0

0

0

RESP[7:0]

Bit

Name

Description

31:0

RESP

Bits 136 to 167 of the command response from MSB to LSB.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

649

10.26.14 SDMMC_CMD_RESP_FMT
SD/MMC Command Response Format
Configuration register that specifies the length and format of the command and response. There are two copies of this register corresponding to the two storage ports. The address of each register is calculated as 0xe0020024 + (port * 0x0400).
SDMMC_CMD_RESP_FMT
SDMMC Command Response Format
0xE0020024
b31

b30

RESPCRC_STAR
T

CORCRC_ODD

b29

b28

b27

b26

R_CRC_EN

CORCRC

b25

b24

RESPCONF[10:8]

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

RESPCONF[7:0]

0

1

1

1

1

1

1

0

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0

CMDFRMT[5:0]
R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

1

0

0

1

0

1

Bit

Name

Description

31

RESPCRC_START

0: Compute response CRC from bit 0.
1: Compute response CRC from bit 8.
Option 1 is used for R2 response.

30

CORCRC_ODD

0: corrupt CRC16 for even bytes.
1: corrupt CRC16 for odd bytes.
This bit is effective only during DDR mode of operation.

28

R_CRC_EN

1: Enable CRC check in response.
0: Don't check CRC in response.

27

CORCRC

Enable CRC error injection on outgoing data CRC16 field.

26:16

RESPCONF

Response length in bits that does not include start, transmit, CRC7, and end bits.
0 indicates that no response is expected.
Non-zero values indicate the size in bits

5:0

CMDFRMT

Command length minus 1, in bits, that includes command index bits and argument bits. This length
does not include start, transmit, CRC7 and end bits.

650

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.15 SDMMC_BLOCK_COUNT
SDMMC Block Count Register
This register holds the number of data blocks that should be completed during the ongoing SD/MMC command transfer.
There are two copies of this register corresponding to the two storage ports. The address of each register is calculated as
0xe0020028 + (port * 0x0400).
SDMMC_BLOCK_COUNT
SDMMC Block Count
0xE0020028
b31

b30

b29

b28

b27

b26

b25

b24

NOBD[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

NOBD[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

NOBD[15:8]

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

1

NOBD[7:0]

Bit

Name

Description

31:0

NOBD

Number of data blocks to be transferred.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

651

10.26.16 SDMMC_BLOCK_LEN
SDMMC Block Length Register
This register holds the block length for transfer. The CRC is computed on this block length. It is expected that the block length
used in SET_BLOCKLEN command matches this block length. There are two copies of this register corresponding to the two
storage ports. The address of each register is calculated as 0xe002002C + (port * 0x0400).
SDMMC_BLOCK_LEN
SDMMC Block Length
0xE002002C
b31

b30

b29

b28

b27

b26

b25

b24

DATABLKS[31:24]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

DATABLKS[23:16]

0

0

0

0

0

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

DATABLKS[15:8]

0

0

0

0

0

0

1

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

DATABLKS[7:0]

Bit

Name

Description

31:0

DATABLKS

Data block size in bytes. LSB is ignored for DDR mode of operation, because block length needs to
be even.

652

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.17 SDMMC_MODE_CFG
SD/MMC Mode Configuration Register
Configures clock, signaling, and so on for each of the storage ports. There are two copies of this register corresponding to the
two storage ports. The address of each register is calculated as 0xe0020030 + (port * 0x0400).
SDMMC_MODE_CFG
SDMMC Mode Configuration
0xE0020030
b31

b30

b29

b28

IDLE_STOP_CLK_EN

b27

b26

b25

b24

IDLE_STOP_CLK_DELAY[6:0]

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

1

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

EXP_BOOT_ACK

BLK_END_STOP
_CLK

RD_END_STOP_ CARD_DETECT_
CLK_EN
POLARITY

WR_STOP_CLK_
EN

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

0

0

b15

b14

b13

RD_STOP_CLK_EN

EN_CMD_COMP

R

R

R

R

R/W

R/W

R/W

R/W

b12

0

0

b11

b10

b9

R

R

R

R

R/W

R/W

R/W

R/W

DATABUSWIDTH[1:0]

0

MODE[1:0]

b8

SIGNALING[3:2]

0

0

0

0

0

1

0

0

b7

b6

b5

b4

b3

b2

b1

b0

SIGNALING[1:0]

DLL_BYPASS_EN

R

R

R

R/W

R/W

R/W

0

0

1

Bit

Name

Description

31

IDLE_STOP_CLK_EN

0: Do not stop clock automatically after each command.
1: Stop clock automatically IDLE_STOP_CLK_DELAY cycles after each command.
Clock is not stopped if the card indicates busy and stopped when the card gets out of busy.

30:24

IDLE_STOP_CLK_DELAY Number of clock cycles delay after the completion of the last command after which the clock will be
stopped. This value may be changed only when IDLE_STOP_CLK_EN is 0.

22

EXP_BOOT_ACK

1: Boot acknowledgement is expected when booting from eMMC.
0: Boot acknowledgement is not expected.

21

BLK_END_STOP_CLK

0: SDMMC interface clock can be stopped at any time when data overflow/underflow is detected.
1: SDMMC interface clock can be stopped only at the end of data block transfer. Clock is not stopped
in the middle of a block data transfer.
It is recommended that this bit should be set to 1.

continued on next page

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

653

10.26.17 SDMMC_MODE_CFG (Continued)
19

RD_END_STOP_CLK_EN 0: Do not Stop SD/MMC interface clock at the end of a read data transfer.
1: Stop interface clock at the end of read data transfer.

18

CARD_DETECT_POLARITY0: CardDetect GPIO is active LOW.
1: CardDetect GPIO is active HIGH.
This value is used by hardware to reflect the S0S1_INS status in the SDMMC_STATUS.card_detect
register bit.

16

WR_STOP_CLK_EN

This enables SIB to perform detection of underflow and stop the clock to the SD/SDIO/MMC card during data transfer.
1: Enable stop clock.
0: Disable stop clock.

15

RD_STOP_CLK_EN

This enables SIB to perform detection of overflow and stop the clock to the SD/SDIO/MMC card during data transfer:
1: Enable stop clock.
0: Disable stop clock.
This bit should always be set during read operations to prevent loss of data.

14

EN_CMD_COMP

Enable command completion feature for CE-ATA interface.
0: Don't detect command completion event.
1: Detect command completion event.
When EN_CMD_COMP is enabled, RD_END_STOP_CLK should not be enabled because card
requires a clock edge to provide command completion signal.

13:12

DATABUSWIDTH

SIB data bus width:
00: 1-bit
01: 4-bit
10: 8-bit
11: Reserved

11:10

MODE

SIB interface mode:
00: Reserved
01: MMC (or CE-ATA)
10: SD
11: Reserved

9:6

SIGNALING

SD/MMC data signaling parameters:
0000: DS - Default-Speed (0 - 20 MHz for MMC; 0 - 25 MHz for SD)
0001: HS - High-Speed (0 - 52 MHz for MMC; 0 - 50 MHz for SD)
0010: SDR12: SD SDR 25 MHz @1.8 V
0011: SDR25: SD SDR 50 MHz @1.8 V
0100: SDR50_FD: SD SDR 100 MHz @ 1.8 V
0101 - 0111: Reserved
1000: DDR52_V33_MMC
1001: DDR52_V18_MMC
1010: Reserved
1011: DDR50_V18_SD: As defined in SD3.0
1100 - 1111: Reserved

5

DLL_BYPASS_EN

Setting this bit causes the SIB internal clock to be driven out on the pad bypassing the DLL. It is recommended that this bit should always be set to 1.

654

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.18 SDMMC_DATA_CFG
SDMMC Data Configuration Register
Holds configuration parameters that affect SD/MMC data transfers. There are two copies of this register corresponding to the
two storage ports. The address of each register is calculated as 0xe0020034 + (port * 0x0400).
SDMMC_DATA_CFG
SDMMC Data Configuration
0xE0020034
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0

EXPCRCR

CARD_BUSY_DE
T

RD_CRC_EN

EXPBUSY
R

R

R

R

R/W

R/W

R/W

R/W

1

1

0

1

Bit

Name

Description

3

EXPBUSY

1: Expect BUSY state after each block of write data.
0: Do not expect BUSY after each block of write data.

2

EXPCRCR

1: Expect and check CRC response status after block of write data.
0: Do not expect CRC response after a block of write data.

1

CARD_BUSY_DET

1: Enable the SIB state machine to wait for busy before sending first block of data.
0: SIB state machine pushes 1st block of data without checking busy status.

0

RD_CRC_EN

1: Check CRC16 on incoming blocks of data.
0: Ignore CRC16 checking on incoming data.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

655

10.26.19 SDMMC_CS
Card Command and Status Register
This register is used to initiate SD/MMC/SDIO commands and data transfers. There are two copies of this register corresponding to the two storage ports. The address of each register is calculated as 0xe0020038 + (port * 0x0400).
SDMMC_CS
SDMMC Command and Status
0xE0020038
b31

b30

b29

b28

b27

EOP_EOT

b26

b25

b24

SOCKET[4:0]

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

CLR_BOOTCMD

CLR_RDDCARD

CLR_WRDCARD

CLR_SNDCMD

SDIO_READ_WAI SDMMC_CLK_DI
T_EN
S
R

R

R/W0C

R/W0C

R/W0C

R/W0C

R/W

R/W

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

b7

b6

b5

b3

b2

b1

b0

CMDCOMP_DIS

BOOTCMD

RSTCONT

RDDCARD

WRDCARD

SNDCMD

R/W0C

R/W0C

R/W0C

R/W0C

R/W0C

R/W0C

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

0

0

0

0

0

0

b4

Bit

Name

Description

31

EOP_EOT

Configure end-of-packet signaling to DMA adapter.
0: Set EOP in the descriptor with last byte of last block during read.
1: Set EOP in the descriptor with last byte of every block.

28:24

SOCKET

SIB socket number to be used for data read/write operation. Should be in the range 0–7.

15

SDIO_READ_WAIT_EN

Enable Read Wait to SDIO device on DAT[2].

14

SDMMC_CLK_DIS

Manual enable/disable for the SIB interface clock to enable power saving.
1: Clock is disabled
0: Clock is enabled

11

CLR_BOOTCMD

FW writes ‘1’ to clear the BOOTCMD bit and abort boot operation.
HW writes ‘0’ after the BOOTCMD bit is cleared.

10

CLR_RDDCARD

FW writes ‘1’ to clear the RDDCARD bit so that the next command can be issued.
This bit is cleared by HW when RDDCARD is cleared.

continued on next page

656

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.19

SDMMC_CS

9

CLR_WRDCARD

FW writes ‘1’ to clear the WRDCARD bit so that the next command can be issued.
This bit is cleared by HW when WRDCARD is cleared.

8

CLR_SNDCMD

FW writes ‘1’ to clear the SNDCMD bit so that the next command can be issued.
This bit is cleared by HW when SNDCMD is cleared.

7

CMDCOMP_DIS

FW writes ‘1’ to send a Command Completion Disable signal to the CE-ATA device.
HW clears this bit after signal is sent.

6

BOOTCMD

FW writes ‘1’ to initiate a CMD_LINE_LOW boot or alternate boot command. For alternate boot, the
command should be sent by FW.
HW writes ‘0’ when NOBD blocks are transferred or when FW aborts the boot by writing ‘1’ to the
CLR_BOOTCMD bit.

5

RSTCONT

RSTCONT is used for error recovery.
FW writes ‘1’ to bring SIB state machines to a known state.
HW writes ‘0’ when the reset is completed.
Values of CFG registers are not affected by RSTCONT and only internal queues are flushed. If a
complete reset of SIB controller is required, then SIB_POWER.RESETN should be used.

2

RDDCARD

FW writes ‘1’ to initiate data read from SD/MMC/SDIO peripheral.
HW writes ‘0’ when the transfer is completed.

1

WRDCARD

0

SNDCMD

FW may clear this bit by writing 1 to the CLR_RDDCARD bit.
FW writes ‘1’ to initiate data write to SD/MMC/SDIO peripheral.
HW writes ‘0’ when the transfer is completed.
FW may clear this bit by writing 1 to the CLR_WRDCARD bit.
FW writes ‘1’ to initiate sending of command.
HW writes ‘0’ when command is sent and the response, if any, is received.
FW may clear this bit on response timeout by writing 1 to CLR_SNDCMD bit.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

657

10.26.20 SDMMC_STATUS
SDMMC Status Register
Reflects the current status of the SIB state machines. There are two copies of this register corresponding to the two storage
ports. The address of each register is calculated as 0xe002003C + (port * 0x0400).
SDMMC_STATUS
SDMMC Status
0xE002003C
b31

b30

b29

b28

b27

COMMAND_SM_
DATA_SM_BUSY
BUSY

CRC16_EVEN_ER CRC16_ODD_ER
ROR
ROR

b26

b25

b24

CRCFC[2:0]

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

0

0

0

0

0

0

0

b23

b22

b20

b19

b18

b17

b16

RD_END_DATA_
ERROR

DAT0_STAT

DLL_LOCKED

R/W

R/W

R/W

R

R

R

0

0

0

b21

b15

b14

b13

b12

b11

b10

b9

b8

DLL_LOST_LOC
K

BOOT_ACK

CMD_COMP

FIFO_U_DET

FIFO_O_DET

DAT3_STAT

CARD_DETECT

SDIO_INTR

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

1

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

BLOCK_COMP

CRC7_ERROR

RESPTIMEOUT

RCVDRES

CMDSENT

CRC16_ERROR

RD_DATA_TIMEO BLOCKS_RECEIV
UT
ED

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R

R

R

R

R

R

R

R

0

0

0

0

0

0

0

0

Bit

Name

Description

31

CRC16_EVEN_ERROR

Indicates that CRC error was encountered on even bytes of data transfer. This bit may be interpreted
in DDR mode data transfer only.
This bit will be cleared when CRC16_ERROR is cleared.

30

CRC16_ODD_ERROR

Indicates that CRC error was encountered on odd bytes of data transfer. This bit may be interpreted
in DDR mode data transfer only.
This bit will be cleared when CRC16_ERROR is cleared.

28

DATA_SM_BUSY

1: Data state machine is busy.
0: Data state machine is idle.

27

COMMAND_SM_BUSY

1: Command state machine is busy.
0: Command state machine is idle.

26:24

CRCFC

3-bit CRC response received from the card following a data write.

continued in next page

658

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.20

SDMMC_STATUS

18

RD_END_DATA_ERROR

This error is flagged when command, response or NRC counting is in progress when the last byte of
the last block of read-data is read while RD_END_CLK_STOP is enabled. This condition causes data
from card to be read out of card and dropped. FW should re-issue read command to card to restart
read command.
This bit is cleared when SDMMC_CS.RDDCARD is set by FW.

17

DAT0_STAT

Reflects the current status of the SD_DAT[0] pin.

16

DLL_LOCKED

Reflects the current lock status of the SIB DLL.
1: DLL is locked.
0: DLL Is not locked.

15

DLL_LOST_LOCK

Reflects the current lock status of the SIB DLL.
1: DLL is not locked.
0: DLL Is locked.

14

BOOT_ACK

HW sets this bit to ‘1’ when a MMC boot acknowledgement is detected.
This bit is cleared when FW clears the SDMMC_MODE_CFG.EXP_BOOT_ACK bit.

13

CMD_COMP

HW sets this bit to ‘1’ when Command Completion signaling from a CE-ATA peripheral is detected.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.SNDCMD again.

12

FIFO_U_DET

HW sets this bit to ‘1’ if a FIFO underflow is detected during a write operation.
The bit is cleared when FW writes ‘1’ to SDMMC_CS.WRDCARD again.

11

FIFO_O_DET

HW sets this bit to ‘1’ if a FIFO overflow is detected during a read operation.
The bit is cleared when FW writes ‘1’ to SDMMC_CS.RDDCARD again.

10

DAT3_STAT

Reflects the state of the SD_DAT[3] pin.

9

CARD_DETECT

Reflects the state of the S0S1_INS pin.
0: No card inserted (GPIO is inactive).
1: Card is inserted (GPIO is active).

8

SDIO_INTR

HW sets this bit to ‘1’ when it detects an SDIO interrupt condition. This bit will represent the latest
result of the interrupt sampling.

7

CRC16_ERROR

HW sets this bit to ‘1’ if a CRC error is detected during a read or write data operation.
This bit is cleared when FW writes ‘1’ to SDMMC_CS.RDDCARD or WRDCARD again.

6

RD_DATA_TIMEOUT

HW sets this bit to ‘1’ if a read data operation times out.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.RDDCARD again.

5

BLOCKS_RECEIVED

HW sets this bit to ‘1’ when the read of NOBD blocks of data is completed.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.RDDCARD again.

4

BLOCK_COMP

HW sets this bit to ‘1’ when the write of NOBD blocks of data is completed.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.WRDCARD again.

3

CRC7_ERROR

HW sets this bit to ‘1’ if a CRC error is detected in the response received.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.SNDCMD again.

2

RESPTIMEOUT

HW sets this bit to ‘1’ if no response was received within the timeout period.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.SNDCMD again.

1

RCVDRES

HW sets this bit to ‘1’ when the command response is received.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.SNDCMD again.

0

CMDSENT

HW sets this bit to ‘1’ when a command is sent.
This bit is cleared when the FW writes ‘1’ to SDMMC_CS.SNDCMD again.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

659

10.26.21 SDMMC_INTR
SDMMC Interrupt Status Register
These bits display interrupt requests. These bits are set to ‘1’ whenever a bit in SDMMC_STATUS changes from 0 to 1. There
are two copies of this register corresponding to the two storage ports. The address of each register is calculated as
0xe0020040 + (port * 0x0400).
SDMMC_INTR
SDMMC Interrupt Status
0xE0020040
b31

b30

b29

b28

b27

b23

b22

b21

b20

b19

b26

b25

b24

b18

b17

b16

RD_END_DATA_E DAT0_OUTOF_BU
RROR
SY

DLL_LOCKED

R/W1S

R/W1S

R/W1S

R/W1C

R/W1C

R/W1C

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

DLL_LOST_LOC
K

BOOT_ACK

CMD_COMP

FIFO_U_DET

FIFO_O_DET

DAT3_CHANGE

CARD_DETECT

SDIO_INTR

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

0

0

0

0

0

0

0

0

b7

b6

b5

b4

b3

b2

b1

b0

BLOCK_COMP

CRC7_ERROR

RESPTIMEOUT

RCVDRES

CMDSENT

CRC16_ERROR

RD_DATA_TIMEO BLOCKS_RECEIV
UT
ED

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1S

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

R/W1C

0

0

0

0

0

0

0

0

Bit

Name

Description

18

RD_END_DATA_ERROR

HW writes 1 to indicate that the RD_END_DATA error interrupt is active.
FW writes 1 to this bit to clear the interrupt.

17

DAT0_OUTOF_BUSY

HW writes 1 to indicate that the DAT0 pin state has changed from 0 to 1.
FW writes 1 to clear the interrupt.

16

DLL_LOCKED

HW writes 1 to indicate that the DLL lock is achieved.
FW writes 1 to clear the interrupt.

15

DLL_LOST_LOCK

HW writes 1 to indicate that the DLL lock is lost.
FW writes 1 to clear the interrupt.

14

BOOT_ACK

HW writes 1 to indicate that a BOOT acknowledgement is received.
FW writes 1 to clear the interrupt.

continued on next page

660

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.21 SDMMC_INTR
13

CMD_COMP

HW writes 1 to indicate that Command Completion signaling from a CE-ATA peripheral is detected.
FW writes 1 to clear the interrupt.

12

FIFO_U_DET

HW writes 1 to indicate a FIFO underflow is detected.
FW writes 1 to clear the interrupt.

11

FIFO_O_DET

HW writes 1 to indicate a FIFO overflow is detected.
FW writes 1 to clear the interrupt.

10

DAT3_CHANGE

HW writes 1 to indicate that the SD_DAT[3] pin state has changed.
FW writes 1 to clear the interrupt.

9

CARD_DETECT

HW writes 1 to indicate that the S0S1_INS pin state has changed.
FW writes 1 to clear the interrupt.

8

SDIO_INTR

HW writes 1 to indicate that an SDIO interrupt is detected.
FW writes 1 to clear the interrupt.

7

CRC16_ERROR

HW writes 1 to indicate that a data CRC error is detected.
FW writes 1 to clear the interrupt.

6

RD_DATA_TIMEOUT

HW writes 1 to indicate that a read operation has timed out.
FW writes 1 to clear the interrupt.

5

BLOCKS_RECEIVED

HW writes 1 to indicate that a read operation is completed.
FW writes 1 to clear the interrupt.

4

BLOCK_COMP

HW writes 1 to indicate that a write operation is completed.
FW writes 1 to clear the interrupt.

3

CRC7_ERROR

HW writes 1 to indicate that a response CRC error is detected.
FW writes 1 to clear the interrupt.

2

RESPTIMEOUT

HW writes 1 to indicate that a response timeout occurred.
FW writes 1 to clear the interrupt.

1

RCVDRES

HW writes 1 to indicate that a command response is received.
FW writes 1 to clear the interrupt.

0

CMDSENT

HW writes 1 to indicate that a command is sent to the target device.
FW writes 1 to clear the interrupt.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

661

10.26.22 SDMMC_INTR_MASK
SDMMC Interrupt Mask Register
These bits correspond to the interrupt status bits in the SDMMC_INTR register and control whether the interrupt status should
trigger an interrupt to the CPU. There are two copies of this register corresponding to the two storage ports. The address of
each register is calculated as 0xe0020044 + (port * 0x0400).
SDMMC_INTR_MASK
SDMMC Interrupt Mask
0xE0020044
b31

b30

b29

b28

b27

b23

b22

b21

b20

b19

b26

b25

b24

b18

b17

b16

RD_END_DATA_ DAT0_OUTOF_B
ERROR
USY

DLL_LOCKED

R

R

R

R/W

R/W

R/W

0

0

0

b15

b14

b13

b12

b11

b10

b9

b8

DLL_LOST_LOC
K

BOOT_ACK

CMD_COMP

FIFO_U_DET

FIFO_O_DET

DAT3_CHANGE

CARD_DETECT

SDIO_INTR

R

R

R

R

R

R

R

R

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

BLOCK_COMP

CRC7_ERROR

RESPTIMEOUT

RCVDRES

CMDSENT

CRC16_ERROR

RD_DATA_TIMEO BLOCKS_RECEIV
UT
ED

R

R

R

R

R

R

R

R

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

18

RD_END_DATA_ERROR

1: Enable interrupt due to RD_END data error.
0: Disable interrupt due to RD_END data error.

17

DAT0_OUTOF_BUSY

1: Enable interrupt due to DAT0 state change.
0: Disable interrupt due to DAT0 state change.

16

DLL_LOCKED

1: Enable interrupt due to DLL lock completion.
0: Disable interrupt due to DLL lock completion.

15

DLL_LOST_LOCK

1: Enable interrupt due to DLL lock loss.
0: Disable interrupt due to DLL lock loss.

14

BOOT_ACK

1: Enable interrupt due to BOOT acknowledgement.
0: Disable interrupt due to BOOT acknowledgement.

continued on next page

662

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.22 SDMMC_INTR_MASK (continued)
13

CMD_COMP

1: Enable interrupt due to CE-ATA command completion.
0: Disable interrupt due to CE-ATA command completion.

12

FIFO_U_DET

1: Enable interrupt due to FIFO underflow.
0: Disable interrupt due to FIFO underflow.

11

FIFO_O_DET

1: Enable interrupt due to FIFO overflow.
0: Disable interrupt due to FIFO overflow.

10

DAT3_CHANGE

1: Enable interrupt due to DAT3 state change.
0: Disable interrupt due to DAT3 state change.

9

CARD_DETECT

1: Enable interrupt due to S0S1_INS change.
0: Disable interrupt due to S0S1_INS change.

8

SDIO_INTR

1: Enable interrupt due to SDIO interrupt.
0: Disable interrupt due to SDIO interrupt.

7

CRC16_ERROR

1: Enable interrupt due to data CRC error.
0: Disable interrupt due to data CRC error.

6

RD_DATA_TIMEOUT

1: Enable interrupt due to read timeout.
0: Disable interrupt due to read timeout.

5

BLOCKS_RECEIVED

1: Enable interrupt due to read completion.
0: Disable interrupt due to read completion.

4

BLOCK_COMP

1: Enable interrupt due to write completion.
0: Disable interrupt due to write completion.

3

CRC7_ERROR

1: Enable interrupt due to response CRC error.
0: Disable interrupt due to response CRC error.

2

RESPTIMEOUT

1: Enable interrupt due to response timeout.
0: Disable interrupt due to response timeout.

1

RCVDRES

1: Enable interrupt due to response reception.
0: Disable interrupt due to response reception.

0

CMDSENT

1: Enable interrupt due to command transmission.
0: Disable interrupt due to command transmission.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

663

10.26.23 SDMMC_NCR
SDMMC Command Response Timing Register #1
This register controls timing between command and response. There are two copies of this register corresponding to the two
storage ports. The address of each register is calculated as 0xe0020048 + (port * 0x0400).
SDMMC_NCR
SDMMC Command Response Timing Register #1
0xE0020048
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

NRC_MIN[7:0]
R

R

R

R

R

R

R

R

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

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

1

0

0

0

1

1

1

NCR_MAX[6:0]

Bit

Name

Description

15:8

NRC_MIN

Specifies the minimum separation in clock cycles between the end bit of a response and the start bit
of the next command.

6:0

NCR_MAX

Specifies the timeout period for which the SIB will wait to receive a response, in terms of number of
cycles from end bit of command.

664

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.24 SDMMC_NCC_NWR
SDMMC Command Response Timing Register #2
This register controls the timing between multiple commands. There are two copies of this register corresponding to the two
storage ports. The address of each register is calculated as 0xe002004C + (port * 0x0400).
SDMMC_NCC_NWR
SDMMC Command Response Timing Register #2
0xE002004C
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

NWR_MIN[7:0]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

1

0

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R/W

R/W

R/W

R/W

1

0

0

0

NCC_MIN[3:0]

Bit

Name

Description

15:8

NWR_MIN

Specifies the minimum number of clock cycles between end bit of response and start bit of write data.

3:0

NCC_MIN

Specifies the minimum number of clock cycles between consecutive commands.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

665

10.26.25 SDMMC_NAC
SDMMC Read Timeout Register
This register controls the timeout period for data read operations. There are two copies of this register corresponding to the
two storage ports. The address of each register is calculated as 0xe0020050 + (port * 0x0400).
SDMMC_NAC
SDMMC Read Timeout Register
0xE0020050
b31

b30

b29

b28

b27

b26

b25

b24

RDTMOUT[29:22]
R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

0

b23

b22

b21

b20

b19

b18

b17

b16

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

RDTMOUT[21:14]

0

0

0

0

1

1

1

1

b15

b14

b13

b12

b11

b10

b9

b8

R

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

RDTMOUT[13:6]

1

1

1

1

1

1

1

1

b7

b6

b5

b4

b3

b2

b1

b0

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

1

1

1

1

1

1

RDTMOUT[5:0]

Bit

Name

Description

31:2

RDTMOUT

Specifies the timeout duration in clock cycles to be applied to data read operations.

666

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

10.26.26 SDMMC_HW_CTRL
SDMMC Hardware Control Register
This register provides a mechanism to reset eMMC devices. There are two copies of this register corresponding to the two
storage ports. The address of each register is calculated as 0xe0020054 + (port * 0x0400).
SDMMC_HW_CTRL
SDMMC Hardware Control Register
0xE0020054
b31

b30

b29

b28

b27

b26

b25

b24

b23

b22

b21

b20

b19

b18

b17

b16

b15

b14

b13

b12

b11

b10

b9

b8

b7

b6

b5

b4

b3

b2

b1

b0
HW_RESET_EMMC
R
R/W
0

Bit

Name

Description

0

HW_RESET_EMMC

FW writes ‘1’ to assert the eMMC4.4 card HW reset using the SxMMCRST pin.
FW writes ‘0’ to de-assert reset after tRSTW (1 usec) and waits for tRSCA (200 usec) before issuing
commands.

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

667

10.26.27 SDMMC_DLL_CTRL
SDMMC DLL Control Register
This register is used to configure the SIB DLL. Note that the use of SIB DLL is not recommended; also, the DLL should be
kept disabled. There are two copies of this register corresponding to the two storage ports. The address of each register is
calculated as 0xe0020058 + (port * 0x0400).
SDMMC_DLL_CTRL
SDMMC DLL Control
0xE0020058
b31

b30

b29

b28

b27

b23

b22

b21

b20

b19

b26

b25

b24

b18

b17

b16

b9

b8

DLL_RESET_N
R
R/W
0
b15

b14

b13

b12

b11

b10

PIN_CLOCK_PHASE_SEL[3:0]

b7

SAMPLE_CMD_PHASE_SEL[3:1]

R

R

R

R

R

R

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

0

0

0

0

0

0

0

b6

b5

b4

b3

b2

b1

b0

DLL_STAT

HIGH_FREQ

ENABLE

SAMPLE_CMD_P
HASE_SEL[0]

SAMPLE_DATA_PHASE_SEL[3:0]

R

R

R

R

R

R/W

R

R

R/W

R/W

R/W

R/W

R/W

R

R/W

R/W

0

0

0

0

0

0

0

0

Bit

Name

Description

18

DLL_RESET_N

1: Bring DLL out of reset
0: Keep DLL in reset.

14:11

PIN_CLOCK_PHASE_SEL

Select clock phase (0–15) to be driven out on the SD_CLK pin.

10:7

SAMPLE_CMD_PHASE_SEL

Select clock phase (0–15) used to sample the SD_CMD pin to look for response.

6:3

SAMPLE_DATA_PHASE_SEL

Select clock phase (0–15) used to sample the SD_DAT[] pins to get read data.

2

DLL_STAT

Reflects DLL lock status.
1: DLL is locked.
0: DLL is not locked.

1

HIGH_FREQ

Select high frequency mode of DLL operation.
0: Use when clock frequency is less than 70 MHz.
1: Use when clock frequency is greater than 70 MHz.

0

ENABLE

1: Enable the SIB DLL
0: Disable the SIB DLL

668

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

Revision History

Revision History
Document Title: EZ-USB® FX3™ Technical Reference Manual
Document Number: 001-76074
Revision

ECN#

Issue Date

Origin of
Change

Description of Change

**

3819447

11/22/2012

DBIR

Register descriptions - Initial release.

*A

4007727

05/22/2013

OSG

Content restructure and rewrite.

*B

4515890

09/26/2014

RSKV

Content restructure and rewrite.

*C

4595112

12/12/2014

GAYA

Updated Figure 5-10

*D

5293633

06/02/2016

RSKV

Updated the template.

*E

5757258

05/31/2017

SHEA

Updated logo and copyright

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E

669

Revision History

670

EZ-USB FX3 Technical Reference Manual., Spec No.: 001-76074 Rev. *E



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.5
Linearized                      : Yes
Author                          : Cypress Semiconductor
Copyright                       : Cypress Semiconductor
Create Date                     : 2017:05:31 14:14:36Z
Keywords                        : EZ-USB®, FX3™, Technical, Reference, Manual
Modify Date                     : 2017:05:31 14:14:36Z
Subject                         : EZ-USB® FX3™ Technical Reference Manual
XMP Toolkit                     : Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26
Producer                        : Acrobat Distiller 10.1.16 (Windows)
Format                          : application/pdf
Title                           : EZ-USB® FX3™ Technical Reference Manual
Creator                         : Cypress Semiconductor
Description                     : EZ-USB® FX3™ Technical Reference Manual
Creator Tool                    : FrameMaker 10.0.2
Document ID                     : uuid:3862d3f0-50a1-4b78-88b4-f6dd622a4b80
Instance ID                     : uuid:43e1c0af-25dd-4923-86e3-65f8fac9a775
Page Mode                       : UseOutlines
Page Count                      : 670
EXIF Metadata provided by EXIF.tools

Navigation menu