CUSTOMELECTRONICS.RU
Информационно-учебный блог о разработке электроники
Эл. почта: info@customelectronics.ru

Работа с портами GPIO CubieBoard

Для разработки устройства на базе cubieboard_1 доступно 67 GPIO выходов. Выходы могут быть как самостоятельными цифровыми входами – выходами так и участвовать в составе какого либо интерфейса. В этой статье мы собрали информацию о работе с этими портами.
Для управления cubie и его портами будем использовать ОС Cubian. Если рассматривать выводы GPIO, это контакты расположенные в двух сгруппированных разъемах. Каждый выход GPIO мультиплексированный. По умолчанию почти все GPIO настроены на один порт. Вся таблица мультиплексирования и распиновка разъемов доступна по этой ссылке. Первые одиннадцать страниц это принципиальная схема дальше распиновка и описание. О том как сконфигурировать интерфейс например UART мы расскажем в другой статье.

Электрика

При работе с портом надо учитывать следующее:

  • ток нагрузки должен быть не более 20mA
  • напряжение логического уровня 3.3В

Поэтому при подключении, например Arduino, нужно будет согласовать логические уровни.
Для дальнейшей работы подключим к портам PD0, PD2, PD4, PD6 через ограничительный резистор светодиоды. Учтите что расстояние между выводами составляет 2 миллиметра в отличии от стандартного 2.54мм.
IMG_1726_rd

Программирование

После установки ОС вы сможете работать под учетной записью cubie, эта учетная запись состоит в группе GPIO. Если вы захотите предоставить права на работу с портами другому пользователя вам нужно будет добавить его в эту группу.
Работа с портами состоит из 2 этапов: первый этап инициализация порта и второй этап управление портом. Конфигурирация и управление портом сводится к работе с файловой системой по пути /sys/class/gpio. Ели инициализация портов не выполнена то в этом каталоге будут служебные файлы необходимые для инициализации. Файл export позволяет инициализировать порт, файл unexport деинициализировать порт.

Инициализация

Для начала работы с портом необходимо проинициализировать его в системе. Для этого необходимо выполнить следующую команду:

echo 32 > /sys/class/gpio/export

Если во время работы необходимо отключить порт необходимо выполнить следующую команду:

echo 32 > /sys/class/gpio/unexport

После инициализации в каталоге /sys/class/gpio должен появиться каталог с именем: gpio32_pd0.

Содержимое каталога /sys/class/gpio

Содержимое каталога /sys/class/gpio

Следующим действием необходимо сконфигурировать порт. Необходимо указать, чем именно будет являться наш порт: входом или выходом.
Поскольку у нас подключен светодиод нам необходимо задать направление выход. Для назначения направления выполните следующую команду:

echo out > /sys/class/gpio/gpio33_pd0/direction

Этой командой мы записываем значение out в файл direction. Если необходимо сконфигурировать линию на вход то вместо out необходимо написать in.
Вот так выглядит содержимое каталога /sys/class/gpio/gpio33_pd0/

Содержимое каталога gpio33_pd0

Содержимое каталога gpio33_pd0

Для того чтобы узнать как сконфигурирован порт необходимо вывести содержимое файла direction для этого можно воспользоваться командой cat:

cat /sys/class/gpio/gpio33_pd0/direction

Результат можно просмотреть на следующем рисунке:

Просмотр конфигурации порта gpio40_pd8

Просмотр конфигурации порта gpio40_pd8

После перезагрузки системы на плате, вся конфигурация портов будет стерта и Вам будет необходимо заново выполнять эти команды. Эту проблему можно решить написанием простенького скрипта который будет автоматически вызываться при старте системы. Пример скрипта:

#!/bin/bash
pin_patch="/sys/class/gpio"
#output_module

#led module
#led_1
echo 32 > $pin_patch/export
echo out > $pin_patch/gpio32_pd0/direction 
#led_2
echo 30 > $pin_patch/export
echo out > $pin_patch/gpio30_pd2/direction
#led_3
echo 28 > $pin_patch/export
echo out > $pin_patch/gpio28_pd4/direction
#led_4
echo 42 > $pin_patch/export
echo out > $pin_patch/gpio42_pd6/direction

Сохраните его с названием init_port.sh. Сделайте его исполняемым и в файле /etc/rc.local пропишите полный путь до этого файла. Теперь после перезагрузки конфигурация портов будет восстанавливаться автоматически.

Управление портом

Для записи значения используют команду echo. Чтобы записать в порт PD0 единицу напишите следующую команду:

echo 1 > /sys/class/gpio/gpio32_pd0/value

После этой команды светодиод подключенный к выводу PD0 должен загореться. Если этого не произошло проверьте правильность подключения светодиода и инициализацию порта. Если вместо единицы отправить значение ноль, то светодиод погаснет. Пример:

echo 0 > /sys/class/gpio/gpio32_pd0/value

Чтобы узнать включен ли светодиод или нажата ли кнопка нужно набрать следующую команду:

cat /sys/class/gpio/gpio32_pd0/value

Результатом работы будет вывод на экран 0 или 1-цы что означает текущий логический уровень.
Это основные команды управления портом. Единственный недостаток — нужно запоминать имена каталогов и путей каждого порта. Для упрощения работы со светодиодами можно написать небольшой SH скрипт:

#!/bin/sh
#on off led module
#Primer led [ch1/ch2/ch3/ch4] [on/off]
//access_relay ch3 off 

case  "$1" in
ch1) if [ "$2" = "on" ]; then ( echo 1 > /sys/class/gpio/ gpio32_pd0/value ) fi
     if [ "$2" = "off" ]; then ( echo 0 > /sys/class/gpio/ gpio32_pd0/value ) fi
;;

ch2) if [ "$2" = "on" ]; then ( echo 1 > /sys/class/gpio/ gpio30_pd2/value ) fi
     if [ "$2" = "off" ]; then ( echo 0 > /sys/class/gpio/ gpio30_pd2/value ) fi
;;

ch3) if [ "$2" = "on" ]; then ( echo 1 > /sys/class/gpio/ gpio28_pd4/value ) fi
     if [ "$2" = "off" ]; then ( echo 0 > /sys/class/gpio/ gpio28_pd4/value ) fi
;;

ch4) if [ "$2" = "on" ]; then ( echo 1 > /sys/class/gpio/ gpio42_pd6/direction/value ) fi
     if [ "$2" = "off" ]; then ( echo 0 > /sys/class/gpio/ gpio42_pd6/direction/value ) fi
;;

*) echo "sintax_error"
;;
esac

Сохраните данный файл с именем led и сделайте его исполняемым. После в терминале напишите следующую команду:

led ch1 on

Светодиод должен зажечься. Меняя номер канала и on/off можно управлять светодиодами.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Метки: , , , Просмотров: 6414