2.9.10. USB

2.9.10.1. USB Design on EVMs

The USB module on AM62x has a dual-role USB controller. The USB module works in host mode when the USB ID pin is grounded, or in device mode (also called peripheral mode) when the USB ID pin is floating.

The USB ID pin can either be permanently grounded on the board to design it as a host-only port, or the USB ID pin can be routed to the USB micro-AB receptacle and controlled by the USB cable plugged in. In the latter case, the USB port works in host mode when a micro-A cable is attached, or in device mode when a micro-B cable is attached.

AM62x Starter Kit (SKEVM) has one USB port with a USB2.0 USB-A stacked receptable with two ports. It works in host-only mode. Another USB port is routed to a USB type-C receptacle. It works in dual-role mode.

2.9.10.2. Examining USB Host Mode

USB Related Console Log

When the EVM has a USB port configured in host mode, the following boot log output should be observed on the Linux console. This output indicates that the USB host driver is loaded.

[   29.001328] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[   29.037632] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[   29.186767] xhci-hcd xhci-hcd.0.auto: hcc params 0x200073c9 hci version 0x100 quirks 0x00000020000 10010
[   29.305453] xhci-hcd xhci-hcd.0.auto: irq 365, io mem 0x0f410000
[   29.449651] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
[   29.590975] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   29.859185] usb usb1: Product: xHCI Host Controller
[   29.928979] usb usb1: Manufacturer: Linux 5.4.106-g023faefa70 xhci-hcd
[   30.086734] usb usb1: SerialNumber: xhci-hcd.0.auto
[   30.317787] hub 1-0:1.0: USB hub found
[   30.492891] hub 1-0:1.0: 1 port detected
[   30.637439] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[   30.725167] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[   30.785456] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0 SuperSpeed
[   30.846347] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[   30.884085] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.10
[   30.906256] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   30.957901] usb usb2: Product: xHCI Host Controller
[   31.033270] usb usb2: Manufacturer: Linux 5.4.106-g023faefa70 xhci-hcd
[   31.108026] usb usb2: SerialNumber: xhci-hcd.0.auto
[   31.125249] hub 2-0:1.0: USB hub found
[   31.157871] hub 2-0:1.0: 1 port detected

The command lsusb can be used to check if the USB host mode is ready to use. For example,

# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Note

The lsusb command log above shows the logical USB buses. Though 3.0 root hub is listed in the output, this output does not mean that the USB port supports USB super-speed. Please check the USB capability in the device TRM.

Enumerating USB Device

Once a USB device is plugged in, the Linux console shows USB enumeration messages by default. The following is an example of the message when a USB2.0 thumb drive is attached.

[ 5855.252039] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 5855.407252] usb 1-1: New USB device found, idVendor=8564, idProduct=4000, bcdDevice= 0.3a
[ 5855.415447] usb 1-1: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[ 5855.423540] usb 1-1: Product: Transcend
[ 5855.428127] usb 1-1: Manufacturer: TS-RDF5
[ 5855.432971] usb 1-1: SerialNumber: 000000000037
[ 5855.475114] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 5855.481893] scsi host0: usb-storage 1-1:1.0
[ 5855.486956] usbcore: registered new interface driver usb-storage
[ 5856.517750] scsi 0:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS3A PQ: 0 ANSI: 6
[ 5856.846809] sd 0:0:0:0: [sda] 15523840 512-byte logical blocks: (7.95 GB/7.40 GiB)
[ 5856.855366] sd 0:0:0:0: [sda] Write Protect is off
[ 5856.866184] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 5856.899954]  sda: sda1 sda2
[ 5856.916237] sd 0:0:0:0: [sda] Attached SCSI removable disk

The Processor SDK Linux automatically mounts USB block devices. Use the df command to check the mounting points of the enumerated USB thumb drive:

# df | grep sda
/dev/sda2                 7497892   1366420   5730884  20% /run/media/sda2
/dev/sda1                   76630      1876     74754   3% /run/media/sda1

This example shows that the two partitions of the USB thumb drive are mounted at /run/media/sda1 and /run/media/sda2. Many Linux commands can be used to access the contents of the partitions. For example,

# ls /run/media/sda1
tiboot3.bin  tispl.bin  u-boot.img  uEnv.txt