Pinctrl子系统_03_Pinctrl子系统使用示例

本节以IMX6ULL为例,演示如何使用Pinctrl子系统配置I2C通信所使用的引脚。

如下图所示,在芯片内部,有许多功能模块,其中就包括I2C模块。

怎么配置I2C模块?

答:

  1. 首先,要知道I2C模块会使用哪些引脚,这可以通过看原理图确定。
  2. 确定使用哪些引脚之后(假设使用pinA,pinB), 就可以配置IOMUX,选择引脚的功能了。
  3. 最后,就是配置(config)引脚了。

其中,第二步、第三步的配置,会作为一个类似下图的节点保存在设备树中。

然后,就可以通过类似下图所示的节点,来选择使用上图所示的节点,而不需要写额外的代码。

如下图所示,右边的节点由于格式是统一的,所以很容易构造,难点在于左边的节点,它没有统一的格式,往往不同平台之间的格式就大不相同。

如何构造Pinctrl节点?

那么,如何构造左边的节点呢?

答:可以通过以下三种方法:

  1. 工具(tool),对于一些芯片厂商,有提供对应的工具,用于生成这些引脚;
  2. 文档,或设备树示例;
  3. 源码(较困难);

对于imx6ull,他有提供一个工具(i.MX Pins Tool v6),可以生成对应的引脚配置信息

使用方法也很简单,选中想要配置的引脚,然后选择要配置成哪种功能,然后点击完成,就会生成对应的配置信息。

对应的配置信息:

开始配置I2C模块

看原理图获取引脚

首先,根据底板原理图获取使用到的引脚信息。

使用的是64,65号引脚。

然后,找到对应的管脚号是G16,G17。

选择引脚功能

然后,可以在工具上选择引脚的功能。

生成的设备树配置信息如下:

配置引脚

引脚功能选择完毕后,还可以配置引脚。

配置引脚后,可以看到节点配置信息也产生了变化,并且变化的部分是右边的数值部分。

可以推测,前面的宏是选择引脚的功能,后面的数值则是引脚的配置值。

配置Client节点

此时,我们生成了Pinctrl节点,但是要怎么选择使用它呢?

&iomuxc {
    pinctrl-names = "default";
    pinctrl-0 = <&BOARD_InitPins>;
    imx6ull-board {
        i2c1_pins: i2c1_pins {                /*!< Function assigned for the core: Cortex-A7[ca7] */
            fsl,pins = <
                MX6UL_PAD_UART4_RX_DATA__I2C1_SDA          0x000018B0
                MX6UL_PAD_UART4_TX_DATA__I2C1_SCL          0x000018B0
            >;
        };
    };
};

参考内核设备树文件,内核的配置和使用如下:

所以,可以这样使用pinctrl:

&i2c1 {
    clock-frequency = <100000>;
    pinctrl-names = "default";
    pinctrl-0 = <&i2c1_pins>;
    status = "okay";
};

这样,i2c1节点就会转换成一个平台设备,通过i2c1节点的compatible属性,与对应的平台驱动进行匹配,匹配成功后会调用default状态的pinctrl,对引脚进行配置。

以上就是本节全部内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值