UART interface of Verdin iMX8M Plus Quad 4GB WB IT

We are currently using the P/N: Verdin iMX8M Plus Quad 4GB WB IT SOM, and based on our review, it appears to support only four UART interfaces.
However, the customer requires two RS232 ports and three RS485 ports, for a total of five UART interfaces.
Could you please advise how we can add one additional UART interface to meet this requirement?

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


Adding an Additional UART Interface to Verdin iMX8M Plus

The Verdin iMX8M Plus Quad 4GB WB IT module is based on the NXP i.MX 8M Plus SoC, which features four UART interfaces (UART1, UART2, UART3, and UART4)(1). These are the hardware UARTs available on the SoC itself.

To meet your requirement of five UART interfaces (2× RS232 + 3× RS485), you have the following options:

Option 1: Use Alternate Function Pins for Additional UART Signals

The datasheet indicates that some pins can be configured as alternate UART functions(1). However, these alternate pins still map to the same four UART controllers (UART1-UART4), so this does not create a fifth independent UART interface.

Option 2: Add an External UART Controller

Since the i.MX 8M Plus SoC is limited to four hardware UARTs, the most practical solution is to add an external UART controller IC on your custom carrier board. Common options include:

  • SPI-to-UART bridge ICs (e.g., SC16IS752, SC16IS762, MAX3107, MAX3109)
  • I²C-to-UART bridge ICs (e.g., SC16IS740, SC16IS750)

These external controllers connect via SPI or I²C interfaces available on the Verdin connector and appear as additional /dev/ttySCx or /dev/ttyUSBx devices in Linux(2).

Option 3: Configure One UART for RS485 Multi-Drop Mode

If your application allows, you could potentially use RS485 multi-drop mode on one of the UART interfaces to communicate with multiple RS485 devices on a single physical port, reducing the total number of required UART interfaces.

The device tree configuration for RS485 mode would look like this (as referenced in community discussions)(3)(4):

&uart3 {
    status = "okay";
    linux,rs485-enabled-at-boot-time;
    rs485-rts-active-low;
    rs485-rx-during-tx;
};

(3)(4)

Recommendation

For a robust solution requiring five independent UART interfaces, I recommend implementing an external SPI-to-UART or I²C-to-UART bridge IC on your custom carrier board. This approach provides the additional UART hardware needed while leveraging the available SPI or I²C buses on the Verdin iMX8M Plus module.

Could you confirm which Torizon OS or Yocto BSP version you’re currently running? This will help me provide more specific device tree configuration guidance for integrating an external UART controller.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Regarding the availability of four UART interfaces, I noticed in the Verdin iMX8M Plus datasheet that in the Bluetooth + WiFi version, UART3 (Pin 147, 149) is reserved for debug, and UART4 (Pin 151, 153) is used for Bluetooth. Therefore, only UART1 (Pin 129, 131) and UART2 (Pin 137, 139) are actually available. In addition to your suggestion of adding an external UART bridge IC via SPI or I²C, is it also possible to use a USB-to-UART solution? Which approach would be more suitable, and is software support available?

Clarification on Available UARTs and USB-to-UART Solution

You’re absolutely correct in your observation. Let me clarify the UART availability on the Verdin iMX8M Plus Quad 4GB WB IT module:

Available UART Interfaces on WB (WiFi/Bluetooth) Variant

According to the datasheet(1):

  • UART_1 (Pins 129, 131): General-purpose UART - Available
  • UART_2 (Pins 137, 139): General-purpose UART - Available
  • UART_3 (Pins 147, 149): Intended for A53 debug console - Typically reserved but can be repurposed
  • UART_4 (Pins 151, 153): Shared with Bluetooth UART on WB modules(1)

The datasheet explicitly states: “On modules with Wi-Fi/Bluetooth, the UART_4 is shared with the Bluetooth UART. This means the UART_4 can only be used externally, if the Bluetooth UART is not in use.”(1)

Important Note on UART_4

From the hardware change documentation, the Bluetooth interface was moved to UART4 in hardware version V1.1A: “The host controller interface of the Bluetooth module has been changed from SDIO to a full-featured UART interface (including flow control signals, served by the UART4 SoC interface)”(2). This means if you need Bluetooth functionality, UART_4 is not available for external use.

USB-to-UART Solution: Yes, This is Viable!

USB-to-UART converters are a practical and well-supported option for adding additional serial ports. Here’s why:

Advantages of USB-to-UART Approach:

  1. Native Linux Support: Most USB-to-UART chips (FTDI FT232, CP210x, CH340, PL2303) have mainline Linux kernel drivers
  2. Hot-pluggable: Can be connected/disconnected without reboot
  3. No Device Tree Changes Required: Automatically detected as /dev/ttyUSBx devices
  4. Electrically Isolated Options Available: Some USB-to-UART converters offer galvanic isolation
  5. Multiple Ports per Device: USB hubs with multiple UART converters can add several ports simultaneously

Comparison: USB-to-UART vs. SPI/I²C Bridge

Feature USB-to-UART SPI/I²C-to-UART Bridge
Software Support Native kernel drivers, zero configuration Requires device tree overlay configuration
Ease of Implementation Plug-and-play Requires carrier board design changes
Flexibility Hot-pluggable Fixed on carrier board
Latency Slightly higher (USB overhead) Lower (direct SoC connection)
Power Consumption Slightly higher Lower
Cost Moderate Moderate to low

Recommendation

For your requirement of 5 total UART interfaces (2× RS232 + 3× RS485):

Option A: If Bluetooth is NOT needed

  • Use UART_1, UART_2, UART_3, UART_4 (4 hardware UARTs)
  • Add 1× USB-to-UART converter for the 5th port

Option B: If Bluetooth IS needed

  • Use UART_1, UART_2, UART_3 (3 hardware UARTs, with UART_3 repurposed from debug)
  • Add 2× USB-to-UART converters for the remaining 2 ports

Option C: Most Flexible

  • Use UART_1 and UART_2 (2 hardware UARTs)
  • Keep UART_3 for debug and UART_4 for Bluetooth
  • Add 3× USB-to-UART converters (or a single USB hub with 3 UART ports)

Software Support

USB-to-UART devices are fully supported in both Torizon OS and Yocto BSP without additional configuration. The devices will appear as /dev/ttyUSB0, /dev/ttyUSB1, etc.

Could you confirm:

  1. Whether you need Bluetooth functionality?
  2. Which OS version you’re running (Torizon OS or Yocto BSP, and which version)?
  3. Whether you need UART_3 available for debug console access?

This will help me provide more specific guidance for your exact configuration.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

We require Bluetooth functionality, and the operating systems will be Android 12 and Yocto Linux with Qt 6.3. Could you confirm whether the software supports the expansion methods mentioned above

Hi Ruan,

We don’t have direct support for Android, but as to Yocto Linux BSP, the related drivers for FTDI FT232, CP210x, CH340, PL2303 is definitely available with linux kernel, but may not work out-of-box, you may need to re-configure the kernel source to enable it.

Hai Qin
Toradex