通过 GPIO 控制 Radxa 的 LED
在 Radxa Rock 官方的配置说明中,Radxa 板子上带了三个可编程控制的 LED 指示灯,正式版中分别为红、绿、蓝三个,并依次排列在电源开关附近。在启动默认的 android 系统的时候,也会亮起蓝色的指示灯。那要如何在 Linux 下控制这些 LED 呢?
首先来看 Radxa 官方的 Wiki 给出的一段演示脚本,用于控制绿色 LED 闪烁:
#!/bin/sh
# enable the gpio 172 -> green led
echo 172 > /sys/class/gpio/export
# set the direction to output
echo "out" > /sys/class/gpio/gpio172/direction
while true;
do
echo 0 > /sys/class/gpio/gpio172/value #led on
sleep 1
echo 1 > /sys/class/gpio/gpio172/value #led off
sleep 1
done
从这个演示程序中可以看到 Radxa 的这个 LED 直接连接在了 GPIO 上,利用 Linux 系统下 /sys/class/gpio 这个文件接口进行操作就可以实现简单的控制功能。当然,如果有比较高级的需求的话,建议还是需要编写相关的驱动程序来操作 GPIO,不过这回就先不折腾驱动程序这部分了。
其实 LED 的控制非常简单,只需要控制对应的 GPIO 管脚电平高低即可控制其发光状态。为了控制这些管脚,需要了解的最主要信息无非就是 LED 对应的控制引脚编号。由于官方已经给出了这部分的设计图 http://dl.radxa.com/rock/docs/hw/RADXA_ROCK_schematic_20131025.pdf,所以要确定 LED 的控制引脚并不困难。
从设计图中,可以比较容易的找到,这些信息。绿色的 LED 连接在了 GPIO0_B4 位置,蓝色 LED 连接在了 GPIO0_B6,而红色的则由 GPIO0_B7 来控制。接下来就需要计算这些引脚在 Linux 系统下对应的编号,首先需要参考到 rk3188 内核源代码中关于 GPIO 这部分的头文件,https://github.com/Galland/Linux3188/blob/master/arch/arm/mach-rk30/include/mach/gpio.h。
同样,可以很容易的找到这几个引脚的定义,以及它们编号的计算公式,然后只需要将 PIN_BASE = 160 以及 NUM_GROUP = 32 代入计算即可得出相应的引脚编号,这部分数据可以参考 http://hwswbits.blogspot.com/2013/10/bitbanging-radxa-rock-gpios.html。
简单的计算后,可以得出绿色、蓝色、红色 LED 的引脚编号分别为 172、174 以及 175。然后只需要写一个脚本就可以实现一些简单的控制,比如下面我就可以通过一个简单的脚本实现开机后自动熄灭红色 LED,并亮起绿色 LED 的功能。
首先创建脚本控制 LED 的脚本:
sudo vim /usr/local/bin/power-led-on.sh
写入下面的内容:
#!/bin/bash
for LED_IO in 172 175
do
echo $LED_IO > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$LED_IO/direction
echo 0 > /sys/class/gpio/gpio$LED_IO/value
echo $LED_IO > /sys/class/gpio/unexport
done
这里需要说明的是,由于连接线路上的不同,蓝绿 LED 与红色 LED 在发光控制的数值参数上正好相反。
蓝绿 LED 使用 0 输出控制点亮,1 控制熄灭;而红色 LED 则使用 1 控制点亮,0 控制熄灭。因而这里的操作就可以很方便的写在同一段循环体内。
接下来,为脚本文件赋予执行权限:
sudo chmod +x /usr/local/bin/power-led-on.sh
然后编辑系统启动时的相关操作:
sudo vim rootfs/etc/rc.local
在 exit 0 之前添加以下内容:
/usr/local/bin/power-led-on.sh
在做完上面的这些设置以后,重启 Radxa 后,就可以看到板子上会亮起绿色 LED,并且红色 LED 熄灭。
参考:
- https://blog.huhamhire.com/viewpost-1109.html