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

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

3天内不再提示

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

王鑫 来源:jf_11001711 作者:jf_11001711 2024-09-29 11:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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开发板资料包7-NXP 原厂资料7-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

wKgZomb4zkiAehupAAB1WkVXQrc743.jpg


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

wKgaomb4zkiAfPizAAArHF9JbLM620.jpg

chaijie_default.png

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

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

wKgZomb4zkmABsuRAAALUta8H0A746.jpg

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

(2)UART2

wKgaomb4zkqAFrAbAABAZMF0FN4161.jpg


wKgZomb4zkqAAkLTAABO4CLsr3o330.jpg


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

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

wKgaomb4zkuADfd9AAANMlGQo0M039.jpg


(3)UART3

chaijie_default.png

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

wKgZomb4zkyAMOq2AAA3EKsW7I8200.jpg


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

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

wKgZomb4zkyADEh1AAALpipN4l4881.jpg

(4)UART7

wKgaomb4zk2ADx8AAABHEqr38Y0096.jpg

chaijie_default.png

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

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

wKgZomb4zk6ARnIuAAAMTnbuMTE552.jpg

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

wKgaomb4zk6AQ9u6AAA6oGveB9A822.jpg

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

wKgZomb4zk-ACvOfAAA-pFOFN7o854.jpg

(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

>;

};

添加后效果如下:

wKgaomb4zk-AW9CfAAA_Arme-LM862.jpg


(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

>;

};

添加后效果如下:

wKgZomb4zlCAZqGkAAAvliMmlnE778.jpg


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

wKgZomb4zlCAG2S7AACHELbJtJw855.jpg


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

}

wKgaomb4zlGAZXR6AAAqBqiZwfY861.jpg


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

&uart3 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart3>;

status = "okay";

};

&uart7 {

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_uart7>;

status = "okay";

};

添加后效果如下:

chaijie_default.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-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

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

wKgZomb4zlKAXAqoAAAJyEvGxpw738.jpg

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

chaijie_default.png

三、测试

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

wKgaomb4zlOAUZK6AADB910h8ec468.png

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

wKgZomb4zlOAe9HZAABZtJrFG7E002.jpg

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

wKgaomb4zlSAfo1dAAAuNnxWI3s096.jpg

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

wKgZomb4zlSAXBLwAAAZWO_iJ-k933.jpg

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

