【导语】本文使用的是TQIMX6Q_coreC,CPU是IMX6Q,内核版本4.1.15,以下使用 EIM_D28接口为例介绍修改一个已经被驱动占用的管脚,将其配置为普通可控GPIO。 天嵌其他NXP系列板卡GPIO修改方式基本一致,供参考。 具体步骤如下: 1. 查看底板原理图,EIM_D28为核心板175引脚,搜索可知其为UART功能 2. 打开内核源码arch/arm/boot/dts/imx6q-pinfunc.h,搜索EIM_D28,看出其对应的GPIO是GPIO3_IO28管脚,复制MX6QDL_PAD_EIM_D28__GPIO3_IO28 3. 打开arch/arm/boot/dts/目录下的,imx6qdl-sabresd.dtsi(imx6q corec板卡使用)、e9v2qdl-sabresd.dtsi(e9v2 板卡使用)、e9v3qdl-sabresd.dtsi(e9v3板卡使用)设备树文件,搜索 EIM_D28 pinctrl_uart2: uart2grp { fsl,pins = < MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1 MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1 MX6QDL_PAD_EIM_D28__UART2_CTS_B0x1b0b1 MX6QDL_PAD_EIM_D29__UART2_RTS_B0x1b0b1 可知EIM_D28被配置为UART2 搜索pinctrl_uart2将其注释掉或者将ststus修改为disabled &uart2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart2>; status = "disabled"; }; 4.搜索imx6qdl-sabresd,在组里面添加步骤1搜索到的GPIO配置,MX6QDL_PAD_EIM_D28__GPIO3_IO28 imx6qdl-sabresd{ pinctrl_hog: hoggrp { fsl,pins= < .. MX6QDL_PAD_EIM_D28__GPIO3_IO280x80000000 /*AWD EIM_D28*/ MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000 /*AWD EIM_D29*/ MX6QDL_PAD_SD3_DAT2__GPIO7_IO060x80000000 /*AWD SD3_DAT2*/ MX6QDL_PAD_SD3_DAT3__GPIO7_IO070x80000000 /*AWD SD3_DAT3*/ MX6QDL_PAD_SD3_CMD__GPIO7_IO02 0x80000000 /*AWD SD3_CMD*/ MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000 /*AWD EIM_A25*/ MX6QDL_PAD_SD3_CLK__GPIO7_IO03 0x80000000 /*AWD SD3_CLK*/ MX6QDL_PAD_SD3_DAT0__GPIO7_IO040x80000000 /*AWD SD3_DAT0*/ MX6QDL_PAD_SD3_DAT1__GPIO7_IO050x80000000 /*AWD SD3_DAT1*/ MX6QDL_PAD_SD1_DAT1__GPIO1_IO17 0x80000000 /*AWD PWM3*/ MX6QDL_PAD_SD1_CMD__GPIO1_IO18 0x80000000 /*AWD PWM4*/ >; }; 5.重新编译,替换修改后的设备树到板子即可 6.编号计算:引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数 举例: GPIO为GPIO1_28,引脚编号为32*(1-1)+28=28 GPIO为GPIO3_28,引脚编号为32*(3-1)+28=92 应用层命令测试: echo 92 > /sys/class/gpio/export //将引脚导入应用层,生成相应gpio节点 echo "out" >/sys/class/gpio/gpio92/direction //设置输入输出方向,out为输出,in为输入 echo 1 > /sys/class/gpio/gpio92/value //设置输出高电平 echo 0 > /sys/class/gpio/gpio92/value //设置输出低电平 使用万用表测量设置输出电平是否有效,测量与输出电平一致说明该GPIO引脚可控。
|