mirror of
https://github.com/EmbedDevIOT/obsidian-vault-.git
synced 2026-11-06 01:13:26 +03:00
vault backup: 2026-03-14 16:54:50
This commit is contained in:
@@ -9,8 +9,8 @@ https://devdotnet.org/post/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod/
|
|||||||
|
|
||||||
Способы управления:
|
Способы управления:
|
||||||
1. Userspace driver -прямое управление
|
1. Userspace driver -прямое управление
|
||||||
2. Libgpiod - управление через библиотеку
|
2. Libgpiod - управление через библиотеку (API для Python и C/C++)
|
||||||
3.
|
3. Python library
|
||||||
#### User Space
|
#### User Space
|
||||||
Прямой доступ к регистрам, минуя медленные системные вызовы.
|
Прямой доступ к регистрам, минуя медленные системные вызовы.
|
||||||
Посредством открытия `/dev/mem` и мапирование базового адреса GPIO.
|
Посредством открытия `/dev/mem` и мапирование базового адреса GPIO.
|
||||||
@@ -19,7 +19,8 @@ https://devdotnet.org/post/rabota-s-gpio-v-linux-chast-6-biblioteka-libgpiod/
|
|||||||
2. Нет контроля конкуренции (может управлять несколько процессов)
|
2. Нет контроля конкуренции (может управлять несколько процессов)
|
||||||
3. Можно сломать драйвер
|
3. Можно сломать драйвер
|
||||||
4. Нет безопасности
|
4. Нет безопасности
|
||||||
|
|
||||||
|
Пример работы с GPIO
|
||||||
```cpp title:userspace_gpio_control.cpp
|
```cpp title:userspace_gpio_control.cpp
|
||||||
|
|
||||||
#include <iostream> // вывод сообщений
|
#include <iostream> // вывод сообщений
|
||||||
@@ -94,6 +95,8 @@ GPIO_BASE – смещение в файле (физический адрес).
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
#### libgpiod - library control
|
#### libgpiod - library control
|
||||||
Library General Purpose Input/Output device - Библиотека и набор утилит в Linux для управления пинами GPIO (ввод/вывод общего назначения) через символьные устройства (`/dev/gpiochip*`) или контроллеры GPIO
|
Library General Purpose Input/Output device - Библиотека и набор утилит в Linux для управления пинами GPIO (ввод/вывод общего назначения) через символьные устройства (`/dev/gpiochip*`) или контроллеры GPIO
|
||||||
Состав библиотеки:
|
Состав библиотеки:
|
||||||
@@ -114,11 +117,8 @@ pkg-config --cflags --libs libgpiod
|
|||||||
``` bash
|
``` bash
|
||||||
g++ -o gpio_control gpio_control.cpp -lgpiod
|
g++ -o gpio_control gpio_control.cpp -lgpiod
|
||||||
```
|
```
|
||||||
``
|
|
||||||
3. Компиляция:
|
Пример работы с GPIO
|
||||||
|
|
||||||
4. API для Python и C/C++
|
|
||||||
|
|
||||||
``` cpp title:libgpiod_control.cpp
|
``` cpp title:libgpiod_control.cpp
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -127,21 +127,26 @@ g++ -o gpio_control gpio_control.cpp -lgpiod
|
|||||||
`/sys/bus/i2c/devices/`
|
`/sys/bus/i2c/devices/`
|
||||||
По умолчанию шина отключена.
|
По умолчанию шина отключена.
|
||||||
Включить можно следующими способами:
|
Включить можно следующими способами:
|
||||||
1. `sudo raspi-config`
|
``` bash
|
||||||
2. Корректировкой `/boot/firmware/config.txt`
|
sudo raspi-config
|
||||||
|
```
|
||||||
|
Или от корректировкой `/boot/firmware/config.txt`
|
||||||
1. Необходимо раскомментировать параметр `dtparam=i2c_arm=on`
|
1. Необходимо раскомментировать параметр `dtparam=i2c_arm=on`
|
||||||
|
|
||||||
Затем в устройство должно появиться в `/dev` как `i2c-1`
|
Затем в устройство должно появиться в `/dev` как `i2c-1`
|
||||||
|
Набор утилит для работы с шиной i2c: `i2c-tools`
|
||||||
|
Состав библиотеки:
|
||||||
|
-
|
||||||
|
|
||||||
Для работы с шиной и периферией есть библиотека `i2c-tools`
|
|
||||||
|
|
||||||
## SPI
|
## SPI
|
||||||
|
E
|
||||||
|
|
||||||
Команды для работы:
|
Команды для работы:
|
||||||
`cat /proc/device-tree/model` - модель платы для которой device tree создан
|
```bash
|
||||||
`ls /proc/device-tree/` - дерево устройств, которое kernel получил от GPU
|
|
||||||
`ls /sys/bus/platform/devices` - вывод устройств, которые kernel создал на основе DT
|
```
|
||||||
`lsmod` - просмотр загруженных модулей св
|
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
Система:
|
Система:
|
||||||
|
|||||||
Reference in New Issue
Block a user