跳到主要内容

外设适配

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>;
    &#125;;

    };

    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 # 灭