GPIO

Аппаратные средства

GPIO, в основном, используется для кнопок и светодиодов. They only safely supply or sink (pull to GND) a maximum of 4mA aprox., напряжение зачастую 3V в активном состоянии. Только два положения возможны: "приём=low" или "передачу=high". В зависимости от того как устройство активировано в GPIO, определяется состояние "приём" или "передача".

  • active high: устройство активируется когда GPIO в режиме "передачи"
  • active low: устройство активируется когда GPIO в режиме "приёма"

На этом изображении можно увидеть как GPIO управляет кнопками или светодиодами для работы на "приём=low" или "передачу=high".



GPIO можно использовать для таких задач:

Модуль ядра Описание
1-wire kmod-w1-master-gpio 1-wire
PWM kmod-pwm-gpio ШИМ
SPI kmod-spi-gpio Serial Peripheral Interface
kmod-mmc-over-gpio MMC/SD карта через GPIO
I2C kmod-i2c-gpio I2C
LIRC нет модуля ИК-управление Linux
Rotary encoder kmod-input-gpio-encoder GPIO датчик угла поворота

GPIO прерывания

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

Не все платы имеют GPIO прерывания. Например bcm63xx SoCs не имеет GPIO прерываний и по этому их кнопки опрашиваются. В результате этого, некоторые драйверы ввода перечисленные выше не будет работать в этих платах.

Программное обеспечение

В linux GPIO могут получить доступ через GPIO SYSFS интерфейс: /sys/class/gpio/

Для контроля GPIO можно использовать gpioctl-sysfs. Или скриптом ниже можно найти незадействованные кнопками или светодиодами GPIO. Для запуска, сохраните ниже приведенный скрипт с именем ngpio.sh, залейте в роутер и запускайте командой :

sh ngpio.sh [номер_GPIO] [out_или_in]
Узнайте заранее сколько GPIO имеет ваш ЦП

Пример:

sh ngpio.sh 0 out

Код скрипта:

#!bin/sh
 
show_usage()
{
    printf "\ngpio.sh <gpio pin number> [in|out [<value>]]\n"
}
 
if [ \( $# -eq 0 \) -o \( $# -gt 3 \) ] ; then
    show_usage
    printf "\n\nERROR: incorrect number of parameters\n"
    exit 255
fi
 
#doesn't hurt to export a gpio more than once
(echo $1 > /sys/class/gpio/export) >& /dev/null
 
if [  $# -eq 1 ] ; then
   cat /sys/class/gpio/gpio$1/value
   exit 0
fi
 
if [ \( "$2" != "in" \) -a  \( "$2" != "out" \) ] ; then
    show_usage
    printf "\n\nERROR: second parameter must be 'in' or 'out'\n"
    exit 255
fi
 
echo $2 > /sys/class/gpio/gpio$1/direction
 
if [  $# -eq 2 ] ; then
   cat /sys/class/gpio/gpio$1/value
   exit 0
fi
 
 
VAL=$3
 
if [ $VAL -ne 0 ] ; then
    VAL=1
fi
 
echo $VAL > /sys/class/gpio/gpio$1/value

Back to top

ru/doc/hardware/port.gpio.txt · Last modified: 2013/12/06 01:42 (external edit)