Пятница, 2018-05-25, 23:12
Приветствую Вас Гость | RSS
Главная | GPIO comments | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    UNIX/Linux FRN Gateway
    Deutsch
    English
    Italiano

    Комментарии по использованию 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, называется она GPIO-SUNXI. Пример полета фантазии разработчиков. До того как я убедился, что документ содержит правильное соответствие номера и имени порта, приходилось руками выполнять "экспорт" порта по номеру, например, командой "sudo echo 17 > /sys/class/gpio/export", а потом в каталоге /sys/class/gpio смотреть глазами, какое точное SYSFS-имя получил этот порт.
    Все заработало.



    Пример 3. Orange Pi.

    Тут пришлось встретиться с большим разнообразием. Попадались варианты сборок Linux с поддержкой "классического" GPIO-SYSFS, по именам похожие на пример #1 про Raspberry Pi. Попадались еще варианты с "новой" (?) версией GPIO-SUNXI.

    Для понимания своего варианта необходимо посмотреть глазами наличие 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:
    Бесплатный конструктор сайтов - uCozCopyright MyCorp © 2018