Командная строка Raspberry Pi gpio sysfs не устанавливает высокий уровень вывода gpio

Итак, я пытался заставить свой Raspberry Pi GPIO вести себя правильно, записывая и читая /sys/class/gpio/ с помощью командной строки и sysfs. Основываясь на следующих руководствах, я не могу воспроизвести настройку GPIO для вывода и установку высокого значения (1).

Вот этот

и этот

Я ожидаю, что когда я выполню следующие команды

$ 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, меня действительно интересует только чтение выходного значения обратно и то, чтобы оно было таким же, как то, что я его установил. Что бы это ни стоило, я пытаюсь создать свой собственный драйвер Ruby для контактов GPIO Pi, и я проверяю, могу ли я прочитать то же значение gpio, которое я установил, если это вывод.

Ниже приводится сеанс оболочки в качестве доказательства.

Разрешения и версия ОС

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

GPIO 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: -

Попробуйте установить его на высокий и высокий уровень

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: -

Попробуйте установить его на высокий и высокий уровень

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. Единственное объяснение, которое у меня есть для того, чтобы это фактическое поведение отличалось от моего ожидаемого, состоит в том, что либо есть наследование подтягиваний / спусков, которые удерживают выходной сигнал до определенного значения без приемника в некоторые схемы (что все еще не имеет смысла для меня, но Я ошибался раньше) ИЛИ, что мои ожидания совершенно неверны и что файл значений не отражает фактический уровень физического напряжения, на который установлен вывод.

Возможно, еще одна полезная информация заключается в том, что я не хочу использовать для этого утилиту командной строки, я хотел бы работать только с файловой системой для моего драйвера, который я создаю. При этом я использовал

gpio write 18 1

но результаты были такими же, как и выше, при чтении содержимого файла значений для GPIO 18.

Вы говорите, что контакты установлены идеально, просто чтение значения с контакта out не повторит значение, которое вы ему написали?

that other guy 01.05.2018 19:36

На самом деле я вообще не измерял напряжение на контакте, и теперь думаю, что должен. Тем не менее, я бы подумал, что это будет отражать уровень напряжения на контакте. Но да, он не повторяет то, что я ему написал.

lucaswinningham 01.05.2018 19:39

Таким образом, в ответ на фактический уровень напряжения на выходном контакте, я измерил 0 В при установке высокого и низкого уровня на выходе, а также при установке на входе. Опять же, у меня нет других цепей, подключенных к контакту. Это касается как GPIO 18, так и 23, и, как и многих других сообщений на аналогичную тему, у меня нет ошибочных номеров GPIO и номеров контактов.

lucaswinningham 02.05.2018 00:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
965
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это был плохой Raspberry Pi. Я только что получил новый. Это сеанс.

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

Другие вопросы по теме