imx8mm pinctrl 设备树io配置

    技术2025-01-06  8

    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 中定义好的管脚配置,这样既快速又正确。

    原理图找到gpio 号 :GPIO5_IO[4]在数据手册iMX_8M_Mini_RM_RevB.pdf中查找GPIO5_IO[4]找到寄存器的名称 IOMUXC_SW_MUX_CTL_PAD_SPDIF_RXvendor/nxp-opensource/kernel_imx/include/dt-bindings/pinctrl/pins-imx8mm.h 中搜寻SPDIF_RX 与 GPIO5_IO4 即可找出MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4
    Processed: 0.009, SQL: 9