gpt4 book ai didi

linux - 树莓派 gpio 命令行 sysfs 不设置 gpio 输出高

转载 作者:太空狗 更新时间:2023-10-29 11:20:56 31 4
gpt4 key购买 nike

所以我一直在尝试通过使用命令行和 sysfs 写入和读取 /sys/class/gpio/ 让我的 Raspberry Pi GPIO 正常运行。根据以下教程,我无法复制将 GPIO 设置为输出并将其值设置为高值 (1)。

this one

and this one

我期望发生的是当我运行以下命令时

$ echo 18 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio18/direction
$ echo 1 > /sys/class/gpio/gpio18/value

我看到了以下命令的结果

$ cat /sys/class/gpio/gpio18/value
1

澄清一下,我没有连接到 GPIO 引脚,我真的只对读回输出值感兴趣并使其与我设置的值相同。对于它的值(value),我正在尝试为 Pi 的 GPIO 引脚制作我自己的 Ruby 驱动程序,并且我正在检查我是否能够读回我设置的相同 gpio 值(如果它是输出)。

以下是一个shell session 作为证明。

权限和操作系统版本控制

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.34+ #1110 Mon Apr 16 14:51:42 BST 2018 armv6l GNU/Linux
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch
pi@raspberrypi:~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

通用输入接口(interface) 18

pi@raspberrypi:~ $ cd /sys/class/gpio/
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $ echo 18 > export
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpio18 gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio18/

GPIO 18 的权限和组

pi@raspberrypi:/sys/class/gpio/gpio18 $ stat value 
File: value
Size: 4096 Blocks: 0 IO Block: 4096 regular file
Device: fh/15d Inode: 16223 Links: 1
Access: (0770/-rwxrwx---) Uid: ( 0/ root) Gid: ( 997/ gpio)
Access: 2018-05-01 00:41:52.493284419 +0000
Modify: 2018-05-01 00:41:52.493284419 +0000
Change: 2018-05-01 00:41:52.500207389 +0000
Birth: -

尝试将它设置为 out 和 high

pi@raspberrypi:/sys/class/gpio/gpio18 $ ls -a
. .. active_low device direction edge power subsystem uevent value
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo out > direction
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo 1 > value

这是我希望值文件的内容为 1

pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo in > direction
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
in
none
0

更多检查

pi@raspberrypi:/sys/class/gpio/gpio18 $ echo high > direction 
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo low > direction
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
out
none
0

对 GPIO 23 进行同样的尝试

pi@raspberrypi:/sys/class/gpio/gpio18 $ cd ..
pi@raspberrypi:/sys/class/gpio $ echo 23 > export
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpio18 gpio23 gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio23/

权限和组

pi@raspberrypi:/sys/class/gpio/gpio23 $ stat value
File: value
Size: 4096 Blocks: 0 IO Block: 4096 regular file
Device: fh/15d Inode: 16238 Links: 1
Access: (0770/-rwxrwx---) Uid: ( 0/ root) Gid: ( 997/ gpio)
Access: 2018-05-01 01:26:37.121782992 +0000
Modify: 2018-05-01 01:26:37.121782992 +0000
Change: 2018-05-01 01:26:37.126033971 +0000
Birth: -

尝试将它设置为 out 和 high

pi@raspberrypi:/sys/class/gpio/gpio23 $ ls -a
. .. active_low device direction edge power subsystem uevent value
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo out > direction
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo 1 > value

这是我希望值文件的内容为 1

pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value 
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo in > direction
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value
0
in
none
0

更多检查

pi@raspberrypi:/sys/class/gpio/gpio23 $ echo high > direction 
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio23 $ echo low > direction
pi@raspberrypi:/sys/class/gpio/gpio23 $ cat active_low direction edge value
0
out
none
0

清理

pi@raspberrypi:/sys/class/gpio/gpio23 $ cd ..
pi@raspberrypi:/sys/class/gpio $ echo 18 > unexport
pi@raspberrypi:/sys/class/gpio $ echo 23 > unexport
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $

这是全新安装的 NOOBS 以及在其上运行的第一条命令。似乎所有其他 sysfs 功能都按预期工作,除了 GPIO 的值文件。我对这种实际行为与我的预期行为不同的唯一解释是,要么有继承的上拉/下拉将输出保持在某个值,而没有下沉到某些电路(这对我来说仍然没有意义但是我以前错了)或者我的期望完全错误,值文件没有反射(reflect)引脚设置的实际物理电压水平。

也许一些更有用的信息是我不想使用命令行实用程序来执行此操作,我只想使用我正在构建的驱动程序的文件系统。话虽这么说,我用过

gpio write 18 1

但是读取GPIO 18的值文件内容时,结果和上面一样。

最佳答案

这是一个糟糕的 Raspberry Pi。我刚收到一个新的。这是一个 session 。

pi@raspberrypi:~ $ cd /sys/class/gpio/
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $ echo 18 > export
pi@raspberrypi:/sys/class/gpio $ ls -a
. .. export gpio18 gpiochip0 unexport
pi@raspberrypi:/sys/class/gpio $ cd gpio18/
pi@raspberrypi:/sys/class/gpio/gpio18 $ ls -a
. .. active_low device direction edge power subsystem uevent value
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
in
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo out > direction
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
out
none
0
pi@raspberrypi:/sys/class/gpio/gpio18 $ echo 1 > value
pi@raspberrypi:/sys/class/gpio/gpio18 $ cat active_low direction edge value
0
out
none
1

关于linux - 树莓派 gpio 命令行 sysfs 不设置 gpio 输出高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50120778/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com