Работа с GPIO

Материал из Wiren Board
Версия от 20:54, 10 октября 2013; EvgenyBoger (обсуждение | вклад) (Новая страница: «В Wiren Board часть GPIO выведена на клеммники, часть выведена на разъёмы UEXT, часть используется…»)

В Wiren Board часть GPIO выведена на клеммники, часть выведена на разъёмы UEXT, часть используется для служебных целей.

GPIO также используются для управления транзисторами для коммутации низковольтной нагрузки. 

Соответствие между номерами GPIO в Linux и их местоположением и функцией можно найти в табличке Список GPIO.

8 GPIO на специальном разъёме подключены через MCP23S08 и временно не работают со стандартным Linux API. Описание работы с ними есть на странице MCP23S08.

Все GPIO (как и остальные порты Wiren Board) работают с напряжением 3.3V. Ни в коем случае не подключайте к GPIO напрямую сигналы, напряжением больше 3.3V! В случае необходимости подключения устройств, работающих с более высоким напряжением, необходимо использовать схемы согласования или подключать (для 5V) через резистор в 20 кОм и более

Интерфейс sysfs в Linux

GPIO в Linux поддерживаются через sysfs-интерфейс.

Для работы через sysfs c определённым GPIO его надо экспортировать:

Здесь и далее N - номер gpio

echo N > /sys/class/gpio/export

Экспортированные gpio появляются в каталоге /sys/class/gpio :

root@wirenboard:~# ls -1 /sys/class/gpio/
export
gpio32
gpiochip0
gpiochip120
gpiochip32
gpiochip64
unexport

В директории /sys/class/gpioN теперь находятся файлы для работы с GPIO:

root@wirenboard:~# ls -1 /sys/class/gpio/gpioN/
active_low
device
direction
edge
power
subsystem
uevent
value

Установка направления GPIO (ввод/вывод) производится с помощью записи в файл direction

echo in > /sys/class/gpio/gpioN/direction # установим GPIO номер N на ввод
echo out > /sys/class/gpio/gpioN/direction # установим GPIO номер N на вывод

Чтение и установка значения GPIO производится с помощью файла value.

Чтение:

echo in > /sys/class/gpio/gpioN/direction # установим GPIO номер N на ввод
cat /sys/class/gpio/gpioN/value # вернёт 1 или 0

Запись:

echo out > /sys/class/gpio/gpioN/direction # установим GPIO номер N на вывод
echo 0 > /sys/class/gpio/gpioN/value # установим логический 0  (низкое напряжение) на GPIO номер N
echo 1 > /sys/class/gpio/gpioN/value # установим логический 1  (высокое напряжение) на GPIO номер N