Difference between revisions of "UCM-iMX93: Yocto Linux: How-To Guide"
(11 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 69: | Line 77: | ||
=Display= | =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== | ==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. | 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 | + | 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 | descriptors of hw device for the drivers | ||
Line 86: | Line 105: | ||
/sys/class/drm/card0/card0-DSI-1/ | /sys/class/drm/card0/card0-DSI-1/ | ||
This device node contains information about the display, such as its supported modes and its current configuration. | This device node contains information about the display, such as its supported modes and its current configuration. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Display Manager== | ==Display Manager== | ||
Line 104: | Line 114: | ||
=Camera= | =Camera= | ||
− | The UCM-iMX93 evaluation kit supports the e-con e- | + | 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. | 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: | Verify that the '''mxc-isi-cap''' driver is registered correctly: | ||
<pre> | <pre> | ||
Line 120: | Line 130: | ||
The camera device tree nodes are described in: ''arch/arm64/boot/dts/compulab/ucm-imx93.dtsi''.</br> | 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 | * camera interface: /soc@0/bus@42000000/i2c@42530000/mipi2@42 | ||
* soc camera controller /soc@0/bus@42800000/camera/csi@4ae00000 | * soc camera controller /soc@0/bus@42800000/camera/csi@4ae00000 | ||
Line 204: | Line 214: | ||
SB-UCMIMX93 evaluation carrier-board exposes one CAN bus interface on connector [[UCM-iMX93: Evaluation Kit: Hardware Guide#Connector_Locations | '''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 257: | Line 280: | ||
can0 11FB3CDA#14.65.C3 | can0 11FB3CDA#14.65.C3 | ||
can0 091352C0#2C.ED | can0 091352C0#2C.ED | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
... | ... | ||
</pre> | </pre> | ||
Line 294: | 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 313: | 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 = | ||
Line 354: | Line 359: | ||
<pre> | <pre> | ||
[Device_Name]# quit | [Device_Name]# quit | ||
+ | </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> | </pre> | ||
Line 385: | Line 425: | ||
* Short pin P3-1 (UART5-RX) with P3-3 (UART5-TX) on SB-UCMIMX93 to create a loop-back. | * Short pin P3-1 (UART5-RX) with P3-3 (UART5-TX) on SB-UCMIMX93 to create a loop-back. | ||
* Run the following commands: | * 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. | The "hello" string should appear on the terminal. | ||
<!-- | <!-- | ||
Line 479: | Line 519: | ||
=SPI= | =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= | =GPIO= | ||
− | The following | + | The following table outlines default GPIO assignments when UCM-iMX93 is used with the SB-UCMIMX93 carrier-board: |
{| class="wikitable" style="text-align:left;" | {| class="wikitable" style="text-align:left;" | ||
|- | |- | ||
− | | align="center" | '''Signal Name | + | | align="center" | '''Signal Name |
− | | align="center" | ''' | + | | align="center" | '''Pin on SB-UCMIMX93''' |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| align="center" |GPIO_IO04 | | align="center" |GPIO_IO04 | ||
Line 540: | Line 581: | ||
|- | |- | ||
| align="center" |GPIO_IO15 | | align="center" |GPIO_IO15 | ||
− | | align="center" | | + | | align="center" |P5-2 |
|- | |- | ||
| align="center" |GPIO_IO16 | | align="center" |GPIO_IO16 | ||
| align="center" |P3-4 | | 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 644: | Line 716: | ||
</pre> | </pre> | ||
− | + | = Device Serial Number= | |
− | + | Product information is stored in on-board EEPROM.<br> | |
− | + | * To read the product serial number run: | |
− | To read the product serial number | + | 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= | ||
Line 657: | Line 729: | ||
[[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