通过 GPIO 控制 Radxa 的 LED

作者 huhamhire,暂无评论,2014年2月6日 13:36 折腾历程

在 Radxa Rock 官方的配置说明中,Radxa 板子上带了三个可编程控制的 LED 指示灯,正式版中分别为红、绿、蓝三个,并依次排列在电源开关附近。在启动默认的 android 系统的时候,也会亮起蓝色的指示灯。那要如何在 Linux 下控制这些 LED 呢?

首先来看 Radxa 官方的 Wiki 给出的一段演示脚本,用于控制绿色 LED 闪烁:


 1 #!/bin/sh
 2 
 3 # enable the gpio 172 -> green led
 4 echo 172 > /sys/class/gpio/export
 5 
 6 # set the direction to output
 7 echo "out" > /sys/class/gpio/gpio172/direction
 8 while true;
 9 do
10     echo 0 > /sys/class/gpio/gpio172/value #led on
11     sleep 1
12     echo 1 > /sys/class/gpio/gpio172/value #led off
13     sleep 1
14 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 的控制引脚并不困难。

rk_led_gpio

从设计图中,可以比较容易的找到,这些信息。绿色的 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

rk_led_pin

同样,可以很容易的找到这几个引脚的定义,以及它们编号的计算公式,然后只需要将 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

写入下面的内容:


 1 #!/bin/bash
 2 
 3 for LED_IO in 172 175
 4 do
 5     echo $LED_IO > /sys/class/gpio/export
 6     echo "out" > /sys/class/gpio/gpio$LED_IO/direction
 7     echo 0 > /sys/class/gpio/gpio$LED_IO/value
 8     echo $LED_IO > /sys/class/gpio/unexport
 9 done

这里需要说明的是,由于连接线路上的不同,蓝绿 LED 与红色 LED 在发光控制的数值参数上正好相反。

rk_led_gb rk_led_red

蓝绿 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 熄灭。

关键词:ARM , Radxa , 开发板
登录后进行评论