DART-MX8M UART

From Variscite Wiki
Revision as of 16:55, 1 November 2018 by Admin (talk | contribs) (Created page with "{{PageHeader|DART-MX8M - UART}} {{DocImage|category1=DART-MX8M|category2=Yocto}} __toc__ = DART-MX8M UART Overview = All 4 UARTs on DART-MX8M are enabled by default. UART1 is...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
DART-MX8M - UART

DART-MX8M UART Overview

All 4 UARTs on DART-MX8M are enabled by default. UART1 is connected to debug console, UART2 and UART3 are connected to header J12 on DART-MX8M carrier board, UART4 is connected to Bluetooth module. On DART-MX8M SoMs without WIFI/BT module UART4 is also connected to J12 header. See carrier board datasheet https://www.variscite.com/wp-content/uploads/2018/04/VAR-DT8MCustomBoard-Datasheet.pdf 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

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

Each time you run echo command the "hello" string should appear on the terminal.

Testing UART3

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

Each time you run echo command the "hello" string should appear on the terminal.

Using UART3 for console (instead of UART1)

In the following example we use UART3 for console.
Other UART ports can be used, similarly.

Changes needed in U-Boot

Subject: [PATCH] mx6ul_var_dart: Use UART3 for console (instead of UART1)

---
 board/variscite/mx6ul_var_dart/mx6ul_var_dart.c | 8 ++++----
 include/configs/mx6ul_var_dart.h                | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c b/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
index 63a75ec..9d70851 100755
--- a/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
+++ b/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
@@ -162,9 +162,9 @@ int dram_init(void){
 }
 
 
-static iomux_v3_cfg_t const uart1_pads[] = {
-	MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
-	MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+static iomux_v3_cfg_t const uart3_pads[] = {
+	MX6_PAD_UART3_TX_DATA__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+	MX6_PAD_UART3_RX_DATA__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
 };
 
 static iomux_v3_cfg_t const usdhc1_pads[] = {
@@ -253,7 +253,7 @@ static void setup_gpmi_nand(void)
 
 static void setup_iomux_uart(void)
 {
-	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+	imx_iomux_v3_setup_multiple_pads(uart3_pads, ARRAY_SIZE(uart3_pads));
 }
 
 static struct fsl_esdhc_cfg usdhc_cfg[2] = {
diff --git a/include/configs/mx6ul_var_dart.h b/include/configs/mx6ul_var_dart.h
index 5313d17..88bc1a0 100755
--- a/include/configs/mx6ul_var_dart.h
+++ b/include/configs/mx6ul_var_dart.h
@@ -55,7 +55,7 @@
 #define CONFIG_MXC_GPIO
 
 #define CONFIG_MXC_UART
-#define CONFIG_MXC_UART_BASE		UART1_BASE
+#define CONFIG_MXC_UART_BASE		UART3_BASE
 
 /* MMC Configs */
 #ifdef CONFIG_FSL_USDHC
@@ -169,7 +169,7 @@
         BOOT_ENV_SETTINGS \
 	"script=boot.scr\0" \
 	"image=zImage\0" \
-	"console=ttymxc0\0" \
+	"console=ttymxc2\0" \
 	"fdt_high=0xffffffff\0" \
 	"initrd_high=0xffffffff\0" \
 	"var_auto_fdt_file=Y\0" \
-- 
1.9.1

You can follow the "Build U-Boot from source code" guide to get the U-Boot source code and build it.

Changes needed in Yocto

Edit the file: sources/meta-variscite-imx/conf/machine/imx6ul-var-dart.conf
and change the line:
SERIAL_CONSOLE = "115200 ttymxc0"
to:
SERIAL_CONSOLE = "115200 ttymxc2"

(or you can change it on the target in /etc/inittab)

Disable the console

Disabling the serial console completely is not recommended, as it makes it hard or even impossible to analyze errors such as a user interface crash or to get control of the system if it doesn't boot successfully.
If you need to do it anyway, this is how.

For Debian, the only changes needed are in U-Boot.

Changes needed in U-Boot

Applying the first patch only will still allow you to stop the boot process at U-Boot and get to the U-Boot command line.
Applying the second patch will eliminate that also.

Subject: [PATCH 1/2] mx6ul_var_dart: Silence console

---
 board/variscite/mx6ul_var_dart/mx6ul_var_dart.c | 2 ++
 include/configs/mx6ul_var_dart.h                | 8 +++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c b/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
index 59c4da7f8a..139b5bc216 100755
--- a/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
+++ b/board/variscite/mx6ul_var_dart/mx6ul_var_dart.c
@@ -966,8 +966,10 @@ void board_init_f(ulong dummy)
 	/* setup GP timer */
 	timer_init();
 
+#ifndef CONFIG_SPL_NO_CONSOLE
 	/* UART clocks enabled and gd valid - init serial console */
 	preloader_console_init();
+#endif
 
 	setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info1);
 	setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2);
diff --git a/include/configs/mx6ul_var_dart.h b/include/configs/mx6ul_var_dart.h
index 5313d17c21..abbcb11620 100755
--- a/include/configs/mx6ul_var_dart.h
+++ b/include/configs/mx6ul_var_dart.h
@@ -93,6 +93,11 @@
 #define CONFIG_POWER_PFUZE3000_I2C_ADDR  0x08
 #endif
 
+#define CONFIG_SYS_DEVICE_NULLDEV
+#define CONFIG_SILENT_CONSOLE
+#define CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC
+#define CONFIG_SPL_NO_CONSOLE
+
 #define CONFIG_SYS_MMC_IMG_LOAD_PART	1
 
 #define NAND_BOOT_ENV_SETTINGS \
@@ -169,7 +174,8 @@
         BOOT_ENV_SETTINGS \
 	"script=boot.scr\0" \
 	"image=zImage\0" \
-	"console=ttymxc0\0" \
+	"silent=1\0" \
+	"console=null\0" \
 	"fdt_high=0xffffffff\0" \
 	"initrd_high=0xffffffff\0" \
 	"var_auto_fdt_file=Y\0" \
-- 
2.11.0
Subject: [PATCH 2/2] mx6ul_var_dart: Autoboot with no delay and no check for
 abort

---
 include/configs/mx6ul_var_common.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/configs/mx6ul_var_common.h b/include/configs/mx6ul_var_common.h
index 8556b257be..6139ec6d55 100644
--- a/include/configs/mx6ul_var_common.h
+++ b/include/configs/mx6ul_var_common.h
@@ -72,7 +72,7 @@
 #define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR
 
 #ifndef CONFIG_BOOTDELAY
-#define CONFIG_BOOTDELAY	1
+#define CONFIG_BOOTDELAY	-2
 #endif
 
 /* allow to overwrite serial and ethaddr */
-- 
2.11.0

Changes needed in Yocto

Edit the file: sources/meta-variscite-imx/conf/machine/imx6ul-var-dart.conf
and change the line:
SERIAL_CONSOLE = "115200 ttymxc0"
to:
SERIAL_CONSOLE = ""

(or you can change it on the target in /etc/inittab)