0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

ElfBoard 2024-09-25 13:56 次阅读

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

wKgaomaEozOACVa-AAJgRX4X_ao385.png

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

wKgaombziNmAZXLHAAt3ivxgEvg416.pngwKgZombziNiAIt9kAACE-H_5DSU355.png

从原理图中可以得到我们使用的UART1_RXD和UART1_TXD引脚对应的连接器引脚编号分别为27和28。

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

wKgaombziPKAQfunAAAzezsCapI852.png

(2)UART2

wKgZombziQ-AYzvcAAv481AiGVA377.pngwKgZombziQ-AbrVSAA1CoX7sQoQ480.png

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

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

wKgaombziSqAalscAAA0HxzC52c171.png

(3)UART3

wKgaombziUGAHVEzAA63IRXXR9c000.pngwKgZombziUGAdem-AACgEFyXqnc657.png

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

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

wKgZombziV-AfXM8AAA1e2suR1Y618.png

(4)UART7

wKgaombzoQKAULl2AA3Z37WV2WU848.pngwKgZombzoQGAPoE9AAClH7OqdmI102.png

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

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

wKgZombzoSaANKfyAAA3b01sMQo325.png

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信息,可以看到是一致的:

wKgZombzoVGACiqaAAC_Ldt2wT8228.png

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

wKgaombzoXuAHFonAAC_JIfBlTM948.png

(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 >; };

添加后效果如下:

wKgZombzoc6AXcnHAADA0gL2RDw675.png

(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 >; };

添加后效果如下:

wKgZombzovaAXbByAACczd5dRO8298.png

注意:LCD_DATA17和LCD_DATA16这两个引脚默认复用为了LCD的data17和data16功能,所以,需要注释掉这两个引脚的LCD复用,在pincrtl_lcdif_dat节点中:

wKgZombzov2AVdmkAAGV_tbZa74264.png

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”; }

wKgZombzo2SAGXhoAACMd3fYr3Q947.png

依照上述方法,依次添加UART3和UART7节点相关属性:

&uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; status = "okay"; }; &uart7 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart7>; status = "okay"; };

添加后效果如下:

wKgaombzpJGAMWGSAADqPJqrpZM161.png

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操作后重启开发板:

wKgaomXq0qKAduI_AAAdZ8LYDwM472.png

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

wKgZombzpNeAehVlAAAh2ZQiHlA809.png

三、测试

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

wKgaombzpPiAd3DIAABERJ4K7f8060.pngwKgZombzpRuAAL4zAAwb7TpHBXw127.png

可以直接使用开发板文件系统/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

wKgaombzpTmAI7zOAABogWW28vo706.png

上图显示信息中/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

wKgZombzpV2AHKWbAAA3KJQfuuU952.png

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304777
  • 恩智浦
    +关注

    关注

    14

    文章

    5857

    浏览量

    107300
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209317
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97371
收藏 人收藏

    评论

    相关推荐

    ELF 1技术|在NXP源码基础上适配开发板的按键功能

    ELF1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。值得一提的是,ELF1开发
    的头像 发表于 03-08 16:58 957次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>开发板</b>的按键<b class='flag-5'>功能</b>

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

    本次源码适配项目是在NXP i.MX6ULL EVK评估所搭载的Linux内核源码(版本为Linux-imx_4.1.15)
    的头像 发表于 09-10 10:00 917次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的PWM<b class='flag-5'>功能</b>

    嵌入式学习-ElfBoard ELF 1板卡-在nxp源码基础上适配ELF 1开发板的LED功能

    源码适配即在NXP i.MX6ULL EVK评估对应的Linux内核源码(linux-imx_4.1.15 版本)
    发表于 01-05 14:35

    飞凌ElfBoard ELF 1板卡-如何在ELF 1开发板实现对java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF 1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的
    发表于 03-20 09:51

    飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-03 09:07

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-04 09:11

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    \\02-Linux 源代码\\02-0 出厂内核和uboot源码\\内核源码\\linux-4.1.15-elf1.tar.bz2后面我们也会介绍如何在
    发表于 12-13 09:03

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介

    开发板资料包\\02-Linux 源代码\\02-0 出厂内核和uboot源码\\内核源码\\linux-4.1.15-elf1.tar.bz2 后面我们也会介绍如
    发表于 12-16 13:08

    ELF 1开发板试用】1.开箱验货

    。 打开纸盒子,引入眼帘的是 ELF1 开发板,一张纪念卡,一份开箱必读说明书。ELF1 开发板的标准配件包里有:一字螺丝刀、尼龙柱、Type-C转接线、10P杜邦线和网线。 就拿 T
    发表于 11-21 14:20

    ELF 1技术|在NXP源码基础上适配ELF 1开发板的LED功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 12-29 10:04 852次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的LED<b class='flag-5'>功能</b>

    ELF 1技术|如何将Python3.6.9移植到开发板

    如何进行交叉编译并移植到ELF1开发板。在网址:https://www.python.org/ftp/python/下载Python-3.6.9.tar.xz压缩
    的头像 发表于 02-22 14:06 429次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何将Python3.6.9移植到<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    ELF技术|如何在开发板实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选择空间,今天就为各位小伙伴详细解析如
    的头像 发表于 03-13 16:47 504次阅读
    <b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>实现对Java的支持

    ElfBoard技术|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 07-10 09:54 593次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的按键<b class='flag-5'>功能</b>

    ElfBoard技术|如何在ELF 1开发板搭建流媒体服务器

    流媒体服务器是一种专门用于传输实时数据流的服务器软件,广泛用于视频直播、视频会议、音频播放等应用场景。在嵌入式开发领域,将流媒体服务器部署到开发板可以实现诸如视频监控、实时数据传输等功能
    的头像 发表于 08-20 14:48 563次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>搭建流媒体服务器

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

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1
    的头像 发表于 09-29 11:49 336次阅读
    在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b>如何<b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的<b class='flag-5'>UART</b><b class='flag-5'>功能</b>