Моргаем светодиодом в Cubietruck

В этой статье мы рассмотрим работу с GPIO в компьютере на одной плате Cubietruck.

Автор . Дата: 21.02.2015

В этой статье мы рассмотрим работу с GPIO в компьютере на одной плате Cubietruck.

Но для начала небольшая предыстория. Купил я уже больше года назад сие чудо китайского производства. Брал я его для того, чтобы установить в свою машину и сделать CarPC. Потом произошла авария, машину пришлось сдать на металлолом, а кубик у меня стал телевизором на кухне.

Как оказалось, кубик очень слабо вопроизводит видео в качестве выше 360, да и включать эту конструкцию приходилось очень долго, намного быстрее было включить что-то на телефоне и мыть со спокойной душой посуду. Поэтому телевизор был разобран, а Cubietruck начал готовиться для переезда в качестве мозга для умного дома. Но прежде чем начать подключать к нему различные датчики, нужно было разобраться в работе GPIO.

Для этого был снесен Android, и был установлен Linaro. Затем начались попытки зажечь подключенный светодиод.

Как оказалось, Linaro по умолчанию никак не инициализирует GPIO, поэтому нужно выполнить начальную инициализацию в script.bin.

Монтируем nanda в mnt:

mount /dev/nanda /mnt

затем переходим в mnt:

cd  /mnt

Конвертируем script.bin в script.fex:

bin2fex script.bin script.fex

И открываем script.fex в любом текстовом редакторе. Находим секцию [gpio_para]. Она будет выглядеть примерно так:

[gpio_para]
gpio_used =1
gpio_num = 2
gpio_pin_1 = port: PH20<1><default><default><1>                //PH20 is connecting  the green LED
gpio_pin_2 = port: PH21<1><default><default><1>                //PH21 is connecting  the blue LED

Добавляем новые пины. Название пина и порта можно взять из этой схемы:

Для примера я добавлю пин PG03 который находится на порту CN9:

gpio_pin_3 = port: PG03<1><default><default><1>

Не забываем изменить числа gpio_used и gpio_num. Конечный код будет выглядеть вот так:

[gpio_para]
gpio_used =1
gpio_num = 3
gpio_pin_1 = port: PD01<1><default><default><1>
gpio_pin_2 = port: PD02<1><default><default><1>
gpio_pin_3 = port: PG03<1><default><default><1>

Сохраняем файл и выполняем обратное конвертирование из fex в bin:

fex2bin script.fex script.bin

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

echo 1 > /sys/class/gpio/export
echo 2 > /sys/class/gpio/export
echo 3 > /sys/class/gpio/export

Здесь номер после echo это номер пина в файле script.fex. После чего выполнив ls /sys/class/gpio/ мы увидем, как появились новые каталоги. По названию каталога должно быть понятно, какой это пин. Перейдем в каталог нашего пина. В нем есть файлы, которые относятся к этому пину. Сейчас нам важен direction и value. direction задает направление работы пина: out - на выход, input - на вход. Т.е., когда пин установлен на выход, мы может управлять им с помощью файла value, задавая логический ноль или логическую единицу. Если пин установлен на вход, то посмотрев содержимое файла мы можем определить, какой логический уровень на нем сейчас находится.

Переключить режимые можно этой командой:

echo out > value

или 

echo input > value

После чего мы можем либо задать логический уровень на пине:

echo 1 > value

либо посмотреть логический уровень на пине:

cat value

Вот и все, теперь мы можете моргать своим светодиодом :-)

Одна важная деталь: управлять GPIO в Linaro можно только от root пользователя. Поэтому либо входим под ним, либо используем sudo, если вы работаете не под суперпользователем.

Я написал простенький скрипт, который включает и выключает светодиод каждые пол секунды:

#!/bin/bash
declare -i i=0;
declare -i j=0;
while true; do

        i=i+1
        j=i%2
        echo "light $j"
        echo $j > /sys/class/gpio/gpio3_pg1/value
        sleep 0.5
done
        echo "done!";

 


comments powered by HyperComments