外设适配¶
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 # 灭