DART-MX8M UART: Difference between revisions

From Variscite Wiki
No edit summary
(Add 'Configuring RS485 Half-Duplex')
Line 6: Line 6:
--> {{PageHeader|{{#var:HARDWARE_NAME}} UART}} {{DocImage|category1=Yocto|category2=Android}}[[Category:Debian]][[Category:{{#var:HARDWARE_NAME}}]] __toc__
--> {{PageHeader|{{#var:HARDWARE_NAME}} UART}} {{DocImage|category1=Yocto|category2=Android}}[[Category:Debian]][[Category:{{#var:HARDWARE_NAME}}]] __toc__
<!-- Set local variables
<!-- Set local variables
--> {{#vardefine:KERNEL_GIT_HTTP|{{#replace:{{#var:KERNEL_GIT}}|.git|}}}} <!--
--> {{#vardefine:SHOW_DART_SECTION | <!--
--> {{#vardefine:SHOW_DART_SECTION | <!--
-->    {{#switch:{{#var:HARDWARE_NAME}} | <!--
-->    {{#switch:{{#var:HARDWARE_NAME}} | <!--
Line 138: Line 139:
To disable UART2 on '''{{#var:SYMPHONY_SOM_NAME}}''' edit {{#var:DTS_PATH}}arch/arm64/boot/dts/freescale/freescale/fsl-imx8mm-var-som.dts in the same manner.
To disable UART2 on '''{{#var:SYMPHONY_SOM_NAME}}''' edit {{#var:DTS_PATH}}arch/arm64/boot/dts/freescale/freescale/fsl-imx8mm-var-som.dts in the same manner.
|}}
|}}
= Configuring RS485 Half-Duplex =
Each UART can be configured for RS485 Half-Duplex mode by using a GPIO pin to drive the receive and transmit enable inputs. This can be configured in the device tree by making the following changes to your device tree, replacing X with the proper values:
  &uartX {                                                        /* Add RS485 properties to uartX */
  pinctrl-names = "default";
  pinctrl-0 = <&pinctrl_uartX>, <&pinctrl_uartX_rs485>;    /* Add RS485 GPIO pinctrl
rts-gpios = <&gpioX X GPIO_ACTIVE_LOW>;                  /* Add rts-gpios property */
  linux,rs485-enabled-at-boot-time;                        /* Enable RS485 at boot time to skip using TIOCSRS485 ioctl */
  status = "okay";
  };
Please refer to the Linux [{{#var:KERNEL_GIT_HTTP}}/tree/{{#var:KERNEL_BRANCH}}/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt device tree bindings] for more information.

Revision as of 19:54, 9 July 2021

DART-MX8M UART

UART Overview

On DART-MX8M all 4 UARTs are enabled by default.
UART1 is connected to debug console.
UART2 and UART3 are connected to J12 header on VAR-DT8MCustomBoard.
UART4 is connected to Bluetooth module.
On DART-MX8M SoMs without WIFI/BT module UART4 is also connected to J12 header.
See the carrier board datasheet for the exact pinout.
Only UART4 has RTS and CTS lines.


UART naming under Linux

The Linux devices corresponding to UART1 - UART4 are /dev/ttymxc0 - /dev/ttymxc3 respectively.

Testing UART2 on DART-MX8M

Short J12.4 and J12.6 pins and run the following commands:

stty -F /dev/ttymxc1 -echo -onlcr 115200
cat /dev/ttymxc1 &
echo hello > /dev/ttymxc1

For each time you run this echo command the "hello" string should appear on the terminal.

Testing UART3 on DART-MX8M

Short J12.11 and J12.13 pins and run the following commands:

stty -F /dev/ttymxc2 -echo -onlcr 115200
cat /dev/ttymxc2 &
echo hello > /dev/ttymxc2

For each invocation of echo command the "hello" string should appear on the terminal.


Disabling UART2

To disable UART2 on DART-MX8M edit arch/arm64/boot/dts/freescale/fsl-imx8mq-var-dart-common.dtsi under kernel source directory and modify

&uart2 {
        ...
        status = "okay";
};

to

&uart2 {
        ...
        status = "disabled";
};

Other UARTs can be disabled in the same manner.


Configuring RS485 Half-Duplex

Each UART can be configured for RS485 Half-Duplex mode by using a GPIO pin to drive the receive and transmit enable inputs. This can be configured in the device tree by making the following changes to your device tree, replacing X with the proper values:

 &uartX {                                                         /* Add RS485 properties to uartX */
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_uartX>, <&pinctrl_uartX_rs485>;     /* Add RS485 GPIO pinctrl
	rts-gpios = <&gpioX X GPIO_ACTIVE_LOW>;                   /* Add rts-gpios property */
 	linux,rs485-enabled-at-boot-time;                         /* Enable RS485 at boot time to skip using TIOCSRS485 ioctl */
 	status = "okay";
 };

Please refer to the Linux device tree bindings for more information.