GPIO编号计算
GPIO编号 = BANK * 32 + GPIO_PIN
GPION_MP = N * 32 + 8 * (M -1) + P
示例:GPIO7_C2 = 7 X 32 + 8 X (3-1) + 2 = 242
GPIO2_A1 = 2 X 32 + 8 X (1-1) + 1 = 73
A对应1,B对应2,C对应3,以此类推
控制步骤
注意事项
1、通过原理图谨慎确认对应GPIO口连接情况,若操作不当,会造成严重后果
2、并非所有GPIO都能控制,若操作失败,请更换GPIO尝试
3、系统重启后需要重新导出GPIO、设置模式
输出高电平
设置GPIO2_D1为高电平
导出GPIO2_D1引脚
echo 89 > /sys/class/gpio/export
导出成功后,会生成/sys/class/gpio/gpio89目录
若没有生成,说明该引脚不可导出
设置GPIO2_D1引脚为输出模式
echo out > /sys/class/gpio/gpio89/direction
设置GPIO2_D1引脚高电平
echo 1 > /sys/class/gpio/gpio89/value
读取电平
导出GPIO7_C2引脚
echo 242 > /sys/class/gpio/export
设置GPIO7_C2引脚为输入模式
echo in > /sys/class/gpio/gpio242/direction
设置GPIO7_C2引脚高电平
cat /sys/class/gpio/gpio242/value
示例图片:
设置中断
echo 90 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio90/direction
echo "rising" > /sys/class/gpio/gpio90//edge
edge 表示中断的触发方式,edge文件有如下四个值:“none”, “rising”, “falling”,“both”。
none:表示引脚为输入,不是中断引脚
rising:表示引脚为中断输入,上升沿触发
falling:表示引脚为中断输入,下降沿触发
both:表示引脚为中断输入,边沿触发
此时输入:
cat /proc/interrupts
可以看到:
中断被正常添加进系统。
PWM
首先要在设备树中选中某一个引脚作为pwm输出,然后执行:
pwmPath="/sys/class/pwm/pwmchip1/pwm0"
if [ -n "`echo $1|sed 's/[2-9]//g'`" ];then
if [ ! -d "$pwmPath" ]; then
echo 0 > /sys/class/pwm/pwmchip1/export
echo 250 > /sys/class/pwm/pwmchip1/pwm0/period
echo 125 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
fi
echo $1 > /sys/class/pwm/pwmchip1/pwm0/enable
if [ $1 -eq 0 ];then
echo 0 > /sys/class/pwm/pwmchip1/unexport
fi
else
echo "./pwm.sh <1 | 0>"
echo "1 = enable"
echo "0 = disabled"
fi
管脚功能复用查看
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins