Apalis i.MX8QM UART3 receive issue on M4_0 (TX works, RX not working)

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


(1), (2), (3), (4), (5), (6)

UART3 (DMA_UART0) Configuration for Cortex-M4 Core 0 Debug Console

Based on your configuration, you’re on the right track with your SCFW and pin mux setup. However, there are a few areas that need attention for proper UART RX functionality.

Hardware Setup Verification

First, ensure your hardware connections are correct. For Apalis iMX8 with the Evaluation Board, you need to connect your USB-TTL converter to the appropriate pins (2):

USB-TTL Signal Apalis Eval Board (M4_0)
TX MXM3_110
RX MXM3_120
GND SoC GND

Device Tree Overlay Requirements

Since you’re using UART pins that may conflict with Linux, you need to apply a device tree overlay to prevent Linux from claiming these pins (2). For Apalis iMX8 Core 0, use this overlay:

/dts-v1/;
/plugin/;

/* Disable UART1 Control Pins to use M4 Core 0 and 1 UART */

/ {
	compatible = "toradex,apalis-imx8";
};

&iomuxc {
	pinctrl-0 = <&pinctrl_cam1_gpios>, <&pinctrl_dap1_gpios>,
		    <&pinctrl_esai0_gpios>, <&pinctrl_fec2_gpios>,
		    <&pinctrl_gpio3>, <&pinctrl_gpio4>, <&pinctrl_gpio_keys>,
		    <&pinctrl_gpio_usbh_oc_n>,
		    <&pinctrl_lvds0_i2c0_gpio>, <&pinctrl_lvds1_i2c0_gpios>,
		    <&pinctrl_mipi_dsi_0_1_en>, <&pinctrl_mipi_dsi1_gpios>,
		    <&pinctrl_mlb_gpios>, <&pinctrl_qspi1a_gpios>,
		    <&pinctrl_sata1_act>, <&pinctrl_sim0_gpios>,
		    <&pinctrl_usdhc1_gpios>;
};

(2)

SCFW Configuration Check

Your SCFW configuration looks correct, but ensure you’re building with the proper flags (3):

$ make clean; make SOC=MX8QM B=apalis DL=2 R=b0 U=0 V=0 qm

(3)

Pin Mux Configuration Review

Your pin mux configuration appears correct, but verify that the pin function IDs match exactly with the hardware documentation. The pins should be configured as function 0 for UART functionality (2).

Firmware Loading Process

Ensure you’re loading the firmware correctly (1):

> setenv load_cmd "ext4load mmc 0:2"
> setenv m4_0_image "/home/root/hello_world.bin"
> saveenv
> run m4boot_0

(1)

Debugging Steps

  1. Verify SCFW Build: Ensure your custom SCFW is properly loaded and the UART0 resources are correctly partitioned to the M4_0 core.

  2. Check Pin Mapping: Verify the physical pin connections match the Ixora carrier board pinout (5).

  3. Test with Loopback: Try connecting TX and RX pins together to test if the UART peripheral is functioning correctly.

  4. JTAG Debugging: Consider using JTAG debugging to verify the UART peripheral registers are properly configured (4).

The most likely issue is that the device tree overlay isn’t applied, causing Linux to interfere with the UART pins. Apply the overlay and ensure it’s loaded during boot.

Best regards, Toradex AI Assistant.