自学内容网 自学内容网

【linux】【设备树】具有 GPIO 控制器和连接器的硬件配置的备树(Device Tree)代码讲解

具有 GPIO 控制器和连接器的硬件配置的备树(Device Tree)代码讲解

背景

-学习Linux设备树

代码

soc {
    soc_gpio1: gpio-controller1 {
        #gpio-cells = <2>;
    };
    soc_gpio2: gpio-controller2 {
        #gpio-cells = <2>;
    };
};

connector: connector {
    #gpio-cells = <2>;
    gpio-map = <0 0 &soc_gpio1 1 0>,
                <1 0 &soc_gpio2 4 0>,
                <2 0 &soc_gpio1 3 0>,
                <3 0 &soc_gpio2 2 0>;
    gpio-map-mask = <0xf 0x0>;
    gpio-map-pass-thru = <0x0 0x1>;
};

expansion_device {
    reset-gpios = <&connector 2 GPIO_ACTIVE_LOW>;
};

代码讲解

  1. soc 节点

这个节点定义了两个 GPIO 控制器,soc_gpio1 和 soc_gpio2,每个控制器都有一个 #gpio-cells 属性:

soc_gpio1: gpio-controller1 和 soc_gpio2: gpio-controller2: 这两个节点代表两个不同的 GPIO 控制器。

#gpio-cells = <2>: 这个属性指定了每个 GPIO 的描述需要两个单元(通常是一个 GPIO 编号和一个标志)。

  1. connector 节点

这个节点定义了一个连接器,它将 GPIO 映射到不同的 GPIO 控制器上:

#gpio-cells = <2>: 这个属性与之前的 GPIO 控制器节点一致,表示每个 GPIO 描述需要两个单元。

gpio-map: 这个属性定义了 GPIO 映射的规则。每个条目表示一个 GPIO 映射:

<0 0 &soc_gpio1 1 0>: GPIO 0 映射到 soc_gpio1 控制器的 GPIO 1。
<1 0 &soc_gpio2 4 0>: GPIO 1 映射到 soc_gpio2 控制器的 GPIO 4。
<2 0 &soc_gpio1 3 0>: GPIO 2 映射到 soc_gpio1 控制器的 GPIO 3。
❤️ 0 &soc_gpio2 2 0>: GPIO 3 映射到 soc_gpio2 控制器的 GPIO 2。
gpio-map-mask: 这个属性指定了用于 GPIO 映射的掩码:

<0xf 0x0>: 这意味着只对前四个 GPIO 引脚应用映射规则。
gpio-map-pass-thru: 这个属性定义了 GPIO 的直通模式:

<0x0 0x1>: 这表示仅对 GPIO 1 启用直通模式。
3. expansion_device 节点

这个节点定义了一个扩展设备,使用连接器中的 GPIO 进行复位控制:

reset-gpios: 这个属性定义了设备的复位 GPIO:
<&connector 2 GPIO_ACTIVE_LOW>: 这表示使用 connector 节点中的第 2 个 GPIO,且该 GPIO 在低电平时有效 (GPIO_ACTIVE_LOW)。

总结

这段代码配置了两个 GPIO 控制器,并通过 connector 节点将这些控制器的 GPIO 通过映射规则连接起来。expansion_device 节点使用 connector 节点中的一个 GPIO 来控制设备的复位。此配置允许灵活地管理 GPIO,并且能够适配不同的 GPIO 控制器和设备需求。


原文地址:https://blog.csdn.net/a72944392/article/details/140698192

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!