搜索

5

主题

7

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2020-11-3 18:03:08 5976 浏览 1 回复

【迅为开发板资料】iMX6ULL开发板八路串口配置

本文转自:<北京迅为i.mx6ull终结者开发板使用手册-第九十一章>
硬件平台:迅为i.MX6ULL开发板


1 文档说明本章节使用的资料已经放到了开发板网盘资料中,路径为:11_Linux系统开发进阶\86_章节使用资料。
本章节介绍如何在i.MX6ULL终结者上配置8路串口,驱动程序内核已经自带,我们只需要根据NXP官方提供的手册来修改设备树。设备树文件在Linux内核的arch/arm/boot/dts/目录下(使用迅为提供的的Linux内核,在终结者ULL光盘资料\i.MX6ULL终结者光盘资料\05_uboot linux源码\目录下),本例程中主要用到测试程序uart_write_read.c,设备树文件imx6ull-14x14-evk.dts,imx6ull.dtsi,还有imx6ul-pinfunc.h。
配置UART用到的引脚在芯片手册(终结者ULL光盘资料\i.MX6ULL终结者光盘资料\03_开发板硬件资料\02_芯片资料\2、I.MX6ULL芯片资料\IMX6ULL参考手册)中已经找到,如下图:\
&#8203;
&#8203;




下面就开始把这些引脚复用为串口,逐一配置到设备树。
&#8203;

因为 UART1是调试串口,我们最后再设置它。在imx6ull.dtsi文件中,可以看出串口结点0~7对应uart1~8。可根据/dev/下的设备结点ttymxc*来调试。


&#8203;
2 UART2配置以配置串口2为例,逐步配置设备树,本文档其余的7路串口都用相同的方法配置。
首先通过查NXP的芯片手册(终结者ULL光盘资料\i.MX6ULL终结者光盘资料\03_开发板硬件资料\02_芯片资料\2、I.MX6ULL芯片资料\IMX6ULL参考手册),搜索“UART2”找到 UART2的引脚,

&#8203;
&#8203;

用同样的方法在芯片手册搜索接收引脚, 搜索到UART2两个引脚:
发送引脚IOMUXC_SW_MUX_CTL_PAD_UART2_TX_DATA,
接收引脚IOMUXC_SW_MUX_CTL_PAD_UART2_RX_DATA,
然后我们在imx6ul-pinfunc.h中搜索发送引脚“PAD_UART2_TX_DATA”,找到了“MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX”,即MX6UL_引脚名_复用功能。

&#8203;


用相同的方法搜索“PAD_UART2_RX_DATA”,找到后在设备树文件arch/arm/boot/dts/imx6ull-14x14-evk.dts中添加pinctrl信息(自带的已经添加好),电气属性值为”0x1b0b1”,修改成如下所示:
pinctrl_uart2: uart2grp {
fsl,pins = <
MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1
>;
};
本实验中没有用到流控,注释掉668和669行,然后查找其他pinctrl有没有使用这两个引脚,如果有,注释掉其他pinctrl。搜索“PAD_UART2_TX_DATA”,查找到pinctrl_uart2dte使用了这两个引脚,我们直接把pinctrl_uart2dte注释掉或删掉。
如下图:
&#8203;

再查找引用此pinctrl_uart2dte的节点,注释掉然后查找使用此pinctrl的节点标签,有的话注释掉。
查找“PAD_UART2_RX_DATA”,发现有pinctrl_remote_control使用了这个,引脚,注释掉

&#8203;

然后添加节点标签&uart2(源码已经),只使用pinctrl_uart2,satus改为“okay”,注释掉“fsl,uart-has-rtscts”。
&#8203;

打开imx6ull.dtsi,更改标签uart2设备属性status为”okay”,
&#8203;

编译make  dtbs,在开发板上运行起来后,串口2的设备结点就是/dev/目录下的ttymxc1,查找原理图中两个引脚的位置(终结者ULL光盘资料\i.MX6ULL终结者光盘资料\03_开发板硬件资料\01_开发板原理图\核心板原理图),将两个引脚短接,接收引脚得到数据后测试程序会打印接收到的字节个数,执行测试程序,引脚位置:

&#8203;
运行测试程序:
&#8203;

出现此结果说明引脚配置成功。
3 UART3配置通过 imx6ull的芯片手册(终结者ULL光盘资料\i.MX6ULL终结者光盘资料\03_开发板硬件资料\02_芯片资料\2、I.MX6ULL芯片资料\IMX6ULL参考手册)查找到UART3的引脚为:
发送引脚IOMUXC_SW_MUX_CTL_PAD_UART3_TX_DATA,
接收引脚IOMUXC_SW_MUX_CTL_PAD_UART3_RX_DATA,
和UART2的步骤基本一样,在arch/arm/boot/dts/imx6ull-14x14-evk.dts配置pinctrl:
pinctrl_uart3: uart3grp {
fsl,pins = <
MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX   0x1b0b1
MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX   0x1b0b1
>;
};
&#8203;

然后查找使用这两个引脚的其他pinctrl,直接注释掉。
&#8203;
添加uart3节点标签:
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        status = "okay";
};
&#8203;



在imx6ull.dtsi中更改uart3的status属性:
&#8203;

这两个引脚对应的原理图为:
&#8203;

短接后测试/dev/ttymxc2节点:
&#8203;

