yaboPP电子
项目

如何在BeagleBone上使用数字输入/输出

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

Beaglebone Black是Beaglebone开源硬件平台的最新版本。不到50美元,这块板就包含了以太网、图形处理、4Gb的非易失性存储,以及支持USB、HDMI和Beaglebone的定制I/O附加组件(称为“capes”)的端口。这里是如何运行一些简单的命令来切换板上的数字I/O !

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

推荐的水平

中间的

仅出口

操纵Beaglebone的I / O的最简单方法是通过BASH shell。为什么?您可能听说过,在Linux上,一切都是一个文件。bash shell提供了一种简单的方法来与Linux系统中的文件进行接口。因为Beaglebone Black运行Linux,所以这条规则也不例外——甚至Beaglebone上的GPIO也是文件!只需要花点功夫就能查清楚。使用GPIO的第一步是出口我们选择的别针作为GPIO。这很简单,涉及使用“echo”命令写入简单文件:

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

这个命令的意义是什么?我们的董事会什么事也没发生!嗯,这并不完全正确——只是不太明显发生了什么。比格尔博恩犬是围绕一个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'-ed 67进入该文件时,我们向系统导出了GPIO_67的设置。它通过构建文件夹'GPIO67'来响应。当我们检查此内容时,我们得到以下结构:

$ ls -al / sys / class / gpio / gpio67总计0 drwxr-xr-x 3根root 0 00:14。Drwxr-xr-x 7根root 0 1月1日00:00 .. -rw-r  -  r-- 1根root 4096 1月1日00:42 Active_Low -RW-R  -  R-- 1根根4096 1月1日00:14方向-rw-r  -  r-- 1根root 4096 1月1日00:43边缘Drwxr-xr-x 2根root 0 1月1日00:42电源lrwxrwxrwx 1根root 0 jay 1 00:41子系统 -> ../../../../Class/gpio -rw-r  -  r-- 1根root 4096 1月1日00:14 UEVENT -RW-R  -  R-- 1根root 4096 1月1日00:20价值

beaglebone1.zip

新文件夹中有两个文件,'GPIO67',对我们特别感兴趣:第一个是“方向”文件。如果您运行命令`$ cat / sys / class / gpio / gpio67 /方向`,则应查看此输出:

$ CAT / SYS / Class / GPIO / GPIO67 /方向

如果您熟悉任何裸机嵌入式处理器(即Pic,AVR,HCS08),您将听到一个名为“的寄存器”数据方向寄存器,并请允许我跳过这段话的其余部分。

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

不是那种beaglebone!当我们导出GPIO_67时,BeagleBone创建了这个很好的小文件以读取处理器的数据方向寄存器,并以易于阅读的格式将其送回我们。而不是十六进制的复杂捣碎,我们得到两个简单的值:'进出'或'out'。正如您可能已经从早期的“CAT”命令中猜到的那样,此寄存器的默认状态为“IN” - 它可以在该引脚上的数据中读取到处理器中,但它不会影响GPIO_67的状态。让我们改变它,所以我们可以看到PIN在现实世界中的输出!我们可以通过运行另一个'echo'命令,并使用'cat'来验证它的工作原理:

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

惊人的!我们已经将此I / O的数据方向从输入到输出更改为输出。现在让我们做点什么!

有一个光明,有时会出去

下一步需要你用一个1库姆电阻和你最喜欢的LED颜色来构建一个非常简单的电路。您需要将LED的一个引脚连接到Beaglebone上的头P8的引脚2,并将另一端连接到无焊料面包板的任何一行。连接电阻的一个引脚到LED插入的同一面包板行,和另一个到GPIO_67 -你可以在头P的引脚8上发现。

原理图,示意图

接线图

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

$ echo 1> / sys / class / gpio / gpio67 /值$ echo 0> / sys / class / gpio / gpio67 /值

这与最后一组写到' /sys/class/gpio/gpio67/value '的操作原理完全相同——命令之间唯一的区别是写入每个文件的值。为了绘制另一种更基本的嵌入式系统并行,“值”文件可与端口数据输出寄存器相媲美。通过在它上面写一个“1”,你将引脚设置为3.3V的高电压。写入“0”将其设置为低电压,并将引脚拉向地面。

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

我们可以将所有这些命令一起链接到一个真正简单的脚本中,以便每隔半秒打开和关闭LED:

#!/ bin / bash如果[!-e / sys / class / gpio / gpio67 / value]然后回声67> / sys / class / gpio / export> / sys / class / gpio / gpio67 /方向fi [true]做回声1> / sys /Class / GPIO / GPIO67 / VALUE USEP 500000 ECHO 0> / SYS / Class / GPIO / GPIO67 / VALUE USEP 500000完成

beglebone2.zip.

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

你有它!在Beaglebone黑色上切换GPIO的简单方法。谁知道它可能这么容易?

你把你的gpio绑在了什么?做了什么酷?给我们留下评论,让我们知道你的猎犬阅读了什么!

为自己提供这个项目!BOM。

1评论