基于Linux系统GPIO复用方法- NXP i.MX 6
方法一 使用 iomux
1. 把 EIM_A17 复用成 GPIO
2. 在 kernel/arch/arm/boot/dts/imx6q-pinfunc.h 中查找
#define MX6QDL_PAD_EIM_A17__GPIO2_IO21 0x0f0 0x404 0x000 0x5 0x0
3. 在设备树中添加引脚定义
Kernel/arch/arm/boot/dts/imx6qdl-supcore.dtsi
并把其他复用功能去掉,此引脚无复用功能不需要去掉复用,编译生成新的镜像,将
其烧写到开发板上即可。
烧写完成新的镜像后,在文件系统中对 gpio 的操作如下:
4.1. GPIO 设置,步骤如下:
计算对应 sys/class/gpio 的值 GPIOn_IOx = (n-1)*32 + x
GPIO2_IO21=(2-1) *32+21=53
将 GPIO2_IO21 设置为输出。
echo 53 > /sys/class/gpio/export 用于通知系统需要导出控制的 GPIO 引脚编号
echo out > /sys/class/gpio/gpio53/direction 控制为输出
echo 1 > /sys/class/gpio/gpio53/value 输出为高电平
或者 echo 0 > /sys/class/gpio/gpio53/value 输出为低电平
echo 53 > /sys/class/gpio/unexport 通知系统取消导出
将 GPIO2_IO21 设置为输入。
echo 53 > /sys/class/gpio/export 用于通知系统需要导出控制的 GPIO 引脚编号
echo in > /sys/class/gpio/gpio53/direction 控制为输入
这时给该引脚接高电平,输入即为高电平,反之为低电平
echo 53 > /sys/class/gpio/unexport 通知系统取消导出
另外客户可以自己通过 shell 文件来控制多个 gpio 做为输入或者输出。
4.2 GPIO 输出测试
编写测试脚本 vi gpiotest_o.sh
#!/bin/bash
# gpio list gpio (bank-1)*32 + nr
for test in 53 168
do
echo Exporting pin $test.
echo $test> /sys/class/gpio/export
echo setting pin $1.
echo out > /sys/class/gpio/gpio$test/direction
echo $1 > /sys/class/gpio/gpio$test/value
echo $test> /sys/class/gpio/unexport
done
echo complete
修改脚本执行权限: chmod u+x gpiotest_o.sh
测试 gpio 输出为低。进入到脚本所在路径: ./gpiotest_o.sh 0
所有 GPIO 输出低电平 0V。
测试 gpio 输出为高电平。进入到脚本所在路径: ./gpiotest_o.sh 1
所有 GPIO 输出高电平。输出的高电平,根据引脚所在的电源域不同,可能会有区别。
