USBD — Universal serial bus device

The USB device (USBD) controller implements a full speed USB device function that meets 2.0 revision of the USB specification.

Figure 1. USB device block diagram
USB device block diagram

Listed here are the main features for USBD:

USB device states

The behavior of a USB device can be modelled through a state diagram.

The USB 2.0 Specification (see Chapter 9 USB Device Framework) defines a number of states for a USB device, as shown in the following figure.

Figure 2. Device state diagram
Device state diagram

The device must change state according to host-initiated traffic and USB bus states. It is up to the software to implement a state machine that matches the above definition. To detect the presence or absence of USB supply (VBUS), two events USBDETECTED and USBREMOVED can be used to implement the state machine. For more details on these events, see USB supply.

As a general rule when implementing the software, the host behavior shall never be assumed to be predictable. In particular the sequence of commands received during an enumeration. The software shall always react to the current bus conditions or commands sent by the host.

USB terminology

The USB specification defines bus states, rather than logic levels on the D+ and D- lines.

For a full speed device, the bus state where the D+ line is high and the D- line is low is defined as the J state. The bus state where D+ is low and D- high is called the K state.

An idle bus, where D+ and D- lines are only polarized through the pull-up on D+ and pull-downs on the host side, will be in J state.

Both lines low are called SE0 (single-ended 0), and both lines high SE1 (single-ended 1).

USB pins

The USBD peripheral features a number of dedicated pins.

The dedicated USB pins can be grouped in two categories, signal and power. The signal pins consist of the D+ and D- pins, which are to be connected to the USB host. They are dedicated pins, and not available as standard GPIOs. The USBD peripheral is implemented according to the USB specification revision 2.0, 5V Short Circuit Withstand ECN Requirement Change, meaning these two pins are not 5 V tolerant.

The signal pins and the pull-up will operate only while VBUS is in its valid voltage range, and USBD is enabled through the ENABLE register. For details on the USB power supply and VBUS detection, see USB supply.

For more information about the pinout, see Pin assignments.

USBD power-up sequence

The physical layer interface (PHY)/USB transceiver is powered separately from the rest of the device (VBUS pin), which has some implications on the USBD power-up sequence.

The device is not able to properly signal its presence to the USB host and handle traffic from the host, unless the PHY's power supply is enabled and stable. Turning the PHY's power supply on/off is directly linked to register ENABLE. The device provides events that help synchronizing software to the various steps during the power-up sequence.

To make sure that all resources in USBD are available and the dedicated USB voltage regulator stabilized, the following is recommended:

  • Enable USBD only after VBUS has been detected
  • Turn the USB pull-up on after the following events have occurred:
    • USBPWRRDY
    • USBEVENT, with the READY condition flagged in EVENTCAUSE

The following sequence chart illustrates a typical handling of VBUS power-up:

Figure 3. VBUS power-up sequence
VBUS power-up sequence

Upon detecting VBUS removal, it is recommended to wait for ongoing EasyDMA transfers to finish before disabling USBD (relevant ENDEPIN[n], ENDISOIN, ENDEPOUT[n], or ENDISOOUT events, see EasyDMA). The USBREMOVED event, described in USB supply, signals when the VBUS is removed. Reading the ENABLE register will return Enabled until USBD is completely disabled.

USB pull-up

The USB pull-up serves two purposes: it indicates to the host that the device is connected to the USB bus, and it indicates the device's speed capability.

When no pull-up is connected to the USB bus, the host sees both D+ and D- lines low, as they are pulled down on the host side by 15 kΩ resistors. The device is not detected by the host, putting it in a detached state even if it is physically connected to the host. In this situation, the device is not allowed to draw current from VBUS, according to USB 2.0 Specification.

When a full-speed device connects its 1.5 kΩ pull-up to D+, the host sees the corresponding line high. The device is then in the attached state. During the enumeration process, the host attempts to determine if the full-speed device also supports higher speeds and initiates communication with the device to further identify it. The USBD peripheral implemented in this device supports only full-speed operation (12 Mbps), and thus ignores the negotiation for higher speeds in accordance with USB 2.0 Specification.

Register USBPULLUP enables software to connect or disconnect the pull-up on D+. This allows the software to control when USB enumeration takes place. It also allows to emulate a physical disconnect from the USB bus, for instance when re-enumeration is required. USBPULLUP has to be enabled to allow the USBD to handle USB traffic and generate appropriate events. This forbids the use of an external pull-up.

Note that disconnecting the pull-up through register USBPULLUP while connected to a host, will result in both D+ and D- lines to be pulled low by the host's pull-down resistors. However, as mentioned above, this will also inhibit the generation of the USBRESET event. The pull-up is disabled by default after a chip reset.

The pull-up shall only get connected after USBD has been enabled through register ENABLE. The USB pull-up value is automatically changed depending on the bus activity, as specified in Resistor ECN which amends the original USB 2.0 Specification. The user does not have access to this function as it is handled in hardware.

While they should never be used in normal traffic activity, lines D+ and D- may at any time be forced into state specified in register DPDMVALUE by the task DPDMDRIVE. The DPDMNODRIVE task stops driving them, and PHY returns to normal operation.

USB reset

The USB specification defines a USB reset, which is not be confused with a chip reset. The USB reset is a normal USB bus condition, and is used as part of the enumeration sequence, it does not reset the chip.

The USB reset results from a single-ended low state (SE0) on lines D+/D- for a tUSB,DETRST amount of time. Only the host is allowed to drive a USB reset condition on the bus. The UBSD peripheral automatically interprets a SE0 longer than tUSB,DETRST as a USB reset. When the device detects a USB reset and generates a USBRESET event, the device USB stack and related parts of the application shall re-initialize themselves, and go back to the default state.

Some of the registers in the USBD peripheral get automatically reset to a known state, in particular all data endpoints are disabled and the USBADDR reset to 0.

After the device has connected to the USB bus (i.e. after VBUS is applied), the device shall not respond to any traffic from the time the pull-up is enabled until it has seen a USB reset condition. This is automatically ensured by the USBD.

After a USB reset, the device shall be fully responsive after at most TRSTRCY (according to chapter 7 in the USB specification). Software shall take into account this time that takes the hardware to recover from a USB reset condition.

USB suspend and resume

Normally, the host will maintain activity on the USB at least every millisecond according to USB specification. A USB device will enter suspend when there is no activity on the bus (idle) for a given time. The device will resume operation when it receives any non idle signalling.

To signal that the device shall go into low power mode (suspend), the host stops activity on the USB bus, which becomes idle. Only the device pull-up and host pull-downs act on D+ and D-, and the bus is thus kept at a constant J state. It is up to the device to detect this lack of activity, and enter the low power mode (suspend) within a specified time.

The USB host can decide to suspend or resume USB activity at any time. If remote wake-up is enabled, the device may signal to the host to resume from suspend.

Entering suspend

The USBD peripheral automatically detects lack of activity for more than a defined amount of time, and performs steps needed to enter suspend.

When no activity has been detected for longer than tUSB,SUSPEND, the USBD generates the USBEVENT event with SUSPEND bit set in register EVENTCAUSE. The software shall ensure that the current drawn from the USB supply line VBUS is within the specified limits before T2SUSP, as defined in chapter 7 of the USB specification. In order to reduce idle current of USBD, the software must explicitly place the USBD in low power mode through writing LowPower to register LOWPOWER.

In order to save power, and provided that no other peripheral needs it, the crystal oscillator (HFXO) in CLOCK may be disabled by software during the USB suspend, while the USB pull-up is disconnected, or when VBUS is not present. Software must explicitly enable it at any other time. The USBD will not be able to respond to USB traffic unless HFXO is enabled and stable.

Host-initiated resume

Once the host resumes the bus activity, it has to be responsive to incoming requests on the USB bus within the time TRSMRCY (as defined in chapter 7 of the USB specification) and revert to normal power consumption mode.

If the host resumes bus activity with or without a RESUME condition (in other words: bus activity is defined as any non-J state), the USBD peripheral will generate a USBEVENT event, with RESUME bit set in register EVENTCAUSE. If the host resumes bus activity simply by restarting sending frames, the USBD peripheral will generate SOF events.

