Difference between revisions of "UCM-iMX93: Yocto Linux: How-To Guide"
(Created page with "=Device Tree= == Available Device Tree Files == The current release includes the following '''dtb''' files: {| class="wikitable" style="text-align:left;" |- | align="center" |...") |
|||
(12 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
|- | |- | ||
| align="" |ucm-imx93.dtb | | align="" |ucm-imx93.dtb | ||
+ | | align="" |default hardware configuration + lvds display | ||
+ | | align="" |P7/P8 lvds / touch is in use | ||
+ | |- | ||
+ | | align="" |ucm-imx93-mipi.dtb | ||
| align="" |default hardware configuration + mipi dsi display | | align="" |default hardware configuration + mipi dsi display | ||
− | | align="" |P11/P12 mipi | + | | align="" |P11/P12 mipi-dsi / touch is in use |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| align="" |ucm-imx93-headless.dtb | | align="" |ucm-imx93-headless.dtb | ||
| align="" |default hardware configuration w/out any display | | align="" |default hardware configuration w/out any display | ||
+ | | align="" | | ||
+ | |- | ||
+ | | align="" |ucm-imx93-mipi-csi.dtb | ||
+ | | align="" |default hardware configuration + lvds display + camera | ||
+ | | align="" |see [[#Camera]] | ||
+ | |- | ||
+ | | align="" |ucm-imx93-eb-eth.dtb | ||
+ | | align="" |default hardware configuration + lvds display + Ethernet extension board | ||
| align="" | | | align="" | | ||
|- | |- | ||
Line 53: | Line 61: | ||
|} | |} | ||
+ | = Serial Console = | ||
+ | UCM-iMX93 provides serial console on UART1.</br> | ||
+ | SB-UCMIMX93 evaluation carrier-board exposes the console UART via CP2104 serial-to-USB bridge on connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P16''']]. | ||
+ | == Connecting to a host PC == | ||
+ | # Use a micro-USB cable to connect the console connector '''P16''' to a USB port on your host PC. | ||
+ | # Make sure the CP2104 driver is available with your operating system, otherwise install CP2104 driver onto the host PC from https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers_with_Serial_Enumeration.zip | ||
+ | # Identify the host PC interface and port number that will be used for communication with the UCM-iMX93 evaluation kit: | ||
+ | #* In most Linux PCs, the serial port will be denoted as one of the following (where n is a positive integer): /dev/ttyUSB0, /dev/ttyUSB1 ... /dev/ttyUSBn | ||
+ | #* In Windows PCs, the serial port usually will be denoted as one of the following (where n is a positive integer): COM1, COM2 ... COMn | ||
+ | # Start a terminal emulation program (such as [https://www.putty.org/ PuTTY] on Windows or minicom on Linux). | ||
+ | # In the port configuration section of the terminal emulation program select the port identified in previous step and set the following serial port parameters: | ||
+ | <blockquote> | ||
+ | {{:SB-SOM: serial port parameters table}} | ||
+ | </blockquote> | ||
+ | |||
+ | =Display= | ||
+ | |||
+ | ==LVDS== | ||
+ | The UCM-iMX93 evaluation kit can be optionally supplied with the Startec KD070HDTLA020 7" LVDS LCD panel. | ||
+ | Connect the display data cable to connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P7''']]. | ||
+ | Connect the display touch-panel cable to connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P8''']]. | ||
+ | |||
+ | LVDS display requires the following device tree: '''ucm-imx93-lvds.dts'''. | ||
+ | |||
+ | The Linux device node for the display is described in: ''arch/arm64/boot/dts/compulab/ucm-imx93-lvds.dtsi''. | ||
+ | |||
+ | ==MIPI-DSI== | ||
+ | SB-UCMIMX93 supports direct connection with the Startec KD050HDFIA 5" MIPI-DSI LCD panel. | ||
+ | |||
+ | Connect the MIPI-DSI display to connectors [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P11''' and '''P12''']] on the SB-UCMIMX93 carrier-board. | ||
+ | |||
+ | The MIPI-DSI display requires the following device tree: '''ucm-imx93-mipi.dts'''.</br> | ||
+ | The MIPI-DSI display is described in the following device tree include file: ''arch/arm64/boot/dts/compulab/ucm-imx93-mipi.dtsi'' | ||
+ | <!-- | ||
+ | descriptors of hw device for the drivers | ||
+ | * soc side - soc@0/dsi@4ae10000 | ||
+ | * display device - soc@0/dsi@4ae10000/panel@0 | ||
+ | driver can be found by the compatibility string i.e. | ||
+ | cat /proc/device-tree/soc@0/dsi@4ae10000/compatible | ||
+ | cat /proc/device-tree/soc@0/dsi@4ae10000/panel@0/compatible | ||
+ | --> | ||
+ | The Linux device node for the MIPI-DSI display: | ||
+ | /sys/class/drm/card0/card0-DSI-1/ | ||
+ | This device node contains information about the display, such as its supported modes and its current configuration. | ||
+ | |||
+ | ==Display Manager== | ||
+ | UCM-iMX93 Yocto uses Weston as the default display manager. It can be configured in ''/etc/xdg/weston/weston.ini''.</br> | ||
+ | For example the transform setting can be set to rotate-90, rotate-180, rotate-270, or commented out.</br> | ||
+ | In order to apply the configuration, you need to restart the weston display manager: | ||
+ | systemctl stop weston | ||
+ | systemctl start weston | ||
+ | |||
+ | =Camera= | ||
+ | The UCM-iMX93 evaluation kit supports the e-con e-CAM131_CURB 13MP 4K camera module.</br> | ||
+ | Connect the camera to connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P9''']] on the SB-UCMIMX93 carrier-board. | ||
+ | |||
+ | Use device tree file: '''ucm-imx93-mipi-csi.dtb''' | ||
+ | <!-- | ||
+ | Verify that the '''mxc-isi-cap''' driver is registered correctly: | ||
+ | <pre> | ||
+ | root@ucm-imx93:~# v4l2-ctl --list-devices | ||
+ | mxc-isi-cap (platform:4ae40000.isi:cap_devic): | ||
+ | /dev/video0 | ||
+ | |||
+ | FSL Capture Media Device (platform:mxc-md): | ||
+ | /dev/media0 | ||
+ | </pre> | ||
+ | |||
+ | The camera device tree nodes are described in: ''arch/arm64/boot/dts/compulab/ucm-imx93.dtsi''.</br> | ||
+ | |||
+ | * camera interface: /soc@0/bus@42000000/i2c@42530000/mipi2@42 | ||
+ | * soc camera controller /soc@0/bus@42800000/camera/csi@4ae00000 | ||
+ | |||
+ | kernel drivers: | ||
+ | * camera side: ar1335_af | ||
+ | * soc side V4L2 Media Controller: imx8_media_dev | ||
+ | --> | ||
+ | The Linux video device node used for capturing: '''/dev/video0''' | ||
+ | |||
+ | ==Video Capturing== | ||
+ | Single image capturing: | ||
+ | gst-launch-1.0 v4l2src num-buffers=1 ! jpegenc ! filesink location=single_buffer.jpg | ||
+ | |||
+ | Output to wayland surface: | ||
+ | gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720,format=BGRA' ! textoverlay text="CLAB UCM-iMX93" ! waylandsink window-width=1280 window-height=720 | ||
+ | |||
+ | To find a pipe element run: | ||
+ | gst-inspect-1.0 | grep sink -i | ||
+ | |||
+ | Detailed information on a specific pipe element: | ||
+ | gst-inspect-1.0 <name> | ||
+ | |||
+ | To learn more please refer to: | ||
+ | |||
+ | https://linuxtv.org/wiki/index.php/V4L_capturing | ||
+ | |||
+ | https://en.wikipedia.org/wiki/GStreamer | ||
= USB = | = USB = | ||
UCM-IMX93 features two USB2.0 ports that are derived from the i.MX93 USB sub-system.<br> | UCM-IMX93 features two USB2.0 ports that are derived from the i.MX93 USB sub-system.<br> | ||
On SB-UCMIMX93 evaluation carrier-board USB ports are available on the following connectors: | On SB-UCMIMX93 evaluation carrier-board USB ports are available on the following connectors: | ||
− | |||
{| class="wikitable" style="text-align:left;" | {| class="wikitable" style="text-align:left;" | ||
Line 106: | Line 210: | ||
|} | |} | ||
− | = | + | =CAN bus= |
UCM-iMX93 features two Flexible Controller Area Network (FLEXCAN) modules. | UCM-iMX93 features two Flexible Controller Area Network (FLEXCAN) modules. | ||
− | SB-UCMIMX93 evaluation carrier-board exposes one CAN bus interface on connector '''J21'''. | + | SB-UCMIMX93 evaluation carrier-board exposes one CAN bus interface on connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''J21''']]. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* Configure both CAN interface bit-rate to 1 Mbit/sec: | * Configure both CAN interface bit-rate to 1 Mbit/sec: | ||
<pre> | <pre> | ||
− | ip link set can0 type can bitrate 1000000 | + | ip link set can0 up type can bitrate 1000000 |
</pre> | </pre> | ||
− | * | + | |
+ | * On one system, dump all received data frames as well as error frames: | ||
<pre> | <pre> | ||
− | + | candump any,0:0,#FFFFFFFF | |
+ | |||
+ | can0 111 [8] 11 22 33 44 55 66 77 88 | ||
+ | can0 11111111 [8] 11 22 33 44 55 66 77 88 | ||
+ | ... | ||
+ | can0 03FF0983 [8] D7 61 FF 03 C1 F7 C1 34 | ||
+ | can0 19C34D32 [8] F7 5A C2 73 AD 0E 3F 0B | ||
+ | can0 0675E391 [4] 2B 2D D3 49 | ||
+ | can0 13091C55 [8] 99 32 EC 77 27 81 49 0B | ||
+ | can0 098D67CF [8] 22 50 AB 48 AD 7F F4 26 | ||
+ | can0 05263FEC [5] 1B 4C 02 45 6E | ||
+ | can0 12B30E20 [0] | ||
+ | can0 1F193DF9 [1] C5 | ||
+ | can0 1EB0B18F [8] 3E 3F DA 57 C2 FE 73 58 | ||
+ | can0 1E5C64D9 [5] 6F 0D B3 63 6A | ||
+ | can0 1E1DE3F9 [8] 96 48 AC 79 4E 00 27 71 | ||
+ | can0 0E1A11B7 [8] 75 81 70 7C 86 79 A7 77 | ||
+ | can0 05F8FD8B [7] 33 F9 9B 1E 77 3D 1F | ||
+ | can0 1E155FCD [8] E6 BA F8 58 ED 6D C8 10 | ||
+ | can0 1D91DF9E [8] 5D 29 82 7B 97 1D AB 5C | ||
+ | can0 11FB3CDA [3] 14 65 C3 | ||
+ | can0 091352C0 [2] 2C ED | ||
+ | ... | ||
</pre> | </pre> | ||
− | + | On second system: | |
− | + | * Send standard CAN frame: | |
− | |||
− | * Send standard CAN frame | ||
<pre> | <pre> | ||
cansend can0 111#1122334455667788 | cansend can0 111#1122334455667788 | ||
</pre> | </pre> | ||
− | * Send extended CAN frame | + | * Send extended CAN frame: |
<pre> | <pre> | ||
cansend can0 11111111#1122334455667788 | cansend can0 11111111#1122334455667788 | ||
Line 163: | Line 280: | ||
can0 11FB3CDA#14.65.C3 | can0 11FB3CDA#14.65.C3 | ||
can0 091352C0#2C.ED | can0 091352C0#2C.ED | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
... | ... | ||
</pre> | </pre> | ||
Line 200: | Line 290: | ||
== Enable/Disable WiFi Interface == | == Enable/Disable WiFi Interface == | ||
* To enable WiFi interface: | * To enable WiFi interface: | ||
− | + | nmcli radio wifi on | |
* To disable WiFi interface: | * To disable WiFi interface: | ||
− | + | nmcli radio wifi off | |
== Network Scanning == | == Network Scanning == | ||
* Sample WiFi scanning: | * Sample WiFi scanning: | ||
− | + | nmcli dev wifi list | |
:The output will show the list of Access Points and Ad-Hoc cells in range. | :The output will show the list of Access Points and Ad-Hoc cells in range. | ||
Line 219: | Line 309: | ||
== Creating Access Point == | == Creating Access Point == | ||
− | In the following example | + | *Prepare routing: |
− | + | <pre> | |
− | + | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | |
+ | systemctl stop dnsmasq.service | ||
+ | iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | ||
+ | iptables -A FORWARD -i uap0 -o eth0 -j ACCEPT | ||
+ | iptables-save > /etc/iptables/iptables.rules | ||
+ | sudo sed -i 's/^#\(net.ipv[4,6].*forward\)/\1/' /etc/sysctl.conf | ||
+ | </pre> | ||
+ | nmcli radio wifi on | ||
+ | *In the following example Replace <SSID> and <PASSWORD> with desired access point parameters: | ||
+ | nmcli device wifi hotspot ssid <SSID> password <PASSWORD> con-name HotspotCon ifname uap0 | ||
* Disable wireless AP: | * Disable wireless AP: | ||
− | + | nmcli connection down HotspotCon | |
* Enable wireless AP again: | * Enable wireless AP again: | ||
− | + | nmcli connection up HotspotCon | |
= Bluetooth = | = Bluetooth = | ||
− | UCM-iMX93 features | + | UCM-iMX93 features Bluetooth connectivity implemented with an NXP 88W8997 module.<br> |
{{Note|Before working with Bluetooth, please ensure that Bluetooth antenna is connected to the SOM.}} | {{Note|Before working with Bluetooth, please ensure that Bluetooth antenna is connected to the SOM.}} | ||
Line 262: | Line 361: | ||
</pre> | </pre> | ||
− | + | =Cellular Modem= | |
− | + | UCM-IMX93 Yocto includes support for Quectel EC25 mini-PCIe cellular modem that can be installed into the evaluation kit. | |
− | + | ||
+ | * Install the modem module into the mini-PCIe socket [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P18''']] | ||
+ | * Close jumper [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''E11''']] | ||
+ | * Connect a cellular antenna to the main antenna connector on the modem | ||
+ | * Install an active SIM card into SIM socket [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''P20''']] | ||
+ | * Boot to linux | ||
+ | |||
+ | Run the following command to verify that the modem is detected correctly: | ||
+ | <pre> | ||
+ | root@ucm-imx93:~# lsusb | ||
+ | Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem | ||
− | + | root@ucm-imx93:~# mmcli -L | |
− | + | /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL Mobile Broadband Module | |
+ | </pre> | ||
+ | Obtain <apn> of your sim card company ,e.g. rl.internet | ||
− | + | Establish connection: | |
− | + | <pre> | |
+ | root@ucm-imx93:~# nmcli connection add type gsm ifname '*' con-name CellularCon apn <apn> | ||
+ | root@ucm-imx93:~# nmcli connection | ||
+ | NAME UUID TYPE DEVICE | ||
+ | CellularCon a1620622-8588-4349-b3fc-66be79fbbede gsm cdc-wdm0 | ||
+ | </pre> | ||
+ | Allow up to a minute to connect to wireless network and make sure modem state is connected: | ||
+ | <pre> | ||
+ | root@ucm-imx93:~#mmcli -m 0 | ||
+ | </pre> | ||
+ | To test the wireless interface run: | ||
+ | <pre> | ||
+ | root@ucm-imx93:~#ping -c 5 dns.google -I wwan0 | ||
+ | </pre> | ||
+ | |||
+ | =UART= | ||
+ | The following table outlines default UART routing when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board: | ||
+ | {| class="wikitable" style="text-align:left;" | ||
+ | |- | ||
+ | | align="center" | '''UCM-iMX93 port''' | ||
+ | | align="center" | '''Linux device''' | ||
+ | | align="center" | '''on SB-UCMIMX93 carrier-board''' | ||
+ | |- | ||
+ | | align="center" |UART1 | ||
+ | | align="center" |/dev/ttyLP0 | ||
+ | | align="" |converted to serial-over-USB debug console, micro-USB connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | P16]] | ||
+ | |- | ||
+ | | align="center" |UART2 | ||
+ | | align="center" |/dev/ttyLP1 | ||
+ | | align="" |converted to RS232, DB9 connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | P17]] | ||
+ | |- | ||
+ | | align="center" |UART5 | ||
+ | | align="center" |/dev/ttyLP4 | ||
+ | | align="" |routed to 100-mil header [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | P3]] | ||
+ | |- | ||
+ | | align="center" |UART7 | ||
+ | | align="center" |/dev/ttyLP6 | ||
+ | | align="" |converted to RS485, terminal block [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | J22]] | ||
+ | |- | ||
+ | |} | ||
− | + | '''Example: testing UART5''' | |
− | + | * Short pin P3-1 (UART5-RX) with P3-3 (UART5-TX) on SB-UCMIMX93 to create a loop-back. | |
+ | * Run the following commands: | ||
+ | stty -F /dev/ttyLP4 1:0:1cb2:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 | ||
+ | cat /dev/ttyLP4 & | ||
+ | echo hello > /dev/ttyLP4 | ||
+ | The "hello" string should appear on the terminal. | ||
+ | <!-- | ||
+ | For removing UART devices: | ||
+ | * Open ''arch/arm64/boot/dts/compulab/ucm-imx93.dtsi'' | ||
+ | * Set desired UART device's status to 'disabled' | ||
+ | * Recompile | ||
+ | * Deploy the new dtb file | ||
+ | --> | ||
− | == | + | =I2C= |
− | + | The following I2C buses and devices are present when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board: | |
− | |||
{| class="wikitable" style="text-align:left;" | {| class="wikitable" style="text-align:left;" | ||
|- | |- | ||
− | | align="" | ''' | + | | align="center" | '''Device''' |
− | | align="" | ''' | + | | align="center" | '''I2C bus in Linux''' |
+ | | align="center" | '''Address''' | ||
+ | | align="center" | '''HW port in UCM-iMX93''' | ||
+ | |- | ||
+ | | align="" |UCM-iMX93 EEPROM | ||
+ | | align="center" |0 | ||
+ | | align="center" |0x50 | ||
+ | | align="center" |I2C1 (internal) | ||
+ | |- | ||
+ | | align="" |UCM-iMX93 RTC | ||
+ | | align="center" |0 | ||
+ | | align="center" |0x69 | ||
+ | | align="center" |I2C1 (internal) | ||
+ | |- | ||
+ | | align="" |UCM-iMX93 PMIC | ||
+ | | align="center" |1 | ||
+ | | align="center" |0x25 | ||
+ | | align="center" |I2C2 (internal) | ||
+ | |- | ||
+ | | align="" |GPIO extender on SB-UCMIMX93 for on-board control signals | ||
+ | | align="center" |2 | ||
+ | | align="center" |0x20 | ||
+ | | align="center" |I2C3 | ||
|- | |- | ||
− | | align="" | | + | | align="" |Camera module control on SB-UCMIMX93 connector P9 |
− | | align="" | | + | | align="center" |2 |
+ | | align="center" |0x42 | ||
+ | | align="center" |I2C3 | ||
+ | |- | ||
+ | | align="" |SB-UCMIMX93 EEPROM | ||
+ | | align="center" |2 | ||
+ | | align="center" |0x54 | ||
+ | | align="center" |I2C3 | ||
+ | |- | ||
+ | | align="" |Touch-screen controller of MIPI-DSI or LVDS panel on SB-UCMIMX93 connector P8 or P12 | ||
+ | | align="center" |2 | ||
+ | | align="center" |0x5d | ||
+ | | align="center" |I2C3 | ||
|- | |- | ||
|} | |} | ||
− | * | + | <!-- |
+ | To list all available buses: | ||
+ | # ls /dev/i2c-* | ||
+ | /dev/i2c-0 /dev/i2c-1 /dev/i2c-2 | ||
+ | --> | ||
+ | To list all mapped devices: | ||
<pre> | <pre> | ||
− | + | # ls /proc/device-tree/soc@0/bus@*/i2c@*/*@* -d -w 1 | |
+ | /proc/device-tree/soc@0/bus@42000000/i2c@42530000/goodix@5d | ||
+ | /proc/device-tree/soc@0/bus@42000000/i2c@42530000/mipi2@42 | ||
+ | /proc/device-tree/soc@0/bus@42000000/i2c@42530000/pca9555@20 | ||
+ | /proc/device-tree/soc@0/bus@44000000/i2c@44340000/rtc@69 | ||
+ | /proc/device-tree/soc@0/bus@44000000/i2c@44350000/pmic@25 | ||
+ | </pre> | ||
+ | Note how: | ||
+ | * each node is appended with its address. | ||
+ | * I2C buses order corresponds to the order of their addresses. | ||
− | + | e.g. to inspect bus 0, in which we have RTC, run: | |
− | + | # i2cdetect -y 0 | |
+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | ||
+ | 00: -- -- -- -- -- -- -- -- | ||
+ | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 60: -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- | ||
+ | 70: -- -- -- -- -- -- -- -- | ||
+ | In the above output numbers mark unused devices, UU marks a device that is used by a driver. | ||
− | + | Indeed we see RTC in use at offset 0x69. | |
− | + | ||
+ | An example how to dump EEPROM contents: | ||
+ | hexdump -C /sys/devices/platform/soc@0/44000000.bus/44340000.i2c/i2c-0/0-0050/eeprom | ||
+ | |||
+ | =SPI= | ||
+ | |||
+ | Loopback example: | ||
+ | |||
+ | In order to enable SPI device, it needs to be added to the device tree in the following manner: | ||
+ | |||
+ | Set up the kernel source repository by following the instructions in this guide: https://github.com/compulab-yokneam/meta-bsp-imx9/blob/mickledore-6.1.55-2.0/Documentation/linux_kernel_build.md | ||
+ | |||
+ | However, stop before the final command that builds the kernel. | ||
+ | |||
+ | Instead of building the full kernel, run: | ||
+ | |||
+ | make dtbs | ||
+ | |||
+ | Locate the compiled device tree: | ||
+ | |||
+ | arch/arm64/boot/dts/compulab/ucm-imx93-lpspi.dtb | ||
+ | |||
+ | On the UCM-IMX93, identify your boot partition by running: | ||
+ | |||
+ | lsblk | ||
− | + | Then, copy the .dtb file to that partition. | |
− | |||
− | |||
− | + | Restart your device and interrupt the boot process to access U-Boot. Then run: | |
− | + | setenv fdtfile ucm-imx93-lpspi.dtb; boot | |
− | |||
− | + | SPI signals location: | |
− | |||
<pre> | <pre> | ||
− | + | ECSPI3_MOSI - P3.14 | |
+ | ECSPI3_SCLK - P3.16 | ||
+ | ECSPI3_MISO/UART7_RX - U25 pin 1 (beside RS485) | ||
+ | ECSPI3_SSO/UART7_TX - U25 pin 4 (beside RS485) | ||
</pre> | </pre> | ||
− | + | Use jumper cable to connect MOSI and MISO. | |
− | + | ||
− | + | On the module, run: | |
− | + | spidev_test -v -D /dev/spidev0.0 -p "hello" | |
− | + | ||
− | + | You should see RX same as TX. | |
− | |||
− | |||
− | |||
− | |||
− | + | =GPIO= | |
− | + | The following table outlines default GPIO assignments when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board: | |
− | + | {| class="wikitable" style="text-align:left;" | |
− | + | |- | |
+ | | align="center" | '''Signal Name | ||
+ | | align="center" | '''Pin on SB-UCMIMX93''' | ||
+ | |- | ||
+ | | align="center" |GPIO_IO04 | ||
+ | | align="center" |P3-20 | ||
+ | |- | ||
+ | | align="center" |GPIO_IO05 | ||
+ | | align="center" |P3-18 | ||
+ | |- | ||
+ | | align="center" |GPIO_IO07 | ||
+ | | align="center" |P3-6 | ||
+ | |- | ||
+ | | align="center" |GPIO_IO14 | ||
+ | | align="center" |P5-4 | ||
+ | |- | ||
+ | | align="center" |GPIO_IO15 | ||
+ | | align="center" |P5-2 | ||
+ | |- | ||
+ | | align="center" |GPIO_IO16 | ||
+ | | align="center" |P3-4 | ||
+ | |- | ||
+ | |} | ||
− | + | Other signals that are reserved for peripheral controls can be reassigned to GPIOs in | |
− | + | arch/arm64/boot/dts/compulab/ucm-imx93-pinctrl.dtsi | |
− | |||
− | |||
− | |||
− | + | == Example: controlling pin GPIO_IO16== | |
− | + | === Checking the pin info=== | |
− | + | gpioinfo -c 0 | |
− | + | This lists all GPIO lines in `gpiochip0`, including GPIO_IO16 (line offset 16). | |
− | = | + | === Writing to a pin=== |
− | + | Set to high: | |
+ | gpioset -c 0 --toggle 0 16=1 | ||
+ | Set to low: | ||
+ | gpioset -c 0 --toggle 0 16=0 | ||
− | + | === Reading the logical level from a pin=== | |
+ | gpioget -c 0 16 | ||
− | + | =ADC= | |
+ | i.MX93 SoC features integrated 12 bit analog to digital converter.<br> | ||
+ | To use the ADC, enable it in device tree e.g. in arch/arm64/boot/dts/compulab/sbc-mcm-imx93.dts: | ||
<pre> | <pre> | ||
− | + | &adc1 { | |
+ | vref-supply = <®_vref_1v8>; | ||
+ | status = "okay"; | ||
+ | }; | ||
</pre> | </pre> | ||
− | + | Sysfs device controls will appear in: | |
− | To resume normal operation press shortly the | + | cd /sys/bus/iio/devices/iio\:device0/ |
+ | SB-UCMIMX93 exposes ADC signals on 100-mil header '''P3'''. | ||
+ | {| class="wikitable" style="text-align:center;" | ||
+ | |- | ||
+ | | '''Signal Name || '''pin on P3''' || '''sysfs file''' | ||
+ | |- | ||
+ | |ADC_IN0 | ||
+ | |9 | ||
+ | |in_voltage0_raw | ||
+ | |- | ||
+ | |ADC_IN1 | ||
+ | |11 | ||
+ | |in_voltage1_raw | ||
+ | |- | ||
+ | |ADC_IN2 | ||
+ | |13 | ||
+ | |in_voltage2_raw | ||
+ | |- | ||
+ | |ADC_IN3 | ||
+ | |15 | ||
+ | |in_voltage3_raw | ||
+ | |- | ||
+ | |} | ||
+ | For example, to read voltage from P3-9 run: | ||
+ | cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw | ||
+ | Expected output is a value in range 0 - 4095 which spans over the voltage range 0 - 1.8V | ||
+ | =Suspend / Resume= | ||
+ | {{note|The operation below requires '''root''' access.}} | ||
+ | *Suspend mode allows minimizing the power consumption. | ||
+ | *To enter suspend mode run: | ||
+ | echo mem >/sys/power/state | ||
+ | *To resume normal operation press shortly the power button [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''SW5''']]. | ||
+ | *To enter suspend mode with RTC as wakeup source that wakes after 5 seconds run: | ||
+ | rtcwake -s 5 -m mem -d /dev/rtc0 | ||
+ | *WiFi device currently doesn't support suspension. see [[UCM-iMX93:_Yocto_Linux:_Known_Issues]] | ||
=CPU temperature= | =CPU temperature= | ||
Line 364: | Line 664: | ||
== Internal RTC - rtc0 == | == Internal RTC - rtc0 == | ||
− | + | System information: | |
<pre> | <pre> | ||
udevadm info -p /sys/class/rtc/rtc0 | udevadm info -p /sys/class/rtc/rtc0 | ||
Line 381: | Line 681: | ||
</pre> | </pre> | ||
− | + | Wake up:</br> | |
rtc0 can be used as a wake up source, as a result an '''rtcwakeup''' can be used with this device: | rtc0 can be used as a wake up source, as a result an '''rtcwakeup''' can be used with this device: | ||
<pre> | <pre> | ||
Line 388: | Line 688: | ||
== External RTC - rtc1 == | == External RTC - rtc1 == | ||
− | + | System information:</br> | |
<pre> | <pre> | ||
udevadm info -p /sys/class/rtc/rtc1 | udevadm info -p /sys/class/rtc/rtc1 | ||
Line 401: | Line 701: | ||
</pre> | </pre> | ||
− | + | Set the date and write it into the RTC:</br> | |
<pre> | <pre> | ||
date -s "16 Jun 2023 12:00:00" | date -s "16 Jun 2023 12:00:00" | ||
Line 409: | Line 709: | ||
</pre> | </pre> | ||
− | + | Read the RTC time and date:</br> | |
<pre> | <pre> | ||
hwclock --show --rtc /dev/rtc1 | hwclock --show --rtc /dev/rtc1 | ||
Line 415: | Line 715: | ||
2023-06-16 12:01:37.935876+00:00 | 2023-06-16 12:01:37.935876+00:00 | ||
</pre> | </pre> | ||
+ | |||
+ | = Device Serial Number= | ||
+ | Product information is stored in on-board EEPROM.<br> | ||
+ | * To read the product serial number run: | ||
+ | cat /proc/device-tree/product-sn && echo | ||
+ | * To read the product configuration part number run: | ||
+ | cat /proc/device-tree/product-options && echo | ||
=See Also= | =See Also= | ||
− | *[[UCM-iMX93: Evaluation Kit: Getting Started | UCM-iMX93:Evaluation Kit: | + | * [[UCM-iMX93: Evaluation Kit: Getting Started|Eval-kit Quick Start Guide]] |
+ | * [[UCM-iMX93: Evaluation Kit: Hardware Guide|Eval-Kit Hardware Guide]] | ||
[[Category:Yocto]] | [[Category:Yocto]] | ||
[[Category:UCM-iMX93]] | [[Category:UCM-iMX93]] | ||
+ | [[Category:UCM-iMX93L]] |
Latest revision as of 15:21, 7 September 2025
Contents
Device Tree
Available Device Tree Files
The current release includes the following dtb files:
DTB | Hardware Configuration and Features | Jumpers/Connectors Settings |
ucm-imx93.dtb | default hardware configuration + lvds display | P7/P8 lvds / touch is in use |
ucm-imx93-mipi.dtb | default hardware configuration + mipi dsi display | P11/P12 mipi-dsi / touch is in use |
ucm-imx93-headless.dtb | default hardware configuration w/out any display | |
ucm-imx93-mipi-csi.dtb | default hardware configuration + lvds display + camera | see #Camera |
ucm-imx93-eb-eth.dtb | default hardware configuration + lvds display + Ethernet extension board |
Set device tree
The current release provides two methods to switch between dtb files:
- U-Boot environment
The U-boot fdtfile variable contains the device tree name that will be loaded into the RAM. This variable can be changed by:
Environment | Command |
U-Boot | setenv fdtfile <fdt_file_name>; saveenv; |
Linux | fw_setenv fdtfile <fdt_file_name> |
- GRUB environment (if the image was created with the meta-compulab-uefi layer)
Environment | Command/Procedure |
GRUB Boot Menu | Goto "Advanced Boot Options" and choose a device tree from the provided dtb list. |
Linux | grub-editenv /boot/grub/grubenv set fdtfile=<fdt_file_name> |
Serial Console
UCM-iMX93 provides serial console on UART1.
SB-UCMIMX93 evaluation carrier-board exposes the console UART via CP2104 serial-to-USB bridge on connector P16.
Connecting to a host PC
- Use a micro-USB cable to connect the console connector P16 to a USB port on your host PC.
- Make sure the CP2104 driver is available with your operating system, otherwise install CP2104 driver onto the host PC from https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers_with_Serial_Enumeration.zip
- Identify the host PC interface and port number that will be used for communication with the UCM-iMX93 evaluation kit:
- In most Linux PCs, the serial port will be denoted as one of the following (where n is a positive integer): /dev/ttyUSB0, /dev/ttyUSB1 ... /dev/ttyUSBn
- In Windows PCs, the serial port usually will be denoted as one of the following (where n is a positive integer): COM1, COM2 ... COMn
- Start a terminal emulation program (such as PuTTY on Windows or minicom on Linux).
- In the port configuration section of the terminal emulation program select the port identified in previous step and set the following serial port parameters:
Baud Rate Data Bits Stop Bits Parity Flow Control 115200 8 1 none none
Display
LVDS
The UCM-iMX93 evaluation kit can be optionally supplied with the Startec KD070HDTLA020 7" LVDS LCD panel. Connect the display data cable to connector P7. Connect the display touch-panel cable to connector P8.
LVDS display requires the following device tree: ucm-imx93-lvds.dts.
The Linux device node for the display is described in: arch/arm64/boot/dts/compulab/ucm-imx93-lvds.dtsi.
MIPI-DSI
SB-UCMIMX93 supports direct connection with the Startec KD050HDFIA 5" MIPI-DSI LCD panel.
Connect the MIPI-DSI display to connectors P11 and P12 on the SB-UCMIMX93 carrier-board.
The MIPI-DSI display requires the following device tree: ucm-imx93-mipi.dts.
The MIPI-DSI display is described in the following device tree include file: arch/arm64/boot/dts/compulab/ucm-imx93-mipi.dtsi
The Linux device node for the MIPI-DSI display:
/sys/class/drm/card0/card0-DSI-1/
This device node contains information about the display, such as its supported modes and its current configuration.
Display Manager
UCM-iMX93 Yocto uses Weston as the default display manager. It can be configured in /etc/xdg/weston/weston.ini.
For example the transform setting can be set to rotate-90, rotate-180, rotate-270, or commented out.
In order to apply the configuration, you need to restart the weston display manager:
systemctl stop weston systemctl start weston
Camera
The UCM-iMX93 evaluation kit supports the e-con e-CAM131_CURB 13MP 4K camera module.
Connect the camera to connector P9 on the SB-UCMIMX93 carrier-board.
Use device tree file: ucm-imx93-mipi-csi.dtb The Linux video device node used for capturing: /dev/video0
Video Capturing
Single image capturing:
gst-launch-1.0 v4l2src num-buffers=1 ! jpegenc ! filesink location=single_buffer.jpg
Output to wayland surface:
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720,format=BGRA' ! textoverlay text="CLAB UCM-iMX93" ! waylandsink window-width=1280 window-height=720
To find a pipe element run:
gst-inspect-1.0 | grep sink -i
Detailed information on a specific pipe element:
gst-inspect-1.0 <name>
To learn more please refer to:
https://linuxtv.org/wiki/index.php/V4L_capturing
https://en.wikipedia.org/wiki/GStreamer
USB
UCM-IMX93 features two USB2.0 ports that are derived from the i.MX93 USB sub-system.
On SB-UCMIMX93 evaluation carrier-board USB ports are available on the following connectors:
USB port# | HW setting | Connector | Mode |
1 | P21 is not used | type-A J5 | host |
1 | P21 connected to USB host | micro-USB P21 | device |
2 | jumper E11 is open | type-A J6 | host |
2 | jumper E11 is closed | mini-PCIe P18 | host |
USB #1 in device mode
USB #1 port can be operated in device mode when connected to a host machine using connector P21.
Available gadgets for the UBS #1 in device mode:
USB gadget | SOM command |
usb serial device | modprobe g_serial |
usb network device | modprobe g_ether |
usb mass storage device | modprobe g_mass_storage file=/dev/sdX |
CAN bus
UCM-iMX93 features two Flexible Controller Area Network (FLEXCAN) modules. SB-UCMIMX93 evaluation carrier-board exposes one CAN bus interface on connector J21.
- Configure both CAN interface bit-rate to 1 Mbit/sec:
ip link set can0 up type can bitrate 1000000
- On one system, dump all received data frames as well as error frames:
candump any,0:0,#FFFFFFFF can0 111 [8] 11 22 33 44 55 66 77 88 can0 11111111 [8] 11 22 33 44 55 66 77 88 ... can0 03FF0983 [8] D7 61 FF 03 C1 F7 C1 34 can0 19C34D32 [8] F7 5A C2 73 AD 0E 3F 0B can0 0675E391 [4] 2B 2D D3 49 can0 13091C55 [8] 99 32 EC 77 27 81 49 0B can0 098D67CF [8] 22 50 AB 48 AD 7F F4 26 can0 05263FEC [5] 1B 4C 02 45 6E can0 12B30E20 [0] can0 1F193DF9 [1] C5 can0 1EB0B18F [8] 3E 3F DA 57 C2 FE 73 58 can0 1E5C64D9 [5] 6F 0D B3 63 6A can0 1E1DE3F9 [8] 96 48 AC 79 4E 00 27 71 can0 0E1A11B7 [8] 75 81 70 7C 86 79 A7 77 can0 05F8FD8B [7] 33 F9 9B 1E 77 3D 1F can0 1E155FCD [8] E6 BA F8 58 ED 6D C8 10 can0 1D91DF9E [8] 5D 29 82 7B 97 1D AB 5C can0 11FB3CDA [3] 14 65 C3 can0 091352C0 [2] 2C ED ...
On second system:
- Send standard CAN frame:
cansend can0 111#1122334455667788
- Send extended CAN frame:
cansend can0 11111111#1122334455667788
- CAN frames (extended mode) generator, random payload, interval between two successive flames 50 msec:
cangen -g 50 -e -D r -v can0 can: raw protocol (rev 20170425) ... can0 03FF0983#D7.61.FF.03.C1.F7.C1.34 can0 19C34D32#F7.5A.C2.73.AD.0E.3F.0B can0 0675E391#2B.2D.D3.49 can0 13091C55#99.32.EC.77.27.81.49.0B can0 098D67CF#22.50.AB.48.AD.7F.F4.26 can0 05263FEC#1B.4C.02.45.6E can0 12B30E20# can0 1F193DF9#C5 can0 1EB0B18F#3E.3F.DA.57.C2.FE.73.58 can0 1E5C64D9#6F.0D.B3.63.6A can0 1E1DE3F9#96.48.AC.79.4E.00.27.71 can0 0E1A11B7#75.81.70.7C.86.79.A7.77 can0 05F8FD8B#33.F9.9B.1E.77.3D.1F can0 1E155FCD#E6.BA.F8.58.ED.6D.C8.10 can0 1D91DF9E#5D.29.82.7B.97.1D.AB.5C can0 11FB3CDA#14.65.C3 can0 091352C0#2C.ED ...
WiFi
UCM-iMX93 features 802.11ac wireless connectivity solution implemented with an NXP 88W8997 module.
The NetworkManager can be used to manage WiFi interface.
![]() |
Before working with WiFi, please ensure that WiFi antenna is connected to the SOM. |
Enable/Disable WiFi Interface
- To enable WiFi interface:
nmcli radio wifi on
- To disable WiFi interface:
nmcli radio wifi off
Network Scanning
- Sample WiFi scanning:
nmcli dev wifi list
- The output will show the list of Access Points and Ad-Hoc cells in range.
Connecting to Access Point
In the following example:
- Replace <SSID> and <PASSWORD> with the actual access point parameters:
nmcli device wifi connect <SSID> password <PASSWORD> name WifiCon
- Disconnect wireless network:
nmcli connection down WifiCon
- Connect wireless network again:
nmcli connection up WifiCon
Creating Access Point
- Prepare routing:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE systemctl stop dnsmasq.service iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i uap0 -o eth0 -j ACCEPT iptables-save > /etc/iptables/iptables.rules sudo sed -i 's/^#\(net.ipv[4,6].*forward\)/\1/' /etc/sysctl.conf
nmcli radio wifi on
- In the following example Replace <SSID> and <PASSWORD> with desired access point parameters:
nmcli device wifi hotspot ssid <SSID> password <PASSWORD> con-name HotspotCon ifname uap0
- Disable wireless AP:
nmcli connection down HotspotCon
- Enable wireless AP again:
nmcli connection up HotspotCon
Bluetooth
UCM-iMX93 features Bluetooth connectivity implemented with an NXP 88W8997 module.
![]() |
Before working with Bluetooth, please ensure that Bluetooth antenna is connected to the SOM. |
To start bluetoothctl use the following command:
bluetoothctl
To start the scan process use the following commands:
[bluetooth]# default-agent [bluetooth]# power on [bluetooth]# scan on
Bluetooth device should be turned on and visible. Its MAC-adress and name should appear in bluetoothctl in following format:
[CHG] Device AA:BB:CC:DD:EE:FF Name: Device_Name
To pair with the Bluetooth device use the following command:
pair AA:BB:CC:DD:EE:FF
Where AA:BB:CC:DD:EE:FF is MAC-adress of the Bluetooth device.
To quit bluetoothctl use the following command:
[Device_Name]# quit
Cellular Modem
UCM-IMX93 Yocto includes support for Quectel EC25 mini-PCIe cellular modem that can be installed into the evaluation kit.
- Install the modem module into the mini-PCIe socket P18
- Close jumper E11
- Connect a cellular antenna to the main antenna connector on the modem
- Install an active SIM card into SIM socket P20
- Boot to linux
Run the following command to verify that the modem is detected correctly:
root@ucm-imx93:~# lsusb Bus 001 Device 002: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem root@ucm-imx93:~# mmcli -L /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL Mobile Broadband Module
Obtain <apn> of your sim card company ,e.g. rl.internet
Establish connection:
root@ucm-imx93:~# nmcli connection add type gsm ifname '*' con-name CellularCon apn <apn> root@ucm-imx93:~# nmcli connection NAME UUID TYPE DEVICE CellularCon a1620622-8588-4349-b3fc-66be79fbbede gsm cdc-wdm0
Allow up to a minute to connect to wireless network and make sure modem state is connected:
root@ucm-imx93:~#mmcli -m 0
To test the wireless interface run:
root@ucm-imx93:~#ping -c 5 dns.google -I wwan0
UART
The following table outlines default UART routing when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board:
UCM-iMX93 port | Linux device | on SB-UCMIMX93 carrier-board |
UART1 | /dev/ttyLP0 | converted to serial-over-USB debug console, micro-USB connector P16 |
UART2 | /dev/ttyLP1 | converted to RS232, DB9 connector P17 |
UART5 | /dev/ttyLP4 | routed to 100-mil header P3 |
UART7 | /dev/ttyLP6 | converted to RS485, terminal block J22 |
Example: testing UART5
- Short pin P3-1 (UART5-RX) with P3-3 (UART5-TX) on SB-UCMIMX93 to create a loop-back.
- Run the following commands:
stty -F /dev/ttyLP4 1:0:1cb2:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 cat /dev/ttyLP4 & echo hello > /dev/ttyLP4
The "hello" string should appear on the terminal.
I2C
The following I2C buses and devices are present when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board:
Device | I2C bus in Linux | Address | HW port in UCM-iMX93 |
UCM-iMX93 EEPROM | 0 | 0x50 | I2C1 (internal) |
UCM-iMX93 RTC | 0 | 0x69 | I2C1 (internal) |
UCM-iMX93 PMIC | 1 | 0x25 | I2C2 (internal) |
GPIO extender on SB-UCMIMX93 for on-board control signals | 2 | 0x20 | I2C3 |
Camera module control on SB-UCMIMX93 connector P9 | 2 | 0x42 | I2C3 |
SB-UCMIMX93 EEPROM | 2 | 0x54 | I2C3 |
Touch-screen controller of MIPI-DSI or LVDS panel on SB-UCMIMX93 connector P8 or P12 | 2 | 0x5d | I2C3 |
To list all mapped devices:
# ls /proc/device-tree/soc@0/bus@*/i2c@*/*@* -d -w 1 /proc/device-tree/soc@0/bus@42000000/i2c@42530000/goodix@5d /proc/device-tree/soc@0/bus@42000000/i2c@42530000/mipi2@42 /proc/device-tree/soc@0/bus@42000000/i2c@42530000/pca9555@20 /proc/device-tree/soc@0/bus@44000000/i2c@44340000/rtc@69 /proc/device-tree/soc@0/bus@44000000/i2c@44350000/pmic@25
Note how:
- each node is appended with its address.
- I2C buses order corresponds to the order of their addresses.
e.g. to inspect bus 0, in which we have RTC, run:
# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
In the above output numbers mark unused devices, UU marks a device that is used by a driver.
Indeed we see RTC in use at offset 0x69.
An example how to dump EEPROM contents:
hexdump -C /sys/devices/platform/soc@0/44000000.bus/44340000.i2c/i2c-0/0-0050/eeprom
SPI
Loopback example:
In order to enable SPI device, it needs to be added to the device tree in the following manner:
Set up the kernel source repository by following the instructions in this guide: https://github.com/compulab-yokneam/meta-bsp-imx9/blob/mickledore-6.1.55-2.0/Documentation/linux_kernel_build.md
However, stop before the final command that builds the kernel.
Instead of building the full kernel, run:
make dtbs
Locate the compiled device tree:
arch/arm64/boot/dts/compulab/ucm-imx93-lpspi.dtb
On the UCM-IMX93, identify your boot partition by running:
lsblk
Then, copy the .dtb file to that partition.
Restart your device and interrupt the boot process to access U-Boot. Then run:
setenv fdtfile ucm-imx93-lpspi.dtb; boot
SPI signals location:
ECSPI3_MOSI - P3.14 ECSPI3_SCLK - P3.16 ECSPI3_MISO/UART7_RX - U25 pin 1 (beside RS485) ECSPI3_SSO/UART7_TX - U25 pin 4 (beside RS485)
Use jumper cable to connect MOSI and MISO.
On the module, run:
spidev_test -v -D /dev/spidev0.0 -p "hello"
You should see RX same as TX.
GPIO
The following table outlines default GPIO assignments when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board:
Signal Name | Pin on SB-UCMIMX93 |
GPIO_IO04 | P3-20 |
GPIO_IO05 | P3-18 |
GPIO_IO07 | P3-6 |
GPIO_IO14 | P5-4 |
GPIO_IO15 | P5-2 |
GPIO_IO16 | P3-4 |
Other signals that are reserved for peripheral controls can be reassigned to GPIOs in
arch/arm64/boot/dts/compulab/ucm-imx93-pinctrl.dtsi
Example: controlling pin GPIO_IO16
Checking the pin info
gpioinfo -c 0
This lists all GPIO lines in `gpiochip0`, including GPIO_IO16 (line offset 16).
Writing to a pin
Set to high:
gpioset -c 0 --toggle 0 16=1
Set to low:
gpioset -c 0 --toggle 0 16=0
Reading the logical level from a pin
gpioget -c 0 16
ADC
i.MX93 SoC features integrated 12 bit analog to digital converter.
To use the ADC, enable it in device tree e.g. in arch/arm64/boot/dts/compulab/sbc-mcm-imx93.dts:
&adc1 { vref-supply = <®_vref_1v8>; status = "okay"; };
Sysfs device controls will appear in:
cd /sys/bus/iio/devices/iio\:device0/
SB-UCMIMX93 exposes ADC signals on 100-mil header P3.
Signal Name | pin on P3 | sysfs file |
ADC_IN0 | 9 | in_voltage0_raw |
ADC_IN1 | 11 | in_voltage1_raw |
ADC_IN2 | 13 | in_voltage2_raw |
ADC_IN3 | 15 | in_voltage3_raw |
For example, to read voltage from P3-9 run:
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
Expected output is a value in range 0 - 4095 which spans over the voltage range 0 - 1.8V
Suspend / Resume
![]() |
The operation below requires root access. |
- Suspend mode allows minimizing the power consumption.
- To enter suspend mode run:
echo mem >/sys/power/state
- To resume normal operation press shortly the power button SW5.
- To enter suspend mode with RTC as wakeup source that wakes after 5 seconds run:
rtcwake -s 5 -m mem -d /dev/rtc0
- WiFi device currently doesn't support suspension. see UCM-iMX93:_Yocto_Linux:_Known_Issues
CPU temperature
i.MX93 SoC features an internal temperature sensor which allows to measure the SoC temperature. Execute the following command to read the current CPU temperature:
cat /sys/class/thermal/thermal_zone0/temp
RTC
UCM-iMX93 features two RTC devices:
- i.MX93 internal RTC (rtc0) - can be used as wake-up source
- AB1805 external RTC (rtc1) - can be used for low current battery powered time keeping
Internal RTC - rtc0
System information:
udevadm info -p /sys/class/rtc/rtc0 P: /devices/platform/soc@0/44000000.bus/44440000.bbnsm/44440000.bbnsm:rtc/rtc/rtc0 N: rtc0 L: -100 S: rtc E: DEVPATH=/devices/platform/soc@0/44000000.bus/44440000.bbnsm/44440000.bbnsm:rtc/rtc/rtc0 E: DEVNAME=/dev/rtc0 E: MAJOR=251 E: MINOR=0 E: SUBSYSTEM=rtc E: USEC_INITIALIZED=14959708 E: DEVLINKS=/dev/rtc
Wake up:
rtc0 can be used as a wake up source, as a result an rtcwakeup can be used with this device:
rtcwake --device /dev/rtc0 -s 5 -m mem
External RTC - rtc1
System information:
udevadm info -p /sys/class/rtc/rtc1 N: rtc1 L: 0 E: DEVPATH=/devices/platform/soc@0/44000000.bus/44340000.i2c/i2c-0/0-0069/rtc/rtc1 E: DEVNAME=/dev/rtc1 E: MAJOR=251 E: MINOR=1 E: SUBSYSTEM=rtc
Set the date and write it into the RTC:
date -s "16 Jun 2023 12:00:00" Fri 16 Jun 2023 12:00:00 hwclock --systohc --rtc /dev/rtc1
Read the RTC time and date:
hwclock --show --rtc /dev/rtc1 2023-06-16 12:01:37.935876+00:00
Device Serial Number
Product information is stored in on-board EEPROM.
- To read the product serial number run:
cat /proc/device-tree/product-sn && echo
- To read the product configuration part number run:
cat /proc/device-tree/product-options && echo