【迅爲開發板資料】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.dts,imx6ull.dtsi,還有imx6ul-pinfunc.h。

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

 

 

 

 

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

 

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

 

 

2 UART2配置

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

首先通過查NXP的芯片手冊(終結者ULL光盤資料\i.MX6ULL終結者光盤資料\03_開發板硬件資料\02_芯片資料\2、I.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

>;

};

本實驗中沒有用到流控,註釋掉668和669行,然後查找其他pinctrl有沒有使用這兩個引腳,如果有,註釋掉其他pinctrl。搜索「PAD_UART2_TX_DATA」,查找到pinctrl_uart2dte使用了這兩個引腳,我們直接把pinctrl_uart2dte註釋掉或刪掉。

如下圖:

 

再查找引用此pinctrl_uart2dte的節點,註釋掉然後查找使用此pinctrl的節點標籤,有的話註釋掉。

查找「PAD_UART2_RX_DATA」,發現有pinctrl_remote_control使用了這個,引腳,註釋掉

 

 

然後添加節點標籤&uart2(源碼已經),只使用pinctrl_uart2,satus改爲「okay」,註釋掉「fsl,uart-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_芯片資料\2、I.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中更改uart3的status屬性:

 

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

  

短接後測試/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中改uart4的status屬性爲「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.MX6ULL,imx6ull芯片手冊中說明要複用爲串口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文件中修改uart6的status屬性:

 

兩個引腳對應的原理圖:

 

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

 

7 UART7配置

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

UART7引腳爲:

IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_EN,IOMUXC_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 !」顯示出來,也可以使用串口調試軟件測試收發功能:

 

到此八路串口配置完成。