本文主要是介绍pinctrl子系统与gpio子系统实验-解决申请IO失败问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一. 简介
前面一篇文章对Led 驱动代码进行了测试,测试后驱动出现错误提示,提示 申请IO失败。文章地址如下:
pinctrl子系统与gpio子系统实验-对驱动进行测试-CSDN博客
本文来解决驱动代码中申请IO失败的问题。
二. Led驱动申请IO失败的解决思路
申请IO的时候失败大部分原因是,这个IO被其他外设占用了。检查设备树,查找有哪些使用同一IO的设备。检查如下两方面:
(1) 检查复用,也就是 pinctl 设置(复用与电器属性配置)。
(2) gpio的使用,例如,设备树节点中如下属性:
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
三. 具体解决方法
具体检查开发板所运行的设备树文件中,Led所使用的 GPIO是否被其他设备占用了。
1. 所添加的 Led设备节点
注意:这里所使用的开发板是正点原子 nand-Flash版 ALPHA开发板。所以,所对应设备树源文件为 imx6ull-alientek-nand.dts。
前面文章添加 Led设备节点时,我将 Led设备节点信息添加到了 imx6ull-14x14-evk.dts文件中设备树的根节点下(这里imx6ull-alientek-nand.dts设备树文件最终会调用到 imx6ull-14x14-evk.dts )。
设备树根目录下添加了 gpioled设备节点:
/* WeiWuXian/2024/01/25*/gpioled{compatible = "alientek, gpioled";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpioled>;led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;status = "okay";};
&iomuxc {}节点中,添加了如下 pinctrl节点信息。
/*WeiWuXian//2024/01/25 */pinctrl_gpioled: ledgrp{fsl,pins = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0X10B0>;};
2. 具体解决 IO申请失败问题
(1) 首先,检查 pinctrl配置(即复用与电器属性配置)
pinctrl_tsc: tscgrp {fsl,pins = <MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0/* MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0 */MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0>;
可以看到,pinctrl_tsc 节点是 TSC(电阻触摸屏接口)的 pinctrl 节点,从第 5 行可以看出,默认情况下 GPIO1_IO03 作为了 TSC 外设的 PIN,复用为了GPIO功能。所以,需要屏蔽掉如上的 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 这一行。
(2) 其次,检查 gpio使用。
&tsc {pinctrl-names = "default";pinctrl-0 = <&pinctrl_tsc>;
/* xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; */measure-delay-time = <0xffff>;pre-charge-time = <0xfff>;status = "okay";
};
接下来就是编译设备树文件,开发板重新加载新编译的设备树文件进行测试。
这篇关于pinctrl子系统与gpio子系统实验-解决申请IO失败问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!