LED驅(qū)動(dòng)
我們以imx6ull pro開發(fā)板的板載led為例,其板載了一個(gè)可控制的Led2,原理圖如下:
LED2進(jìn)行上拉電阻,另外一個(gè)管腳接到了GPIO5_3
,因此GPIO5_3
輸出低電平即可點(diǎn)亮LED。下面說明如何控制該LED。
內(nèi)核配置:
Device Drivers --- >
[*] LED Support --- >
< * > LED Class Support
< * > LED Support for GPIO connected LEDs
[*] LED Trigger support --- >
我們的LED驅(qū)動(dòng)是基于GPIO的,因此需要打開內(nèi)核LED驅(qū)動(dòng)的支持。
內(nèi)核有兩個(gè)對應(yīng)的驅(qū)動(dòng)程序,分別是GPIO驅(qū)動(dòng)和 LED驅(qū)動(dòng) , 基于GPIO的LED驅(qū)動(dòng)調(diào)用了GPIO驅(qū)動(dòng)導(dǎo)出的函數(shù) 。
LED驅(qū)動(dòng)實(shí)現(xiàn)代碼請參考:drivers/leds/leds-gpio.c,它實(shí)現(xiàn)了一個(gè)leds類,通過sysfs接口對LED進(jìn)行控制。
設(shè)備樹:
leds{
compatible = "gpio-leds";
led2{
label = "led2";
gpios = < &gpio5 3 GPIO_ACTIVE_LOW >;//GPIO_ACTIVE_LOW,代表低電平點(diǎn)亮LED
default-state = "on";
};
}
在設(shè)備樹中創(chuàng)建一個(gè)名為leds
的節(jié)點(diǎn),compatible
為"gpio-leds"
,這樣可以匹配到leds-gpio.c
的驅(qū)動(dòng)。
然后創(chuàng)建一個(gè)子節(jié)點(diǎn),名為led2
。需要填三個(gè)屬性:label
、gpios
和default-state
。
label :lable是出現(xiàn)在sys目錄下的名字,即生成/sys/class/leds/led2
gpios :前兩個(gè)值指定了該LED所連接的GPIO。第三個(gè)值可填GPIO_ACTIVE_HIGH
或GPIO_ACTIVE_LOW
。GPIO_ACTIVE_HIGH
代表高電平點(diǎn)亮LED,GPIO_ACTIVE_LOW
代表低電平點(diǎn)亮LED。
這里注意了,gpios屬性的第三個(gè)參數(shù),代表該gpio點(diǎn)亮LED是需要高電平還是低電平,注意是點(diǎn)亮LED,細(xì)品
default-state :on代表默認(rèn)情況LED是點(diǎn)亮的,off代表默認(rèn)LED熄滅
這里又注意了,當(dāng)defalut-state為on時(shí),實(shí)際上gpio輸出的電平,就是gpios屬性中指定的點(diǎn)亮LED時(shí)的電平
設(shè)備樹配置好后,編譯并更換dtb,然后重啟開發(fā)板??梢钥吹?code>/sys/class/leds/led2目錄:
/sys/class/leds/led2/
目錄下有一個(gè)brightnes
文件,可以通過echo``cat
的方式查看和修改LED的亮度。因?yàn)長ED連接在GPIO上,所以亮度只有0和1,在本文示例的led2中,0表示點(diǎn)亮,1表示熄滅。
點(diǎn)亮LED:
echo 0 > /sys/class/leds/led2/brightness
熄滅LED:
echo 1 > /sys/class/leds/led2/brightness
-
led
+關(guān)注
關(guān)注
242文章
23278瀏覽量
660940 -
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1840瀏覽量
85296 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209536 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5052瀏覽量
97494
發(fā)布評論請先 登錄
相關(guān)推薦
評論