在NXP源碼基礎(chǔ)上如何適配ELF 1開(kāi)發(fā)板的UART功能

UART即通用異步收發(fā)器,是一種支持全雙工串行通信協(xié)議的接口浓若。在i.MX6ULL處理器平臺(tái)上行嗤,該處理器原生支持多達(dá)8路的UART接口悼泌,提供了豐富的串行通信能力。

針對(duì)ELF 1開(kāi)發(fā)板涩赢,實(shí)際引出了4路UART接口供開(kāi)發(fā)者使用戈次,具體包括UART1、UART2谒主、UART3以及UART7朝扼。其中UART1用于調(diào)試,UART2霎肯、UART3用于連接RS485收發(fā)芯片擎颖,UART7連接TTL轉(zhuǎn)RS232芯片。

接下來(lái)观游,我們將針對(duì)上述幾個(gè)UART接口逐一進(jìn)行詳細(xì)的配置說(shuō)明搂捧。本次源碼適配工作是在NXP i.MX6ULL EVK評(píng)估板的Linux內(nèi)核源碼(特定版本:Linux-imx_4.1.15)基礎(chǔ)上進(jìn)行的,以確保UART接口能夠正確無(wú)誤的在ELF 1開(kāi)發(fā)板上工作懂缕。

一允跑、 準(zhǔn)備工作

NXP源碼路徑:ELF1開(kāi)發(fā)板資料包\07-NXP 原廠資料\07-1 NXP官方源碼\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

1、將NXP源碼拷貝到開(kāi)發(fā)環(huán)境home/root/work目錄下解壓

elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls

2搪柑、添加默認(rèn)配置文件

將arch/arm/configs路徑下的imx_v7_mfg_defconfig復(fù)制一份聋丝,命名為imx6ull_elf1_defconfig

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig

3、添加ELF 1設(shè)備樹(shù)

將arch/arm/boot/dts路徑下的imx6ull-14x14-evk.dts復(fù)制一份工碾,命名為imx6ull-elf1-emmc.dts

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts

打開(kāi)arch/arm/boot/dts/Makefile弱睦,找到CONFIG_SOC_IMX6ULL,將imx6ull-elf1-emmc.dts添加到Makefile中

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

4渊额、建立交叉編譯腳本

建立一個(gè)編譯腳本build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh

添加以下內(nèi)容况木,保存退出

#!/bin/bash

export CPUS=`grep -c processor /proc/cpuinfo`

source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

make distclean

make imx6ull_elf1_defconfig

make -j${CPUS}

rm -rf ./.tmp

make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/

cd .tmp/rootfs/

tar -jcvf modules.tar.bz2 *

給予腳本權(quán)限

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh

二垒拢、適配UART

1、硬件原理

(1)UART1

從原理圖中可以得到我們使用的UART1_RXD和UART1_TXD引腳對(duì)應(yīng)的連接器引腳編號(hào)分別為27和28火惊。

通過(guò)查表可以得到27和28的PAD NAME分別為UART1_RX_DATA和UART1_TX_DATA求类。

添加圖片注釋,不超過(guò) 140 字(可選)

(2)UART2

從原理圖中可以得到我們使用的UART2_RXD和UART2_TXD引腳對(duì)應(yīng)的連接器引腳編號(hào)分別為72和73屹耐。

通過(guò)查表可以得到72和73的PAD NAME分別為UART2_RX_DATA和UART2_TX_DATA尸疆。 ?

(3)UART3

添加圖片注釋,不超過(guò) 140 字(可選)

從原理圖中可以得到我們使用的UART3_RXD和UART3_TXD引腳對(duì)應(yīng)的連接器引腳編號(hào)分別為77和78张症。

通過(guò)查表可以得到77和78的PAD NAME分別為UART3_RX_DATA和UART3_TX_DATA仓技。

(4)UART7

從原理圖中可以得到我們使用的UART7_RXD和UART7_TXD引腳對(duì)應(yīng)的連接器引腳編號(hào)分別為114和115。

通過(guò)查表可以得到114和115的PAD NAME分別為L(zhǎng)CD_DATA17和LCD_DATA16俗他。

2脖捻、IOMUX配置

確定好引腳之后,我們就可以在設(shè)備樹(shù)中添加相關(guān)引腳的IOMUX配置兆衅。

