Работа с GPIO: различия между версиями

Нет описания правки
Строка 67: Строка 67:
'''Остановка драйверов может привести к неожиданному поведению контроллера'''. Желаемый gpio свободен до следующей перезагрузки.
'''Остановка драйверов может привести к неожиданному поведению контроллера'''. Желаемый gpio свободен до следующей перезагрузки.


==Интерфейс sysfs в Linux==<!--T:6-->
==Работа из Bash==<!--T:6-->


<!--T:7-->
<!--T:7-->
GPIO в Linux поддерживаются через sysfs-интерфейс.
В настоящий момент, для работы с gpio в userspace доступны 2 интерфейса: ''sysfs'' и ''chardev'' (начиная с версии ядра 4.8).
 
<!--T:7-->
Различия между ''chardev'' и ''sysfs'' хорошо описаны в [https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ этой статье]. Sysfs имеет статус deprecated, поэтому, по возможности, стоит работать через chardev.
 
===Интерфейс sysfs===<!--T:6-->


<!--T:8-->
<!--T:8-->
Строка 157: Строка 162:
#:<pre>root@wirenboard:~# echo 0 > /sys/class/gpio/gpio32/value</pre>
#:<pre>root@wirenboard:~# echo 0 > /sys/class/gpio/gpio32/value</pre>


===Работа с прерываниями===<!--T:22-->
====Работа с прерываниями====<!--T:22-->


<!--T:23-->
<!--T:23-->
Строка 191: Строка 196:
См. также [http://elinux.org/GPIO elinux.org]
См. также [http://elinux.org/GPIO elinux.org]


==Работа через официальное ПО==<!--T:29-->
===Работа через chardev===<!--T:29-->
Представленный в ядре 4.8 интерфейс chardev имеет C/Python библиотеку libgpiod и userspace-утилиты для работы с gpio. Исходный код библиотеки и документация доступны в [https://github.com/brgl/libgpiod репозитории libgpiod].
 
<!--T:28-->
Утилиты распространяются в составе debian-пакетов ''gpiod'' и ''libgpiod-dev'' для debian buster и новее. К сожалению, для stretch пакетов в репозитории и бекпортах нет.
 
<!--T:28-->
Если нужно установить libgpiod в debian stretch, можно воспользоваться сторонними репозиториями (например, [https://github.com/rcn-ee/repos этим]). '''Используйте сторонние репозитории на свой страх и риск; компания WirenBoard не контролирует их содержимое'''.


==Работа из python==<!--T:29-->
===Работа из python===<!--T:29-->


Для управления gpio из python был написан модуль wb_common.gpio, представляющий собой обёртку вокруг sysfs. Исходный код доступен [https://github.com/wirenboard/wb-common/blob/master/wb_common/gpio.py на нашем github.]
Для управления gpio из python был написан модуль wb_common.gpio, представляющий собой обёртку вокруг sysfs. Исходный код доступен [https://github.com/wirenboard/wb-common/blob/master/wb_common/gpio.py на нашем github.]
wb_editors
556

правок