[iMX93EVK]: Configuring iMX93EVK to act as a USB Mass Storage device.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

[iMX93EVK]: Configuring iMX93EVK to act as a USB Mass Storage device.

[iMX93EVK]: Configuring iMX93EVK to act as a USB Mass Storage device.

This article is rather short that only mentions the script that is needed to make an iMX93EVK act as a USB mass storage device so that whenever you connect your iMX device to a windows/linux system via USB, it should get enumerated something like a usb drive. 

The storage that is used in this example is mmc so the expectation is that you have inserted a mmc card in the slot.

Below is the script:-


#!/bin/sh

 

# This composite gadget include function:

# - MASS STORAGE

 

 

#

# Exit status is 0 for PASS, nonzero for FAIL

#

STATUS=0

 

# Check if there is udc available, if not, return fail

UDC_DIR=/sys/class/udc

if test "$(ls -A "$UDC_DIR")"; then

echo "The available udc:"

for entry in "$UDC_DIR"/*

do

echo "$entry"

done

else

STATUS=1

echo "No udc available!"

exit $STATUS;

fi

 

id=1;

udc_name=ci_hdrc.0

#back_file=/dev/mmcblk1

back_file=/tmp/lun0.img

 

mkdir /sys/kernel/config/usb_gadget/g$id

cd /sys/kernel/config/usb_gadget/g$id

 

# Use NXP VID, i.MX8QXP PID

echo 0x1fc9 > idVendor

echo 0x12cf > idProduct

 

mkdir strings/0x409

echo 123456ABCDEF > strings/0x409/serialnumber

echo NXP > strings/0x409/manufacturer

echo "NXP iMX USB Composite Gadget" > strings/0x409/product

 

mkdir configs/c.1

mkdir configs/c.1/strings/0x409

 

echo 5 > configs/c.1/MaxPower

echo 0xc0 > configs/c.1/bmAttributes

 

mkdir functions/mass_storage.1

echo $back_file > functions/mass_storage.1/lun.0/file

ln -s functions/mass_storage.1 configs/c.1/

 

echo $udc_name > UDC



First execute the script.
After that insert the g_mass_storage module in the kernel by executing :-

modprobe g_mass_storage file=/dev/mmcblk1 removable=1


In the dmesg output, you will see something like below:-

 

gauravsharma7_0-1714041731840.png


After that you can connect a C type USB cable to the USB1 port of imx93evk and the other end to any USB ports of a laptop. The moment it is connected, you would be able to see a USB drive similar to what you get when we connect a pen-drive. 


Comments

The simple following three lines work with i.MX93 evk.

modprobe usbcore
modprobe usb_f_mass_storage
modprobe g_mass_storage file=/dev/mmcblk0 removable=1

@hustdage yeah I didn't try via inserting usbcore and usb_f_mass_storage module. I will give it a try. Thanks for the info  

%3CLINGO-SUB%20id%3D%22lingo-sub-1854680%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%5BiMX93EVK%5D%3A%20Configuring%20iMX93EVK%20to%20act%20as%20a%20USB%20Mass%20Storage%20device.%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1854680%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%0A%3CP%3EThis%20article%20is%20rather%20short%20that%20only%20mentions%20the%20script%20that%20is%20needed%20to%20make%20an%20iMX93EVK%20act%20as%20a%20USB%20mass%20storage%20device%20so%20that%20whenever%20you%20connect%20your%20iMX%20device%20to%20a%20windows%2Flinux%20system%20via%20USB%2C%20it%20should%20get%20enumerated%20something%20like%20a%20usb%20drive.%26nbsp%3B%3CBR%20%2F%3E%3CBR%20%2F%3EThe%20storage%20that%20is%20used%20in%20this%20example%20is%20mmc%20so%20the%20expectation%20is%20that%20you%20have%20inserted%20a%20mmc%20card%20in%20the%20slot.%3CBR%20%2F%3E%3CBR%20%2F%3EBelow%20is%20the%20script%3A-%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23!%2Fbin%2Fsh%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%20This%20composite%20gadget%20include%20function%3A%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%20-%20MASS%20STORAGE%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%20Exit%20status%20is%200%20for%20PASS%2C%20nonzero%20for%20FAIL%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3ESTATUS%3D0%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%20Check%20if%20there%20is%20udc%20available%2C%20if%20not%2C%20return%20fail%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3EUDC_DIR%3D%2Fsys%2Fclass%2Fudc%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eif%20test%20%22%24(ls%20-A%20%22%24UDC_DIR%22)%22%3B%20then%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%22The%20available%20udc%3A%22%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Efor%20entry%20in%20%22%24UDC_DIR%22%2F*%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Edo%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%22%24entry%22%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Edone%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eelse%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3ESTATUS%3D1%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%22No%20udc%20available!%22%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eexit%20%24STATUS%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Efi%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eid%3D1%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eudc_name%3Dci_hdrc.0%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23back_file%3D%2Fdev%2Fmmcblk1%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eback_file%3D%2Ftmp%2Flun0.img%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emkdir%20%2Fsys%2Fkernel%2Fconfig%2Fusb_gadget%2Fg%24id%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Ecd%20%2Fsys%2Fkernel%2Fconfig%2Fusb_gadget%2Fg%24id%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%23%20Use%20NXP%20VID%2C%20i.MX8QXP%20PID%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%200x1fc9%20%26gt%3B%20idVendor%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%200x12cf%20%26gt%3B%20idProduct%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emkdir%20strings%2F0x409%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20123456ABCDEF%20%26gt%3B%20strings%2F0x409%2Fserialnumber%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20NXP%20%26gt%3B%20strings%2F0x409%2Fmanufacturer%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%22NXP%20iMX%20USB%20Composite%20Gadget%22%20%26gt%3B%20strings%2F0x409%2Fproduct%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emkdir%20configs%2Fc.1%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emkdir%20configs%2Fc.1%2Fstrings%2F0x409%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%205%20%26gt%3B%20configs%2Fc.1%2FMaxPower%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%200xc0%20%26gt%3B%20configs%2Fc.1%2FbmAttributes%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emkdir%20functions%2Fmass_storage.1%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%24back_file%20%26gt%3B%20functions%2Fmass_storage.1%2Flun.0%2Ffile%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eln%20-s%20functions%2Fmass_storage.1%20configs%2Fc.1%2F%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%20lang%3D%22en-US%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Eecho%20%24udc_name%20%26gt%3B%20UDC%3C%2FP%3E%0A%3CP%3E%3CBR%20%2F%3E%3CBR%20%2F%3EFirst%20execute%20the%20script.%3CBR%20%2F%3EAfter%20that%20insert%20the%20g_mass_storage%20module%20in%20the%20kernel%20by%20executing%20%3A-%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3Emodprobe%20g_mass_storage%20file%3D%2Fdev%2Fmmcblk1%20removable%3D1%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CFONT%20face%3D%22arial%2Chelvetica%2Csans-serif%22%3EIn%20the%20dmesg%20output%2C%20you%20will%20see%20something%20like%20below%3A-%3C%2FFONT%3E%3C%2FP%3E%0A%3CP%20style%3D%22margin%3A%200in%3B%20font-family%3A%20Calibri%3B%20font-size%3A%2011.0pt%3B%22%3E%26nbsp%3B%3C%2FP%3E%0A%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gauravsharma7_0-1714041731840.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gauravsharma7_0-1714041731840.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F275840i411C3EC3622A7EF2%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gauravsharma7_0-1714041731840.png%22%20alt%3D%22gauravsharma7_0-1714041731840.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%0A%3CP%3E%3CBR%20%2F%3EAfter%20that%20you%20can%20connect%20a%20C%20type%20USB%20cable%20to%20the%20USB1%20port%20of%20imx93evk%20and%20the%20other%20end%20to%20any%20USB%20ports%20of%20a%20laptop.%20The%20moment%20it%20is%20connected%2C%20you%20would%20be%20able%20to%20see%20a%20USB%20drive%20similar%20to%20what%20you%20get%20when%20we%20connect%20a%20pen-drive.%26nbsp%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%0A%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1854680%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX%208%20Family%20%7C%20i.MX%208QuadMax%20(8QM)%20%7C%208QuadPlus%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX%208M%20%7C%20i.MX%208M%20Mini%20%7C%20i.MX%208M%20Nano%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX6%20All%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX6Quad%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX6S%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX7Dual%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ei.MX8ULP%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ELinux%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1856426%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20%5BiMX93EVK%5D%3A%20Configuring%20iMX93EVK%20to%20act%20as%20a%20USB%20Mass%20Storage%20device.%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1856426%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F231754%22%20target%3D%22_blank%22%3E%40hustdage%3C%2FA%3E%26nbsp%3Byeah%20I%20didn't%20try%20via%20inserting%20usbcore%20and%20usb_f_mass_storage%20module.%20I%20will%20give%20it%20a%20try.%20Thanks%20for%20the%20info%20%3CLI-EMOJI%20id%3D%22lia_slightly-smiling-face%22%20title%3D%22%3Aslightly_smiling_face%3A%22%3E%3C%2FLI-EMOJI%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1855412%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20%5BiMX93EVK%5D%3A%20Configuring%20iMX93EVK%20to%20act%20as%20a%20USB%20Mass%20Storage%20device.%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1855412%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EThe%20simple%20following%20three%20lines%20work%20with%20i.MX93%20evk.%3C%2FP%3E%3CP%3Emodprobe%20usbcore%3CBR%20%2F%3Emodprobe%20usb_f_mass_storage%3CBR%20%2F%3Emodprobe%20g_mass_storage%20file%3D%2Fdev%2Fmmcblk0%20removable%3D1%3C%2FP%3E%3C%2FLINGO-BODY%3E
100% helpful (1/1)
Version history
Last update:
‎04-25-2024 03:49 AM
Updated by: