工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

Verdin iMX8MP 調(diào)試串口更改

Verdin iMX8MP 調(diào)試串口更改

簡(jiǎn)介

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

 

硬件介紹

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

UART

起始地址

結(jié)束地址

UART1

0x3086_0000

0x3086_FFFF

UART2

0x3089_0000

0x3089_FFFF

UART3

0x3088_0000

0x3088_FFFF

UART4

0x30A6_0000

0x30A6_FFFF

 

軟件修改

調(diào)試串口更改的軟件涉及到三個(gè)部分,ATF、U-Boot Linux。ATF 會(huì)和 U-Boot 等其他文件如 DDR 固件一起打包成用于 NXP i.MX 8M Plus 處理器的啟動(dòng)文件。這些文件的下載和編譯請(qǐng)參考該網(wǎng)頁(yè)。文章使用到的完整補(bǔ)丁請(qǐng)從這里下載

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。如果不在這里定義,在編譯的時(shí)候添加 IMX_BOOT_UART_BASE=0×30860000 參數(shù)也可。

make PLAT=imx8mp IMX_BOOT_UART_BASE=0x30860000 bl31

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

 

U-Boot

Linux BSP v6 中對(duì)應(yīng) toradex_imx_lf_v2022.04 分支 U-Boot 在修改外設(shè)接口配置時(shí)也使用了 device tree。例如在 imx8mp-verdin-u-boot.dtsi 中配置 UART1 對(duì)應(yīng)的 pinctrl_uart1,并刪除原來(lái)的 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 的啟動(dòng)參數(shù)以及 UART1 所使用的引腳配置。earlycon 可用于 SPL 的調(diào)試輸出。

--- 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 的時(shí)鐘。

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

--- 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 的地址也設(shè)置為 UART1。同時(shí)修改 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 默認(rèn)配置下的 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 調(diào)試串口輸出至 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 = -      , /* SODIMM 135 */ -      , /* SODIMM 133 */ +      /*,  SODIMM 135 */ +      /*,  SODIMM 133 */

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

 

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

 

 

總結(jié)

 

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

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測(cè)試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計(jì)算機(jī)模塊

NXP iMX8MM Cortex-M4 核心 GPT Capture 測(cè)試

嵌入式Linux下使用 Plymouth 實(shí)現(xiàn)開(kāi)機(jī)畫(huà)面示例