4 UART4配置查找到 UART5对应的引脚为:
发送引脚IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA,
接收引脚IOMUXC_SW_MUX_CTL_PAD_UART4_RX_DATA,
在arch/arm/boot/dts/imx6ull-14x14-evk.dts中配置pinctrl:
pinctrl_uart4: uart4grp {
fsl,pins = <
MX6UL_PAD_UART4_RX_DATA__UART4_DCE_RX 0x1b0b1
MX6UL_PAD_UART4_TX_DATA__UART4_DCE_TX   0x1b0b1
>;
};
&#8203;

去掉复用的pinctrl:
&#8203;

然后添加uart4节点标签:
&uart4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart4>;
status = "okay";
};
&#8203;

在imx6ull.dtsi中改uart4的status属性为“okay”:
&#8203;

引脚位置:
&#8203;

测试/dev/ttymxc3,短接两个引脚,出现以下结果正确:
&#8203;



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

5

主题

7

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2020-11-3 18:03:31
5 UART5配置在imx6ull芯片手册查找到UART5对应的引脚为
发送引脚IOMUXC_SW_MUX_CTL_PAD_UART5_TX_DATA0,
接收引脚IOMUXC_SW_MUX_CTL_PAD_UART5_RX_DATA ,经过反复调试和翻手册,需要更改imx6ul-pinfunc.h文件中的一个宏定义:
查找“ MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX”,因为用的是i.MX6ULL,imx6ull芯片手册中说明要复用为串口5要选择ALT0模式,即在指定寄存器写”111”,转化为16进制为0x7,所以在imx6ul-pinfunc.h中将“MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX”后面的0x5修改为0x7,如果用的是i.MX6UL则保持0x5不动,如下图:
&#8203;
&#8203;

在设备树文件添加pinctrl:
pinctrl_uart5: uart5grp {
fsl,pins = <
MX6UL_PAD_UART5_TX_DATA__UART5_DCE_TX    0x1b0b1
MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX 0x1b0b1
>;
};
&#8203;

去掉引用这两个引脚的pinctrl:
&#8203;

添加节点标签:
&#8203;

在imx6ull.dtsi更改status属性为 ”okay”:
&#8203;

两个引脚位置:

&#8203;
执行 ./uart /dev/ttymxc4
&#8203;

打印出接收到的字符个数即成功。
6 UART6配置在imx6ull芯片手册中查找到UART6的引脚
IOMUXC_SW_MUX_CTL_PAD_CSI_MCLK和IOMUXC_SW_MUX_CTL_PAD_CSI_PIXCLK,
然后在imx6ull-14x14-evk.dts配置pinctrl:
pinctrl_uart6: uart6grp {
fsl,pins = <
MX6UL_PAD_CSI_MCLK__UART6_DCE_TX 0x1b0b1
MX6UL_PAD_CSI_PIXCLK__UART6_DCE_RX  0x1b0b1
>;
};
去掉占用这两个引脚的其他pinctrl,找到”pinctrl_csi1”,修改成如下图:
&#8203;

添加节点:
&#8203;

在imx6ull.dtsi文件中修改uart6的status属性:
&#8203;

两个引脚对应的原理图:
&#8203;

短接后测试: ./uart /dev/ttymxc5出现如下结果说明配置成功。
&#8203;

7 UART7配置UART7和UART8的引脚与网络接口复用,在目标板上调试时不能再用NFS挂载根文件系统。
UART7引脚为:
IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_EN,IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA0,
然后根据imx6ul-pinfun.h添加pinctrl:
pinctrl_uart7: uart7grp {
fsl,pins = <
MX6UL_PAD_ENET2_RX_EN__UART7_DCE_TX     0x1b0b0
MX6UL_PAD_ENET2_TX_DATA0__UART7_DCE_RX 0x1b0b0
>;
    };

&#8203;
然后查找使用这两个引脚的pinctrl,注释掉:

&#8203;

添加标签:
&#8203;

在imx6ull.dtsi中更改status属性为“okay”。
&#8203;

对应的原理图位置:

&#8203;
测试./uart /dev/ttymxc6
&#8203;

8 UART8配置UART8使用的引脚为:
IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_DATA1,IOMUXC_SW_MUX_CTL_PAD_ENET2_TX_EN,
配置 pinctrl:
pinctrl_uart8: uart8grp {
fsl,pins = <
MX6UL_PAD_ENET2_TX_DATA1__UART8_DCE_TX 0x1b0b0
MX6UL_PAD_ENET2_TX_EN__UART8_DCE_RX    0x1b0b0
>;
     };

&#8203;
注释掉占用这两个引脚的pinctrl:
&#8203;

添加&uart8:

&#8203;
在imx6ull.dtsi更改status属性为“okay”:
&#8203;

原理图位置:
&#8203;


测试节点为/dev/ttymxc7测试方法和效果与uart2一样。
&#8203;

9 UART1使用方法在uboot阶段把串口1设置成了调试串口,即uboot参数”console=ttymxc0”,为了测试,我们将console参数设置为null,这样串口一不再打印 Linux终端信息。
首先修改脚本将测试程序设置成开机自启动:
&#8203;

setenv console null
saveenv

&#8203;
更新设备树,然后输入boot启动,内核启动后会有如下显示:
&#8203;

测试程序中发送串口每隔1s发送一次,PC终端软件会将接收到的信息“hello world !”显示出来,也可以使用串口调试软件测试收发功能:
&#8203;

到此八路串口配置完成。

回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表