====== GPIO ======
{{page>meta:infobox:wip&noheader&nofooter&noeditbtn}}
Читаем [[wp>General Purpose Input/Output]], а так же [[http://www.mjmwired.net/kernel/Documentation/gpio.txt|соглашение доступа GPIO в Linux]].
* [[docs:guide-user:hardware:mmc_over_gpio]]
* [[toh/tp-link/tl-wr1043nd#GPIOs|GPIOs of AR913x SoC]]
* [[/oldwiki/port.gpio|oldwiki 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".
\\ \\ {{media:doc:hardware:gpio_high_low.png?600|}}\\ \\
GPIO можно использовать для таких задач:
^ ^ Модуль ядра ^ Описание ^
^ [[docs:techref:hardware:port.gpio:1-wire]] | kmod-w1-master-gpio | [[http://ru.wikipedia.org/wiki/1-Wire|1-wire]] |
^ [[docs:guide-user:hardware:pwm]] | kmod-pwm-gpio | [[http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE-%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F|ШИМ]] |
^ [[docs:techref:hardware:port.gpio:spi]] | kmod-spi-gpio | [[http://ru.wikipedia.org/wiki/Serial_Peripheral_Interface|Serial Peripheral Interface]] |
^ ::: | kmod-mmc-over-gpio | [[docs:guide-user:hardware:mmc_over_gpio|MMC/SD карта через GPIO]] |
^ [[docs:techref:hardware:port.i2c|I2C]] | kmod-i2c-gpio | [[http://uk.wikipedia.org/wiki/I2C|I2C]] |
^ [[docs:guide-user:hardware:lirc]] | нет модуля | ИК-управление Linux |
^ [[docs:techref:hardware:port.gpio:rotary_encoder]] | kmod-input-gpio-encoder | [[http://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D0%B3%D0%BB%D0%B0_%D0%BF%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82%D0%B0|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 [in|out []]\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