嵌入式Linux开发|点亮那颗LED灯

在嵌入式开发中,LED常用于系统状态指示。在单片机中,控制LED通过配置GPIO即可,但在Linux系统中则更为复杂,可以通过gpiolib、sysfs或leds-gpio驱动来控制。对于复杂的LED效果如闪烁、呼吸,leds-gpio驱动更为适用。设备树中的配置LED涉及到label、gpios、default-trigger等属性,以实现不同模式的LED控制。
摘要由CSDN通过智能技术生成

做嵌入式开发离不开LED,小小的LED可以作为系统状态指示,为调试带来方便。下面是典型的LED控制电路:

可以看到,通过控制AA27和AF12这两个引脚达到控制LED1和LED2这两个LED。

如果是单片机开发,控制一颗LED的步骤比较的简单、直接,直接配置GPIO功能,输出高、底电平就可以控制LED了。

相对来说,在Linux系统下,想要控制一颗LED,就比较费周折了,有下面几种方式:

通过gpiolib子系统控制IO来驱动LED。

通过sys子系统控制IO来驱动LED,即通过/sys/class/gpio/来控制GPIO。

通过led子系统下leds-gpio驱动来控制LED。

第1、2中都是通过直接控制GPIO来达到控制LED,这比较适合较简单的应用场景,比如仅仅控制LED的打开、关闭。如果想实现LED的呼吸、闪烁,并且是以不阻塞主程序的方式运行,那么,LED的控制就相对来说比较困难了。这时,就应该选择使用leds-gpio驱动的方式。

内核Documentation/devicetree/bindings/leds/leds-gpio.txt详细介绍了,如何在设备树中配置LED。每个LED都是gpio-leds驱动的一个子节点,并说明了子节点的各种属性:

label:定义LED的名字,比如sys-heartbeat;

gpios:定义LED关联的GPIO,并说明了gpio的有效状态。

linux,default-trigger:定义了LED的触发方式,典型的有heartbeat、timer等。

default-state:定义LED的默认状态。

等等。

下面设备树中定义了两颗LED:sys-heartbeat、net-state。

sys-heartbeat定义为心跳模式,表示当前系统1min以来的负载状态;

user-led0定义为timer模式,表示LED以一定的,可调的频率闪烁。

compatible = "gpio-leds";

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_gpio_led>;

led@0 {

label = "sys-heartbeat";

gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "heartbeat";

default-state = "off";

};

led@1 {

label = "user-led0";

gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "timer";

default-state = "off";

};

compatible = "gpio-leds";

pinctrl-names = "default";

pinctrl-0 = <&pinctrl_gpio_led>;

led@0 {

label = "sys-heartbeat";

gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "heartbeat";

default-state = "off";

};

led@1 {

label = "user-led0";

gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;

linux,default-trigger = "timer";

default-state = "off";

};

user-led0和sys-heartbeat两个节点的位于/sys/class/leds。下面以user-led0举例如何控制led。

brightness:表示LED的亮度,对于普通发光二极管LED,只有两个状态:>0,LED亮,=0,LED灭;

trigger:表示LED的触发方式,当前方式是timer。

delay_on/off:表示trigger为timer时,led亮灭的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值