Работа с портами GPIO CubieBoard
Для разработки устройства на базе cubieboard_1 доступно 67 GPIO выходов. Выходы могут быть как самостоятельными цифровыми входами – выходами так и участвовать в составе какого либо интерфейса. В этой статье мы собрали информацию о работе с этими портами.
Для управления cubie и его портами будем использовать ОС Cubian. Если рассматривать выводы GPIO, это контакты расположенные в двух сгруппированных разъемах. Каждый выход GPIO мультиплексированный. По умолчанию почти все GPIO настроены на один порт. Вся таблица мультиплексирования и распиновка разъемов доступна по этой ссылке. Первые одиннадцать страниц это принципиальная схема дальше распиновка и описание. О том как сконфигурировать интерфейс например UART мы расскажем в другой статье.
Электрика
При работе с портом надо учитывать следующее:
- ток нагрузки должен быть не более 20mA
- напряжение логического уровня 3.3В
Поэтому при подключении, например Arduino, нужно будет согласовать логические уровни.
Для дальнейшей работы подключим к портам PD0, PD2, PD4, PD6 через ограничительный резистор светодиоды. Учтите что расстояние между выводами составляет 2 миллиметра в отличии от стандартного 2.54мм.
Программирование
После установки ОС вы сможете работать под учетной записью 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.
Следующим действием необходимо сконфигурировать порт. Необходимо указать, чем именно будет являться наш порт: входом или выходом.
Поскольку у нас подключен светодиод нам необходимо задать направление выход. Для назначения направления выполните следующую команду:
echo out > /sys/class/gpio/gpio33_pd0/direction
Этой командой мы записываем значение out в файл direction. Если необходимо сконфигурировать линию на вход то вместо out необходимо написать in.
Вот так выглядит содержимое каталога /sys/class/gpio/gpio33_pd0/
Для того чтобы узнать как сконфигурирован порт необходимо вывести содержимое файла direction для этого можно воспользоваться командой cat:
cat /sys/class/gpio/gpio33_pd0/direction
Результат можно просмотреть на следующем рисунке:
После перезагрузки системы на плате, вся конфигурация портов будет стерта и Вам будет необходимо заново выполнять эти команды. Эту проблему можно решить написанием простенького скрипта который будет автоматически вызываться при старте системы. Пример скрипта:
#!/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.
Метки: CubieBoard, GPIO, script, скрипт Просмотров: 8017