Device-initiated remote wake-up

Assuming the remote wake-up is supported by the device and enabled by the host, the device can request the host to resume from suspend if wake-up condition is met.

To do so, the HFXO needs to be enabled first. After waking up the HFXO, the software must bring USBD out of the low power mode and into the normal power consumption mode through writing ForceNormal in register LOWPOWER. It can then instruct the USBD peripheral to drive a RESUME condition (K state) on the USB bus by triggering the DPDMDRIVE task, and hence attempt to wake up the host. By choosing Resume in DPDMVALUE, the duration of the RESUME state is under hardware control (tUSB,DRIVEK). By choosing J or K, the duration of that state is under software control (the J or K state is maintained until a DPDMNODRIVE task is triggered) and has to meet TDRSMUP as specified in USB specification chapter 7.

Upon writing the ForceNormal in register LOWPOWER, a USBEVENT event is generated with the USBWUALLOWED bit set in register EVENTCAUSE.

The value in register DPDMVALUE will only be captured and used when the DPDMDRIVE task is triggered. This value defines the state the bus will be forced into after the DPDMDRIVE task.

The device shall ensure that it does not initiate a remote wake-up request before TWTRSM (according to USB specification chapter 7) after the bus has entered idle state. Using the recommended resume value in DPDMVALUE (rather than K) takes care of this, and postpones the RESUME state accordingly.

EasyDMA

The USBD peripheral implements EasyDMA for accessing memory without CPU involvement.

Each endpoint has an associated set of registers, tasks and events. EasyDMA and traffic on USB are tightly related. A number of events provide insight of what is happening on the USB bus with a number of tasks allowing an automated response to the traffic.

Note: Endpoint 0 (IN and OUT) are implemented as control endpoint. For more information, see Control transfers.

Registers

Enabling endpoints is controlled through the EPINEN and EPOUTEN registers.

The following registers define the memory address of the buffer for a specific IN or OUT endpoint:

The following registers define the amount of bytes to be sent on USB for next transaction:

The following registers define the length of the buffer (in bytes) for next transfer of incoming data:

Since the host decides how many bytes are sent over USB, the MAXCNT value can be copied from register SIZE.EPOUT[n] (n=1..7) or register SIZE.ISOOUT.

Register EPOUT[0].MAXCNT defines the length of the OUT buffer (in bytes) for the control endpoint 0. Register SIZE.EPOUT[0] shall indicate the same value as MaxPacketSize from the device descriptor or wLength from the SETUP command, whichever is the least.

The .AMOUNT registers indicate how many bytes actually have been transferred over EasyDMA during the last transfer.

Stalling bulk/interrupt endpoints is controlled through the EPSTALL register.

Note: Due to USB specification requirements, the effect of the stalling control endpoint 0 may be overridden by hardware, in particular when a new SETUP token is received.

EasyDMA will not copy the SETUP data to memory (it will only transfer data from the data stage). The following are separate registers in the USBD peripheral that have setup data.

The EVENTCAUSE register provides details on what caused a given USBEVENT event, for instance if a CRC error is detected during a transaction, or if bus activity stops or resumes.

Tasks

Tasks STARTEPIN[n], STARTEPOUT[n] (n=0..7), STARTISOIN, and STARTISOOUT capture the values for .PTR and .MAXCNT registers. For IN endpoints, a transaction over USB gets automatically triggered when the EasyDMA transfer is complete. For OUT endpoints, it is up to software to allow the next transaction over USB. See the examples in Control transfers, Bulk and interrupt transactions, and Isochronous transactions.

For the control endpoint 0, OUT transactions are allowed through the EP0RCVOUT task. The EP0STATUS task allows a status stage to be initiated, and the EP0STALL task allows stalling further traffic (data or status stage) on the control endpoint.

Events

The STARTED event confirms that the values of the .PTR and .MAXCNT registers of the endpoints flagged in register EPSTATUS have been captured. Those can then be modified by software for the next transfer.

Events ENDEPIN[n], ENDEPOUT[n] (n=0..7), ENDISOIN, and ENDISOOUT events indicate that the entire buffer has been consumed. The buffer can be accessed safely by the software.

Only a single EasyDMA transfer can take place in USBD at any time. Software must ensure that tasks STARTEPIN[n] (n=0..7), STARTISOIN , STARTEPOUT[n] (n=0..7), or STARTISOOUT are not triggered before events ENDEPIN[n] (n=0..7), ENDISOIN, ENDEPOUT[n] (n=0..7), or ENDISOOUT are received from an on-going transfer.

The EPDATA event indicates that a successful (acknowledged) data transaction has occurred on the data endpoint(s) flagged in register EPDATASTATUS. A successful (acknowledged) data transaction on endpoint 0 is signalled by the EP0DATADONE event.

At any time a USBEVENT event may be sent, with details provided in EVENTCAUSE register.

The EP0SETUP event indicates that a SETUP token has been received on the control endpoint 0, and that the setup data is available in the setup data registers.

Control transfers

The USB specification mandates every USB device to implement endpoint 0 IN and OUT as control endpoints.

A control transfer consists of two or three stages:

  • Setup stage
  • Data stage (optional)
  • Status stage

Each control transfer can be one of following types:

  • Control read
  • Control read no data
  • Control write
  • Control write no data

An EP0SETUP event indicates that the data in the setup stage (following the SETUP token) is available in registers.

The data in the data stage (following the IN or OUT token) is transferred from or to the desired location using EasyDMA.

The control endpoint buffer can be of any size.

After receiving the SETUP token, the USB controller will not accept (NAK) any incoming IN or OUT tokens until the software has finished decoding the command, determined the type of transfer, and prepared for the next stage (data or status) appropriately.

The software can stall a command when in the data and status stages, through the EP0STALL task, when the command is not supported or if its wValue, wIndex or wLength parameters are wrong. The following shows a stalled control read transfer, but the same mechanism (tasks) applies to stalling a control write transfer.

Figure 4. Control read gets stalled
Control read gets stalled

See the USB 2.0 Specification and relevant class specifications for rules on stalling commands.

Note: The USBD peripheral handles the SetAddress transfer by itself. As a consequence, the software shall not process this command other than updating its state machine (see Device state diagram), nor initiate a status stage. If necessary, the address assigned by the host can be read out from the USBADDR register after the command has been processed.

Control read transfer

This section describes how the software behaves when responding to a control read transfer.

As mentioned earlier, the USB controller will not accept (NAK) any incoming IN tokens until software has finished decoding the command, determining the type of transfer, and preparing for the next stage (data or status) appropriately.

For a control read, transferring the data from memory into USBD will trigger a valid, acknowledged (ACK) IN transaction on USB.

The software has to prepare EasyDMA by pointing to the buffer containing the data to be transferred. If no other EasyDMA transfers are on-going with USBD, the software can send the STARTEPIN0 task, which will initiate the data transfer and transaction on USB.

A STARTED event (with EPIN0 bit set in the EPSTATUS register) will be generated as soon as the EPIN[0].PTR and .MAXCNT registers have been captured. Software may then prepare them for the next data transaction.

An ENDEPIN[0] event will be generated when the data has been transferred from memory to the USBD peripheral.

Finally, an EP0DATADONE event will be generated when the data has been transmitted over USB and acknowledged by the host.

The software can then either prepare and transmit the next data transaction by repeating the above sequence, or initiate the status stage through the EP0STATUS task.

Figure 5. Control read transfer
Control read transfer

It is possible to enable a shortcut from the EP0DATADONE event to the EP0STATUS task, typically if the data stage is expected to take a single transfer. If there is no data stage, the software can initiate the status stage through the EP0STATUS task right away, as as shown in the following figure.

Figure 6. Control read no data transfer
Control read no data transfer

Control write transfer

This section describes how the software responds to a control write transfer.

The software has to prepare EasyDMA by pointing to the buffer in memory that shall contain the incoming data. If no other EasyDMA transfers are ongoing with USBD, the software can then send the EP0RCVOUT task, which will make USBD acknowledge (ACK) the first OUT+DATA transaction from the host.

