打印
[ARM入门]

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

[复制链接]
343|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jugaga|  楼主 | 2020-11-3 15:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文转自:<北京迅为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参考手册)中已经找到,如下图:\






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


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



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




用同样的方法在芯片手册搜索接收引脚, 搜索到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_引脚名_复用功能。




用相同的方法搜索“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注释掉或删掉。
如下图:


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



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


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


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


运行测试程序:


出现此结果说明引脚配置成功。
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
>;
};


然后查找使用这两个引脚的其他pinctrl,直接注释掉。

添加uart3节点标签:
&uart3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart3>;
        status = "okay";
};




在imx6ull.dtsi中更改uart3的status属性:


这两个引脚对应的原理图为:


短接后测试/dev/ttymxc2节点:


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


去掉复用的pinctrl:


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


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


引脚位置:


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


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不动,如下图:



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


去掉引用这两个引脚的pinctrl:


添加节点标签:


在imx6ull.dtsi更改status属性为 ”okay”:


两个引脚位置:


执行 ./uart /dev/ttymxc4


打印出接收到的字符个数即成功。
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”,修改成如下图:


添加节点:


在imx6ull.dtsi文件中修改uart6的status属性:


两个引脚对应的原理图:


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


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


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



添加标签:


在imx6ull.dtsi中更改status属性为“okay”。


对应的原理图位置:


测试./uart /dev/ttymxc6


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


注释掉占用这两个引脚的pinctrl:


添加&uart8:


在imx6ull.dtsi更改status属性为“okay”:


原理图位置:



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


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


setenv console null
saveenv


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


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


到此八路串口配置完成。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

118

帖子

1

粉丝