imx8mm pinctrl 设备树io配置

7 篇文章 0 订阅
2 篇文章 0 订阅

1.文件

1.1引脚功能定义

vendor/nxp-opensource/kernel_imx/include/dt-bindings/pinctrl/pins-imx8mm.h

1.2 imx8m芯片数据手册

iMX_8M_Mini_RM_RevB.pdf

2. Pinctrl

飞思卡尔的io配置与全志、瑞芯微做法有点不同。
飞思卡尔的pinctrl注册时的格式为:<mux_reg conf_reg input_reg mux_val input_val pad_val >
其中,
mux_reg:复用寄存器地址
conf_reg:配置寄存器地址
input_reg:输入寄存器地址
mux_val:复用寄存器值
input_val:输入寄存器值
pad_val:管脚速率、开漏等功能选择

例如:
在这里插入图片描述
上述方框内最后形成 0x1F0 0x458 0x000 0x0 0x0 0x19
对应格式<mux_reg conf_reg input_reg mux_val input_val pad_val >

3. 举例

3.1 设备树

 leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpio_led>;

		led0: cpu {
			label = "cpu";
			gpios = <&gpio5 3 GPIO_ACTIVE_LOW>;
			default-state = "on";
			linux,default-trigger = "heartbeat";
		};
		
		led1: user {
			label = "user";
			gpios = <&gpio5 4 GPIO_ACTIVE_LOW>;
			default-state = "on";
		};
		
	};


pinctrl_gpio_led: gpioledgrp {
	fsl,pins = <
			MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4	0x19
			MX8MM_IOMUXC_SPDIF_TX_GPIO5_IO3 0x19
>;
};

3.2. 推导

例如 MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4 0x19
0x1EC 0x454 0x000 0x5 0x0 0x19

3.2.1 确定IO

从原理图设计中,一定可以知道使用芯片的哪一个管脚,这里是GPIO5_IO[4]

3.2.2 确定芯片手册中的mux_reg寄存器

iMX_8M_Mini_RM_RevB.pdf中搜索关键字,GPIO5_IO[4]
可以找到
在这里插入图片描述
这里找到了 GPIO5_IO[4] 对应的MUX寄存器 IOMUXC_SW_MUX_CTL_PAD_SPDIF_RX
在这里插入图片描述
可得出 mux_reg = 0x1EC

3.2.3 确定芯片手册中的conf_reg寄存器

iMX_8M_Mini_RM_RevB.pdf中搜索关键字,SPDIF_RX,该关键字是从IOMUXC_SW_MUX_CTL_PAD_SPDIF_RX 得出。
搜索找到了IOMUXC_SW_PAD_CTL_PAD_SPDIF_RX
在这里插入图片描述
可得出 conf_reg = 0x454

3.2.4. 确定芯片手册中的input_reg寄存器

iMX_8M_Mini_RM_RevB.pdf中翻看 第8章里面的IOMUXC节部分,这部分有SELECT_INPUT寄存器。
在这里插入图片描述
在这里插入图片描述
但是这些SELECT_INPUT 中没有SPDIF_RX 、GPIO5_IO[4]关键字,所以对于GPIO5_IO[4]没有input_reg寄存器,于是
input_reg = 0x0

3.2.5 确定芯片手册中的mux_val

mux_reg寄存器的内容中选择对应的功能,选择ALT5功能。
在这里插入图片描述
于是 mux_val = 0x05

3.2.6 确定芯片手册中的input_val

因为不存在input_reg寄存器,所以填写0,
input_value = 0x0

3.2.7. 确定芯片手册中的pad_val

conf_reg寄存器的内容中选择对应的功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如选择
00X X1 — Drive strength X1
1X FAST — Select fast slew rate (SR=0)
那么
pad_val = 00011001‬‬ = 0x19
pad_val = PAD_CTL_SRE_MAX | PAD_CTL_DSE_255

3.2.8. 综述

mux_reg = 0x1EC
conf_reg = 0x454
input_reg = 0x0
mux_val = 0x05
input_value = 0x0
pad_val = 0x19 

0x1EC 0x454 0x0 0x05 0x0 0x19

快捷方法

以上的推导只是配置参数上推导出寄存器数据,不过通常直接使用pins-imx8mm.h 中定义好的管脚配置,这样既快速又正确。

  1. 原理图找到gpio 号 :GPIO5_IO[4]
  2. 在数据手册iMX_8M_Mini_RM_RevB.pdf中查找GPIO5_IO[4]
  3. 找到寄存器的名称 IOMUXC_SW_MUX_CTL_PAD_SPDIF_RX
  4. vendor/nxp-opensource/kernel_imx/include/dt-bindings/pinctrl/pins-imx8mm.h 中搜寻SPDIF_RX 与 GPIO5_IO4 即可找出MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值