"); //-->

狠狠做深爱婷婷久久一区,欧美日韩国内,久久麻豆精品传媒,久久久一区一区二区,色鬼伦理片,99视频精品久久,久久精品国产久久久久久,久久久伦理电影一区二,磁力天堂河北彩花

專欄中心

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

 

軟件修改

調試串口更改的軟件涉及到三個部分,ATFU-Boot Linux。ATF 會和 U-Boot 等其他文件如 DDR 固件一起打包成用于 NXP i.MX 8M Plus 處理器的啟動文件。這些文件的下載和編譯請參考該網(wǎ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。如果不在這里定義,在編譯的時候添加 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 中對應 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 的啟動參數(shù)以及 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)通常建議保留一個調試串口,這將有利于調試和后期其他問題排查。


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

關鍵詞: ARM UART Linux iMX8MP NXP Toradex Verdin

相關推薦

NXP 發(fā)布eIQ代理AI框架,實現(xiàn)安全邊緣自治

天勢科技與Arm戰(zhàn)略合作,為人工智能驅動的個人 “智能自動駕駛汽車” 提供技術支持

ARM嵌入式系統(tǒng)開發(fā)

WinCE+ARM開發(fā)及關鍵技術 下

視頻 2009-10-22

Arm與Linaro聯(lián)合發(fā)起行業(yè)聯(lián)盟 CoreCollective

ARM 展示小型低功耗上網(wǎng)本樣品

視頻 2009-03-16

arm學習資料

最新ARM技術和嵌入式技術發(fā)展動態(tài) 下

視頻 2009-10-22

ARM開發(fā)詳解

Arm再創(chuàng)季度營收紀錄

EDA/PCB 2026-02-09

WinCE+ARM開發(fā)及關鍵技術 上

視頻 2009-10-22

摩爾線程推出ARM架構SoC“長江” 進軍筆記本芯片市場

ARM嵌入式系統(tǒng)開發(fā):軟件設計與優(yōu)化

最新ARM技術和嵌入式技術發(fā)展動態(tài) 中

視頻 2009-10-22

Arm重磅推出AGI CPU 1OU 雙節(jié)點參考服務器

康佳特推出首款 Arm 架構 SMARC 模塊

ARM嵌入式軟件編程經(jīng)驗談

Arm AGI CPU:智能體式人工智能云時代的芯片基石

Arm自研芯片掀「跨界戰(zhàn)爭」 臺積電旗下創(chuàng)意恐首當其沖

OSM模塊由NXP i.MX 95驅動,用于邊緣 AI

更多 培訓課堂
更多 焦點
更多 視頻

技術專區(qū)

察雅县| 三原县| 沅陵县| 阿荣旗| 若尔盖县| 柘城县| 天等县| 德格县| 鄂尔多斯市| 上虞市| 綦江县| 神池县| 阳朔县| 启东市| 松桃| 安庆市| 临漳县| 潜江市| 襄城县| 乐山市| 门头沟区| 阜宁县| 郑州市| 五常市| 奈曼旗| 博客| 梅州市| 奉贤区| 青岛市| 丰台区| 建平县| 定兴县| 尤溪县| 罗定市| 聂荣县| 女性| 宝应县| 遂平县| 柳州市| 闵行区| 揭东县|