An EP0DATADONE event will be generated when a new OUT+DATA has been transmitted over USB, and is about to get acknowledged by the device.

After receiving the first transaction, a STARTED event (the EPOUT0 bit set in the EPSTATUS register) is generated when the EPOUT[0].PTR and .MAXCNT registers have been captured. Software may then prepare them for the next data transaction.

An ENDEPOUT[0] event will be generated when the data has been transferred from the USBD peripheral to memory. The software can then either prepare to receive the next data transaction by repeating the above sequence, or initiate the status stage through the EP0STATUS task. Until then, further incoming OUT+DATA transactions get a NAK response by the device.

Figure 7. Control write transfer
Control write transfer

Figure 8. Control write no data transfer
Control write no data transfer

Bulk and interrupt transactions

The USBD peripheral implements seven pairs of bulk/interrupt endpoints.

The bulk/interrupt endpoints have a fixed USB endpoint number, summarized in the following table.

Table 1. Bulk/interrupt endpoint numbering
Bulk endpoint # USB IN endpoint USB OUT endpoint
[1] 0x81 0x01
[2] 0x82 0x02
[3] 0x83 0x03
[4] 0x84 0x04
[5] 0x85 0x05
[6] 0x86 0x06
[7] 0x87 0x07

A bulk/interrupt transaction consists of a single data stage. Two consecutive, successful transactions are distinguished through alternating leading process ID (PID): DATA0 follows DATA1, DATA1 follows DATA0, etc. A repeated transaction is detected by re-using the same PID as previous transaction, i.e DATA0 follows DATA0, or DATA1 follows DATA1.

The USBD controller automatically toggles DATA0/DATA1 PIDs for every bulk/interrupt transaction.

If incoming data is corrupted (CRC does not match), the USBD controller automatically prevents DATA0/DATA1 from toggling, to request the host to resend the data.

In some specific cases, the software may want to force a data toggle (usually reset) on a specific IN endpoint, or force the expected toggle on an OUT endpoint, for instance as a consequence of the host issuing ClearFeature, SetInterface, or selecting an alternate setting. Controlling the data toggle of data IN or OUT endpoint n (n=1..7) is done through register DTOGGLE.

The bulk/interrupt transaction in USB full-speed can be of any size up to 64 bytes. It must be a multiple of four bytes and 32-bit aligned in memory.

When the USB transaction has completed, an EPDATA event is generated. Until new data has been transferred by EasyDMA from memory to the USBD peripheral (signalled by the ENDEPIN[n] event), the hardware will automatically respond with NAK to all incoming IN tokens. Software has to configure and start the EasyDMA transfer once it is ready to send more data.

Each IN or OUT data endpoint has to be explicitly enabled by software through register EPINEN or EPOUTEN, according to the configuration declared by the device and selected by the host through the SetConfig command.

A disabled data endpoint will not respond to any traffic from the host. An enabled data endpoint will normally respond NAK or ACK (depending on the readiness of the buffers), or STALL (if configured in register EPSTALL), in which case the endpoint is asked to halt. The halted (or not) state of a given endpoint can be read back from register HALTED.EPIN[n] or HALTED.EPOUT[n]. The format of the returned 16-bit value can be copied as is, as a response to a GetStatusEndpoint request from the host.

Enabling or disabling an endpoint will not change its halted state. However, a USB reset will disable and clear the halted state of all data endpoints.

The control endpoint 0 IN and OUT can also be enabled and/or halted using the same mechanisms, but due to USB specification, receiving a SETUP will override its state.

Bulk and interrupt IN transaction

The host issues IN tokens to receive bulk/interrupt data. In order to send data, the software has to enable the endpoint and prepare an EasyDMA transfer on the desired endpoint.

Bulk/interrupt IN endpoints are enabled or disabled through their respective INn bit (n=1..7) in EPINEN register.

It is also possible to stall or resume communication on an endpoint through the EPSTALL register.

Figure 9. Bulk/interrupt IN transaction
Bulk/interrupt IN transaction

It is possible (and in some situations it is required) to respond to an IN token with a zero-length data packet.

Note: On many USB hosts, not responding (DATA+ACK or NAK) to three IN tokens on an interrupt endpoint would have the host disable that endpoint as a consequence. Re-enumerating the device (unplug-replug) may be required to restore functionality. Make sure that the relevant data endpoints are enabled for normal operation as soon as the device gets configured through a SetConfig request.

Bulk and interrupt OUT transaction

When the host wants to transmit bulk/interrupt data, it issues an OUT token (packet) followed by a DATA packet on a given endpoint n (n=1..7).

A NAK is returned until the software writes any value to register SIZE.EPOUT[n], indicating that the content of the local buffer can be overwritten. Upon receiving the next OUT+DATA transaction, an ACK is returned to the host while an EPDATA event is generated (and the EPDATASTATUS register flags are set to indicate on which endpoint this happened). Once the EasyDMA is prepared and enabled, by writing the EPOUT[n] registers and triggering the STARTEPOUT[n] task, the incoming data will be transferred to memory. Until that transfer is finished, the hardware will automatically NAK any other incoming OUT+DATA packets. Only when the EasyDMA transfer is done (signalled by the ENDEPOUT[n] event), or as soon as any values are written by the software in register SIZE.EPOUT[n], the endpoint n will accept incoming OUT+DATA again.

It is allowed for the host to send zero-length data packets.

Bulk/interrupt OUT endpoints are enabled or disabled through their respective OUTn bit (n=1..7) in the EPOUTEN register. It is also possible to stall or resume communication on an endpoint through the EPSTALL register.

Figure 10. Bulk/interrupt OUT transaction
Bulk/interrupt OUT transaction

Isochronous transactions

The USBD peripheral implements isochronous (ISO) endpoints.

The ISO endpoints have a fixed USB endpoint number, summarized in the following table.

Table 2. Isochronous endpoint numbering
ISO endpoint # USB IN endpoint USB OUT endpoint
[0] 0x88 0x08

An isochronous transaction consists of a single, non-acknowledged data stage. The host sends out a start of frame at a regular interval (1 ms), and data follows IN or OUT tokens within each frame.

EasyDMA allows transferring ISO data directly from and to memory. EasyDMA transfers must be initiated by the software, which can synchronize with the SOF (start of frame) events.

Because the timing of the start of frame is very accurate, the SOF event can be used for jobs such as synchronizing a local timer through the SOF event and PPI. The SOF event gets synchronized to the 16 MHz clock prior to being made available to the PPI.

Every start of frame increments a free-running counter, which can be read by software through the FRAMECNTR register.

Each IN or OUT ISO data endpoint has to be explicitly enabled by software through register EPINEN or EPOUTEN, according to the configuration declared by the device and selected by the host through the SetConfig command. A disabled ISO IN data endpoint will not respond to any traffic from the host. A disabled ISO OUT data endpoint will ignore any incoming traffic from the host.

The USBD peripheral has an internal 1 kB buffer associated with ISO endpoints. The user can either allocate the full amount to the IN or the OUT endpoint, or split the buffer allocation between the two using register ISOSPLIT.

The internal buffer also sets the maximum size of the ISO OUT and ISO IN transfers: 1023 bytes when the full buffer is dedicated to either ISO OUT or ISO IN, and half when the buffer is split between the two.

Isochronous IN transaction

When the host wants to receive isochronous (ISO) data, it issues an IN token on the isochronous endpoint.

After the data has been transferred using the EasyDMA, the USB controller on the isochronous IN endpoint responds to the IN token with the transferred data using the ISOIN.MAXCNT for the size of the packet.

The ISO IN data endpoint has to be explicitly enabled by software through the ISOIN0 bit in register EPINEN.

When an ISO IN endpoint is enabled and no data transferred with EasyDMA, the response of the USBD depends on the setting of the RESPONSE field in register ISOINCONFIG. It can either provide no response to an IN token or respond with a zero-length data.

If the EasyDMA transfer on the isochronous endpoint is not completed before the next SOF event, the result of the transfer is undefined.

