【迅為開發板資料】iMX6ULL開發板八路串口配置


硬件平台:迅為i.MX6ULL開發板

 

 

本文轉自:<北京迅為i.mx6ull終結者開發板使用手冊-第九十一章>

1 文檔說明

本章節使用的資料已經放到了開發板網盤資料中,路徑為:11_Linux系統開發進階\86_章節使用資料

章節介紹如何在i.MX6ULL終結者上配置8路串口,驅動程序內核已經自帶,我們只需要根據NXP官方提供的手冊來修改設備樹。設備樹文件在Linux內核的arch/arm/boot/dts/目錄下(使用迅為提供的的Linux內核,在終結者ULL光盤資料\i.MX6ULL終結者光盤資料\05_uboot linux源碼\目錄下),本例程中主要用到測試程序uart_write_read.c設備樹文件imx6ull-14x14-evk.dtsimx6ull.dtsi,還有imx6ul-pinfunc.h

配置UART用到的引腳在芯片手冊(終結者ULL光盤資料\i.MX6ULL終結者光盤資料\03_開發板硬件資料\02_芯片資料\2I.MX6ULL芯片資料\IMX6ULL參考手冊)中已經找到,如下圖:\

 

 

 

 

 

下面就開始把這些引腳復用為串口,逐一配置到設備樹。

 

因為 UART1是調試串口,我們最后再設置它。在imx6ull.dtsi文件中,可以看出串口結點0~7對應uart1~8。可根據/dev/下的設備結點ttymxc*來調試。

 

 

 

2 UART2配置

以配置串口2為例,逐步配置設備樹,本文檔其余的7路串口都用相同的方法配置。

首先通過查NXP的芯片手冊(終結者ULL光盤資料\i.MX6ULL終結者光盤資料\03_開發板硬件資料\02_芯片資料\2I.MX6ULL芯片資料\IMX6ULL參考手冊),搜索“UART2”找到 UART2的引腳,

 

 

 

用同樣的方法在芯片手冊搜索接收引腳, 搜索到UART2兩個引腳:

發送引腳IOMUXC_SW_MUX_CTL_PAD_UART2_TX_DATA

接收引腳IOMUXC_SW_MUX_CTL_PAD_UART2_RX_DATA

然后我們在imx6ul-pinfunc.h中搜索發送引腳“PAD_UART2_TX_DATA”,找到了“MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX”,即MX6UL_引腳名_復用功能。

 

 

 

用相同的方法搜索“PAD_UART2_RX_DATA”,找到后在設備樹文件arch/arm/boot/dts/imx6ull-14x14-evk.dts中添加pinctrl信息(自帶的已經添加好),電氣屬性值為”0x1b0b1”,修改成如下所示:

pinctrl_uart2: uart2grp {

fsl,pins = <

MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1

MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1

>;

};

本實驗中沒有用到流控,注釋掉668669行,然后查找其他pinctrl有沒有使用這兩個引腳,如果有,注釋掉其他pinctrl。搜索“PAD_UART2_TX_DATA”,查找到pinctrl_uart2dte使用了這兩個引腳,我們直接把pinctrl_uart2dte注釋掉或刪掉。

如下圖:

 

再查找引用此pinctrl_uart2dte的節點,注釋掉然后查找使用此pinctrl的節點標簽,有的話注釋掉。

查找“PAD_UART2_RX_DATA”,發現有pinctrl_remote_control使用了這個,引腳,注釋掉

 

 

然后添加節點標簽&uart2(源碼已經),只使用pinctrl_uart2satus改為“okay”,注釋掉“fsluart-has-rtscts”。

 

打開imx6ull.dtsi,更改標簽uart2設備屬性status”okay”,

 

 

編譯make  dtbs,在開發板上運行起來后,串口2的設備結點就是/dev/目錄下的ttymxc1,查找原理圖中兩個引腳的位置(終結者ULL光盤資料\i.MX6ULL終結者光盤資料\03_開發板硬件資料\01_開發板原理圖\核心板原理圖),將兩個引腳短接,接收引腳得到數據后測試程序會打印接收到的字節個數,執行測試程序,引腳位置:

 

 

運行測試程序:

 

出現此結果說明引腳配置成功。

3 UART3配置

通過 imx6ull的芯片手冊(終結者ULL光盤資料\i.MX6ULL終結者光盤資料\03_開發板硬件資料\02_芯片資料\2I.MX6ULL芯片資料\IMX6ULL參考手冊)查找到UART3的引腳為:

發送引腳IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA,

接收引腳IOMUXC_SW_MUX_CTL_PAD_UART3_RX_DATA,

UART2的步驟基本一樣,在arch/arm/boot/dts/imx6ull-14x14-evk.dts配置pinctrl

pinctrl_uart3: uart3grp {

fsl,pins = <

MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX   0x1b0b1

MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX   0x1b0b1

>;

};

 

然后查找使用這兩個引腳的其他pinctrl,直接注釋掉。

 

添加uart3節點標簽:

&uart3 {

        pinctrl-names = "default";

        pinctrl-0 = <&pinctrl_uart3>;

        status = "okay";

};

 

 

 

 

