修改IMX6ULL_PRO开发板的设备树文件使开发板启用UART5(串口5)

前言

通过下面两篇博文
https://blog.csdn.net/wenhao_ir/article/details/145431655

https://blog.csdn.net/wenhao_ir/article/details/146175153

我们知道了,我们完全可以通过Linux的TTY子系统去使用嵌入式处理器芯片中的串口资源,通常芯片官方提供的BSP中就已经把部分串口注册进入了Linux的TTY子系统了。

我们写串口驱动的目的是使用串口,如果已经能方便的使用串口了,我们再去写串口驱动其实际意义不大。

目前的问题是似乎NXP官方提供的BSP中只把部分串口接入了Linux的TTY子系统了。

我们启动2号开发板,这里面运行的Linux系统是我移植官方BSP得到的(不过设备树顶层文件在移植中用百问网提供的进行了替换),启动之后看下相关的设备文件:

ls /dev/tty*

在这里插入图片描述
可见,只启用了1号、3号、6号串口,这篇博文中我们尝试着去修改设备树文件,看能不能把另外的串口启用。

找到设备树文件中的相关内容

01
根据博文 https://blog.csdn.net/wenhao_ir/article/details/145822475 的移植过程,我们首先打开文件:

/home/book/mybuild/Linux-BSP_raw/linux-imx/arch/arm/boot/dts/imx6ull-14x14-evk.dts

然后我们搜索标签UART:,没有搜索到,我们再去别的文件看看。

注意:文件imx6ull-14x14-evk.dts实际上是100ask_imx6ull-14x14.dts,在移植过程中我们把BSP中的imx6ull-14x14-evk.dts的内容替换为了100ask_imx6ull-14x14.dts的内容。详情见 https://blog.csdn.net/wenhao_ir/article/details/145822475 【搜索“复制并重命名百问网提供的设备树文件”】

02
注意文件imx6ull-14x14-evk.dts包含#include "imx6ull.dtsi",所以我们再打开文件imx6ull.dtsi看看。
在这里插入图片描述
搜索标签UART:,还是没有搜索结果。

03
注意文件imx6ull.dtsi包含#include "imx6ul.dtsi",所以我们又先打开文件imx6ul.dtsi看看。
在这里插入图片描述

这个文件一打开,我们就发现了我们感兴趣的内容,如下:
在这里插入图片描述
从这个名叫aliases的内容来看,我们UART的串口1在TTY子系统中对应于serial0,串口2在TTY子系统中对应于serial1。
顺便说一下TTY设备文件中的后缀数字,比如/dev/ttymxc0末尾的0、/dev/ttymxc2末尾的2其实就是从serial0、serial1、serial2、serial3、serial4、serial5的末尾提取出来的,具体的程序上的分析请百度网盘搜索“1-9_09_UART驱动情景分析_open”,从06分钟左右开始看,那里有详细的名字来历说明。

说回来从本篇博文前面的内容来看:
在这里插入图片描述
NXP官方提供的BSP没有在Linux系统中启用serial1,即串口2没有启用,我们不妨试着去启用下串口2。

我们在这个设备树文件中搜索uart2:看下是不是串口2没有被启用:
在这里插入图片描述
可见,果然没有被启用,如果要启用它,我们可以参考已经启用的uart1,但奇怪的是串口1也没有被启用:
在这里插入图片描述
而且串口3和串口6也没有被启用,如下图所示:
在这里插入图片描述
在这里插入图片描述
这就奇怪了,明明1、3、6串口被启用了的呀,没启用的话怎么会产生下面截图中红框框中的TTY设备文件呢?
在这里插入图片描述
这个答案的原因如下,在设备树顶层文件imx6ull-14x14-evk.dts中,把标签uart1 、uart3、uart6进行覆修改了,如下图所示:
在这里插入图片描述
我们可以仿照&uart1和&uart6,把要启用的串口进行启用就行了。

至于uart3,显然是经过了RS485转换的,如下图所示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

接下来的问题是我们该确定启用2、4、5中的哪个串口,这就要看我们的引出板(转接板)除了引出串口6还引出了哪个串口了。

看下引出板(转接板)除了串口6还引出了哪个串口

引出板的插板接口的原理图如下:
在这里插入图片描述
我们已经在博文 https://blog.csdn.net/wenhao_ir/article/details/146175153 中确认了串口6使用的是图中的CSI_MCLK和CSI_PIXCLK,相关的设备树中的语句如下:
在这里插入图片描述
所以我们只需要把设备树中对2、4、5串口的引脚复用的描述给截取下来,然后去原理图中的J5中去搜索相关的引脚关键词就行了。