The maximum size of an ISO IN transfer in USB full-speed is 1023 bytes. The data buffer has to be a multiple of 4 bytes 32-bit aligned in memory. However, the amount of bytes transferred on the USB data endpoint can be of any size (up to 1023 bytes, if not shared with an OUT ISO endpoint).

Figure 11. Isochronous IN transfer
Isochronous IN transfer

Isochronous OUT transaction

When the host wants to send isochronous (ISO) data, it issues an OUT token on the isochronous endpoint, followed by data.

The ISO OUT data endpoint has to be explicitly enabled by software through the ISOOUT0 bit in register EPOUTEN.

The amount of last received ISO OUT data is provided in the SIZE.ISOOUT register. Software shall interpret the ZERO and SIZE fields as presented in the following table.

Table 3. ISO OUT incoming data size
ZERO SIZE Last received data size
Normal 0 No data received at all
Normal 1..1023 1..1023 bytes of data received
ZeroData (not of interest) Zero-length data packet received

When EasyDMA is prepared and started, triggering a STARTISOOUT task initiates an EasyDMA transfer to memory. Software shall synchronize ISO OUT transfers with the SOF events. EasyDMA uses the address in ISOOUT.PTR and size in ISOOUT.MAXCNT for every new transfer.

If the EasyDMA transfer on the isochronous endpoint is not completed before the next SOF event, the result of the transfer is undefined.

The maximum size of an isochronous OUT transfer in USB full-speed is 1023 bytes. The data buffer has to be a multiple of 4 bytes and 32-bit aligned in Data RAM. However, the amount of bytes transferred on the USB data endpoint can be of any size (up to 1023 bytes if not shared with an IN ISO endpoint).

If the last received ISO data packet is corrupted (wrong CRC), the USB controller generates an USBEVENT event (at the same time as SOF) and indicates a CRC error on ISOOUTCRC in register EVENTCAUSE. EasyDMA will transfer the data anyway if it has been set up properly.

Figure 12. Isochronous OUT transfer
Isochronous OUT transfer

USB register access limitations

Some of the registers in USBD cannot be accessed in specific conditions.

This may be the case when USBD is not enabled (using the ENABLE register) and ready (signalled by the READY bit in EVENTCAUSE after a USBEVENT event), or when USBD is in low power mode while the USB bus is suspended.

Triggering any tasks, including the tasks triggered through the PPI, is affected by this behavior. In addition, the following registers are affected:
  • HALTED.EPIN[0..7]
  • HALTED.EPOUT[0..7]
  • USBADDR
  • BMREQUESTTYPE
  • BREQUEST
  • WVALUEL
  • WVALUEH
  • WINDEXL
  • WINDEXH
  • WLENGTHL
  • WLENGTHH
  • SIZE.EPOUT[0..7]
  • SIZE.ISOOUT
  • USBPULLUP
  • DTOGGLE
  • EPINEN
  • EPOUTEN
  • EPSTALL
  • ISOSPLIT
  • FRAMECNTR

Registers

Table 4. Instances
Base address Peripheral Instance Description Configuration
0x40027000 USBD USBD

Universal serial bus device

   
Table 5. Register overview
Register Offset Description
TASKS_STARTEPIN[0] 0x004

Captures the EPIN[0].PTR and EPIN[0].MAXCNT registers values, and enables endpoint IN 0 to respond to traffic from host

 
TASKS_STARTEPIN[1] 0x008

Captures the EPIN[1].PTR and EPIN[1].MAXCNT registers values, and enables endpoint IN 1 to respond to traffic from host

 
TASKS_STARTEPIN[2] 0x00C

Captures the EPIN[2].PTR and EPIN[2].MAXCNT registers values, and enables endpoint IN 2 to respond to traffic from host

 
TASKS_STARTEPIN[3] 0x010

Captures the EPIN[3].PTR and EPIN[3].MAXCNT registers values, and enables endpoint IN 3 to respond to traffic from host

 
TASKS_STARTEPIN[4] 0x014

Captures the EPIN[4].PTR and EPIN[4].MAXCNT registers values, and enables endpoint IN 4 to respond to traffic from host

 
TASKS_STARTEPIN[5] 0x018

Captures the EPIN[5].PTR and EPIN[5].MAXCNT registers values, and enables endpoint IN 5 to respond to traffic from host

 
TASKS_STARTEPIN[6] 0x01C

Captures the EPIN[6].PTR and EPIN[6].MAXCNT registers values, and enables endpoint IN 6 to respond to traffic from host

 
TASKS_STARTEPIN[7] 0x020

Captures the EPIN[7].PTR and EPIN[7].MAXCNT registers values, and enables endpoint IN 7 to respond to traffic from host

 
TASKS_STARTISOIN 0x024

Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint

 
TASKS_STARTEPOUT[0] 0x028

Captures the EPOUT[0].PTR and EPOUT[0].MAXCNT registers values, and enables endpoint 0 to respond to traffic from host

 
TASKS_STARTEPOUT[1] 0x02C

Captures the EPOUT[1].PTR and EPOUT[1].MAXCNT registers values, and enables endpoint 1 to respond to traffic from host

 
TASKS_STARTEPOUT[2] 0x030

Captures the EPOUT[2].PTR and EPOUT[2].MAXCNT registers values, and enables endpoint 2 to respond to traffic from host

 
TASKS_STARTEPOUT[3] 0x034

Captures the EPOUT[3].PTR and EPOUT[3].MAXCNT registers values, and enables endpoint 3 to respond to traffic from host

 
TASKS_STARTEPOUT[4] 0x038

Captures the EPOUT[4].PTR and EPOUT[4].MAXCNT registers values, and enables endpoint 4 to respond to traffic from host

 
TASKS_STARTEPOUT[5] 0x03C

Captures the EPOUT[5].PTR and EPOUT[5].MAXCNT registers values, and enables endpoint 5 to respond to traffic from host

 
TASKS_STARTEPOUT[6] 0x040

Captures the EPOUT[6].PTR and EPOUT[6].MAXCNT registers values, and enables endpoint 6 to respond to traffic from host

 
TASKS_STARTEPOUT[7] 0x044

Captures the EPOUT[7].PTR and EPOUT[7].MAXCNT registers values, and enables endpoint 7 to respond to traffic from host

 
TASKS_STARTISOOUT 0x048

Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint

 
TASKS_EP0RCVOUT 0x04C

Allows OUT data stage on control endpoint 0

 
TASKS_EP0STATUS 0x050

Allows status stage on control endpoint 0

 
TASKS_EP0STALL 0x054

Stalls data and status stage on control endpoint 0

 
TASKS_DPDMDRIVE 0x058

Forces D+ and D- lines into the state defined in the DPDMVALUE register

 
TASKS_DPDMNODRIVE 0x05C

Stops forcing D+ and D- lines into any state (USB engine takes control)

 
EVENTS_USBRESET 0x100

Signals that a USB reset condition has been detected on USB lines

 
EVENTS_STARTED 0x104

Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register

 
EVENTS_ENDEPIN[0] 0x108

The whole EPIN[0] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[1] 0x10C

The whole EPIN[1] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[2] 0x110

The whole EPIN[2] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[3] 0x114

The whole EPIN[3] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[4] 0x118

The whole EPIN[4] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[5] 0x11C

The whole EPIN[5] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[6] 0x120

The whole EPIN[6] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPIN[7] 0x124

The whole EPIN[7] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_EP0DATADONE 0x128

An acknowledged data transfer has taken place on the control endpoint

 
EVENTS_ENDISOIN 0x12C

The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[0] 0x130

The whole EPOUT[0] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[1] 0x134

The whole EPOUT[1] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[2] 0x138

The whole EPOUT[2] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[3] 0x13C

The whole EPOUT[3] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[4] 0x140

The whole EPOUT[4] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[5] 0x144

The whole EPOUT[5] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[6] 0x148

The whole EPOUT[6] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDEPOUT[7] 0x14C

The whole EPOUT[7] buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_ENDISOOUT 0x150

The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software.

 
EVENTS_SOF 0x154

Signals that a SOF (start of frame) condition has been detected on USB lines

 
EVENTS_USBEVENT 0x158

