2.10.7. USB¶
2.10.7.1. USB Design on EVMs¶
The USB module on AM64x 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.
AM64x GPEVM has one USB port with a USB2.0 micro-AB receptacle. The USB port works in host-only mode when a jumper is placed on J23 (next to the USB receptacle). The jumper grounds the USB ID pin. The USB port works in dual-role mode when jumper J23 is open.
AM64x StartKit (SKEVM) has one USB port with a USB3.0 USB-A receptable. The USB port works in host-only mode.
2.10.7.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
If a USB host port has a micro-AB receptacle, then a USB microA-to-typeA adapter can be used to plug a USB device into the USB host port. A USB microA-to-typeA adapter is shown below.
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