Добавил:
github.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
30.09.2023
Размер:
1.1 Mб
Скачать
    1. Интерфейс общего назначения ввода/вывода в Raspberry Pi os

Дистрибутив Raspberry Pi OS предназначен для запуска на базе одноплатного компьютера Raspberry Pi. В связи с этим, в отличии от дистрибутивов, предназначенных для запуска на персональных компьютерах, в нем имеется доступ к аппаратным блокам микропроцессора на уровне пользователя. При этом работа с аппаратными блоками в соответствии с идеологией ОС Linux ведется с помощью чтения и записи данных в специальные файлы.

Одним из наиболее часто используемых аппаратных блоков является интерфейс General-purpose input/output (GPIO), который позволяет программно управлять состояниями выводов (часто называемых «пины») микропроцессора. Всего одноплатный компьютер Raspberry Pi позволяет независимо настраивать 26 различных пинов, каждому из которых соответствует свой номер и набор файлов в файловой системе ОС Linux.

Каждый пин может выступать как в роли входа, то есть считывать логический уровень, установленный внешним источником, так и в роли выхода, то есть устанавливать логический уровень на внешний приемник. Сконфигурированные на вход пины GPIO определяют логическую единицу как напряжение с уровнем 3,3 В, а логический ноль как напряжение с уровнем 0 В. Сконфигурированные на выход пины GPIO устанавливают логическую единицу уровнем 3,3 В и логический ноль уровнем 0 В.

Файлы, необходимые для настройки пинов и обмена информацией, располагаются в директории «/sys/class/gpio/». Для того, чтобы получить доступ к пину с номером N из пространства пользователя, необходимо записать этот номер в файл «/sys/class/gpio/export», после чего в директории «/sys/class/gpio/» появится поддиректория «gpioN/», в которой будут содержаться файлы для работы с пином. Например, после ввода команды

echo "24" > /sys/class/gpio/export

в системе появится директория «/sys/class/gpio/gpio24/» (можно убедиться в этом с помощью ls).

Для настройки типа пина (вход или выход) используется файл «direction»: чтобы настроить пин на вход необходимо записать в файл «in», чтобы настроить на выход – «out». Например, команда

echo "out" > /sys/class/gpio/gpio24/direction

настроит пин с номером 24 на выход.

Установка выходного логического уровня на пине осуществляется с помощью записи «1» или «0» в файл «value». Например, команда

echo "1" > /sys/class/gpio/gpio24/value

установит на выходе пина с номером 24 логическую единицу (напряжение 3,3 В).

Для того, чтобы сделать управление пином недоступным из пространства пользователя необходимо записать его номер в файл «/sys/class/gpio/unexport». Например, после ввода команды

echo "24" > /sys/class/gpio/unexport

из файловой системы исчезнет директория «/sys/class/gpio/gpio24».

В системе не допускается запись номера пина в файл «export» если уже существует директория для данного пина (то есть запись в «export» уже была проведена ранее).

В Листинге 1 приведена последовательность команд для настройки и выдачи логической единицы на пине с номером 24, который на лабораторном стенде подключен к светодиоду LED0 (красный):

Листинг 1. Выдача логической единицы на пине с номером 24.

# Экспорт выводов в пространство пользователя

echo "24" > /sys/class/gpio/export

# Установка вывода 24 в качестве выхода

echo "out" > /sys/class/gpio/gpio24/direction

# Установка высокого уровня на значение вывода 24

echo "1" > /sys/class/gpio/gpio24/value

Для чтения состояния пина, настроенного на вход, так же используется файл «value», содержимое которого может быть выведено на экран терминала с помощью программы cat. В Листинге 2 приведена последовательность команд для настройки пина с номером 22 в качестве входа. На лабораторном стенде данный пин подключен к кнопке BTN0:

Листинг 2. Выдача логической единицы на пине с номером 24.

echo "22" > /sys/class/gpio/export

echo "in" > /sys/class/gpio/gpio22/direction

cat /sys/class/gpio/gpio4/value

Если кнопка BTN0 не была нажата во время вызова cat, то на экране отобразится «1». Если кнопка была нажата, то cat выведет на экран «0».

Соседние файлы в папке OS_labs