An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.

 
EVENTS_EP0SETUP 0x15C

A valid SETUP token has been received (and acknowledged) on the control endpoint

 
EVENTS_EPDATA 0x160

A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register

 
SHORTS 0x200

Shortcuts between local events and tasks

 
INTEN 0x300

Enable or disable interrupt

 
INTENSET 0x304

Enable interrupt

 
INTENCLR 0x308

Disable interrupt

 
EVENTCAUSE 0x400

Details on what caused the USBEVENT event

 
HALTED.EPIN[0] 0x420

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[1] 0x424

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[2] 0x428

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[3] 0x42C

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[4] 0x430

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[5] 0x434

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[6] 0x438

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPIN[7] 0x43C

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[0] 0x444

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[1] 0x448

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[2] 0x44C

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[3] 0x450

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[4] 0x454

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[5] 0x458

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[6] 0x45C

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
HALTED.EPOUT[7] 0x460

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

 
EPSTATUS 0x468

Provides information on which endpoint's EasyDMA registers have been captured

 
EPDATASTATUS 0x46C

Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event)

 
USBADDR 0x470

Device USB address

 
BMREQUESTTYPE 0x480

SETUP data, byte 0, bmRequestType

 
BREQUEST 0x484

SETUP data, byte 1, bRequest

 
WVALUEL 0x488

SETUP data, byte 2, LSB of wValue

 
WVALUEH 0x48C

SETUP data, byte 3, MSB of wValue

 
WINDEXL 0x490

SETUP data, byte 4, LSB of wIndex

 
WINDEXH 0x494

SETUP data, byte 5, MSB of wIndex

 
WLENGTHL 0x498

SETUP data, byte 6, LSB of wLength

 
WLENGTHH 0x49C

SETUP data, byte 7, MSB of wLength

 
SIZE.EPOUT[0] 0x4A0

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[1] 0x4A4

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[2] 0x4A8

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[3] 0x4AC

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[4] 0x4B0

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[5] 0x4B4

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[6] 0x4B8

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.EPOUT[7] 0x4BC

Number of bytes received last in the data stage of this OUT endpoint

 
SIZE.ISOOUT 0x4C0

Number of bytes received last on this ISO OUT data endpoint

 
ENABLE 0x500

Enable USB

 
USBPULLUP 0x504

Control of the USB pull-up

 
DPDMVALUE 0x508

State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing).

 
DTOGGLE 0x50C

Data toggle control and status

 
EPINEN 0x510

Endpoint IN enable

 
EPOUTEN 0x514

Endpoint OUT enable

 
EPSTALL 0x518

STALL endpoints

 
ISOSPLIT 0x51C

Controls the split of ISO buffers

 
FRAMECNTR 0x520

Returns the current value of the start of frame counter

 
LOWPOWER 0x52C

Controls USBD peripheral low power mode during USB suspend

 
ISOINCONFIG 0x530

Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent

 
EPIN[0].PTR 0x600

Data pointer

 
EPIN[0].MAXCNT 0x604

Maximum number of bytes to transfer

 
EPIN[0].AMOUNT 0x608

Number of bytes transferred in the last transaction

 
EPIN[1].PTR 0x614

Data pointer

 
EPIN[1].MAXCNT 0x618

Maximum number of bytes to transfer

 
EPIN[1].AMOUNT 0x61C

Number of bytes transferred in the last transaction

 
EPIN[2].PTR 0x628

Data pointer

 
EPIN[2].MAXCNT 0x62C

Maximum number of bytes to transfer

 
EPIN[2].AMOUNT 0x630

Number of bytes transferred in the last transaction

 
EPIN[3].PTR 0x63C

Data pointer

 
EPIN[3].MAXCNT 0x640

Maximum number of bytes to transfer

 
EPIN[3].AMOUNT 0x644

Number of bytes transferred in the last transaction

 
EPIN[4].PTR 0x650

Data pointer

 
EPIN[4].MAXCNT 0x654

Maximum number of bytes to transfer

 
EPIN[4].AMOUNT 0x658

Number of bytes transferred in the last transaction

 
EPIN[5].PTR 0x664

Data pointer

 
EPIN[5].MAXCNT 0x668

Maximum number of bytes to transfer

 
EPIN[5].AMOUNT 0x66C

Number of bytes transferred in the last transaction

 
EPIN[6].PTR 0x678

Data pointer

 
EPIN[6].MAXCNT 0x67C

Maximum number of bytes to transfer

 
EPIN[6].AMOUNT 0x680

Number of bytes transferred in the last transaction

 
EPIN[7].PTR 0x68C

Data pointer

 
EPIN[7].MAXCNT 0x690

Maximum number of bytes to transfer

 
EPIN[7].AMOUNT 0x694

Number of bytes transferred in the last transaction

 
ISOIN.PTR 0x6A0

Data pointer

 
ISOIN.MAXCNT 0x6A4

Maximum number of bytes to transfer

 
ISOIN.AMOUNT 0x6A8

Number of bytes transferred in the last transaction

 
EPOUT[0].PTR 0x700

Data pointer

 
EPOUT[0].MAXCNT 0x704

Maximum number of bytes to transfer

 
EPOUT[0].AMOUNT 0x708

Number of bytes transferred in the last transaction

 
EPOUT[1].PTR 0x714

Data pointer

 
EPOUT[1].MAXCNT 0x718

Maximum number of bytes to transfer

 
EPOUT[1].AMOUNT 0x71C

Number of bytes transferred in the last transaction

 
EPOUT[2].PTR 0x728

Data pointer

 
EPOUT[2].MAXCNT 0x72C

Maximum number of bytes to transfer

 
EPOUT[2].AMOUNT 0x730

Number of bytes transferred in the last transaction

 
EPOUT[3].PTR 0x73C

Data pointer

 
EPOUT[3].MAXCNT 0x740

Maximum number of bytes to transfer

 
EPOUT[3].AMOUNT 0x744

Number of bytes transferred in the last transaction

 
EPOUT[4].PTR 0x750

Data pointer

 
EPOUT[4].MAXCNT 0x754

Maximum number of bytes to transfer

 
EPOUT[4].AMOUNT 0x758

Number of bytes transferred in the last transaction

 
EPOUT[5].PTR 0x764

Data pointer

 
EPOUT[5].MAXCNT 0x768

Maximum number of bytes to transfer

 
EPOUT[5].AMOUNT 0x76C

Number of bytes transferred in the last transaction

 
EPOUT[6].PTR 0x778

Data pointer

 
EPOUT[6].MAXCNT 0x77C

Maximum number of bytes to transfer

 
EPOUT[6].AMOUNT 0x780

Number of bytes transferred in the last transaction

 
EPOUT[7].PTR 0x78C

Data pointer

 
EPOUT[7].MAXCNT 0x790

Maximum number of bytes to transfer

 
EPOUT[7].AMOUNT 0x794

Number of bytes transferred in the last transaction

 
ISOOUT.PTR 0x7A0

Data pointer

 
ISOOUT.MAXCNT 0x7A4

Maximum number of bytes to transfer

 
ISOOUT.AMOUNT 0x7A8

Number of bytes transferred in the last transaction

 

TASKS_STARTEPIN[n] (n=0..7)

Address offset: 0x004 + (n × 0x4)

Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_STARTEPIN

   

Captures the EPIN[n].PTR and EPIN[n].MAXCNT registers values, and enables endpoint IN n to respond to traffic from host

     

Trigger

1

Trigger task

TASKS_STARTISOIN

Address offset: 0x024

Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_STARTISOIN

   

Captures the ISOIN.PTR and ISOIN.MAXCNT registers values, and enables sending data on ISO endpoint

     

Trigger

1

Trigger task

TASKS_STARTEPOUT[n] (n=0..7)

Address offset: 0x028 + (n × 0x4)

Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_STARTEPOUT

   

Captures the EPOUT[n].PTR and EPOUT[n].MAXCNT registers values, and enables endpoint n to respond to traffic from host

     

Trigger

1

Trigger task

TASKS_STARTISOOUT

Address offset: 0x048

Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_STARTISOOUT

   

