Свежие комментарии
    Благодарности: денежное общество и мойка авто

    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
    Опубликовать в Мой Мир
    Опубликовать в Одноклассники
    Опубликовать в Яндекс

    Комментарии закрыты.