外设适配

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

_images/extension_port.png

继电器

继电器本质是操作 GPIO ,这里介绍如何在系统中操作 GPIO

  • 查看接口定义选中需要操控的 GPIO ,如 GPIO3_D6 _images/gpio.png

  • 计算 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 # 灭