Captures the ISOOUT.PTR and ISOOUT.MAXCNT registers values, and enables receiving of data on ISO endpoint

     

Trigger

1

Trigger task

TASKS_EP0RCVOUT

Address offset: 0x04C

Allows OUT data stage on control endpoint 0

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_EP0RCVOUT

   

Allows OUT data stage on control endpoint 0

     

Trigger

1

Trigger task

TASKS_EP0STATUS

Address offset: 0x050

Allows status stage on control endpoint 0

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_EP0STATUS

   

Allows status stage on control endpoint 0

     

Trigger

1

Trigger task

TASKS_EP0STALL

Address offset: 0x054

Stalls data and status stage on control endpoint 0

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_EP0STALL

   

Stalls data and status stage on control endpoint 0

     

Trigger

1

Trigger task

TASKS_DPDMDRIVE

Address offset: 0x058

Forces D+ and D- lines into the state defined in the DPDMVALUE register

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_DPDMDRIVE

   

Forces D+ and D- lines into the state defined in the DPDMVALUE register

     

Trigger

1

Trigger task

TASKS_DPDMNODRIVE

Address offset: 0x05C

Stops forcing D+ and D- lines into any state (USB engine takes control)

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

TASKS_DPDMNODRIVE

   

Stops forcing D+ and D- lines into any state (USB engine takes control)

     

Trigger

1

Trigger task

EVENTS_USBRESET

Address offset: 0x100

Signals that a USB reset condition has been detected on USB lines

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_USBRESET

   

Signals that a USB reset condition has been detected on USB lines

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_STARTED

Address offset: 0x104

Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_STARTED

   

Confirms that the EPIN[n].PTR and EPIN[n].MAXCNT, or EPOUT[n].PTR and EPOUT[n].MAXCNT registers have been captured on all endpoints reported in the EPSTATUS register

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_ENDEPIN[n] (n=0..7)

Address offset: 0x108 + (n × 0x4)

The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software.

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_ENDEPIN

   

The whole EPIN[n] buffer has been consumed. The buffer can be accessed safely by software.

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_EP0DATADONE

Address offset: 0x128

An acknowledged data transfer has taken place on the control endpoint

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_EP0DATADONE

   

An acknowledged data transfer has taken place on the control endpoint

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_ENDISOIN

Address offset: 0x12C

The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software.

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_ENDISOIN

   

The whole ISOIN buffer has been consumed. The buffer can be accessed safely by software.

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_ENDEPOUT[n] (n=0..7)

Address offset: 0x130 + (n × 0x4)

The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software.

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_ENDEPOUT

   

The whole EPOUT[n] buffer has been consumed. The buffer can be accessed safely by software.

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_ENDISOOUT

Address offset: 0x150

The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software.

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_ENDISOOUT

   

The whole ISOOUT buffer has been consumed. The buffer can be accessed safely by software.

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_SOF

Address offset: 0x154

Signals that a SOF (start of frame) condition has been detected on USB lines

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_SOF

   

Signals that a SOF (start of frame) condition has been detected on USB lines

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_USBEVENT

Address offset: 0x158

An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_USBEVENT

   

An event or an error not covered by specific events has occurred. Check EVENTCAUSE register to find the cause.

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_EP0SETUP

Address offset: 0x15C

A valid SETUP token has been received (and acknowledged) on the control endpoint

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_EP0SETUP

   

A valid SETUP token has been received (and acknowledged) on the control endpoint

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

EVENTS_EPDATA

Address offset: 0x160

A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EVENTS_EPDATA

   

A data transfer has occurred on a data endpoint, indicated by the EPDATASTATUS register

     

NotGenerated

0

Event not generated

     

Generated

1

Event generated

SHORTS

Address offset: 0x200

Shortcuts between local events and tasks

Bit number 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 5 4 3 2 1 0
ID                                               E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EP0DATADONE_STARTEPIN0

   

Shortcut between event EP0DATADONE and task STARTEPIN[0]

     

Disabled

0

Disable shortcut

     

Enabled

1

Enable shortcut

B RW

EP0DATADONE_STARTEPOUT0

   

Shortcut between event EP0DATADONE and task STARTEPOUT[0]

     

Disabled

0

Disable shortcut

     

Enabled

1

Enable shortcut

C RW

EP0DATADONE_EP0STATUS

   

Shortcut between event EP0DATADONE and task EP0STATUS

     

Disabled

0

Disable shortcut

     

Enabled

1

Enable shortcut

D RW

ENDEPOUT0_EP0STATUS

   

Shortcut between event ENDEPOUT[0] and task EP0STATUS

     

Disabled

0

Disable shortcut

     

Enabled

1

Enable shortcut

E RW

ENDEPOUT0_EP0RCVOUT

   

Shortcut between event ENDEPOUT[0] and task EP0RCVOUT

     

Disabled

0

Disable shortcut

     

Enabled

1

Enable shortcut

INTEN

Address offset: 0x300

Enable or disable interrupt

Bit number 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 5 4 3 2 1 0
ID             Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

USBRESET

   

Enable or disable interrupt for event USBRESET

     

Disabled

0

Disable

     

Enabled

1

Enable

B RW

STARTED

   

Enable or disable interrupt for event STARTED

     

Disabled

0

Disable

     

Enabled

1

Enable

C-J RW

ENDEPIN[i] (i=0..7)

   

Enable or disable interrupt for event ENDEPIN[i]

     

Disabled

0

Disable

     

Enabled

1

Enable

K RW

EP0DATADONE

   

Enable or disable interrupt for event EP0DATADONE

     

Disabled

0

Disable

     

Enabled

1

Enable

L RW

ENDISOIN

   

Enable or disable interrupt for event ENDISOIN

     

Disabled

0

Disable

     

Enabled

1

Enable

M-T RW

ENDEPOUT[i] (i=0..7)

   

Enable or disable interrupt for event ENDEPOUT[i]

     

Disabled

0

Disable

     

Enabled

1

Enable

U RW

ENDISOOUT

   

Enable or disable interrupt for event ENDISOOUT

     

Disabled

0

Disable

     

Enabled

1

Enable

V RW

SOF

   

Enable or disable interrupt for event SOF

     

Disabled

0

Disable

     

Enabled

1

Enable

W RW

USBEVENT

   

Enable or disable interrupt for event USBEVENT

     

Disabled

0

Disable

     

Enabled

1

Enable

X RW

EP0SETUP

   

Enable or disable interrupt for event EP0SETUP

     

Disabled

0

Disable

     

Enabled

1

Enable

Y RW

EPDATA

   

Enable or disable interrupt for event EPDATA

     

Disabled

0

Disable

     

Enabled

1

Enable

INTENSET

Address offset: 0x304

Enable interrupt

Bit number 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 5 4 3 2 1 0
ID             Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

USBRESET

   

Write '1' to enable interrupt for event USBRESET

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

B RW

STARTED

   

Write '1' to enable interrupt for event STARTED

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

C-J RW

ENDEPIN[i] (i=0..7)

   

Write '1' to enable interrupt for event ENDEPIN[i]

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

K RW

EP0DATADONE

   

Write '1' to enable interrupt for event EP0DATADONE

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

L RW

ENDISOIN

   

Write '1' to enable interrupt for event ENDISOIN

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

M-T RW

ENDEPOUT[i] (i=0..7)

   

Write '1' to enable interrupt for event ENDEPOUT[i]

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

U RW

ENDISOOUT

   

Write '1' to enable interrupt for event ENDISOOUT

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

V RW

SOF

   

Write '1' to enable interrupt for event SOF

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

W RW

USBEVENT

   

Write '1' to enable interrupt for event USBEVENT

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

X RW

EP0SETUP

   

Write '1' to enable interrupt for event EP0SETUP

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

Y RW

EPDATA

   

Write '1' to enable interrupt for event EPDATA

     

Set

1

Enable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

INTENCLR

Address offset: 0x308

Disable interrupt

Bit number 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 5 4 3 2 1 0
ID             Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

USBRESET

   

Write '1' to disable interrupt for event USBRESET

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

B RW

STARTED

   

Write '1' to disable interrupt for event STARTED

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

C-J RW