imx6ull.dtsi中更改uart3status屬性:

 

這兩個引腳對應的原理圖為:

  

短接后測試/dev/ttymxc2節點:

 

4 UART4配置

查找到 UART5對應的引腳為:

發送引腳IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA,

接收引腳IOMUXC_SW_MUX_CTL_PAD_UART4_RX_DATA,

arch/arm/boot/dts/imx6ull-14x14-evk.dts中配置pinctrl

pinctrl_uart4: uart4grp {

fsl,pins = <

MX6UL_PAD_UART4_RX_DATA__UART4_DCE_RX 0x1b0b1

MX6UL_PAD_UART4_TX_DATA__UART4_DCE_TX   0x1b0b1

>;

};

 

去掉復用的pinctrl

 

然后添加uart4節點標簽:

&uart4 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart4>;

status = "okay";

};

 

imx6ull.dtsi中改uart4status屬性為“okay:

 

引腳位置:

 

測試/dev/ttymxc3,短接兩個引腳,出現以下結果正確:

 

5 UART5配置

imx6ull芯片手冊查找到UART5對應的引腳為

發送引腳IOMUXC_SW_MUX_CTL_PAD_UART5_TX_DATA0,

接收引腳IOMUXC_SW_MUX_CTL_PAD_UART5_RX_DATA ,經過反復調試和翻手冊,需要更改imx6ul-pinfunc.h文件中的一個宏定義:

查找“ MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX”,因為用的是i.MX6ULLimx6ull芯片手冊中說明要復用為串口5要選擇ALT0模式,即在指定寄存器寫”111”,轉化為16進制為0x7,所以在imx6ul-pinfunc.h中將“ MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX”后面的0x5修改為0x7,如果用的是i.MX6UL則保持0x5不動,如下圖:

 

 

在設備樹文件添加pinctrl

pinctrl_uart5: uart5grp {

fsl,pins = <

MX6UL_PAD_UART5_TX_DATA__UART5_DCE_TX    0x1b0b1

MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX 0x1b0b1

>;

};

 

去掉引用這兩個引腳的pinctrl

 

添加節點標簽:

 

imx6ull.dtsi更改status屬性為 ”okay”:

 

兩個引腳位置:

 

 

執行 ./uart /dev/ttymxc4

 

打印出接收到的字符個數即成功。

6 UART6配置

imx6ull芯片手冊中查找到UART6的引腳

IOMUXC_SW_MUX_CTL_PAD_CSI_MCLK和IOMUXC_SW_MUX_CTL_PAD_CSI_PIXCLK,

然后在imx6ull-14x14-evk.dts配置pinctrl

pinctrl_uart6: uart6grp {

fsl,pins = <

MX6UL_PAD_CSI_MCLK__UART6_DCE_TX 0x1b0b1

MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX  0x1b0b1

>;

};

去掉占用這兩個引腳的其他pinctrl,找到”pinctrl_csi1”,修改成如下圖:

 

添加節點:

 

imx6ull.dtsi文件中修改uart6status屬性:

 

兩個引腳對應的原理圖:

 

短接后測試: ./uart /dev/ttymxc5出現如下結果說明配置成功。

 

7 UART7配置

UART7UART8的引腳與網絡接口復用,在目標板上調試時不能再用NFS掛載根文件系統。

UART7引腳為:

IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_ENIOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA0

然后根據imx6ul-pinfun.h添加pinctrl

pinctrl_uart7: uart7grp {

fsl,pins = <

MX6UL_PAD_ENET2_RX_EN__UART7_DCE_TX     0x1b0b0

MX6UL_PAD_ENET2_TX_DATA0__UART7_DCE_RX 0x1b0b0

>;

    };

 

 

然后查找使用這兩個引腳的pinctrl,注釋掉:

 

 

 

添加標簽:

 

imx6ull.dtsi中更改status屬性為“okay”。

 

對應的原理圖位置:

 

 

測試./uart /dev/ttymxc6

 

8 UART8配置

UART8使用的引腳為:

IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA1,IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_EN,

配置 pinctrl

pinctrl_uart8: uart8grp {

fsl,pins = <

MX6UL_PAD_ENET2_TX_DATA1__UART8_DCE_TX 0x1b0b0

MX6UL_PAD_ENET2_TX_EN__UART8_DCE_RX    0x1b0b0

>;

     };

 

 

注釋掉占用這兩個引腳的pinctrl

 

添加&uart8

 

 

imx6ull.dtsi更改status屬性為“okay”:

 

原理圖位置:

 

 

測試節點為/dev/ttymxc7測試方法和效果與uart2一樣。

 

9 UART1使用方法

uboot階段把串口1設置成了調試串口,即uboot參數”console=ttymxc0”,為了測試,我們將console參數設置為null,這樣串口一不再打印 Linux終端信息。

首先修改腳本將測試程序設置成開機自啟動:

 

setenv console null

saveenv

 

 

更新設備樹,然后輸入boot啟動,內核啟動后會有如下顯示:

 

測試程序中發送串口每隔1s發送一次,PC終端軟件會將接收到的信息“hello world !”顯示出來,也可以使用串口調試軟件測試收發功能:

 

到此八路串口配置完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM