在NXP源码基础上如何适配ELF 1开发板的UART功能

UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。

针对ELF 1开发板,实际引出了4路UART接口供开发者使用,具体包括UART1、UART2、UART3以及UART7。其中UART1用于调试,UART2、UART3用于连接RS485收发芯片,UART7连接TTL转RS232芯片。

接下来,我们将针对上述几个UART接口逐一进行详细的配置说明。本次源码适配工作是在NXP i.MX6ULL EVK评估板的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的,以确保UART接口能够正确无误的在ELF 1开发板上工作。

一、 准备工作

NXP源码路径:ELF1开发板资料包\07-NXP 原厂资料\07-1 NXP官方源码\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

1、将NXP源码拷贝到开发环境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、添加默认配置文件

将arch/arm/configs路径下的imx_v7_mfg_defconfig复制一份,命名为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设备树

将arch/arm/boot/dts路径下的imx6ull-14x14-evk.dts复制一份,命名为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

打开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、建立交叉编译脚本

建立一个编译脚本build.sh

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

添加以下内容,保存退出

#!/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 *

给予脚本权限

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引脚对应的连接器引脚编号分别为27和28。

通过查表可以得到27和28的PAD NAME分别为UART1_RX_DATA和UART1_TX_DATA。

添加图片注释,不超过 140 字(可选)

(2)UART2

从原理图中可以得到我们使用的UART2_RXD和UART2_TXD引脚对应的连接器引脚编号分别为72和73。

通过查表可以得到72和73的PAD NAME分别为UART2_RX_DATA和UART2_TX_DATA。  

(3)UART3

添加图片注释,不超过 140 字(可选)

从原理图中可以得到我们使用的UART3_RXD和UART3_TXD引脚对应的连接器引脚编号分别为77和78。

通过查表可以得到77和78的PAD NAME分别为UART3_RX_DATA和UART3_TX_DATA。

(4)UART7

从原理图中可以得到我们使用的UART7_RXD和UART7_TXD引脚对应的连接器引脚编号分别为114和115。

通过查表可以得到114和115的PAD NAME分别为LCD_DATA17和LCD_DATA16。

2、IOMUX配置

确定好引脚之后,我们就可以在设备树中添加相关引脚的IOMUX配置。

(1)UART1、UART2打开NXP BSP的arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,可以看到关于UART1和UART2的IOMUX配置信息,这是因为,i.MX6ULL EVK板也引出了UART1(UART1一般都是作为调试串口使用)和UART2。

既然已经有了UART1和UART2的IOMUX配置,那我们就只需对比一下其配置的相应引脚跟ELF1开发板使用的引脚是否一致即可。上一节中已经确定了我们使用的UART1和UART2对应的引脚PAD NAME,UART1:UART1_RX_DATA和UART1_TX_DATA,UART2:UART2_RX_DATA和UART2_TX_DATA,对比arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中已配置好的IOMUX信息,可以看到是一致的:

由上图可知,UART2的IOMUX节点uart2grp下配置了流控引脚RTS和CTS,我们板子没有引出流控引脚,所以这里注释掉流控配置:

(2)UART3由上一节确定了我们使用的UART3收发引脚PAD NAME分别为UART3_RX_DATA和UART3_TX_DATA。

在arch/arm/boot/dts/imx6ul-pinfunc.h文件中分别搜索UART3_RX_DATA和UART3_TX_DATA,找到其复用成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配置节点,并添加上这两条宏配置,其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分别为LCD_DATA17和LCD_DATA16,在arch/arm/boot/dts/imx6ul-pinfunc.h文件中分别搜索LCD_DATA17和LCD_DATA16,找到其复用成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配置节点,并添加上这两条宏配置:

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这两个引脚默认复用为了LCD的data17和data16功能,所以,需要注释掉这两个引脚的LCD复用,在pincrtl_lcdif_dat节点中:

3、添加设备节点

UART1-UART8的设备节点在arch/arm/boot/dts/imx6ull.dtsi设备树文件中已经存在,我们只需在arch/arm/boot/dts/imx6ull-elf1-emmc.dts将需要的UART使能即可,如已经使能的UART1:

&uart1 {

pinctrl-names = “default”;

pinctrl-0 = <&pinctrl_uart1>;

status = “okay”;

}

使能UART功能主要是设置pinctrl-0属性和status属性,pinctrl-names属性设置pingctrl的name,不是必需的,pinctrl-0属性主要用于配置UART接口相关引脚的IOMUX,status属性主要是使能该串口功能。UART2也已经配置好,我们只需将其中的流控功能去掉就可以了:

&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节点相关属性:

&uart3 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart3>;

status = "okay";

};

&uart7 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart7>;

status = "okay";

};

添加后效果如下:

4、编译

单独编译设备树:

. /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将设备树拷贝到开发板:

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/

进行sync操作后重启开发板:

启动之后,可以看到在/dev目录下生成节点ttymxc0、ttymxc1、ttymxc2、ttymxc6,分别对应我们添加的UART1,UART2,UART3,UART7。

三、测试

我们对UART2\UART3\UART7进行测试(UART1是调试串口,这里不测试),UART2和UART3分别对应板子上的RS485_1和RS485_2,我们将RS485_1和RS485_2进行收发互测,将两路RS485的A1-A2和B1-B2进行相连。UART7对应RS232,我们收发短接测试,将TX-RX收发互连。

添加图片注释,不超过 140 字(可选)

可以直接使用开发板文件系统/usr/bin/下的elf1_cmd_serialport进行测试。测试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表示通过RS485_2(UART3)发送的具体数据,/dev/ttymxc1 nread表示通过RS485_1(UART2)接收到的数据。测试RS232(UART7)使用命令:

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

至此,就完成了在NXP源码基础上适配ELF 1开发板的UART功能,期望这份详实的指南能为正在阅读的小伙伴带来实质性的助益与启发。在开发之旅上,愿我们携手共进,探索无限可能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容