Difference between revisions of "DESK-MX6UL-L/Peripherals/UART"

From DAVE Developer's Wiki
Jump to: navigation, search
m (U0007 moved page AXEL ULite SOM/DESK-MX6UL-L/Pheripherals/UART to DESK-MX6UL-L/Pheripherals/UART without leaving a redirect)
(UART section update for DESK-MX6UL-L release)
Line 1: Line 1:
<section begin=History/>
+
<section begin="History" />
 
{| style="border-collapse:collapse; "
 
{| style="border-collapse:collapse; "
!colspan="4" style="width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History
+
! colspan="4" style="width:100%; text-align:left" ; border-bottom:solid 2px #ededed" |History
 
|-  
 
|-  
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Version
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white" |Version
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white" |Issue Date
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white" |Notes
 
|-
 
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|1.0.0
+
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |1.0.0
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Apr 2021
+
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |Apr 2021
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK release
+
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |First DESK release
 +
|-
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |3.0.0
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |Feb 2022
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |3.0.0 DESK release
 
|-
 
|-
 
|-
 
|-
 
|}
 
|}
<section end=History/>
+
<section end="History" />
<section begin=Body/>
+
<section begin="Body" />
  
 
==Peripheral UART ==
 
==Peripheral UART ==
Line 21: Line 25:
 
Here below an example of device tree configuration used on standard DAVE's kit for the [[AXEL ULite SOM]]:
 
Here below an example of device tree configuration used on standard DAVE's kit for the [[AXEL ULite SOM]]:
  
From the Carrier <code>imx6ul-axelulite-cb003a.dts</code> device tree:
+
From the Carrier <code>imx6ul-lynx-som0013-cb002f.dts</code> device tree:
 +
 
 +
[    1.163365] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX
 +
 
 +
[    1.923126] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX
 +
 
 +
and from <code>imx6ul-lynx-som0013.dtsi</code><pre>
 +
pinctrl_uart1: uart1grp {
 +
fsl,pins = <
 +
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
 +
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
 +
>;
 +
};
 +
 
 +
pinctrl_uart2: uart2grp {
 +
fsl,pins = <
 +
MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
 +
MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
 +
>;
 +
};
 +
 
 +
pinctrl_uart2_flow: uart2grp-flow {
 +
fsl,pins = <
 +
MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
 +
MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
 +
MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS  0x1b0b1
 +
MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS  0x1b0b1
 +
>;
 +
};
 +
 
 +
pinctrl_uart3: uart3grp {
 +
fsl,pins = <
 +
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
 +
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
 +
>;
 +
};
 +
 
 +
pinctrl_uart3_flow: uart3grp-flow {
 +
fsl,pins = <
 +
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
 +
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
 +
MX6UL_PAD_UART3_CTS_B__UART3_DCE_CTS  0x1b0b1
 +
MX6UL_PAD_UART3_RTS_B__UART3_DCE_RTS  0x1b0b1
 +
>;
 +
};
 +
 
 +
 
 +
pinctrl_uart3_config: uart3grp-config {
 +
fsl,pins = <
 +
MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18 0x80000000 /* MPUART1_ON */
 +
MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x80000000 /* MPUART1_DEN */
 +
MX6UL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x80000000 /* MPUART1_RXEN */
 +
>;
 +
};
  
<pre>
+
pinctrl_uart8: uart8grp {
&uart3 {
+
fsl,pins = <
        pinctrl-names = "default";
+
MX6UL_PAD_LCD_DATA20__UART8_DCE_TX      0x1b0b1
        pinctrl-0 = <&pinctrl_uart3>;
+
MX6UL_PAD_LCD_DATA21__UART8_DCE_RX      0x1b0b1
        status = "okay";
+
>;
};
+
};
...
+
 
...
+
pinctrl_uart8_flow: uart8grp-1 {
&iomuxc {
+
fsl,pins = <
        pinctrl-names = "default";
+
MX6UL_PAD_LCD_DATA20__UART8_DCE_TX      0x1b0b1
        pinctrl-0 = <&pinctrl_hog_gpios>;
+
MX6UL_PAD_LCD_DATA21__UART8_DCE_RX      0x1b0b1
 +
MX6UL_PAD_ENET2_RX_ER__UART8_DCE_RTS    0x80000000
 +
MX6UL_PAD_ENET2_TX_CLK__UART8_DCE_CTS  0x80000000
 +
>;
 +
};
  
        imx6ul-axelulite {
+
pinctrl_uart8_config: uart8grp-config {
...
+
fsl,pins = <
...
+
MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x80000000 /* MPUART0_DEN */
        uart {
+
MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x80000000 /* MPUART0_RXEN */
                pinctrl_uart3: uart3grp {
+
MX6UL_PAD_CSI_MCLK__GPIO4_IO17 0x80000000 /* MPUART0_ON */
                        fsl,pins = <
+
>;
                                MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX  0x1b0b1
+
};
                                MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX  0x1b0b1
 
                        >;
 
                };
 
        };
 
...
 
...
 
 
</pre>
 
</pre>
  
Line 56: Line 111:
 
...
 
...
 
...
 
...
[    0.437613] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 21, base_baud = 5000000) is a IMX
+
[    1.211906] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX
[    1.167221] console [ttymxc0] enabled
+
[    1.962230] 2024000.serial: ttymxc7 at MMIO 0x2024000 (irq = 31, base_baud = 5000000) is a IMX
[    1.172839] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 58, base_baud = 5000000) is a IMX
+
[   1.974074] 21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 65, base_baud = 5000000) is a IMX
 +
