雷竞技注册
项目

如何在BeagleBone上使用数字I/O

2015年8月17日通过纳什赖利

Beaglebone Black是Beaglebone开源硬件平台的最新版本。这款电路板售价不到50美元,包括以太网、图形处理、4Gb的非易变存储器,以及支持USB、HDMI和Beaglebone自定义I/O插件(称为“斗篷”)的端口。下面是如何运行一些简单的命令来在电路板上切换数字I/O !

使用Beaglebone Black上的通用I/O开始使用这个强大的硬件平台!

推荐的水平

中间

出口只

操纵Beaglebone的I/O的最简单方法是通过bash shell。为什么?你可能听说过,在Linux上,一切都是一个文件。bash shell提供了一种在Linux系统中与文件交互的简单方法。因为Beaglebone Black运行Linux,所以这条规则也不例外——即使是Beaglebone上的GPIO也是文件!只是需要花一点功夫来挖掘它们。使用GPIO的第一步是出口我们选择的引脚作为GPIO。这非常简单,使用'echo'命令进行简单的文件写入:

$ echo 67 > /sys/class/gpio/export

这个命令的意义是什么?我们的董事会什么事也没发生!好吧,这并不完全正确——只是不明显发生了什么。Beaglebone是基于TI Sitara处理器构建的。像大多数现代处理器一样,Sitara家族有大量的引脚与外部世界进行接口。这些引脚中的大多数都可以方便地执行多种功能。这些功能可以非常简单,比如我们马上要设置的GPIO功能,也可以非常复杂,比如PCIe总线或SGMII网络的一部分。

唯一的折衷是,您不能一次执行一个大头针的所有功能。相反,这些大头针是多路复用进入处理器内部总线的端口。这意味着你必须选择你想要你选择的pin执行什么功能。' echo '命令将数字67写入文件'/sys/class/gpio/export'中。这告诉系统,我们想要使用主板上的pin 67作为GPIO,处理器应该在整个系统中传播这些设置。这方面的具体细节非常复杂,超出了本文的范围。你会注意到,一旦你运行了这个命令,目录/sys/class/gpio/'有一个额外的文件夹:

$ ls /sys/class/gpio export gpio67 gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport

转变方向

当我们在该文件中“echo”67时,我们告诉系统导出GPIO_67的设置。它的响应是建立文件夹“gpio67”。当我们检查这个的内容时,我们得到以下结构:

$ ls -al /sys/class/gpio/gpio67 total 0 drwxr-xr-x 3 root root 0 Jan 1 00:14。drwxr-xr-x 7 root root 0 Jan 1 00:00 ..-rw-r——r——1 root root 4096 Jan 1 00:42 active_low -rw-r——r——1 root root 4096 Jan 1 00:14 direction -rw-r——r——1 root root 4096 Jan 1 00:43 edge drwxr-xr-x 2 root root 0 Jan 1 00:42 power lrwxrwx 1 root root 0 Jan 1 00:41 subsystem -> ../../../../class/gpio -rw-r——r——1 root root 4096 Jan 1 00:14 uevent -rw-r——r——1 root root 4096 Jan 1 00:20的值

beaglebone1.zip

我们特别感兴趣的是新文件夹“gpio67”中有两个文件:第一个是“方向”文件。如果你运行' $ cat /sys/class/gpio/gpio67/direction '命令,你应该看到如下输出:

$ cat /sys/class/gpio/gpio67/direction in

如果您熟悉任何裸金属嵌入式处理器(即PIC、AVR、HCS08),那么您一定听说过一种名为数据方向寄存器,并允许我跳过这段的其余部分。

对于那些坚持我们的人:数据方向寄存器规定了数据可以以何种方式流出GPIO端口。只有两个选择,要么进,要么出。一般来说,为一个特定的GPIO引脚设置这个寄存器涉及到找到正确的寄存器,在那个寄存器中找到正确的位,然后用C写一个漂亮的'and'语句来设置或清除那个位。

Beaglebone不是这样的!当我们导出GPIO_67时,Beaglebone创建了这个漂亮的小文件来读取处理器的数据方向寄存器,并以易于读取的格式将其返回给我们。我们得到两个简单的值:'in'或'out',而不是一个复杂的十六进制混合。正如您可能已经从前面的'cat'命令猜到的,这个寄存器的默认状态是'in'—它可以将该引脚上的数据读入处理器,但它不会影响GPIO_67的状态。让我们改变它,这样我们就可以在现实世界中看到这个引脚的输出了!我们可以通过运行另一个'echo'命令,并使用'cat'来验证它是否有效:

$ echo out > /sys/class/gpio/gpio67/direction out .输出说明

太棒了!我们已经将这个I/O的数据方向从输入改为输出。现在让我们让它做点什么吧!

有一盏灯,它有时会熄灭

下一步将要求你建立一个真正简单的电路使用一个1-kOhm电阻和你最喜欢的颜色的LED。你需要将LED的一个引脚连接到Beaglebone上头部P8的引脚2,另一端进入任何一排无焊接面包板。将电阻的一个引脚连接到LED插入的同一面包板排,另一个进入GPIO_67 -你可以在头P的引脚8上找到。

原理图

接线图

运行以下命令,如果一切都正确地连接在一起,您将看到LED用一个打开,用另一个关闭。

$回声1 > / sys /类/ gpio / gpio67 /值$回声0 > / sys /类/ gpio / gpio67 /值

这与最后一组写入' /sys/class/gpio/gpio67/value '的原理完全相同——命令之间的唯一区别是写入每个文件的值是什么。与更基本的嵌入式系统相比较,“value”文件相当于端口数据输出寄存器。通过写一个“1”到它,你设置引脚到一个高3.3V的电压。写一个“0”将它设置为低电压,并将引脚拉到地。

包装-一个简单的闪烁脚本

我们可以将所有这些命令连接到一个非常简单的脚本中,以每半秒切换LED开关:

# !/bin/bash if [ ! -e /sys/class/gpio/gpio67/value ] then echo 67 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio67/direction fi while [ True ] do echo 1 > /sys/class/gpio/gpio67/value usleep 500000 echo 0 > /sys/class/gpio/gpio67/value usleep 500000 done

beaglebone2.zip

这个脚本将永远运行—要取消它,您需要按“Ctrl+c”回到Linux终端。您可以从上面的摘录中将其复制到Beaglebone Black中,或者使用git进行pull操作这个存储库

现在你明白了!在Beaglebone Black上切换gpio的简单方法。谁知道会这么容易?

你把你的GPIO绑定到什么上了?什么酷?请留下评论,让我们知道你正在阅读的Beaglebones!

自己试试这个项目吧!BOM。

1评论