(1)UART1地沮、UART2打開(kāi)NXP BSP的arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,可以看到關(guān)于UART1和UART2的IOMUX配置信息羡亩,這是因?yàn)槟σ桑琲.MX6ULL EVK板也引出了UART1(UART1一般都是作為調(diào)試串口使用)和UART2。

既然已經(jīng)有了UART1和UART2的IOMUX配置畏铆,那我們就只需對(duì)比一下其配置的相應(yīng)引腳跟ELF1開(kāi)發(fā)板使用的引腳是否一致即可雷袋。上一節(jié)中已經(jīng)確定了我們使用的UART1和UART2對(duì)應(yīng)的引腳PAD NAME,UART1:UART1_RX_DATA和UART1_TX_DATA辞居,UART2:UART2_RX_DATA和UART2_TX_DATA楷怒,對(duì)比arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中已配置好的IOMUX信息,可以看到是一致的:

由上圖可知瓦灶,UART2的IOMUX節(jié)點(diǎn)uart2grp下配置了流控引腳RTS和CTS鸠删,我們板子沒(méi)有引出流控引腳,所以這里注釋掉流控配置:

(2)UART3由上一節(jié)確定了我們使用的UART3收發(fā)引腳PAD NAME分別為UART3_RX_DATA和UART3_TX_DATA贼陶。

在arch/arm/boot/dts/imx6ul-pinfunc.h文件中分別搜索UART3_RX_DATA和UART3_TX_DATA刃泡,找到其復(fù)用成UART功能的宏:

MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX

MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX

然后在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件建立UART3的IOMUX配置節(jié)點(diǎn),并添加上這兩條宏配置碉怔,其PAD寄存器的值參考了UART1和UART2:

pinctrl_uart3: uart3grp {

fsl,pins = <

MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX ?0x1b0b1

MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX ?0x1b0b1

>;

};

添加后效果如下:

(3)UART7同理烘贴,UART7的PAD NAME分別為L(zhǎng)CD_DATA17和LCD_DATA16,在arch/arm/boot/dts/imx6ul-pinfunc.h文件中分別搜索LCD_DATA17和LCD_DATA16撮胧,找到其復(fù)用成UART功能的宏:

MX6UL_PAD_LCD_DATA17__UART7_DCE_RX

MX6UL_PAD_LCD_DATA16__UART7_DCE_TX

在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件建立UART7的IOMUX配置節(jié)點(diǎn)桨踪,并添加上這兩條宏配置:

pinctrl_uart7: uart7grp {

fsl,pins = <

MX6UL_PAD_LCD_DATA17__UART7_DCE_RX 0x1b0b1

MX6UL_PAD_LCD_DATA16__UART7_DCE_TX 0x1b0b1

>;

};

添加后效果如下:

注意:LCD_DATA17和LCD_DATA16這兩個(gè)引腳默認(rèn)復(fù)用為了LCD的data17和data16功能,所以趴樱,需要注釋掉這兩個(gè)引腳的LCD復(fù)用馒闷,在pincrtl_lcdif_dat節(jié)點(diǎn)中:

3、添加設(shè)備節(jié)點(diǎn)

UART1-UART8的設(shè)備節(jié)點(diǎn)在arch/arm/boot/dts/imx6ull.dtsi設(shè)備樹(shù)文件中已經(jīng)存在叁征,我們只需在arch/arm/boot/dts/imx6ull-elf1-emmc.dts將需要的UART使能即可纳账,如已經(jīng)使能的UART1:

&uart1 {

pinctrl-names = “default”;

pinctrl-0 = <&pinctrl_uart1>;

status = “okay”;

}

使能UART功能主要是設(shè)置pinctrl-0屬性和status屬性,pinctrl-names屬性設(shè)置pingctrl的name捺疼,不是必需的疏虫,pinctrl-0屬性主要用于配置UART接口相關(guān)引腳的IOMUX,status屬性主要是使能該串口功能啤呼。UART2也已經(jīng)配置好卧秘,我們只需將其中的流控功能去掉就可以了:

&uart2 {

pinctrl-names = “default”;

pinctrl-0 = <&pinctrl_uart2>;

/* ? ? ?fsl,uart-has-rtscts;

*/

/* for DTE mode,add below change */

/* fsl,dte-mode; */

/* pinctrl-0 = <&pinctrl_uart2dte>; */

status = “okay”;

}

依照上述方法,依次添加UART3和UART7節(jié)點(diǎn)相關(guān)屬性:

&uart3 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart3>;