[    1.985128] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 66, base_baud = 5000000) is a IMX
 
...
 
...
 
...
 
...
root@imx6qxelk:~#
 
 
</pre>
 
</pre>
  
Line 81: Line 136:
  
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
root@desk-mx6ul-axelulite:~# stty -F /dev/ttymxc2 115200 -echo
+
root@desk-mx6ul-lynx:~# stty -F /dev/ttymxc7 115200 -echo                                                                                                                                                        
root@desk-mx6ul-axelulite:~# cat /dev/ttymxc2 &
+
root@desk-mx6ul-lynx:~# cat /dev/ttymxc7 &                                                                                                                                                                        
[1] 331
+
[1] 266
root@desk-mx6ul-axelulite:~# echo "Test loopback" > /dev/ttymxc2
+
root@desk-mx6ul-lynx:~# echo "Test loopback" > /dev/ttymxc7
root@desk-mx6ul-lynx:~# Test loopback
+
Test loopback
 
 
 
</pre>
 
</pre>
  

Revision as of 18:12, 27 February 2022

History
Version Issue Date Notes
1.0.0 Apr 2021 First DESK release
3.0.0 Feb 2022 3.0.0 DESK release


Peripheral UART[edit | edit source]

Device tree configuration[edit | edit source]

Here below an example of device tree configuration used on standard DAVE's kit for the AXEL ULite SOM:

From the Carrier imx6ul-lynx-som0013-cb002f.dts device tree:

[ 1.163365] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX

[ 1.923126] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX

and from imx6ul-lynx-som0013.dtsi

		pinctrl_uart1: uart1grp {
			fsl,pins = <
				MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
				MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
			>;
		};

		pinctrl_uart2: uart2grp {
			fsl,pins = <
				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
			>;
		};

		pinctrl_uart2_flow: uart2grp-flow {
			fsl,pins = <
				MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
				MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
				MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS  0x1b0b1
				MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS  0x1b0b1
			>;
		};

		pinctrl_uart3: uart3grp {
			fsl,pins = <
				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
			>;
		};

		pinctrl_uart3_flow: uart3grp-flow {
			fsl,pins = <
				MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1
				MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1
				MX6UL_PAD_UART3_CTS_B__UART3_DCE_CTS  0x1b0b1
				MX6UL_PAD_UART3_RTS_B__UART3_DCE_RTS  0x1b0b1
			>;
		};


		pinctrl_uart3_config: uart3grp-config {
			fsl,pins = <
				MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18	0x80000000 /* MPUART1_ON */
				MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05	0x80000000 /* MPUART1_DEN */
				MX6UL_PAD_SNVS_TAMPER6__GPIO5_IO06	0x80000000 /* MPUART1_RXEN */
			>;
		};

		pinctrl_uart8: uart8grp {
			fsl,pins = <
				MX6UL_PAD_LCD_DATA20__UART8_DCE_TX      0x1b0b1
				MX6UL_PAD_LCD_DATA21__UART8_DCE_RX      0x1b0b1
			>;
		};

		pinctrl_uart8_flow: uart8grp-1 {
			fsl,pins = <
				MX6UL_PAD_LCD_DATA20__UART8_DCE_TX      0x1b0b1
				MX6UL_PAD_LCD_DATA21__UART8_DCE_RX      0x1b0b1
				MX6UL_PAD_ENET2_RX_ER__UART8_DCE_RTS    0x80000000
				MX6UL_PAD_ENET2_TX_CLK__UART8_DCE_CTS   0x80000000
			>;
		};

		pinctrl_uart8_config: uart8grp-config {
			fsl,pins = <
				MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08	0x80000000 /* MPUART0_DEN */
				MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09	0x80000000 /* MPUART0_RXEN */
				MX6UL_PAD_CSI_MCLK__GPIO4_IO17		0x80000000 /* MPUART0_ON */
			>;
		};

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

...
...
[    1.211906] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 30, base_baud = 5000000) is a IMX
[    1.962230] 2024000.serial: ttymxc7 at MMIO 0x2024000 (irq = 31, base_baud = 5000000) is a IMX
[    1.974074] 21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 65, base_baud = 5000000) is a IMX
[    1.985128] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 66, base_baud = 5000000) is a IMX
...
...

Usage with stty[edit | edit source]

N.B. UART mapping respect to ttymxcX is the following one:

UART1 <-> ttymxc0
UART2 <-> ttymxc1
UART3 <-> ttymxc2
UART4 <-> ttymxc3
UART5 <-> ttymxc4
UART6 <-> ttymxc5
UART7 <-> ttymxc6
UART8 <-> ttymxc7
...


For exmaple, using a loopback HW connection (RX shortcircuited to TX on UART232 port) it is possibile to test the send and receive data using the ttymxc2 device:

root@desk-mx6ul-lynx:~# stty -F /dev/ttymxc7 115200 -echo                                                                                                                                                          
root@desk-mx6ul-lynx:~# cat /dev/ttymxc7 &                                                                                                                                                                         
[1] 266
root@desk-mx6ul-lynx:~# echo "Test loopback" > /dev/ttymxc7
Test loopback

Additional information[edit | edit source]

Serial ports can be used through the standard serial programming API.

For detailed information, please refer to the Serial Programming HOWTO at Serial-Programming-HOWTO