CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 17315|回复: 9

[嵌入式学习]led 子系统与led trigger

[复制链接]
发表于 2014-9-1 16:20:23 | 显示全部楼层 |阅读模式
本帖最后由 @allen 于 2014-9-2 10:02 编辑

更多的基于cubieboard 的学习贴可搜:嵌入式学习


1. cubieboard 板载led 了解与使用

以CT为例,
  1. ls /sys/class/leds/
复制代码
可以看到
  1. blue:ph21:led1/   green:ph07:led4/  orange:ph20:led2/ white:ph11:led3/
复制代码
以绿灯为例在/sys/class/leds/green\:ph07\:led4/  有:
  1. brightness  device  max_brightness  power  subsystem  trigger  uevent
复制代码
  1. root@cubietruck:~# cat /sys/class/leds/green\:ph07\:led4/trigger
  2. none rfkill0 battery-charging-or-full battery-charging battery-full battery-charging-blink-full-solid ac-online usb-online<font color="Red"> [mmc0]</font> mmc1 timer heartbeat cpu0 cpu1 default-on rfkill1 rfkill2
  3. root@cubietruck:~#
复制代码
说明它被定义成mmc0 触发,所以当你插TF到CT上面的卡槽的时候,绿灯会闪烁一下,提示你mmc0 触发
蓝灯被定义成heartbeat (指示内核是否已经挂掉),
橙灯被定义成cpu0(双核A20 cpu0负载情况),
白灯被定义成cpu1


这些触发定义,在script.bin
  1. mount /dev/nanda /mnt
  2. cd /mnt
  3. bin2fex script.bin script.fex
  4. vi script.fex
复制代码
搜leds ,可以看到:
  1. [leds_para]
  2. leds_used = 1                                  //  总开关
  3. leds_num = 4                                  //灯数量
  4. leds_pin_1 = port:PH21<1><default><default><0>   // 连接到那个管脚
  5. leds_name_1 = "blue:ph21:led1"   // 名字,可以自己名个
  6. leds_default_1 = 0                         //  系统起来后,是亮着的还是灭着的
  7. leds_trigger_1 = "heartbeat"         // 触发器
  8. leds_pin_2 = port:PH20<1><default><default><0>
  9. leds_name_2 = "orange:ph20:led2"
  10. leds_default_2 = 0
  11. leds_trigger_2 = "cpu0"
  12. leds_pin_3 = port:PH11<1><default><default><0>
  13. leds_name_3 = "white:ph11:led3"
  14. leds_default_3 = 0
  15. leds_trigger_3 = "cpu1"
  16. leds_pin_4 = port:PH07<1><default><default><0>
  17. leds_name_4 = "green:ph07:led4"
  18. leds_default_4 = 1
  19. leds_trigger_4 = "mmc0"
复制代码
主要有有用的:
none (去掉触发)     
timer (按照自己定义的延时时间闪烁)      
battery-charging (电池充电中)
battery-full(电池充电满了)

参考:http://linux-sunxi.org/Fex_Guide   “led configuration” 部分
          http://blog.csdn.net/yuanlulu/article/details/6438847   文章后面


将led 灯点亮:
  1. echo none > /sys/class/leds/green\:ph07\:led4/trigger
  2. echo  1 > /sys/class/leds/green\:ph07\:led4/brightness
  3. echo  0  > /sys/class/leds/green\:ph07\:led4/brightness
复制代码
不过,此方法重启trigger就变为script.bin 定义的,所以最好改script.bin的trigger


经典led 应用:
接个锂电池供电的时候,用led提示电量情况  

电池指示灯:
>放电时,电量为0的时候等全灭,