审核编辑 黄宇

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

    关注

    61

    文章

    1410

    浏览量

    199138
  • uart
    +关注

    关注

    22

    文章

    1319

    浏览量

    106963
  • 源码
    +关注

    关注

    8

    文章

    689

    浏览量

    31490
  • elf
    elf
    +关注

    关注

    0

    文章

    15

    浏览量

    2561
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术贴|如何在【RK3588】ELF 2开发板上部署小龙虾OpenClaw

    2026全国大学生嵌入式芯片与系统设计竞赛应用赛道报名正在火热进行中,其中瑞芯微&飞凌嵌入式赛题重磅选用基于旗舰芯片RK3588设计的ELF2开发板以及ELF-RV1126B开发板
    的头像 发表于 04-02 09:30 1.2w次阅读
    技术贴|如何在【RK3588】<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>上部署小龙虾OpenClaw

    飞凌精灵(ElfBoard)技术贴|如何在ELF-RK3506开发板实现GPIO复用

    2026年全国大学生嵌入式芯片与系统设计竞赛报名已正式启动。本次瑞芯微&飞凌嵌入式赛题共设置了三个参赛平台(ELF2开发板ELF-RV1126B开发板
    的头像 发表于 03-16 14:55 6257次阅读
    飞凌精灵(ElfBoard)技术贴|如何在<b class='flag-5'>ELF</b>-RK3506<b class='flag-5'>开发板</b><b class='flag-5'>上</b>实现GPIO复用

    ElfBoard技术贴|借助AI编程,轻松搞定ELF-RK3506开发板上光照传感器的数据读取

    特别感谢北京理工大学的李海老师提供以下文章,供大家学习与参考。一篇文章介绍了ELF-RK3506开发板搭建AI编程环境的方法,但测试场
    的头像 发表于 01-29 16:55 1628次阅读
    ElfBoard技术贴|借助AI编程,轻松搞定<b class='flag-5'>ELF</b>-RK3506<b class='flag-5'>开发板</b>上光照传感器的数据读取

    ElfBoard技术贴|如何在ELF - RK3506开发板构建AI编程环境

    特别感谢北京理工大学的李海老师提供以下文章,供大家学习与参考。RK-3506开发板开箱ELF-RK3506开发板的核心与底板通过邮票孔方式连接,其核心
    的头像 发表于 01-23 11:12 7585次阅读
    ElfBoard技术贴|如何在<b class='flag-5'>ELF</b> - RK3506<b class='flag-5'>开发板</b><b class='flag-5'>上</b>构建AI编程环境

    【超值首选!仅88元】ELF-RK3506开发板限时优惠震撼来袭

    ElfBoard特别推出了ELF-RK3506开发板,助力大家快速掌握实际应用场景下的嵌入式Linux开发技能。【性能卓越,技术领先】ELF-RK3506
    的头像 发表于 01-16 16:41 1336次阅读
    【超值首选!仅88元】<b class='flag-5'>ELF</b>-RK3506<b class='flag-5'>开发板</b>限时优惠震撼来袭

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现GPIO功能复用

    【RK3588】ELF2开发板的GPIO引脚为例,详细阐述从硬件查找到软件配置的完整流程。1.引脚确认开始配置之前,首先需要了解【RK3588】E
    的头像 发表于 12-29 10:37 1460次阅读
    ElfBoard技术贴|如何在【RK3588】<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>实现GPIO<b class='flag-5'>功能</b>复用

    探索NXP FRDM - MCXN947开发板:快速上手指南

    探索NXP FRDM - MCXN947开发板:快速上手指南 在当今电子技术飞速发展的时代,一款性能优越、易于上手的开发板对于电子工程师来说至关重要。NXP的FRDM - MCXN94
    的头像 发表于 12-24 15:00 1628次阅读

    探索NXP FRDM - RW612开发板功能特性与应用指南

    探索NXP FRDM - RW612开发板功能特性与应用指南 在当今的电子设计领域,一款功能强大且性价比高的开发板对于工程师们来说至关重要
    的头像 发表于 12-24 13:55 564次阅读

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现I2C功能复用

    等。由于此项配置的具体实现因SoC平台而异,本文特以【RK3588】ELF 2开发板的I2C6引脚为例,系统说明从硬件规格查询到软件驱动配置的完整步骤。
    的头像 发表于 12-04 10:10 8312次阅读
    ElfBoard技术贴|如何在【RK3588】<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>实现I2C<b class='flag-5'>功能</b>复用

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行UART引脚复用配置

    IOMUX(引脚功能复用)是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术,它允许单个物理引脚通过软件配置为多种不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方式各异,本文将以【RK3588】
    的头像 发表于 11-18 16:54 5704次阅读
    ElfBoard技术贴|如何在【RK3588】<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>上进行<b class='flag-5'>UART</b>引脚复用配置

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行根系统的定制

    ELF 2开发板已经适配了Linux 5.10及Elf2 Desktop 22.04操作系统,其中Elf2 Desktop 22.04系统是
    的头像 发表于 07-02 16:33 3181次阅读
    ElfBoard技术贴|如何在【RK3588】<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>上进行根系统的定制

    ElfBoard技术贴|如何在ELF 2开发板适配 AX200NGW WiFi模块

    ELF2开发板适配AX200NGWWi-Fi6模块,是开发嵌入式设备中实现高速无线联网的实际需求,更是解锁其全场景无线通信能力的关键升
    的头像 发表于 06-24 09:09 2759次阅读
    ElfBoard技术贴|如何在<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>中<b class='flag-5'>适配</b> AX200NGW WiFi模块

    飞凌嵌入式ElfBoard ELF 1板卡-uboot移植之IOMUX介绍

    本章节主要讲,如何将NXP官方i.MX6ULL EVK评估的uboot源码移植适配ELF 1
    发表于 05-30 09:28

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot

    适配于该评估一套软件系统,也就是说NXP的工程师完成了大量的平台移植工作,ElfBoard开发板与EVK评估又有些许差异,我们只需要在
    发表于 05-22 10:44

    来自资深工程师对ELF 2开发板的产品测评

    来自资深工程师对ELF 2开发板的使用测评
    的头像 发表于 04-28 15:03 2107次阅读
    来自资深工程师对<b class='flag-5'>ELF</b> 2<b class='flag-5'>开发板</b>的产品测评