外设适配
CAM-CRV1126S2U/CAM-C1109S2U 保留了丰富的拓展接口,其中包括以太网、USB、串口、GPIO、I2C、I2S、SPI、SDIO等等, 基本上满足客户的所有拓展需求。本章主要讲述几个闸机可能用到的简单外设。

继电器
继电器本质是操作 GPIO ,这里介绍如何在系统中操作 GPIO。
-
查看接口定义选中需要操控的
GPIO,如GPIO3_D6
-
计算 GPIO 编号
GPIO3_D6
3 x 32 + 3 x 8 + 6 = 126
公式 GPIO(X)_(Y)(Z)
其中变量 Y :A = 0,B = 1,C = 2,D = 3
X x 32 + Y x 8 + Z
-
注册 GPIO
echo 126 > /sys/class/gpio/export
需要确认该 GPIO 没有被占用没有被初始化其他功能
如 GPIO3_D6 同时也是 I2S_m0 口,需要在内核中关闭 I2S
vim sdk/kernel/arch/arm/boot/dts/rv1109-firefly-ai-cam.dts (rv1126-firefly-ai-cam.dts)
在末尾添加以下代码
&i2s0 { status = "disabled"; };
编译并且升级内核
-
设置 GPIO 为输出模式
echo out > /sys/class/gpio/gpio126/direction
-
设置 GPIO 输出高电平/低电平
echo 1 > /sys/class/gpio/gpio126/value # 高 echo 0 > /sys/class/gpio/gpio126/value # 低
LED 灯
-
选择
GPIO口,修改内核设备树,添加自定义LED灯设备节点。vim sdk/kernel/arch/arm/boot/dts/rv1109-firefly-ai-cam.dts (rv1126-firefly-ai-cam.dts)
参考如下配置添加 LED 节点。
leds { compatible = "gpio-leds";
user_led: user {label = "firefly:yellow:user";linux,default-trigger = "ir-user-click";default-state = "off";gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";pinctrl-0 = <&led_user>;};};
pinctrl 需要添加 GPIO 复用控制
led_user: led-user { rockchip,pins = <3 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>; };
修改完成后编译升级内核
-
控制 LED
echo 1 > /sys/class/leds/firefly:yellow:user/brightness # 亮 echo 0 > /sys/class/leds/firefly:yellow:user/brightness # 灭