ENDEPIN[i] (i=0..7)

   

Write '1' to disable interrupt for event ENDEPIN[i]

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

K RW

EP0DATADONE

   

Write '1' to disable interrupt for event EP0DATADONE

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

L RW

ENDISOIN

   

Write '1' to disable interrupt for event ENDISOIN

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

M-T RW

ENDEPOUT[i] (i=0..7)

   

Write '1' to disable interrupt for event ENDEPOUT[i]

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

U RW

ENDISOOUT

   

Write '1' to disable interrupt for event ENDISOOUT

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

V RW

SOF

   

Write '1' to disable interrupt for event SOF

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

W RW

USBEVENT

   

Write '1' to disable interrupt for event USBEVENT

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

X RW

EP0SETUP

   

Write '1' to disable interrupt for event EP0SETUP

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

Y RW

EPDATA

   

Write '1' to disable interrupt for event EPDATA

     

Clear

1

Disable

     

Disabled

0

Read: Disabled

     

Enabled

1

Read: Enabled

EVENTCAUSE

Address offset: 0x400

Details on what caused the USBEVENT event

Bit number 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 5 4 3 2 1 0
ID                                         E D C B               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

ISOOUTCRC

   

CRC error was detected on isochronous OUT endpoint 8. Write '1' to clear.

     

NotDetected

0

No error detected

     

Detected

1

Error detected

B RW

SUSPEND

   

Signals that USB lines have been idle long enough for the device to enter suspend. Write '1' to clear.

     

NotDetected

0

Suspend not detected

     

Detected

1

Suspend detected

C RW

RESUME

   

Signals that a RESUME condition (K state or activity restart) has been detected on USB lines. Write '1' to clear.

     

NotDetected

0

Resume not detected

     

Detected

1

Resume detected

D RW

USBWUALLOWED

   

USB MAC has been woken up and operational. Write '1' to clear.

     

NotAllowed

0

Wake up not allowed

     

Allowed

1

Wake up allowed

E RW

READY

   

USB device is ready for normal operation. Write '1' to clear.

     

NotDetected

0

USBEVENT was not issued due to USBD peripheral ready

     

Ready

1

USBD peripheral is ready

HALTED.EPIN[n] (n=0..7)

Address offset: 0x420 + (n × 0x4)

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

GETSTATUS

   

IN endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

     

NotHalted

0

Endpoint is not halted

     

Halted

1

Endpoint is halted

HALTED.EPOUT[n] (n=0..7)

Address offset: 0x444 + (n × 0x4)

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

GETSTATUS

   

OUT endpoint halted status. Can be used as is as response to a GetStatus() request to endpoint.

     

NotHalted

0

Endpoint is not halted

     

Halted

1

Endpoint is halted

EPSTATUS

Address offset: 0x468

Provides information on which endpoint's EasyDMA registers have been captured

Bit number 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 5 4 3 2 1 0
ID               R Q P O N M L K J               I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A-I RW

EPIN[i] (i=0..8)

   

Captured state of endpoint's EasyDMA registers. Write '1' to clear.

     

NoData

0

EasyDMA registers have not been captured for this endpoint

     

DataDone

1

EasyDMA registers have been captured for this endpoint

J-R RW

EPOUT[i] (i=0..8)

   

Captured state of endpoint's EasyDMA registers. Write '1' to clear.

     

NoData

0

EasyDMA registers have not been captured for this endpoint

     

DataDone

1

EasyDMA registers have been captured for this endpoint

EPDATASTATUS

Address offset: 0x46C

Provides information on which endpoint(s) an acknowledged data transfer has occurred (EPDATA event)

Bit number 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 5 4 3 2 1 0
ID                 N M L K J I H                   G F E D C B A  
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A-G RW

EPIN[i] (i=1..7)

   

Acknowledged data transfer on this IN endpoint. Write '1' to clear.

     

NotDone

0

No acknowledged data transfer on this endpoint

     

DataDone

1

Acknowledged data transfer on this endpoint has occurred

H-N RW

EPOUT[i] (i=1..7)

   

Acknowledged data transfer on this OUT endpoint. Write '1' to clear.

     

NotStarted

0

No acknowledged data transfer on this endpoint

     

Started

1

Acknowledged data transfer on this endpoint has occurred

USBADDR

Address offset: 0x470

Device USB address

Bit number 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 5 4 3 2 1 0
ID                                                   A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

ADDR

   

Device USB address

BMREQUESTTYPE

Address offset: 0x480

SETUP data, byte 0, bmRequestType

Bit number 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 5 4 3 2 1 0
ID                                                 C B B A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

RECIPIENT

   

Data transfer type

     

Device

0

Device

     

Interface

1

Interface

     

Endpoint

2

Endpoint

     

Other

3

Other

B R

TYPE

   

Data transfer type

     

Standard

0

Standard

     

Class

1

Class

     

Vendor

2

Vendor

C R

DIRECTION

   

Data transfer direction

     

HostToDevice

0

Host-to-device

     

DeviceToHost

1

Device-to-host

BREQUEST

Address offset: 0x484

SETUP data, byte 1, bRequest

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

BREQUEST

   

SETUP data, byte 1, bRequest. Values provided for standard requests only, user must implement class and vendor values.

     

STD_GET_STATUS

0

Standard request GET_STATUS

     

STD_CLEAR_FEATURE

1

Standard request CLEAR_FEATURE

     

STD_SET_FEATURE

3

Standard request SET_FEATURE

     

STD_SET_ADDRESS

5

Standard request SET_ADDRESS

     

STD_GET_DESCRIPTOR

6

Standard request GET_DESCRIPTOR

     

STD_SET_DESCRIPTOR

7

Standard request SET_DESCRIPTOR

     

STD_GET_CONFIGURATION

8

Standard request GET_CONFIGURATION

     

STD_SET_CONFIGURATION

9

Standard request SET_CONFIGURATION

     

STD_GET_INTERFACE

10

Standard request GET_INTERFACE

     

STD_SET_INTERFACE

11

Standard request SET_INTERFACE

     

STD_SYNCH_FRAME

12

Standard request SYNCH_FRAME

WVALUEL

Address offset: 0x488

SETUP data, byte 2, LSB of wValue

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WVALUEL

   

SETUP data, byte 2, LSB of wValue

WVALUEH

Address offset: 0x48C

SETUP data, byte 3, MSB of wValue

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WVALUEH

   

SETUP data, byte 3, MSB of wValue

WINDEXL

Address offset: 0x490

SETUP data, byte 4, LSB of wIndex

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WINDEXL

   

SETUP data, byte 4, LSB of wIndex

WINDEXH

Address offset: 0x494

SETUP data, byte 5, MSB of wIndex

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WINDEXH

   

SETUP data, byte 5, MSB of wIndex

WLENGTHL

Address offset: 0x498

SETUP data, byte 6, LSB of wLength

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WLENGTHL

   

SETUP data, byte 6, LSB of wLength

WLENGTHH

Address offset: 0x49C

SETUP data, byte 7, MSB of wLength

Bit number 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 5 4 3 2 1 0
ID                                                 A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

WLENGTHH

   

SETUP data, byte 7, MSB of wLength

SIZE.EPOUT[n] (n=0..7)

Address offset: 0x4A0 + (n × 0x4)

Number of bytes received last in the data stage of this OUT endpoint

Write to any value to accept further OUT traffic on this endpoint, and overwrite the intermediate buffer

Bit number 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 5 4 3 2 1 0
ID                                                   A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

SIZE

   

Number of bytes received last in the data stage of this OUT endpoint

SIZE.ISOOUT

Address offset: 0x4C0

Number of bytes received last on this ISO OUT data endpoint

Bit number 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 5 4 3 2 1 0
ID                               B             A A A A A A A A A A
Reset 0x00010000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

SIZE

   

Number of bytes received last on this ISO OUT data endpoint

B R

ZERO

   

Zero-length data packet received

     

Normal

0

No zero-length data received, use value in SIZE

     

ZeroData

1

Zero-length data received, ignore value in SIZE

ENABLE

Address offset: 0x500

Enable USB

