zoukankan      html  css  js  c++  java
  • 【迅为开发板资料】iMX6ULL开发板八路串口配置

    硬件平台:迅为i.MX6ULL开发板

     

     

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

    1 文档说明

    本章节使用的资料已经放到了开发板网盘资料中,路径为:11_Linux系统开发进阶86_章节使用资料

    章节介绍如何在i.MX6ULL终结者上配置8路串口,驱动程序内核已经自带,我们只需要根据NXP官方提供的手册来修改设备树。设备树文件在Linux内核的arch/arm/boot/dts/目录下(使用迅为提供的的Linux内核,在终结者ULL光盘资料i.MX6ULL终结者光盘资料5_uboot linux源码目录下),本例程中主要用到测试程序uart_write_read.c设备树文件imx6ull-14x14-evk.dtsimx6ull.dtsi,还有imx6ul-pinfunc.h

    配置UART用到的引脚在芯片手册(终结者ULL光盘资料i.MX6ULL终结者光盘资料3_开发板硬件资料2_芯片资料2I.MX6ULL芯片资料IMX6ULL参考手册)中已经找到,如下图:

     

     

     

     

     

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

     

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

     

     

     

    2 UART2配置

    以配置串口2为例,逐步配置设备树,本文档其余的7路串口都用相同的方法配置。

    首先通过查NXP的芯片手册(终结者ULL光盘资料i.MX6ULL终结者光盘资料3_开发板硬件资料2_芯片资料2I.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

    >;

    };

    本实验中没有用到流控,注释掉668669行,然后查找其他pinctrl有没有使用这两个引脚,如果有,注释掉其他pinctrl。搜索“PAD_UART2_TX_DATA”,查找到pinctrl_uart2dte使用了这两个引脚,我们直接把pinctrl_uart2dte注释掉或删掉。

    如下图:

     

    再查找引用此pinctrl_uart2dte的节点,注释掉然后查找使用此pinctrl的节点标签,有的话注释掉。

    查找“PAD_UART2_RX_DATA”,发现有pinctrl_remote_control使用了这个,引脚,注释掉

     

     

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

     

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

     

     

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

     

     

    运行测试程序:

     

    出现此结果说明引脚配置成功。

    3 UART3配置

    通过 imx6ull的芯片手册(终结者ULL光盘资料i.MX6ULL终结者光盘资料3_开发板硬件资料2_芯片资料2I.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中更改uart3status属性:

     

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

      

    短接后测试/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中改uart4status属性为“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.MX6ULLimx6ull芯片手册中说明要复用为串口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文件中修改uart6status属性:

     

    两个引脚对应的原理图:

     

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

     

    7 UART7配置

    UART7UART8的引脚与网络接口复用,在目标板上调试时不能再用NFS挂载根文件系统。

    UART7引脚为:

    IOMUXC_SW_MUX_CTL_PAD_ENET2_RX_ENIOMUXC_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 !”显示出来,也可以使用串口调试软件测试收发功能:

     

    到此八路串口配置完成。

     

  • 相关阅读:
    第二十章 用户管理(一)
    第十九章 Linux中常用字符的特殊含义
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/topeet/p/13920261.html
Copyright © 2011-2022 走看看