38.6.2.6 Address Setup

The USB device address is set up according to the USB protocol.

  • After all kinds of resets, the USB device address is 0.
  • The host starts a SETUP transaction with a SET_ADDRESS (addr) request.
  • The user writes this address to the USB Address (USBHS_DEVCTRL.UADD) field, and writes a zero to the Address Enable (USBHS_DEVCTRL.ADDEN) bit, so the actual address is still 0.
  • The user sends a zero-length IN packet from the control endpoint.
  • The user enables the recorded USB device address by writing a one to USBHS_DEVCTRL.ADDEN.

Once the USB device address is configured, the controller filters the packets to accept only those targeting the address stored in USBHS_DEVCTRL.UADD.

USBHS_DEVCTRL.UADD and USBHS_DEVCTRL.ADDEN must not be written all at once.

USBHS_DEVCTRL.UADD and USBHS_DEVCTRL.ADDEN are cleared:

  • on a hardware reset,
  • when the USBHS is disabled (USBHS_CTRL.USBE = 0),
  • when a USB reset is detected.

When USBHS_DEVCTRL.UADD or USBHS_DEVCTRL.ADDEN is cleared, the default device address 0 is used.