美文网首页
IMX6Q-IOMUX-IO及串口复用配置

IMX6Q-IOMUX-IO及串口复用配置

作者: Lazy_Caaat | 来源:发表于2018-10-06 13:32 被阅读0次

参考这篇文章所写
也可参考这篇文章
在这份文档中查找复用关系

文档名称

找到电路图


电路图

以上面的UART4_TXD(KEY_COL0为例)

在芯片手册第四章找到KEY_COL0


复用关系

找到相关寄存器


相关寄存器

这里我们找到了三个名字
SW_PAD_CTL_PAD_KEY_COL0(Pad的控制寄存器名称)
IOMUXC_SW_MUX_CTL_PAD_KEY_COL0(Mux的控制寄存器名称)
IOMUXC_UART4_UART_RX_DATA_SELECT_INPUT(Select Input的寄存器名称)

其实SW_PAD_CTL_PAD_KEY_COL0是有一个前缀的,全称是IOMUXC_SW_PAD_CTL_PAD_KEY_COL0
查找该名称可以找到相关寄存器的地址


地址

上面的地址是什么意思呢,请看下图

image.png

这里我们知道了,这组寄存器的地址起始值为20E_0000,所以我们的IOMUXC_SW_PAD_CTL_PAD_KEY_COL0相对偏移地址是05c8

继续查找,下图就是该寄存器每个位的功能,同时这里也提到了基址和相对地址。


pad控制寄存器

上面这个寄存器主要功能就是控制引脚的电气属性
再查找第二个寄存器


pad复用寄存器
0-2bit可以控制,复用成串口
上面这个寄存器的主要功能就是选择引脚的复用功能

再查找第三个寄存器


Selecting Pads Involved in Daisy Chain.
上图寄存器的功能就是选择到底是通过哪个引脚输入进来的信号

linux内核源码里


打开iomux-v3.h
复用函数的原型

参数的意义
_pad_ctrl_ofs pad控制寄存器的偏移地址
_mux_ctrl_ofs mux控制寄存器的偏移地址
_mux_mode mux的模式
_sel_input_ofs input寄存器的偏移地址
_sel_input input的类型

通过上面三个寄存器说明即可使用iomux函数去配置自己的引脚了
相关源码位置是在arch/arm/boot/dts/imx6dl-pinfunc.h中
/*

  • The pin function ID is a tuple of
  • <mux_reg conf_reg input_reg mux_mode input_val>
    */
    以上规则为:
    mux_reg:mux控制寄存器偏移地址
    conf_reg:pad控制寄存器偏移地址
    input_reg:select_input控制寄存器偏移地址
    mux_mode:mux模式
    input_val:select_input寄存器值


    配置代码

添加串口2和4


设备树修改1
设备树修改2 arch/arm/boot/dts/imx6dl-pinfunc.h
其中MX6QDL_PAD_EIM_D26__UART2_TX_DATA    0X1b0b1代表pad_ctrl寄存器的值
0x170  0x540  0x000 0x4 0x1  0x1b0b1
mux_ctrl_ofs  |  pad_ctrl_ofs |  sel_input_ofs |  mux_mode   | sel_input   |  pad_ctrl

修改完后编译设备树

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
export ARCH=arm
export CROSS_COMPILE=arm-poky-linux-gnueabi-
make imx6q-krt.dtb
sudo dd if=arch/arm/boot/dts/imx6q-krt.dtb of=/dev/sdb bs=512 seek=20480 conv=fsync
串口4测试成功

linux下查看串口4配置,默认波特率9600

stty -F /dev/ttymxc3 -a

linux下修改串口4配置为115200

stty -F /dev/ttymxc3 ispeed 115200 ospeed 115200 cs8

有客户反馈读GPIO始终为0

其原因是因为当复用为GPIO后,我们第一反应是给direction赋值为out,也就是说GPIO变为输出模式了。而系统读取的value是从PSR中读取的。而写入output值是写入到DR中的。所以就根本不是读取的输出值,一直为0也就正常了。看下图中的NOTE描述,正常的read操作是读取GPIO_PSR的值。


image.png

我们可以可以通过设置SION位让GPIO的输出输入进入回环(下图第一点说明),既SION的意义数既做输入又做输出,注意:此模式下GPIO复用功能是会被忽略的。


image.png

至于如何修改SION,去arch/arm/boot/dts/imx6ul-pinfunc.h中找到相关GPIO宏定义(注意,此时我使用的是IMX6ULL官方EVK),然后把mux_ctl寄存器的bit5改为1就行,其他随意(因为SION=1时会忽略复用模式的配置信息),这里就改成0X01即可,不过在这里修改是个偷懒的方法,并不漂亮,容易以后给自己留坑(忘记修改过这个宏定义,导致复用功能失效),建议计算出来值,在宏定义的引用处再进行置位操作。

define MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x0060 0x02EC 0x0000 0x5 0x0

image.png

相关文章

  • IMX6Q-IOMUX-IO及串口复用配置

    参考这篇文章所写也可参考这篇文章在这份文档中查找复用关系 找到电路图 以上面的UART4_TXD(KEY_COL0...

  • MT2503 串口编程

    配置GPIO模式为UART 首先是配置IO为复用UART功能,使用 或 初始化串口 配置IO为UART后才能初始化...

  • 树莓派串口配置及minicom的安装

    1.树莓派串口配置:树莓派串口默认用于终端调试,如需使用串口,则需要修改树莓派设置。执行如下命令进入树莓派配置:s...

  • STM32F407串口中断服务程序

      在对串口进行配置时首先需要对对应的引脚进行端口复用映射,因为STM32一个端口有多个用处,另外即使对于同一个功...

  • 纽迪希亚配置文件详细说明

    [COM] 串口配置PortName 串口号BaudRate 波特率DataBits 数据位StopBits 停止...

  • USART

    Ⅰ、串口的初始化配置 Ⅱ、发送一个字节 Ⅲ、重定义“printf”和“scanf” Ⅰ、串口的初始化配置 Ⅱ、发送...

  • 关于串口复用的尝试

    背景 思路一尝试: 使用Virtual Serial Port Driver虚拟连接电脑的两个端口,在arduin...

  • 2019-07-11

    串口及串口编程 1、串口编程界面 (2)功能效果实现 2、使用串口调试工具实现数据传输 (1)在下拉列表中列出本机...

  • 用python来写个串口助手-界面篇 !

    1、我们上一篇中已经说道了如何使用pyserial来配置串口,现在我们制作一个串口配置的界面。 2、双击打开des...

  • 北云定位命令

    板卡配置北云的串口1输出KSXT 串口2接收差分信号: unlogall com3 interfacemode c...

网友评论

      本文标题:IMX6Q-IOMUX-IO及串口复用配置

      本文链接:https://www.haomeiwen.com/subject/jsqhaftx.html