> 1-25亮蓝灯,26-50亮蓝橙灯,51-75蓝橙白灯,76-100四灯全亮。
> 充电时,0-25一盏闪烁、26-50一亮一闪烁、51-75两亮一闪烁、
> 76-99三亮一闪烁、100 充满全亮
> 当pmu检测不到电池时,电池指示灯全部处于闪烁状态
  1. #!/bin/bash
  2. FILE_CAPACIty="/sys/class/power_supply/battery/capacity"
  3. FILE_ONLINE="/sys/class/power_supply/battery/online"
  4. FLIE_PRESENT="/sys/class/power_supply/battery/present"

  5. LED1_TRIGGER="/sys/class/leds/blue:ph21:led1/trigger"
  6. LED2_TRIGGER="/sys/class/leds/orange:ph20:led2/trigger"
  7. LED3_TRIGGER="/sys/class/leds/white:ph11:led3/trigger"
  8. LED4_TRIGGER="/sys/class/leds/green:ph07:led4/trigger"

  9. LED_TRG_TIMER="timer"
  10. LED_TRG_NONE="none"

  11. LED1_BRIGHT="/sys/class/leds/blue:ph21:led1/brightness"
  12. LED2_BRIGHT="/sys/class/leds/orange:ph20:led2/brightness"
  13. LED3_BRIGHT="/sys/class/leds/white:ph11:led3/brightness"
  14. LED4_BRIGHT="/sys/class/leds/green:ph07:led4/brightness"

  15. CAPACITY=`cat ${FILE_CAPACIty}`
  16. ONLINE=`cat ${FILE_ONLINE}`
  17. PRESENT=`cat ${FLIE_PRESENT}`
  18. if [ ${PRESENT} = 0 ]; then
  19.         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  20.         echo 0 > ${LED1_BRIGHT}
  21.         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  22.         echo 0 > ${LED2_BRIGHT}
  23.         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  24.         echo 0 > ${LED3_BRIGHT}
  25.         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  26.         echo 0 > ${LED4_BRIGHT}
  27.         echo ${LED_TRG_TIMER} > ${LED1_TRIGGER}
  28.         echo ${LED_TRG_TIMER} > ${LED2_TRIGGER}
  29.         echo ${LED_TRG_TIMER} > ${LED3_TRIGGER}
  30.         echo ${LED_TRG_TIMER} > ${LED4_TRIGGER}
  31. else
  32.         if [ ${ONLINE} = 1 ]; then
  33.                 if [ ${CAPACITY} = 0 ]; then
  34.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  35.                         echo 0 > ${LED1_BRIGHT}
  36.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  37.                         echo 0 > ${LED2_BRIGHT}
  38.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  39.                         echo 0 > ${LED3_BRIGHT}
  40.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  41.                         echo 0 > ${LED4_BRIGHT}
  42.                 elif [ ${CAPACITY} -lt 25 ]; then
  43.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  44.                         echo 1 > ${LED1_BRIGHT}
  45.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  46.                         echo 0 > ${LED2_BRIGHT}
  47.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  48.                         echo 0 > ${LED3_BRIGHT}
  49.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  50.                         echo 0 > ${LED4_BRIGHT}
  51.                 elif [ ${CAPACITY} -lt 50 ]; then
  52.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  53.                         echo 1 > ${LED1_BRIGHT}
  54.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  55.                         echo 1 > ${LED2_BRIGHT}
  56.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  57.                         echo 0 > ${LED3_BRIGHT}
  58.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  59.                         echo 0 > ${LED4_BRIGHT}
  60.                 elif [ ${CAPACITY} -lt 75 ]; then
  61.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  62.                         echo 1 > ${LED1_BRIGHT}
  63.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  64.                         echo 1 > ${LED2_BRIGHT}
  65.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  66.                         echo 1 > ${LED3_BRIGHT}
  67.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  68.                         echo 0 > ${LED4_BRIGHT}
  69.                 elif [ ${CAPACITY} -lt 100 ]; then
  70.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  71.                         echo 1 > ${LED1_BRIGHT}
  72.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  73.                         echo 1 > ${LED2_BRIGHT}
  74.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  75.                         echo 1 > ${LED3_BRIGHT}
  76.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  77.                         echo 1 > ${LED4_BRIGHT}
  78.                 else
  79.                         echo err!
  80.                 fi

  81.         else
  82.                 if [ ${CAPACITY} = 0 ]; then
  83.                         echo ${LED_TRG_TIMER} > ${LED1_TRIGGER}
  84.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  85.                         echo 0 > ${LED2_BRIGHT}
  86.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  87.                         echo 0 > ${LED3_BRIGHT}
  88.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  89.                         echo 0 > ${LED4_BRIGHT}
  90.                 elif [ ${CAPACITY} -lt 25 ]; then
  91.                         echo ${LED_TRG_TIMER} > ${LED1_TRIGGER}
  92.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  93.                         echo 0 > ${LED2_BRIGHT}
  94.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  95.                         echo 0 > ${LED3_BRIGHT}
  96.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  97.                         echo 0 > ${LED4_BRIGHT}
  98.                 elif [ ${CAPACITY} -lt 50 ]; then
  99.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  100.                         echo 1 > ${LED1_BRIGHT}
  101.                         echo ${LED_TRG_TIMER} > ${LED2_TRIGGER}

  102.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  103.                         echo 0 > ${LED3_BRIGHT}
  104.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  105.                         echo 0 > ${LED4_BRIGHT}
  106.                 elif [ ${CAPACITY} -lt 75 ]; then
  107.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  108.                         echo 1 > ${LED1_BRIGHT}
  109.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  110.                         echo 1 > ${LED2_BRIGHT}
  111.                         echo ${LED_TRG_TIMER} > ${LED3_TRIGGER}
  112.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  113.                         echo 0 > ${LED4_BRIGHT}
  114.                 elif [ ${CAPACITY} -lt 100 ]; then
  115.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  116.                         echo 1 > ${LED1_BRIGHT}
  117.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  118.                         echo 1 > ${LED2_BRIGHT}
  119.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  120.                         echo 1 > ${LED3_BRIGHT}
  121.                         echo ${LED_TRG_TIMER} > ${LED4_TRIGGER}
  122.                 elif [ ${CAPACITY} -eq 100 ]; then
  123.                         echo ${LED_TRG_NONE} > ${LED1_TRIGGER}
  124.                         echo 1 > ${LED1_BRIGHT}
  125.                         echo ${LED_TRG_NONE} > ${LED2_TRIGGER}
  126.                         echo 1 > ${LED2_BRIGHT}
  127.                         echo ${LED_TRG_NONE} > ${LED3_TRIGGER}
  128.                         echo 1 > ${LED3_BRIGHT}
  129.                         echo ${LED_TRG_NONE} > ${LED4_TRIGGER}
  130.                         echo 1 > ${LED4_BRIGHT}
  131.                 else
  132.                         echo err!!!
  133.                 fi
  134.         fi
  135. fi

