• 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的一些功能没有配置好。

  • 相关阅读:
    dd命令测试硬盘IO
    Scala---样例类+隐式转换
    嵌入式Linux入门-异常与中断(流程+寄存器全解析)
    简单介绍Rope Crystal(类似Roop)项目
    卷积神经网络(ResNet-50)鸟类识别
    不会还有人觉得会员营销很难做吧?教你几招速成!
    【用MyEclipse2017创建一个Hibernate Web登录项目】
    Shell 脚本特殊变量列表
    docker-compose 安装Harbor
    MyBatis 源码分析--获取SqlSession
  • 原文地址:https://blog.csdn.net/professionalmcu/article/details/125567331