博客專欄

EEPW首頁 > 博客 > Verdin iMX8MP 調試串口更改

Verdin iMX8MP 調試串口更改

發(fā)布人:toradex 時間:2024-03-08 來源:工程師 發(fā)布文章

By Toradex胡珊逢

簡介

Verdin iMX8M Plus 具有四個串口,其中 UART3 是用于 A53 核心上的系統(tǒng)如 Linux 的默認調試串口,出于設計需要可能需要將調試口換到其他串口,文章將介紹如何使用 UART1 作調試串口。

 

硬件介紹

Verdin iMX8M Plus 的四個串口 UART1 UART4 中,UART3 為默認的 A53 調試串口,UART4 M7 調試串口,其余兩個作為通用 UART 使用。Verdin 系列的模塊均使用 1.8V TTL 電平,在連接外部設備時請先檢查電壓。本次測試使用的是 Dahlia 底板,在 X20 擴展接口 Pin12 Pin13 分別將模塊的 UART1_RXDUART1_TXD 引出。四個串口的物理地址如下:

UART

起始地址

結束地址

UART1

0x3086_0000

0x3086_FFFF

UART2

0x3089_0000

0x3089_FFFF

UART3

0x3088_0000

0x3088_FFFF

UART4

0x30A6_0000

0x30A6_FFFF

 

軟件修改

調試串口更改的軟件涉及到三個部分,ATF、U-Boot Linux。ATF 會和 U-Boot 等其他文件如 DDR 固件一起打包成用于 NXP i.MX 8M Plus 處理器的啟動文件。這些文件的下載和編譯請參考該網頁。文章使用到的完整補丁請從這里下載。

ATF

ATF 代碼的 imx8mp_bl31_setup.c 中,把 RDC_PDAP_UART1 劃分到 A53 所在的 D0 域。

---------------------------

--- a/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c
+++ b/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c
@@ -53,7 +53,7 @@ static const struct imx_rdc_cfg rdc[] = {
RDC_MDAn(RDC_MDA_M7, DID1),
/* peripherals domain permission */
-RDC_PDAPn(RDC_PDAP_UART2, D0R | D0W),
+RDC_PDAPn(RDC_PDAP_UART1, D0R | D0W),

 

--- a/plat/imx/imx8m/imx8mq/include/platform_def.h
+++ b/plat/imx/imx8m/imx8mq/include/platform_def.h
@@ -60,6 +60,7 @@
#define HAB_RVT_BASEU(0x00000880) /* HAB_RVT for i.MX8MQ */
+#define IMX_BOOT_UART_BASEU(0x30860000)

---------------------------

platform_def.h 中指定 IMX_BOOT_UART_BASE UART1 的物理地址 0×30860000。如果不在這里定義,在編譯的時候添加 IMX_BOOT_UART_BASE=0×30860000 參數也可。

make PLAT=imx8mp IMX_BOOT_UART_BASE=0x30860000 bl31

編譯成功后在 build/imx8mp/release/ 目錄下生成 bl32.bin 文件。

 

U-Boot

Linux BSP v6 中對應 toradex_imx_lf_v2022.04 分支 U-Boot 在修改外設接口配置時也使用了 device tree。例如在 imx8mp-verdin-u-boot.dtsi 中配置 UART1 對應的 pinctrl_uart1,并刪除原來的 pinctrl_uart1。

---------------------------

--- a/arch/arm/dts/imx8mp-verdin-u-boot.dtsi
+++ b/arch/arm/dts/imx8mp-verdin-u-boot.dtsi
@@ -134,7 +134,7 @@
      u-boot,off-on-delay-us = <20000>;
};

-&pinctrl_uart3 {
+&pinctrl_uart1 {
      u-boot,dm-spl;
};

@@ -174,7 +174,7 @@
      u-boot,dm-spl;
};