复制代码
  1. vi battrey_leds.sh
  2. chmod +x battrey_leds.sh
  3. cp battrey_leds.sh /usr/bin/
复制代码
  1. vi /etc/udev/rules.d/10-bat-leds.rules

  2. SUBSYSTEM=="power_supply", RUN+="/usr/bin/battrey_leds.sh"
复制代码
AXP209 检查到电量变化,就会上报power_supply事件,调用/usr/bin/battrey_leds.sh




回复

使用道具 举报

 楼主| 发表于 2014-9-1 16:21:38 | 显示全部楼层
本帖最后由 @allen 于 2014-9-15 14:38 编辑


2.led trigger 与驱动学习

1.http://www.cnblogs.com/soc-linux ... /06/30/2561031.html
2.http://www.cnblogs.com/soc-linux ... /07/10/2584337.html
3.http://blog.csdn.net/g_salamander/article/details/7946026
4.http://blog.csdn.net/yuanlulu/article/details/6438841

我是看这几篇学习的,超详细了,再结合以下几个
trigger 来玩玩,就能基本学会
linux-sunxi/drivers/leds/ledtrig-default-on.c
linux-sunxi/drivers/leds/ledtrig-timer.c
linux-sunxi/drivers/leds/ledtrig-cpu.c

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-1 17:14:13 | 显示全部楼层
占楼  


3.
回复 支持 反对

使用道具 举报

发表于 2014-9-2 11:21:51 | 显示全部楼层
这个东西好,用LED监控系统状态。
说实话,现在的LED用来显示ip的莫尔斯电码,有点多余。太黑客化了,呵呵
回复 支持 反对

使用道具 举报

发表于 2014-9-3 09:26:55 | 显示全部楼层
jerryli 发表于 2014-9-2 11:21
这个东西好,用LED监控系统状态。
说实话,现在的LED用来显示ip的莫尔斯电码,有点多余。太黑客化了,呵呵 ...

不错。支持一下。
回复 支持 反对

使用道具 举报

发表于 2014-12-19 19:50:09 | 显示全部楼层
楼主要是折腾一个sata硬盘灯就好了。有读写闪烁,长时间读写常亮。不读写,就灭。
不懂技术,相当伸手党啊。{:soso_e113:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-19 20:01:42 | 显示全部楼层
本帖最后由 @allen 于 2014-12-19 20:18 编辑
Emile 发表于 2014-12-19 19:50
楼主要是折腾一个sata硬盘灯就好了。有读写闪烁,长时间读写常亮。不读写,就灭。
不懂技术,相当伸手党啊 ...

有 sata 的读写 trigger 新的固件已经默认编译成模块
回复 支持 反对

使用道具 举报

发表于 2014-12-19 20:08:48 | 显示全部楼层
@allen 发表于 2014-12-19 20:01
有 sata 的读写 trigger 已经新的固件默认编译成模块

喔。版主大大,我用的是debian-server。请问该这么改绿色led为硬盘灯呢。搜索了论坛没发现有这个。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-19 20:24:46 | 显示全部楼层
Emile 发表于 2014-12-19 20:08
喔。版主大大,我用的是debian-server。请问该这么改绿色led为硬盘灯呢。搜索了论坛没发现有这个。。 ...

查了下,内核有这个驱动,debian-server 默认没编译进内核或模块,需要自己编译出来。驱动:drivers/leds/ledtrig-disk.c        
回复 支持 反对

使用道具 举报

发表于 2014-12-19 20:36:39 | 显示全部楼层
@allen 发表于 2014-12-19 20:24
查了下,内核有这个驱动,debian-server 默认没编译进内核或模块,需要自己编译出来。驱动:drivers/leds ...

十分感谢。
编译。。没编译过,我自己摸索吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-26 11:58 , Processed in 0.028151 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部