Deutsch
English
Italiano
Комментарии по использованию GPIO
Внимание!!! Будьте осторожны при работе с GPIO. Оно не любит статическое электричество, собираемое синтетической одеждой.
После появления на Orange Pi новой SYSFS-схемы управления GPIO, называемой gpio-sunxi, возникло понимание необходимости более подробного освещения темы GPIO применительно к созданию FRN-шлюзов.
Теперь сложно опираться на какую-либо стандартную схему использования GPIO, т.к. на конкретно вашем компьютере(плате) с конкретно на нем установленной операционной системой эта схема может оказаться отличной от какого-либо описания из интернета, в т.ч. и в нижеследующем тексте.
Создателям аппаратуры и программного обеспечения, конечно, огромное спасибо за широкий выбор и невысокие цены. Однако в этом многообразии как-то надо научится разбираться.
Итак: для выяснения ситуации с GPIO на конкретном компьютере(плате) я спаял себе "эмулятор радиостанции" по замечательной схеме c небольшими модификациями:
с таким вот незатейливым внешним видом:
и с которым можно спокойно и безопасно экпериментировать.
Все просто: когда FRN-клиент захочет включить радостанцию на передачу, загорится светодиод, а когда захочется эмулировать прием сигнала из эфира, то нужно нажать кнопку.
Пример 1. Raspberry Pi модель B (rev 1) с родным Raspbian - других плат Raspberry у меня просто нет.
Смотрим в документации на свою плату назначение контактов на раъеме, что-то вроде этого:
Мой вариант слева. Подключаем светодиод к порту GPIO4 (контакт 7) и собственными руками проверяем его работоспособность.
Пример включения радиостанции на передачу (зажигания светодиода):
Code
sudo echo 4 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio4/direction
sudo echo 1 > /sys/class/gpio/gpio4/value
Светодиод загорелся. Потушим его и отключимся от порта:
Code
sudo echo 0 > /sys/class/gpio/gpio4/value
sudo echo in > /sys/class/gpio/gpio4/direction
sudo echo 4 > /sys/class/gpio/unexport
Светодиод потух. Отлично. Теперь подключим к этому же порту кнопку и считаем текущее ее состояние:
Code
sudo echo 4 > /sys/class/gpio/export
sudo echo in > /sys/class/gpio/gpio4/direction
sudo cat /sys/class/gpio/gpio4/value
sudo echo 4 > /sys/class/gpio/unexport
Должно вернуться 0 или 1 в зависимости от используемой подтяжки (PULLUP или PULLDOWN) при подключении.
Если зажать кнопку и повторить операцию чтения, то возвращаемое значение должно измениться на обратное.
Если все происходит как описано выше, то это значит, что порт исправен и не занят другими задачами, соответственно пригоден для использования совместно с FRN-клиентом.
По образу и подобию проверяем порт GPIO17 (контакт 11). Он тоже работает. Все оказалось в соответствии с документацией. Повезло.
В результате появилась конкретная схема управления радиостанцией и настройки к ней:
Пример 2. Cubieboard2 со старым родным Cubian Base-R5 - взял у коллеги на время для экспериментов.
У этой связки оказалась своеобразная схема именования портов в GPIO-SYSFS с явным указанием мультиплексора портов процессора Allwinner A20. Полагаю, это одна из модификаций GPIO-SYSFS для процессоров Allwinner, пример полета фантазии разработчиков. До того как я убедился, что документ содержит правильное соответствие номера и имени порта, приходилось руками выполнять "экспорт" порта по номеру, например, командой "sudo echo 17 > /sys/class/gpio/export", а потом в каталоге /sys/class/gpio смотреть глазами, какое точное SYSFS-имя получил этот порт.
Все заработало.
Пример 3. Orange Pi.
Тут пришлось встретиться с большим разнообразием. Попадались варианты сборок Linux с поддержкой "классического" GPIO-SYSFS, по именам похожие на пример #1 про Raspberry Pi. Попадались еще варианты с "новой" (?) версией GPIO-SYSFS.
Для понимания своего варианта необходимо посмотреть глазами наличие GPIO в SYSFS командой:
Code
sudo ls -1 /sys/class | grep ^gpio
Если найден каталог gpio, то это пример 1 или 2, классическая схема Linux, которую условно назовем "схема LINUX".
Если найден каталог gpio_sw, то это тот самый какой-то "новый" вариант для Allwinner, условно назовем его "схема SUNXI".
Мне довелось на однотипном устройстве столкнуться с обоими вариантами в зависимости от конкретного Linux.
Если же не обнаруживается ничего, то поддержка GPIO не загружена в ядро, тогда пытаемся подгрузить его командой "sudo modprobe gpio-sunxi" и опять проверяем доступную схему GPIO.
Пример включения радиостанции на передачу (зажигания светодиода) по схеме SUNXI:
Code
sudo echo 1 > /sys/class/gpio_sw/PA9/cfg
sudo echo 1 > /sys/class/gpio_sw/PA9/data
Выключение радиостанции (тушим светодиод) по схеме SUNXI:
Code
sudo echo 0 > /sys/class/gpio_sw/PA9/data
sudo echo 0 > /sys/class/gpio_sw/PA9/cfg
Чтение состояние несущей с радиостанции (состояния кнопки) по схеме SUNXI:
Code
sudo echo 0 > /sys/class/gpio_sw/PA10/cfg
sudo cat /sys/class/gpio_sw/PA10/data
Поскольку эти схемы управления отличаются друг от друга, то в AlterFRN-клиент ревизии 4457+ в секцию [System] был добавлен параметр GpioScheme (п.8.14), соответственно с допустимыми значениями LINUX(по умолчанию) и SUNXI:
Code
[System]
GpioScheme=LINUX
#GpioScheme=SUNXI
Orange Pi PC Plus с пинам
может быть подключена с настройками в зависимости от используемой схемы GPIO:
|