-&uart3 {
+&uart1 {
      u-boot,dm-spl;
};

---------------------------

 

imx8mp-verdin.dts 中修改 stdout-path 的啟動參數以及 UART1 所使用的引腳配置。earlycon 可用于 SPL 的調試輸出。

--- a/arch/arm/dts/imx8mp-verdin.dts
+++ b/arch/arm/dts/imx8mp-verdin.dts
      chosen {
-               bootargs = "console=ttymxc2,115200 earlycon";
-               stdout-path = &uart3;
+               bootargs = "console=ttymxc0,115200 \
+               earlycon=ec_imx6q,0x30860000,115200";
+               stdout-path = &uart1;
      };


-/* Verdin UART3 */
-&uart3 {
+/* Verdin UART1 */
+&uart1 {
      /* console */
      pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart3>;
+       pinctrl-0 = <&pinctrl_uart1>;
      status = "okay";
};


-       pinctrl_uart3: uart3grp {
+       pinctrl_uart1: uart1grp {
              fsl,pins = <
-                       MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX    0x49
-                       MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX    0x49
+                       MX8MP_IOMUXC_UART1_RXD__UART1_DCE_RX    0x49
+                       MX8MP_IOMUXC_UART1_TXD__UART1_DCE_TX    0x49

---------------------------

 

verdin-imx8mp.c 中需要初始化 UART1 的時鐘。

---------------------------

--- a/board/toradex/verdin-imx8mp/verdin-imx8mp.c
+++ b/board/toradex/verdin-imx8mp/verdin-imx8mp.c
/* Verdin UART_3, Console/Debug UART */
static const iomux_v3_cfg_t uart_pads[] = {
-       MX8MP_PAD_UART3_RXD__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
-       MX8MP_PAD_UART3_TXD__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+       MX8MP_PAD_UART1_RXD__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+       MX8MP_PAD_UART1_TXD__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
};

      imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));

-       init_uart_clk(2);
+       init_uart_clk(0);

      return 0;
}

---------------------------

 

include/configs/verdin-imx8mp.h CONFIG_MXC_UART_BASE 的地址也設置為 UART1。同時修改 console。

---------------------------

--- a/include/configs/verdin-imx8mp.h
+++ b/include/configs/verdin-imx8mp.h
      "boot_script_dhcp=" BOOT_SCRIPT "\0" \
-       "console=ttymxc2\0" \
+       "console=ttymxc0\0" \
      "fdt_board=dev\0" \

@@ -111,7 +111,7 @@
#define PHYS_SDRAM_2_SIZE              (SZ_4G + SZ_1G)

/* UART */
-#define CONFIG_MXC_UART_BASE           UART3_BASE_ADDR
+#define CONFIG_MXC_UART_BASE           UART1_BASE_ADDR

/* Monitor Command Prompt */
#define CONFIG_SYS_CBSIZE              SZ_2K

---------------------------

 

Linux

Linux device tree 同樣也需要做修改。在 freescale/imx8mp-verdin-dev.dtsi 中取消 UART1 默認配置下的 RS485 功能。

---------------------------

--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
/* Verdin UART_1, connector X50 through RS485 transceiver */
&uart1 {
+       /*
      linux,rs485-enabled-at-boot-time;
      rs485-rts-active-low;
      rs485-rx-during-tx;
+       */
      status = "okay";
};

---------------------------

 

imx8mp-verdin.dtsi 中更改 stdout-path 調試串口輸出至 UART1,并刪除 RTS CTS 功能引腳。

---------------------------

--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
@@ -8,7 +8,7 @@

/ {
      chosen {
-               stdout-path = &uart3;
+               stdout-path = &uart1;
      };

      aliases {
@@ -891,7 +891,7 @@ &snvs_pwrkey {
&uart1 {
      pinctrl-names = "default";
      pinctrl-0 = <&pinctrl_uart1>;
-       uart-has-rtscts;
+       /* uart-has-rtscts; */
};

/* Verdin UART_2 */
@@ -1331,8 +1331,8 @@ pinctrl_sai3: sai3grp {

  pinctrl_uart1: uart1grp {
  fsl,pins =
-      <MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS          0x1c4>, /* SODIMM 135 */
-      <MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS          0x1c4>, /* SODIMM 133 */
+      /* <MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS               0x1c4>,  SODIMM 135 */
+      /* <MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS               0x1c4>,  SODIMM 133 */

---------------------------

 

修改完畢上述文件后重新編譯 flash.binimx-boot)和 device tree 文件,并將其放入支持 Toradex Easy Installer 燒錄的鏡像文件中。同時也需要修改鏡像文件中的 u-boot-initial-env-sd,將 console 改為 console=ttymxc0。該文件會在燒錄系統(tǒng)時配置 U-Boot 環(huán)境變量。安裝完鏡像后,在 UART1 即可看到啟動日志。

 

 

總結

 

通過上述幾個文件的修改,可以切換 A53 調試串口。對于 Linux 系統(tǒng)通常建議保留一個調試串口,這將有利于調試和后期其他問題排查。


*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。




相關推薦

技術專區(qū)

關閉