Как использовать цифровой ввод-вывод на BeagleBone
Используйте универсальный ввод-вывод на Beaglebone Black, чтобы начать работу с этой мощной аппаратной платформой!
Рекомендуемый уровень
промежуточный
Только экспорт
Самый простой способ манипулировать вводом-выводом Beaglebone - через оболочку bash. Почему «hljs»> $ echo 67> / sys / class / gpio / export
В чем смысл этой команды? Ничего не случилось с нашим советом! Ну, это не совсем так - просто не ясно, что происходит. Beaglebone построен вокруг процессора TI Sitara. Как и большинство современных процессоров, семья Sitara имеет массу контактов для взаимодействия с внешним миром. Удобно, что большинство этих контактов могут выполнять несколько функций. Эти функции могут быть чрезвычайно простыми, например, функция GPIO, которую мы установим за минуту, или чрезвычайно сложную, например, часть шины PCIe или сеть SGMII.
Единственный компромисс заключается в том, что вы не можете выполнять все функции булавки одновременно. Вместо этого эти контакты мультиплексируются в порт на внутренней шине процессора. Это означает, что вам нужно выбрать, какую функцию вы хотите, чтобы ваш выбранный контакт выполнял. Команда `echo` записывает номер 67 в файл '/ sys / class / gpio / export'. Это говорит системе, что мы хотим использовать pin 67 на плате в качестве GPIO и что процессор должен распространять эти настройки в системе. Точные детали этого довольно сложны и выходят за рамки этой статьи. Вы заметите, что после запуска этой команды каталог / sys / class / gpio / 'имеет дополнительную папку:
$ ls /sys/class/gpio export gpio67 gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport
Изменение направления
Когда мы 'echo'-ed 67 в этот файл, мы сказали системе экспортировать настройки для GPIO_67. Он ответил, создав папку «gpio67». Когда мы исследуем содержание этого, мы получаем следующую структуру:
$ ls -al /sys/class/gpio/gpio67 total 0 drwxr-xr-x 3 root root 0 Jan 1 00:14. drwxr-xr-x 7 root root 0 Jan 1 00:00.. -rw-r--r-- 1 root root 4096 Jan 1 00:42 active_low -rw-r--r-- 1 root root 4096 Jan 1 00:14 direction -rw-r--r-- 1 root root 4096 Jan 1 00:43 edge drwxr-xr-x 2 root root 0 Jan 1 00:42 power lrwxrwxrwx 1 root root 0 Jan 1 00:41 subsystem ->../../../../class/gpio -rw-r--r-- 1 root root 4096 Jan 1 00:14 uevent -rw-r--r-- 1 root root 4096 Jan 1 00:20 value
Скачать код
Есть два файла в новой папке «gpio67», представляющие для нас особый интерес: первый файл «direction». Если вы запустите команду `$ cat / sys / class / gpio / gpio67 / direction`, вы увидите этот вывод:
$ cat /sys/class/gpio/gpio67/direction in
Если вы знакомы с любым встроенным процессором с открытым металлом (например, PIC, AVR, HCS08), вы узнаете о регистре, называемом регистром направления данных, и получите мое разрешение пропустить оставшуюся часть этого абзаца.
Для тех из вас, кто придерживается нас: регистр направления данных определяет, каким образом данные могут вытекать из порта GPIO. Есть только два варианта - либо в, либо из. Как правило, установка этого регистра для определенного вывода GPIO связана с поиском правильного регистра, поиском правильного бита в этом регистре и написанием симпатичного небольшого «и» оператора на C для установки или очистки этого бита.
Не так для Beaglebone! Когда мы экспортировали GPIO_67, Beaglebone создала этот приятный маленький файл, чтобы прочитать регистр направления данных процессора и вернуть его нам в удобном для чтения формате. Вместо сложного затирания шестнадцатеричного числа мы получаем два простых значения: «in» или «out». Как вы, возможно, догадались из более ранней команды «cat», состояние по умолчанию этого регистра «in» - оно может считывать данные на этом выводе в процессор, но это не может повлиять на состояние GPIO_67. Давайте изменим это, чтобы мы могли видеть выход этого булавка в реальном мире! Мы можем сделать это, запустив еще одну команду «echo» и используя «cat», чтобы убедиться, что она сработала:
$ echo out > /sys/class/gpio/gpio67/direction $ cat /sys/class/gpio/gpio67/direction out
Потрясающие! Мы изменили направление данных ввода-вывода от входа к выходу. А теперь давайте сделаем что-нибудь!
Есть свет, и иногда он выходит
Следующий шаг потребует, чтобы вы построили действительно простую схему, используя один резистор 1 кОм и ваш любимый цвет светодиода. Вам нужно будет подключить один вывод светодиода к контакту 2 заголовка P8 на Beaglebone, а другой конец - к любому ряду паяльной макет. Подключите один контакт резистора к той же строчке, что и светодиод, а другой - к GPIO_67 - вы можете найти это на штыре 8 заголовка P.

схематическая диаграмма
схема подключения
Выполните следующие команды, и если все будет правильно соединено, вы увидите, что светодиод включается одним, а другой - другим.
$ echo 1 > /sys/class/gpio/gpio67/value $ echo 0 > /sys/class/gpio/gpio67/value
Это работает по тому же принципу, что и последний набор записей в `/ sys / class / gpio / gpio67 / value` - единственное различие между командами заключается в том, какое значение записывается в каждый файл. Чтобы нарисовать еще одну параллель с более основными встроенными системами, файл `value` сравним с регистром вывода данных порта. Написав на нем «1», вы устанавливаете контакт на напряжение выше 3, 3 В. Написание «0» устанавливает его на низкое напряжение и тянет штырь к земле.
Wrapping Up - простой мигающий скрипт
Мы можем объединить все эти команды вместе в действительно простой скрипт для включения и выключения светодиода каждые полсекунды:
#!/bin/bash if (! -e /sys/class/gpio/gpio67/value) then echo 67 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio67/direction fi while (True) do echo 1 > /sys/class/gpio/gpio67/value usleep 500000 echo 0 > /sys/class/gpio/gpio67/value usleep 500000 done
Скачать код
Этот скрипт будет работать вечно - чтобы отменить его, вам нужно нажать `Ctrl + c`, чтобы вернуться в терминал Linux. Вы можете скопировать его из выдержки, приведенной выше, в ваш Beaglebone Black или вытащить из git с помощью этого репозитория.
И вот оно! Простой способ переключить GPIO на Beaglebone Black. Кто знал, что это может быть так легко?
С чем вы связали свой GPIO? Сделано что-нибудь круто? Оставьте нам комментарий и сообщите нам, что вы читаете с помощью Beaglebones!
Попробуйте этот проект сами! Получить спецификацию.