然而我发现设备树中并没有对2、4、5串口的引脚复用的描述,那就只有用工具“i.MX Pins Tool v6”去生成了。
串口2:
在这里插入图片描述
从图片中我们可以看出串口2的RX和TX信号可以有两组引脚来承接,分别为:
第1组引脚名:NAND_DATA04、NAND_DATA05
第2组引脚名:UART2_RX_DATA、UART2_RX_DATA
但很明显J5中并没有包含这4个引脚,如下图所示:
在这里插入图片描述

再看串口4:
在这里插入图片描述
从图片中我们可以看出串口4的RX和TX信号也可以有两组引脚来承接,分别为:
第1组引脚名:LCD_CLK、LCD_ENABLE
第2组引脚名:UART4_RX_DATA、UART4_TX_DATA

但遗憾的是,J5中也没有包含这4个引脚,如下图所示:
在这里插入图片描述
再来看串口5:
在这里插入图片描述
从图片中我们可以看出串口5的RX和TX信号可以有三组引脚来承接,分别为:
第1组引脚名:CSI_DATA01、CSI_DATA00
第2组引脚名:UART5_RX_DATA、UART5_RX_DATA
第3组引脚名:GPIO1_IO04、GPIO1_IO05

但幸运的是,J5中包含了其中的CSI_DATA00和CSI_DATA01,如下图所示:
在这里插入图片描述
从上图中还可以看出CSI_DATA00对应于J5的第15个引脚,而CSI_DATA01对应于J5的第16个引脚。

写出对串口5的设备树描述语句

这里由于工具“i.MX Pins Tool v6”已经打开了,不妨顺把这两个引脚的配置语句给生成并复制出来:
在这里插入图片描述

&iomuxc {
    pinctrl-names = "default";
    pinctrl-0 = <&BOARD_InitPins>;
    imx6ull-board {
        BOARD_InitPins: BOARD_InitPinsGrp {                /*!< Function assigned for the core: Cortex-A7[ca7] */
            fsl,pins = <
                MX6UL_PAD_CSI_DATA00__UART5_DCE_TX         0x000010B0
                MX6UL_PAD_CSI_DATA01__UART5_DCE_RX         0x000010B0
            >;
        };
    };
};

在上面的,我们把引脚CSI_DATA00配置为了UART5的TX引脚,把CSI_DATA01配置为了UART5的接RX引脚。

再对照着串口1、6的设备树配置语句:
在这里插入图片描述
在这里插入图片描述
我们便可以写出对串口5的设备树配置语句如下:

&uart5 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_uart5>;
    status = "okay";
};

.......

        pinctrl_uart5: uart5grp {
             fsl,pins = <
                 MX6UL_PAD_CSI_DATA00__UART5_DCE_TX    0x000010B0
                 MX6UL_PAD_CSI_DATA01__UART5_DCE_RX    0x000010B0
             >;
         };

有了以上这些准备工作就可以正式开始咱们此次的实验了。

改用1号开发板作为本次实验的开发板

本来打算是用2号开发板作本次实验的,但是由于以下几个原因咱们改为1号开发板。

①2号开发板移植时其实也是用的百问网提供的设备文件100ask_imx6ull-14x14.dts,所以其实你本质上还是用的百问网提供的设备文件100ask_imx6ull-14x14.dts

②2号开发板移还需要去外接路由器,我懒得再去拿路由器。

③那个扩展板不是很好插,我已经在1号开发板上插了扩展板,就不再去2号开发板上插了。

④2号开发板使用的gcc编译器与①号开发板不一样,我还得重新去配置Ubuntu中的环境变量。

⑤最重要的一点:极大的概率在①号开发板成功,在②号开发板上也能成功,何况其实这里我的目标并不是要让所有的开发板都能成功,目标只是验证我的想法,即可以修改设备树去启用那些未启用的串口。

修改1号开发板的设备树文件

把1号开发板的原来的设备树文件“100ask_imx6ull-14x14.dts”复制到VScode的工程目录中,并在Ubuntu中进行备份。
在这里插入图片描述
在这里插入图片描述
并把原来的dtb文件也备份。
在这里插入图片描述

在设置树文件100ask_imx6ull-14x14.dts的875行写入下面的代码:

&uart5 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_uart5>;
    status = "okay";
};

在这里插入图片描述
然后在设置树文件100ask_imx6ull-14x14.dts的531行写入下面的代码:

        pinctrl_uart5: uart5grp {
             fsl,pins = <
                 MX6UL_PAD_CSI_DATA00__UART5_DCE_TX    0x000010B0
                 MX6UL_PAD_CSI_DATA01__UART5_DCE_RX    0x000010B0
             >;
         };

