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

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    AlterFRN server and client for UNIX/Linux

    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:

     

     

    По состоянию на 2025 год доступен новый механизм доступа к GPIO : называется он GPIOD . Механизм GPIOD состоит из библиотеки libgpiod , при доступности которой клиент AlterFRN приобретает еще один возможный тип управления радиостанцией GPIODEV .
    Пример конфигураций:
    PTT=GPIODEV:/dev/gpiochip0:14
    COS=GPIODEV:/dev/gpiochip1:215
    STATIC=GPIODEV:/dev/gpiochip3:8

    Выяснить доступные через библиотеку libgpiod аппаратные ресурсы GPIO и их имена/номера помогут утилиты :
    gpiodetect — выводит список всех чипов GPIO , их метки и количество линий;
    gpioinfo — выводит информацию о линиях GPIO конкретного контроллера GPIO . В таблице вывода по колонкам указывается номер линии, название контакта, направление ввода/вывода, текущее состояние.
    gpiofind — находит имя чипа GPIO и смещение линии по имени;
    gpiomon — ожидает события на линиях GPIO , можно указать, какие события нужно отслеживать, сколько из них обработать перед выходом или следует ли сообщать о событиях в консоль.
    gpioget — читает текущее состояние линии GPIO ;
    gpioset — устанавливает новое состояние линии GPIO ;

    Если библиотека libgpiod в системе существует под каким-либо необычным именем вроде libgpiod.so.3.2.1 можно создать на нее мягкую ссылку c "обычным" именем:
    ln -s libgpiod.so.3.2.1 libgpiod.so
    , после чего эта библиотека станет доступной для клиента AlterFRN после его перезапуска.

    Бесплатный конструктор сайтовuCozCopyright MyCorp © 2025