• RK3566添加LED


    在主板上设计了5个LED,其中2个绿色led用于运行指示,一个rgb灯用状态指示,分别用了5个GPIO口控制LED,均为高电平亮。

    linux系统已经自带了leds-gpio的驱动,只需在内核中使能驱动即可。

    LED驱动使能 

    一般内核中已经使能了LED Support for GPIO connected LEDs:

    在DTS文件中增加LED的描述:

    1. leds{
    2. compatible = "gpio-leds";
    3. user1_led: user1 {
    4. label = "user1";
    5. gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
    6. linux,default-trigger = "heartbeat";
    7. default-state = "on";
    8. };
    9. user2_led: user2 {
    10. label = "user2";
    11. gpios = <&gpio2 RK_PB2 GPIO_ACTIVE_HIGH>;
    12. default-state = "off";
    13. };
    14. blue_led: blue {
    15. label = "blue";
    16. gpios = <&gpio4 RK_PC0 GPIO_ACTIVE_HIGH>;
    17. default-state = "off";
    18. };
    19. green_led: green {
    20. label = "green";
    21. gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
    22. default-state = "off";
    23. };
    24. red_led: red {
    25. label = "red";
    26. gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>;
    27. default-state = "off";
    28. };
    29. };

    此描述添加在根节点下。 

    调试

    修改DTS后编译内核,将boot.img烧写进主板,主板启动后,进入到/sys/class/leds/目录下查看led是否添加成功:

    1. [root@RK356X:/]# cd /sys/class/leds/
    2. [root@RK356X:/sys/class/leds]# ls
    3. blue green mmc0:: red user1 user2

    5个led已经添加成功了。

    向led灯名称下的brightness写非0或0的值,相应的led就会亮、灭。

    1. [root@RK356X:/sys/class/leds]# echo 1 > user1/brightness
    2. [root@RK356X:/sys/class/leds]# echo 0 > user1/brightness

    遇到的问题

    第一次修改DTS后将boot.img烧写进主板,进入到/sys/class/leds/目录下,没有看到添加的led,查看开机日志:

    1. [root@RK356X:/]# dmesg | grep leds
    2. [ 1.318922] leds-gpio: probe of leds failed with error -16

    显示leds-gpio探测失败,反复检测dts文件,没有发现错误。

    查看gpio使用情况:

    1. gpiochip2: GPIOs 64-95, parent: platform/fe750000.gpio, gpio2:
    2. gpio-73 ( |xgpio-pin ) out lo

    发现xgpio-pin与user1定义的gpio冲突了。

    查找dts文件中关于gpio-73相关的描述:

    1. WORKLED {
    2. compatible = "9tripod,xgpio";
    3. pinctrl-names = "default";
    4. def_val=<0>;
    5. pinctrl-0 = <&io2_b1>;
    6. gpio = <&gpio2 9 GPIO_ACTIVE_HIGH>;
    7. };

    WORKLED使用了此GPIO,将此描述删除,再次编译内核,将boot.img烧写进主板,led就添加成功了。

    遗留问题

    虽然user1配置了默认触发为heartbeat,但是user1并没有自动熄灭,可能还有一些heartbeat的一些功能没有配置好。

  • 相关阅读:
    企业级BOM系统与外部系统集成的几种方案
    多目标哈里斯鹰优化 (MOHHO)(Matlab代码实现)
    gRPC之gRPC认证
    Oracle 创建表语句
    C高级第2天
    SqlServer使用sp_executesql执行动态语句
    《Redis系列教程》
    从策略和实践,带你掌握死锁检测
    基于yolov5的车辆行人道路检测
    linux下搭建oh-my-zsh环境
  • 原文地址:https://blog.csdn.net/professionalmcu/article/details/125567331