Open main menu

DAVE Developer's Wiki β

DESK-MX6UL-L/Peripherals/USB OTG

< DESK-MX6UL-L
Revision as of 14:31, 20 July 2021 by U0007 (talk | contribs) (U0007 moved page AXEL ULite SOM/DESK-MX6UL-L/Pheripherals/USB OTG to DESK-MX6UL-L/Pheripherals/USB OTG without leaving a redirect)

History
Version Issue Date Notes
1.0.0 Apr 2021 First DESK release


Contents

Peripheral USB OTGEdit

The USB OTG ports can be configured as Host or Device mode depending on the device tree configuration. In OTG mode they can be easily tested using the Mass Storage Gadget, which lets the device export a file as a mass storage device to the connected PC.


The USB OTG peripheral is not available - as default option - on AXEL ULite EVK. Please contact Sales department for this option.
This peripheral is available on the i.MX6UL standard product SBCLynx

Device tree configurationEdit

Here below an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM where USB OTG1 is configured as otg while the USB OTG2 port is configured in host mode:

From imx6ul-axelulite-cb003a.dts:

&usbotg2 {
        vbus-supply = <&reg_usb_otg2_vbus>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_usb_otg2_id>;
        disable-over-current;
        dr_mode = "host";
        status = "okay";
};
...
...
&iomuxc {
...
...
        usb {
                pinctrl_usb_otg2_id: usbotg2idgrp {
                        fsl,pins = <
                                MX6UL_PAD_ENET2_TX_CLK__ANATOP_OTG2_ID  0x17059         /* OTG ID */
                        >;
                };
                pinctrl_usb_otg2: usbotg2grp {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO02__GPIO1_IO02        0x17059         /* OTG PWR */
                                MX6UL_PAD_UART2_CTS_B__GPIO1_IO22       0x10b0          /* OTG OC */
                        >;
                };
        };

Accessing the peripheralEdit

Linux messages at boot timeEdit

...
...
[    1.939073] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[    1.945990] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.953298] usb usb2: Product: EHCI Host Controller
[    1.958211] usb usb2: Manufacturer: Linux 4.14.98-desk-mx6ul-l-1.0.1 ehci_hcd
[    1.965426] usb usb2: SerialNumber: ci_hdrc.1
[    3.667157] usbcore: registered new interface driver usbhid
[    3.672771] usbhid: USB HID core driver
...
...

Usage in Host modeEdit

When a USB peripheral is inserted, in the following example a memory mass storage device, the kernel recognizes the device (i.e. class, vendor id, product id, etc.)

root@desk-mx6ul-axelulite:~# [   40.533219] usb 2-1: new high-speed USB device number 2 using ci_hdrc
[   40.775605] usb 2-1: New USB device found, idVendor=0951, idProduct=1665
[   40.782554] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   40.797569] usb 2-1: Product: DataTraveler 2.0
[   40.802174] usb 2-1: Manufacturer: Kingston
[   40.813793] usb 2-1: SerialNumber: 50E549C202681071F97202CB
[   40.827294] usb-storage 2-1:1.0: USB Mass Storage device detected
[   40.850364] scsi host0: usb-storage 2-1:1.0
[   41.926319] scsi 0:0:0:0: Direct-Access     Kingston DataTraveler 2.0 0000 PQ: 0 ANSI: 4
[   41.953445] sd 0:0:0:0: [sda] 15151168 512-byte logical blocks: (7.76 GB/7.22 GiB)
[   41.976216] sd 0:0:0:0: [sda] Write Protect is off
[   41.981055] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00
[   42.003870] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[   42.040175]  sda: sda1
[   42.063618] sd 0:0:0:0: [sda] Attached SCSI removable disk

root@desk-mx6ul-axelulite:~#

Usage with mass-storageEdit

root@desk-mx6ul-axelulite:~# dd if=/dev/zero of=mass_storage count=32 bs=1M
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 3.62181 s, 9.3 MB/s
root@desk-mx6ul-axelulite:~# mkfs.msdos mass_storage
mkfs.fat 4.1 (2017-01-24)
root@desk-mx6ul-axelulite:~# mkdir loop
root@desk-mx6ul-axelulite:~# mount -o loop mass_storage loop
root@desk-mx6ul-axelulite:~# echo "Test USB OTG with mass storage device" > loop/usb.txt
root@desk-mx6ul-axelulite:~# umount loop

then insert the g_mass_storage kernel module driver enabling an Windows PC to see it as a removable device

root@desk-mx6ul-axelulite:~# modprobe g_mass_storage removable=y file=mass_storage
[  137.706620] Mass Storage Function, version: 2009/09/11
[  137.711809] LUN: removable file: (no medium)
[  137.731390] LUN: removable file: /home/root/mass_storage
[  137.737101] Number of LUNs=1
[  137.740256] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
[  137.751272] g_mass_storage gadget: userspace failed to provide iSerialNumber
[  137.760299] g_mass_storage gadget: g_mass_storage ready
root@desk-mx6ul-axelulite:~#

Once the USB cable is connected to the PC, the kernel prints the following messages:

root@desk-mx6ul-axelulite:~# [  214.837430] g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

and the Windows PC activate the driver and the disk is available as a Drive Unit (with the usb.txt file available).

Additional informationEdit

More information about Mass Storage Gadget driver is given in the kernel tree under Documentation/usb/mass-storage.txt