扩展引脚功能定制

添加uart2支持

PH6,7,8,9默认为SPI PH4,5默认为I2C 要将PH5 PH6作为UART2使用,则原先的默认功能就要关闭,uart2功能要打开

安卓SDK设备树文件为: longan/device/config/chips/h618/configs/p2/linux-5.4/board-k2b.dts

cf9c366bb88d7214bc93412cbc0accb3

sys gpio控制

将GPIO释放出来,通过/sys/class/gpio进行控制

步骤一 修改管脚状态

/sys/class/gpio/export 只能导出UNCLAIMED状态的 gpio

查看所需管脚是否是UNCLAIMED状态

cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins

管脚非UNCLAIMED状态 说明管脚被内核注册了,需要修改设备树,注释掉其默认功能

PH2 PH3 做举例

查询管脚状态,发现PH2 PH3作为了uart5

image-20250326115428401
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

关闭默认功能

image-20250326133713399

步骤二

​ 编译镜像,重新烧录

步骤三

​ 确认gpio未被注册

root@kickpi:~# cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins | grep PH

​ 能够看到PH2 PH3未被使用,且对应 pin 值为 226 227

image-20250326142700157

步骤四

​ 通过 /sys/class/gpio/export 注册 PH2,PH3 并进行控制

image-20250326142738724

通过结点下的内容控制 gpio , 常用如下

设置GPIO方向

echo in > /sys/class/gpio/gpio226/direction
echo out > /sys/class/gpio/gpio226/direction

设置GPIO值

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-para

是全志的GPIO控制驱动,可实现简单的电平高低控制

系统中目录位于/sys/class/gpio_sw

以下示例为 扩展引脚PC7、PC12的配置

增加或删减注意修改gpio_num的值

&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-leds

gpio-leds 是LINUX内核自带的GPIO控制驱动,可实现丰富的控制方式

系统中目录位于/sys/class/leds

以下示例为 系统运行指示灯配置,实现心跳闪烁功能

/{
		gpio-leds {
                compatible = "gpio-leds";
                status = "okay";

                sys_led {
                        label="sys_led";
                        gpio = <&pio PI 16 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
                };
        };
};

GPIO按键

/{
		gpio-keys {
                compatible = "gpio-keys";
                status = "okay";
                autorepeat;

                power {
                        label = "Power Key";
                        linux,code = <KEY_POWER>;
                        gpio = <&pio PC 2 GPIO_ACTIVE_LOW>;
                        wakeup-source;
                        debounce-interval = <100>;
                };
        };
};

Last updated