status = "okay";

};

&uart7 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart7>;

status = "okay";

};

添加后效果如下:

4官扣、編譯

單獨(dú)編譯設(shè)備樹(shù):

. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make dtbs

使用scp將設(shè)備樹(shù)拷貝到開(kāi)發(fā)板:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

進(jìn)行sync操作后重啟開(kāi)發(fā)板:

啟動(dòng)之后翅敌,可以看到在/dev目錄下生成節(jié)點(diǎn)ttymxc0、ttymxc1惕蹄、ttymxc2蚯涮、ttymxc6,分別對(duì)應(yīng)我們添加的UART1卖陵,UART2遭顶,UART3,UART7泪蔫。

三棒旗、測(cè)試

我們對(duì)UART2\UART3\UART7進(jìn)行測(cè)試(UART1是調(diào)試串口,這里不測(cè)試)撩荣,UART2和UART3分別對(duì)應(yīng)板子上的RS485_1和RS485_2铣揉,我們將RS485_1和RS485_2進(jìn)行收發(fā)互測(cè),將兩路RS485的A1-A2和B1-B2進(jìn)行相連婿滓。UART7對(duì)應(yīng)RS232老速,我們收發(fā)短接測(cè)試,將TX-RX收發(fā)互連凸主。

添加圖片注釋橘券,不超過(guò) 140 字(可選)

可以直接使用開(kāi)發(fā)板文件系統(tǒng)/usr/bin/下的elf1_cmd_serialport進(jìn)行測(cè)試。測(cè)試RS485_1(UART2)和RS485_2(UART3)輸入以下命令卿吐,注意空格:

root@ELF1:~# elf1_cmd_serialport ttymxc1 &

root@ELF1:~# elf1_cmd_serialport ttymxc2 -o -b 9600 -t aabbccddeeff 1

上圖顯示信息中/dev/ttymxc2 nwrite表示通過(guò)RS485_2(UART3)發(fā)送的具體數(shù)據(jù)旁舰,/dev/ttymxc1 nread表示通過(guò)RS485_1(UART2)接收到的數(shù)據(jù)。測(cè)試RS232(UART7)使用命令:

root@ELF1:~# elf1_cmd_serialport ttymxc6 -o -b 9600 -t aabbccddeeff 1

至此嗡官,就完成了在NXP源碼基礎(chǔ)上適配ELF 1開(kāi)發(fā)板的UART功能箭窜,期望這份詳實(shí)的指南能為正在閱讀的小伙伴帶來(lái)實(shí)質(zhì)性的助益與啟發(fā)。在開(kāi)發(fā)之旅上衍腥,愿我們攜手共進(jìn)磺樱,探索無(wú)限可能纳猫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市竹捉,隨后出現(xiàn)的幾起案子芜辕,更是在濱河造成了極大的恐慌,老刑警劉巖块差,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侵续,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡憨闰,警方通過(guò)查閱死者的電腦和手機(jī)状蜗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹉动,“玉大人轧坎,你說(shuō)我怎么就攤上這事⊙雕桑” “怎么了眶根?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)边琉。 經(jīng)常有香客問(wèn)我属百,道長(zhǎng),這世上最難降的妖魔是什么变姨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任族扰,我火速辦了婚禮,結(jié)果婚禮上定欧,老公的妹妹穿的比我還像新娘渔呵。我一直安慰自己,他們只是感情好砍鸠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布扩氢。 她就那樣靜靜地躺著,像睡著了一般爷辱。 火紅的嫁衣襯著肌膚如雪录豺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,874評(píng)論 1 290
  • 那天饭弓,我揣著相機(jī)與錄音双饥,去河邊找鬼。 笑死弟断,一個(gè)胖子當(dāng)著我的面吹牛咏花,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阀趴,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昏翰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苍匆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起棚菊,我...
    開(kāi)封第一講書(shū)人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锉桑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窍株,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攻柠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年球订,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰钮。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冒滩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浪谴,到底是詐尸還是另有隱情开睡,我是刑警寧澤,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布苟耻,位于F島的核電站篇恒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凶杖。R本人自食惡果不足惜胁艰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望智蝠。 院中可真熱鬧腾么,春花似錦、人聲如沸杈湾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)漆撞。三九已至殴泰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叫挟,已是汗流浹背艰匙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抹恳,地道東北人员凝。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奋献,于是被迫代替她去往敵國(guó)和親健霹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旺上,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容