GPIO工具使用
工具下载网盘地址路径
h618_data\3-SoftwareData软件资料\GPIO_tools
将wiringKP.tar.gz在板卡上解压
可执行文件和库文件分别放到/usr/bin和/usr/lib目录下
Copy gpio readall //获取所有管脚状态
Copy gpio read <wPi> //读管脚电平
gpio mode <wPi> <mode> //设置管脚工作模式 (当前版本支持设置out/int/up/down 模式)
gpio write <wPi> <val> //设置管脚输出电平
使用演示
设置PH5为输出模式,输出高电平
其中PC管脚输出电压为1.8V,PH管脚输出电压为3.3V
Copy kickpi@kickpi:~$ gpio mode 0 out
kickpi@kickpi:~$ gpio read 0
0
kickpi@kickpi:~$ gpio write 0 1
kickpi@kickpi:~$ gpio read 0
1
kickpi@kickpi:~$
可使用万用表测得此时PH5管脚为高电平
设置PH5为输入模式
Copy kickpi@kickpi:~$ gpio mode 0 in
kickpi@kickpi:~$ gpio mode 0 down
kickpi@kickpi:~$ gpio read 0
0
kickpi@kickpi:~$//短接管脚3和管脚4
kickpi@kickpi:~$ gpio read 0
1
kickpi@kickpi:~$
GPIO控制
GPIO编号查询
Copy cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pins
sys gpio控制
将GPIO释放出来,通过/sys/class/gpio进行控制
步骤一 修改管脚状态
/sys/class/gpio/export 只能导出UNCLAIMED状态的 gpio
查看所需管脚是否是UNCLAIMED状态
Copy cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins
管脚非UNCLAIMED状态 说明管脚被内核注册了,需要修改设备树,注释掉其默认功能
PH2 PH3 做举例
查询管脚状态,发现PH2 PH3作为了uart5
Copy vim longan/device/config/chips/h618/configs/p2/linux-5.4/board-*.dts //android
vim source/kernel/linux-5.4-h618/arch/arm64/boot/dts/sunxi/sun50iw9-kickpi-k2b.dts //Linux
关闭默认功能
步骤二
编译镜像,重新烧录
步骤三
确认gpio未被注册
Copy root@kickpi:~# cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins | grep PH
能够看到PH2 PH3未被使用,且对应 pin 值为 226 227
步骤四
通过 /sys/class/gpio/export 注册 PH2,PH3 并进行控制
通过结点下的内容控制 gpio , 常用如下
Copy direction
in / out
echo in > /sys/class/gpio/gpio226/direction
echo out > /sys/class/gpio/gpio226/direction
value
0 / 1
cat /sys/class/gpio/gpio226/value // 读取
echo 1 > /sys/class/gpio/gpio226/value // 配置高电平
echo 0 > /sys/class/gpio/gpio226/value // 配置低电平
示例功能配置
GPIO输出
K2B开发板默认配置两路GPIO输出功能,分别为PC12(12脚)、PC7(14脚)
注意:其他引脚已配置为其他功能,若要配置为GPIO功能,则需要先把默认功能去掉
其中PC管脚输出电压为1.8V,PH管脚输出电压为3.3V
GPIO输出 提供两种控制方式,分别为gpio-leds、gpio_para
gpio-leds
gpio-leds 是LINUX内核自带的GPIO控制驱动,可实现丰富的控制方式
系统中目录位于/sys/class/leds
以下示例为 系统运行指示灯配置,实现心跳闪烁功能
Copy /{
gpio-leds {
compatible = "gpio-leds";
status = "okay";
sys_led {
label="sys_led";
gpio = <&pio PI 16 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
};
};
};
gpio_para
gpio-para 是全志的GPIO控制驱动,可实现简单的电平高低控制
系统中目录位于/sys/class/gpio_sw
以下示例为 扩展引脚PC7、PC12的配置
Copy &soc {
gpio_para {
gpio_num = <2>;
gpio_pin_1 = <&pio PC 7 GPIO_ACTIVE_HIGH>;
gpio_pin_2 = <&pio PC 12 GPIO_ACTIVE_HIGH>;
status = "okay";
};
};
GPIO按键
Copy /{
gpio-keys {
compatible = "gpio-keys";
status = "okay";
autorepeat;
power {
label = "Power Key";
linux,code = <KEY_POWER>;
gpio = <&pio PC 2 GPIO_ACTIVE_LOW>; /* PC7 */
wakeup-source;
debounce-interval = <100>;
};
};
};
修改UART控制端口
修改debug_uart到你想用的uart,取消就用未使能的uart口
uart0固定会打印uboot日志
Copy +++ b/source/kernel/linux-5.4-h618/arch/arm64/boot/dts/sunxi/uEnv/uEnv.txt
@@ -4,4 +4,4 @@ console=both
disp_mode=1080p60
fb0_width=1920
fb0_height=1080
-debug_uart=ttyAS0
+debug_uart=ttyAS3
添加uart2支持
PH6,7,8,9默认为SPI
PH4,5默认为I2C
要将PH5 PH6作为UART2使用,则原先的默认功能就要关闭,uart2功能要打开