在这里插入图片描述

编译生成新的dtb文件

保存之后,复制到Linux到内核源码中:
在这里插入图片描述
然后进入内核编译出新的设备树文件:

cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88
make dtbs

在这里插入图片描述
然后生成了新的设备树文件:
在这里插入图片描述

修改开发板上的设备树文件

把新生成的dtb文件复制到NFS网络系统目录中:
在这里插入图片描述
打开串口终端→打开开发板→挂载网络文件系统:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

然后用下面的命令覆盖掉之前的设备树文件:

cp /mnt/100ask_imx6ull-14x14.dtb /boot/

在这里插入图片描述

重启开发板,测试串口5是否被启用

然后重启开发板,看下串口5是否被启用:

ls /dev/tty*

在这里插入图片描述
可见,有串口5的设备文件了,具体为/dev/ttymxc4,说明串口5被启用了

在扩展板上找到对应的引脚

接下来,我们需要在扩展板上找到J5的第15个引脚(CSI_DATA00)和J5的第16个引脚(CSI_DATA01)

注意:从上面的标题“写出对串口5的设备树描述语句”中,我们知道,我们是把J5的第15个引脚(CSI_DATA00)当成了串口5的TX引脚,把J5的第16个引脚(CSI_DATA01)当成了串口5的RX引脚。
在这里插入图片描述
扩展板的实际图如下:
在这里插入图片描述
在这里插入图片描述
根据原理图,我们可以知道第15引脚和第1引脚位于同一边,并且处于倒数第4的位置,即下面红框中的位置:
在这里插入图片描述
然后用数字万用表的通断档打下右边是哪个引脚与这个引脚相连。(备注:后来发现其实官方提供了这个扩展板的原理图,百度网盘链接 https://pan.baidu.com/s/18brzHYHZrpcKVtNqzqjzcA?pwd=tbuw

测试出来的结果是与第4列的从上往下数的第4个引脚“GPIO4_21”相连,即在这里,我把“GPIO4_21”当成了串口5的TX引脚。
在这里插入图片描述

然后再来看J5的第16个引脚(CSI_DATA01)与右边的哪个引脚相连。
从原理图上看,J5的第16个引脚在非1的那边,并且也位于倒数的第4个,如下图所示:
在这里插入图片描述
然后用数字万用表的通断档打下右边是哪个引脚与这个引脚相连。(备注:后来发现其实官方提供了这个扩展板的原理图,百度网盘链接 https://pan.baidu.com/s/18brzHYHZrpcKVtNqzqjzcA?pwd=tbuw)
测试出来的结果是与第3列的从上往下数的第4个引脚“GPIO4_22”相连,即在这里,我把“GPIO4_22”当成了串口5的RX引脚。
在这里插入图片描述
这两个引脚在扩展板正面中的位置如下图所示:
在这里插入图片描述
上面截图中的文字标注如下:
GPIO2→串口5的TX引脚(J7的第15个引脚,GPIO4_21,CSI_DATA00)
GPIO3→串口5的RX引脚(J7的第16个引脚,GPIO4_22,CSI_DATA01)

其实这里我还可以利用工具“i.MX Pins Tool v6”去验证一下。如果以上没有错的话,应该处理器的引脚CSI_DATA00和CSI_DATA01还能分别复用为GPIO4_21和GPIO4_22,我们去工具“i.MX Pins Tool v6”中看下是不是这样:
在这里插入图片描述
果然是这样,没有一点问题,接下来就是把GPIO2和GPIO3用杜邦线短接起来,然后进行测试了。

运行测试程序

在上一步中,已经找到了扩展板正面的GPIO2对应于串口5的TX引脚,GPIO3对应于串口5的RX引脚。

我们先把开发板关掉→把电源拔掉:

然后把这两个引脚用杜邦线连接起来(下图中红色的线):
在这里插入图片描述
然后插上电源,找开串口,重启开发板…

挂载网络文件系统

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

执行下面的命令运行博文 https://blog.csdn.net/wenhao_ir/article/details/146175153 中生成的ELF可执行程序:

cd /mnt/UART_app1
./serial_send_recv  /dev/ttymxc4

在这里插入图片描述
在这里插入图片描述
没问题,完美运行,说明我的想法是完全没有问题的。

附相关文件

博文中提到的若干个设备树文件

https://pan.baidu.com/s/1MNO8jyeBXTNbdmiE6kxqWg?pwd=912x

本文修改设备树文件后编译出的运行与1号板上的设备树文件

https://pan.baidu.com/s/1rDWo8zdCLM2TdfzE3xqlOA?pwd=2uqj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值