由高通9531芯片规格书可知,芯片对应的GPIO有18个GPIO0-17,下图是规格书定义。下面以SKYLAB的SKW99模块为例进行说明。
SKYLAB的SKW99模块使用源码为QSDK,GPIO0-3默认为JTAG功能,GPIO9和10为uart串口,剩下的GPIO11-16为默认为灯的功能,GPIO17为WPS按键功能。
GPIO11-17对应功能源码地址为:
qsdk/target/linux/ar71xx/files/arch/mips/ath79/mach-ap147.c
下面以在固件中控制GPIO0进行讲述说明,固件中需要有io工具:
1、将GPIO1转为GPIO功能:
下面是芯片规格书中关于GPIO0-3功能的定义:对应寄存器的地址为0x1804006C
读取寄存器0x1804006C寄存器的值:
root@OpenWrt:~# io -4 0x1804006C
1804006c: 00000020
root@OpenWrt:~#
高通规格书,没有详细介绍bit1值对应的功能,根据实践:
默认0,对应jtag(默认),1对应的是GPIO功能。
将bit1设置为1,则对应寄存器的值应设置为0x00000022
root@OpenWrt:/# io -4 0x1804006c 0x00000022 //写寄存器值
root@OpenWrt:/#
root@OpenWrt:/# io -4 0x1804006c //读寄存器值
1804006c: 00000022
root@OpenWrt:/#
2、对GPIO1进行操作
步骤如下:
(1)先注册GPIO1
root@OpenWrt:/# echo 1 > /sys/class/gpio/export
root@OpenWrt:/#
root@OpenWrt:/# echo out > /sys/class/gpio/gpio1/direction
root@OpenWrt:/#
(2)查看系统GPIO的状态
root@OpenWrt:/# cat /sys/kernel/debug/gpio
GPIOs 0-17, ath79:
gpio-0 (sysfs ) out lo
gpio-1 (sysfs ) out lo
gpio-13 (sysfs ) out hi
gpio-17 (WPS button ) in hi
root@OpenWrt:/#
(3)对GPIO1进行拉高操作
(4)对GPIO1进行拉低操作
同理Link1灯GPIO16的操作控制如下:寄存器为0x1804003C,bit0-bit7对应GPIO16.