Работа с GPIO: различия между версиями
Vdromanov (обсуждение | вклад) |
Vdromanov (обсуждение | вклад) |
||
Строка 204: | Строка 204: | ||
<!--T:28--> | <!--T:28--> | ||
Если нужно установить libgpiod в debian stretch, можно воспользоваться сторонними репозиториями (например, [https://github.com/rcn-ee/repos этим]). '''Используйте сторонние репозитории на свой страх и риск; компания WirenBoard не контролирует их содержимое'''. | Если нужно установить libgpiod в debian stretch, можно воспользоваться сторонними репозиториями (например, [https://github.com/rcn-ee/repos этим]). '''Используйте сторонние репозитории на свой страх и риск; компания WirenBoard не контролирует их содержимое'''. | ||
<!--T:28--> | |||
Для работы с gpio из bash в пакете ''gpiod'' поставляются следующие утилиты: | |||
* gpiodetect - информация обо всех банках gpio в системе | |||
* gpioinfo - подробная информация обо всех линиях gpio определённого банка | |||
* gpioget <чип> <линия> - возвращает значение определённого gpio | |||
* gpioset <чип> <линия1>=<значение1> <линия2>=<значение2> - устанавиливает состояние на определенные линии gpio | |||
* gpiofind <название> - возвращает номер gpio | |||
* gpiomon - отслеживание событий gpio | |||
<!--T:28--> | |||
Примеры использования gpiod можно посмотреть в [https://www.acmesystems.it/gpiod] и [https://github.com/brgl/libgpiod] | |||
===Работа из python===<!--T:29--> | ===Работа из python===<!--T:29--> | ||
<!--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.] | ||
Модуль позволяет работать с gpio в синхронном и асинхронном (с регистрацией коллбэков) режимах. | Модуль позволяет работать с gpio в синхронном и асинхронном (с регистрацией коллбэков) режимах. | ||
==Прямое обращение через память процессора==<!--T:29--> | ===Прямое обращение через память процессора===<!--T:29--> | ||
<!--T:30--> | <!--T:30--> | ||
<b>Этот метод настоятельно НЕ РЕКОМЕНДУЕТСЯ для использования без достаточных оснований. Для работы из С/C++ стоит использовать работу через файлы в sysfs, как описано в | <b>Этот метод настоятельно НЕ РЕКОМЕНДУЕТСЯ для использования без достаточных оснований. Для работы из С/C++ стоит использовать работу через файлы в sysfs или chardev, как описано в предыдущих разделах</b>. | ||
<!--T:31--> | <!--T:31--> | ||
Строка 226: | Строка 239: | ||
=Работа из ядра Linux=<!--T:44--> | =Работа из ядра Linux=<!--T:44--> | ||
=== | ===Рекомендации по Device Tree=== <!--T:33--> | ||
<!--T:5--> | <!--T:5--> |