After writing Disabled to this register, reading the register will return Enabled until USBD is completely disabled.

Bit number 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 5 4 3 2 1 0
ID                                                             A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

ENABLE

   

Enable USB

     

Disabled

0

USB peripheral is disabled

     

Enabled

1

USB peripheral is enabled

USBPULLUP

Address offset: 0x504

Control of the USB pull-up

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

CONNECT

   

Control of the USB pull-up on the D+ line

     

Disabled

0

Pull-up is disconnected

     

Enabled

1

Pull-up is connected to D+

DPDMVALUE

Address offset: 0x508

State D+ and D- lines will be forced into by the DPDMDRIVE task. The DPDMNODRIVE task reverts the control of the lines to MAC IP (no forcing).

Bit number 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 5 4 3 2 1 0
ID                                                       A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

STATE

   

State D+ and D- lines will be forced into by the DPDMDRIVE task

     

Resume

1

D+ forced low, D- forced high (K state) for a timing preset in hardware (50 μs or 5 ms, depending on bus state)

     

J

2

D+ forced high, D- forced low (J state)

     

K

4

D+ forced low, D- forced high (K state)

DTOGGLE

Address offset: 0x50C

Data toggle control and status

First write this register with VALUE=Nop to select the endpoint, then either read it to get the status from VALUE, or write it again with VALUE=Data0 or Data1

Bit number 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 5 4 3 2 1 0
ID                                             C C B         A A A
Reset 0x00000100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

EP

   

Select bulk endpoint number

B RW

IO

   

Selects IN or OUT endpoint

     

Out

0

Selects OUT endpoint

     

In

1

Selects IN endpoint

C RW

VALUE

   

Data toggle value

     

Nop

0

No action on data toggle when writing the register with this value

     

Data0

1

Data toggle is DATA0 on endpoint set by EP and IO

     

Data1

2

Data toggle is DATA1 on endpoint set by EP and IO

EPINEN

Address offset: 0x510

Endpoint IN enable

Bit number 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 5 4 3 2 1 0
ID                                               I H G F E D C B A
Reset 0x00000001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
ID Access Field Value ID Value Description
A-H RW

IN[i] (i=0..7)

   

Enable IN endpoint i

     

Disable

0

Disable endpoint IN i (no response to IN tokens)

     

Enable

1

Enable endpoint IN i (response to IN tokens)

I RW

ISOIN

   

Enable ISO IN endpoint

     

Disable

0

Disable ISO IN endpoint 8

     

Enable

1

Enable ISO IN endpoint 8

EPOUTEN

Address offset: 0x514

Endpoint OUT enable

Bit number 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 5 4 3 2 1 0
ID                                               I H G F E D C B A
Reset 0x00000001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
ID Access Field Value ID Value Description
A-H RW

OUT[i] (i=0..7)

   

Enable OUT endpoint i

     

Disable

0

Disable endpoint OUT i (no response to OUT tokens)

     

Enable

1

Enable endpoint OUT i (response to OUT tokens)

I RW

ISOOUT

   

Enable ISO OUT endpoint 8

     

Disable

0

Disable ISO OUT endpoint 8

     

Enable

1

Enable ISO OUT endpoint 8

EPSTALL

Address offset: 0x518

STALL endpoints

Bit number 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 5 4 3 2 1 0
ID                                               C B         A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A W

EP

   

Select endpoint number

B W

IO

   

Selects IN or OUT endpoint

     

Out

0

Selects OUT endpoint

     

In

1

Selects IN endpoint

C W

STALL

   

Stall selected endpoint

     

UnStall

0

Don't stall selected endpoint

     

Stall

1

Stall selected endpoint

ISOSPLIT

Address offset: 0x51C

Controls the split of ISO buffers

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

SPLIT

   

Controls the split of ISO buffers

     

OneDir

0x0000

Full buffer dedicated to either ISO IN or OUT

     

HalfIN

0x0080

Lower half for IN, upper half for OUT

FRAMECNTR

Address offset: 0x520

Returns the current value of the start of frame counter

Bit number 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 5 4 3 2 1 0
ID                                           A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

FRAMECNTR

   

Returns the current value of the start of frame counter

LOWPOWER

Address offset: 0x52C

Controls USBD peripheral low power mode during USB suspend

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

LOWPOWER

   

Controls USBD peripheral low-power mode during USB suspend

     

ForceNormal

0

Software must write this value to exit low power mode and before performing a remote wake-up

     

LowPower

1

Software must write this value to enter low power mode after DMA and software have finished interacting with the USB peripheral

ISOINCONFIG

Address offset: 0x530

Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent

Bit number 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 5 4 3 2 1 0
ID                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

RESPONSE

   

Controls the response of the ISO IN endpoint to an IN token when no data is ready to be sent

     

NoResp

0

Endpoint does not respond in that case

     

ZeroData

1

Endpoint responds with a zero-length data packet in that case

EPIN[n].PTR (n=0..7)

Address offset: 0x600 + (n × 0x14)

Data pointer

Bit number 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 5 4 3 2 1 0
ID A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

PTR

   

Data pointer

See the memory chapter for details about which memories are available for EasyDMA.

EPIN[n].MAXCNT (n=0..7)

Address offset: 0x604 + (n × 0x14)

Maximum number of bytes to transfer

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

MAXCNT

 

[64..0]

Maximum number of bytes to transfer

EPIN[n].AMOUNT (n=0..7)

Address offset: 0x608 + (n × 0x14)

Number of bytes transferred in the last transaction

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

AMOUNT

   

Number of bytes transferred in the last transaction

ISOIN.PTR

Address offset: 0x6A0

Data pointer

Bit number 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 5 4 3 2 1 0
ID A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

PTR

   

Data pointer

See the memory chapter for details about which memories are available for EasyDMA.

ISOIN.MAXCNT

Address offset: 0x6A4

Maximum number of bytes to transfer

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

MAXCNT

 

[1023..1]

Maximum number of bytes to transfer

ISOIN.AMOUNT

Address offset: 0x6A8

Number of bytes transferred in the last transaction

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

AMOUNT

   

Number of bytes transferred in the last transaction

EPOUT[n].PTR (n=0..7)

Address offset: 0x700 + (n × 0x14)

Data pointer

Bit number 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 5 4 3 2 1 0
ID A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

PTR

   

Data pointer

See the memory chapter for details about which memories are available for EasyDMA.

EPOUT[n].MAXCNT (n=0..7)

Address offset: 0x704 + (n × 0x14)

Maximum number of bytes to transfer

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

MAXCNT

 

[64..0]

Maximum number of bytes to transfer

EPOUT[n].AMOUNT (n=0..7)

Address offset: 0x708 + (n × 0x14)

Number of bytes transferred in the last transaction

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

AMOUNT

   

Number of bytes transferred in the last transaction

ISOOUT.PTR

Address offset: 0x7A0

Data pointer

Bit number 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 5 4 3 2 1 0
ID A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

PTR

   

Data pointer

See the memory chapter for details about which memories are available for EasyDMA.

ISOOUT.MAXCNT

Address offset: 0x7A4

Maximum number of bytes to transfer

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A RW

MAXCNT

   

Maximum number of bytes to transfer

ISOOUT.AMOUNT

Address offset: 0x7A8

Number of bytes transferred in the last transaction

Bit number 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 5 4 3 2 1 0
ID                                 A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ID Access Field Value ID Value Description
A R

AMOUNT

   

Number of bytes transferred in the last transaction

Electrical specification

USB Electrical Specification

Symbol Description Min. Typ. Max. Units
RUSB,PU,ACTIVE

Value of pull-up on D+, bus active (upstream device transmitting)

1425 2300 3090
RUSB,PU,IDLE

Value of pull-up on D+, bus idle

900 1200 1575
tUSB,DETRST

Minimum duration of an SE0 state to be detected as a USB reset condition

µs
fUSB,CLK

Frequency of local clock, USB active

48 MHz
fUSB,TOL

Accuracy of local clock, USB active1

±1000 ppm
TUSB,JITTER

Jitter on USB local clock, USB active

±1 ns
1 The local clock can be stopped during USB suspend