Архив по меткам :

QR-code

ССЫЛКИ

Свежие комментарии

Янв 04

OrangePi PC работаем с GPIO, UART и i2c

Для работы с GPIO в OrangePi не подойдут библиотеки и инструменты предназначенные для RaspberryPi, однако мне удалось найти библиотеку WiringOP основанную на библиотеке WiringPi

Установка WiringOP

после установки проверяем работоспособность

gpio readall

покажет все порты, назначения и состояния

Настройка назначения портов GPIO при старте системы.

При наличии файла script.bin

в разделе /boot находим файл script.bin (если нет такого файла, а есть папка dts или файл с разрешением dts то пропускаем этот раздел и переходим к следующему) и конвертируем его в читаемый формат командой

bin2fex script.bin script.fex

у меня были отключены UART1 и UART3, в данном выводе UART порты все работают, но Вы можете переназначить их в режим IN или OUT с помощью WiringOP не редактируя файл script.bin

чтобы включить UART1 надо найти секцию [uart1] и в ней параметр использования порта uart_used, 0 — не используется, 1 — используется.

так же надо посмотреть порты, которые занимает UART

и исключить их из секции [gpio_para], точно так же делается и с остальными портами (SPI, i2c).

После внесенных изменений конвертируем обратно

fex2bin script.fex script.bin

и перезагружаемся.

При наличии DTB

для конвертирования бинарного файла dtb необходимо установить компилятор файлов dtb

apt-get install device-tree-compiler

у меня на Armbian Ubuntu 16.04 в папке /boot файлы dtb находятся в папке dtb, на других системах этот файл может быть в корне /boot, с помощью следующей команды конвертируем наш файл dtb в dts

dtc -I dtb -O dts -o sun8i-h3-orangepi-pc.dts ./sun8i-h3-orangepi-pc.dtb

где:

sun8i-h3-orangepi-pc.dtb — исходный бинарный файл

sun8i-h3-orangepi-pc.dts — файл который мы будем редактировать.

открываем файл sun8i-h3-orangepi-pc.dts в любом редакторе и ищем слово serial, у меня 4 таких секции следующего содержания

включение uart порта делается изменением параметра status = "okay"

после изменения сохраняем файл и конвертируем обратно

dtc -I dts -O dtb -o ./sun8i-h3-orangepi-pc.dtb ./sun8i-h3-orangepi-pc.dts

перезагружаем устройство и проверяем работу.

UPD: в Armbian в версиях ядра 4.х.х. для включения SPI надо так же добавить в файл /boot/armbianEnv.txt следующие строки

для OrangePi Zero

overlays=i2c0 i2c1 uart0 uart1 uart2 uart3 spi-spidev spi-add-cs1
param_spidev_spi_bus=1
param_spidev_spi_cs=0

для остальных

overlays=i2c0 i2c1 uart0 uart1 uart2 uart3 spi-spidev spi-add-cs1
param_spidev_spi_bus=0
param_spidev_spi_cs=0

Использование GPIO с помощью WiringOP

для вывода справки по командам наберите

gpio -h

Если у Вас в файле script.bin назначены порты UART, SPI, i2c, то переназначить их можно не редактируя файл script.bin, достаточно задать их командой

gpio mode <номер порта> <значение>

где номер порта который соответствует номеру в строке  wPi, для использования физического номера используйте команду

gpio -1 mode <номер порта> <значение>

например надо физический порт 8 определить на выход

gpio -1 mode 8 out

запишем в порт логическую единицу

gpio -1 write 8 1

Так же можно управлять двумя светодиодами на плате, зеленый

и красный

Соответственно включение и выключение.

Работа с i2c

У процессора Н3 имеется 3 порта i2c, однако на разъем GPIO выведены только 2, у меня по умолчанию был включен только порт 0, а порт 1 был отключен, его надо включить аналогично тому, как включали порты UART.

Для работы с i2c необходимо установить i2c-tools

apt-get install i2c-tools

данный пакет имеет программы

i2cdetect —  проверка подключенных устройств — выводит адреса подключенных устройств

i2cdump — снятие дампа данных

i2cget — получение значения нужного регистра в подключенном устройстве. Опрашивается в формате i2cget <bus> <chip> <register>

i2cset — запись значения в регистр подключенного устройства, команда в формате i2cset <bus> <chip> <register> <value>

где:

<bus> — i2c шина (0 или 1)

<chip> — адрес чипа

<register> — адрес регистра

<value> — значение регистра

подключаем устройства i2c к соответствующим портам OrangePi. Для того, чтобы выяснить по какому адресу у нас устройства i2c надо ввести команду

i2cdetect -y 0 для шины 0

i2cdetect -y 1 для шины 1

получим список адресов устройств

у нас по адресу 20 и 27 определились микросхемы PCF8574, для управления выводами у данной микросхемы адрес регистра не указывается, для чтения данных используем команду

Управление PCF8574

i2cget -y 0 0x20

где флаг -y означает означает согласие на работу, если без этого флага использовать то чтобы получить данные надо ответить yes

запись значений происходит командой:

i2cset -y 0 0x20 0xff — подача на все порты pcf8574 высокий логический уровень

i2cset -y 0 0x20 0x00 — подача на все порты pcf8574 низкий логический уровень

вместо шеснадцатиричного значения возможно использовать десятичное

i2cset -y 0 0x20 255 и i2cset -y 0 0x20 0 соответственно

так же и двоичное

i2cset -y 0 0x20 $(( 2#11111111 ))  и i2cset -y 0 0x20 $(( 2#00000000 ))

для включения первого и третьего вывода надо выполнить команду

i2cset -y 0 0x20 $(( 2#11111010 ))

для изменения состояния вывода можно использовать следующую команду

a=`i2cget -y 0 0x20` && i2cset -y 0 0x20 $(( $a ^ X ))

где X — имеет значения 1,2,4,8,16,32,64,128 для изменения состояния соответственно 1,2,3,4,5,6,7,8 вывода, сначала получаем значение регистра PCF85474 и присваиваем его переменной a, затем к этому значению выполняем операцию XOR.

 

 

 

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Синдикация

Понравилась статья? Подпишитесь на RSS .

комментарии отключены, по вопросам в почту или вконтакте http://vk.com/kusheev