Перейти к основному содержимому

Использование 40 контактного разъема GPIO

Описание контактов

40 контактный разъем GPIO

Нумерация контактов на плате следующая:

Нумерация контактов разъема GPIO

Функции контактов разъёма приведены в таблице:

КонтактACPI GPIODT GPIOGPIOАльтернативная функцияАльтернативная функция
13.3 V
25 V
31365GPIO 056I2C-2_SDA (0x04030000)
45 V
51264GPIO 055I2C-2_CLK
6GND
754106GPIO 097PWM_5 (0x04115000)
862114GPIO 105UART_3_TXD (0x040e0000)
9GND
1063115GPIO 106UART_3_RXD
1115532GPIO 015
1215734GPIO 017
1315633GPIO 116
14GND
1556108GPIO 099PWM_5 (0x04113000)UART_1_TXD (0x040c0000)
1657109GPIO 100UART_1_RXD
173.3 V
1815835GPIO 018
1913017GPIO 028SPI_1_MOSI
20GND
2112714GPIO 025SPI_1_MISO
2215936GPIO 019
2313118GPIO 029SPI_1_CLK
2412815GPIO 026SPI_1_CS0
25GND
2612916GPIO 027SPI_1_CS1
27557GPIO 048I2C-5_SDA (0x04060000)
28456GPIO 047I2C-5_CLK
2916037GPIO 020
30GND
3116340GPIO 023
3216138GPIO 021
3316441GPIO 024
34GND
351466GPIO 057
3616239GPIO 022
371769GPIO 060
381870GPIO 061I2C-4_CLK
39GND
401971GPIO 062I2C-4_SDA (0x04050000)

Часть содержимого приведенной таблицы приведена на цветном изображении:

Функции контактов разъема GPIO
Полезная информация.

В таблице выше показаны базовые адреса соответствующих регистров для PWM, I2C и UART. Это полезно для проверки того, какому выводу в 40-контактном разъеме соответствует узел в /sys/class

Внимание !!!

Всего в 40-контактном интерфейсе имеется 28 портов GPIO. Напряжение всех GPIO портов — 3,3 В.

Использование портов

GPIO

  • В системах с ядром Linux 6.1 необходимо убедиться, что система загружена в режиме 0 Orange Pi 6 plus (Device Tree).

    Режим GPIO
  • Для систем с ядром Linux 6.6, использующих ACPI, убедитесь с помощью команды dmidecode, что версия BIOS - v1.0_for_opi6plus_linux

    sudo dmidecode -s bios-version

    Если это не так, то обратитесь к разделу Обновление BIOS на плате Orange Pi 6 plus, чтобы записать нужную версию BIOS

Соответствие номеров интерфейсов в системе с номерами GPIO показана в таблице выше. Если ядро ​​использует Device Tree, то номер интерфейса указан в столбце DT GPIO. Если используется ядро ACPI, см. столбец ACPI GPIO.

Интерфейс /sys/class/gpio можно использовать для управления высоким и низким уровнями выходов GPIO. Пример управления уровнем GPIO 056 показан ниже:

  1. Переключитесь на пользователя root

    sudo -i
  2. Номер интерфеса GPIO в системе из таблицы.

    • Для ядра Linux 6.1 GPIO 056 номер интерфейса равен 65
    • Для ядра Linux 6.6 GPIO 056 - интерфейс номер 13
  3. Затем используйте следующую команду для экспорта GPIO056:

    • Linux 6.1

      echo 65 > /sys/class/gpio/export
    • Linux 6.6

      echo 13 > /sys/class/gpio/export
  4. Затем установите GPIO056 в режим вывода.

    • Linux 6.1

      echo out > /sys/class/gpio/gpio65/direction
    • Linux 6.6

      echo out > /sys/class/gpio/gpio13/direction
  5. Затем используйте следующую команду, чтобы установить высокий уровень GPIO056.

    • Linux 6.1

      echo 1 > /sys/class/gpio/gpio65/value
    • Linux 6.6

      echo 1 > /sys/class/gpio/gpio13/value
  6. Для установки низкого уровня GPIO056.

    • Linux 6.1

      echo 0 > /sys/class/gpio/gpio65/value
    • Linux 6.6

      echo 0 > /sys/class/gpio/gpio13/value
  7. В системе Linux предустановлен сценарий blink_gpio.sh, который можно использовать чтобы быстро проверить работу порта GPIO, выдающего высокие и низкие уровни.

    • Получить путь к скрипту blink_gpio.sh можно следующей командой:

      which blink_gpio.sh
    • Для использования скрипта blink_gpio.sh нужно добавить в параметры команды один или несколько портов GPIO, соответствующих проверяемым контактам. После запуска сценарий будет циклически повторяться, включая и выключая порты GPIO.

      Linux 6.1

      sudo blink_gpio.sh 65

      Linux 6.6

      sudo blink_gpio.sh 13
    • После выполнения приведенной выше команды используйте мультиметр для проверки контакта соответствующиего GPIO056. Вы увидите, что напряжения циклически меняется от 0 В до 3,3 В.

    • Для циклического изменения напряжения на всех контактах GPIO используйте следующую команду:

      Linux 6.1

      sudo blink_gpio.sh 65 64 106 32 33 108 17 14 18 57 37 40 41 66 69 114 115 34 109 35 36 15

      Linux 6.6

      sudo blink_gpio.sh  4 5 12 13 14 17 18 19 54 56 57 62 63 127 128 129 130 131 155 156 157 158 159 160 161 162 163 164

SPI

  • В системах с ядром Linux 6.1 необходимо убедиться, что система загружена в режиме 1 Orange Pi 6 plus 40pin (Device Tree).

    Режим SPI
  • Для систем с ядром Linux 6.6, использующих ACPI, убедитесь с помощью команды dmidecode, что версия BIOS - v1.0_for_opi6plus_linux_40pin

    sudo dmidecode -s bios-version

    Если это не так, то обратитесь к разделу Обновление BIOS на плате Orange Pi 6 plus, чтобы записать нужную версию BIOS

Проверьте, есть ли в Linux узел устройства spidev0.x. Если он существует, это значит, что SPI настроен и его можно использовать напрямую.

ls /dev/spidev

Без замыкания контактов MOSI и MISO SPI1 результат запуска команды spidev_test будет следующим:

sudo spidev_test -v -D /dev/spidev0.0
Режим SPI-1

Затем закоротите контакты MOSI и MISO SPI1 и снова запустите spidev_test. Вы можете видеть, что отправленные и полученные данные совпадают, что указывает на то, что шлейф SPI исправен

Режим SPI-2

I2C

  • В системах с ядром Linux 6.1 необходимо убедиться, что система загружена в режиме 1 Orange Pi 6 plus 40pin (Device Tree).

    Режим I2C
  • Для систем с ядром Linux 6.6, использующих ACPI, убедитесь с помощью команды dmidecode, что версия BIOS - v1.0_for_opi6plus_linux_40pin

    sudo dmidecode -s bios-version

    Если это не так, то обратитесь к разделу Обновление BIOS на плате Orange Pi 6 plus, чтобы записать нужную версию BIOS

Как видно из таблицы выше, в 40-контактном разъеме платы разработки есть 3 группы шин I2C: I2C-2, I2C-4 и I2C-5. Перед дальнейшими действиями с портами проверьте соответствие между I2C контроллера и именем узла устройства в /dev. Для этого используйте команду i2cdetect -l

sudo i2cdetect -l

В выведенном списке:

  • 0x04030000 представляет контроллер I2C2, соответствующий /dev/i2c-2
  • 0x04050000 представляет контроллер I2C4, соответствующий /dev/i2c-4
  • 0x04060000 представляет контроллер I2C5, соответствующий /dev/i2c-5

Затем подключите устройство I2C к соответствующим контактам 40-контактного интерфейса. Для удобства использования соответствующие контакты трех шин I2C показаны в следующей таблице:

Шина I2CSDASCL
I2C-235
I2C-44038
I2C-52728

Затем используйте команду i2cdetect -y.

  • для I2C-2

    sudo i2cdetect -y -r 2
  • для I2C-4

    sudo i2cdetect -y -r 4
  • для I2C-5

    sudo i2cdetect -y -r 5

Если устройство найдено, то отобразится его адрес.

Определение адреса подключенного устройства

UART

  • В системах с ядром Linux 6.1 необходимо убедиться, что система загружена в режиме 1 Orange Pi 6 plus 40pin (Device Tree).

    Режим I2C
  • Для систем с ядром Linux 6.6, использующих ACPI, убедитесь с помощью команды dmidecode, что версия BIOS - v1.0_for_opi6plus_linux_40pin

    sudo dmidecode -s bios-version

    Если это не так, то обратитесь к разделу Обновление BIOS на плате Orange Pi 6 plus, чтобы записать нужную версию BIOS

Как видно из таблицы выше, на 40-контактном разъеме есть 2 шины UART - UART1 и UART3.

Для просмотра информации о шинах UART можно испольовать команды ls /sys/class/tty/ttyAMA -l* или ls /dev/ttyAMA*

Вывод команды sudo dmesg | grep "ttyAMA. at` в ядре ACPI Linux 6.6 указывает, что:

  • 0x40c0000 соответствует UART1, размещенному в /dev/ttyAMA1
  • 0x40e0000 соответствует UART3, размещенному в /dev/ttyAMA3

Для тестирования порта нужно замкнуть между собой контакты TX и RX проверяемой шины:

Шина UARTRXTX
UART 11615
UART 3108

Используйте команду sudo serial /dev/ttyAMA1 для проверки функции обратной связи последовательного порта, как показано на рисунке ниже. Если вы видите, что содержимое чтения и записи согласовано, это означает, что функция последовательного порта работает нормально.

sudo serial /dev/ttyAMA1
sudo serial /dev/ttyAMA3
Режим I2C

PWM

  • В системах с ядром Linux 6.1 необходимо убедиться, что система загружена в режиме 1 Orange Pi 6 plus 40pin pwm (Device Tree).

    Режим I2C
  • Для систем с ядром Linux 6.6, использующих ACPI, убедитесь с помощью команды dmidecode, что версия BIOS - v1.0_for_opi6plus_linux_40pin_pwm

    sudo dmidecode -s bios-version

    Если это не так, то обратитесь к разделу Обновление BIOS на плате Orange Pi 6 plus, чтобы записать нужную версию BIOS

На 40-контактном разъеме присутствуют контакты 2 шин PWM - PWM3 и PWM5:

Шина UARTКонтакт на разъёме
PWM315
PWM57
  • В ОС на ядре Linux 6.1 соответствие шин PWM адресам можно увидеть из вывода команды ls /sys/класс/pwm/pwmchip -l*:

    • 0x4113000 соответствует PWM3 и pwmchip1
    • 0x4115000 соответствует PWM5 и pwmchip2
  • В системе с ядром Linux 6.6 в выводе команды ls /sys/класс/pwm/pwmchip -l* можно увидеть, что:

    • CIXH2011:3 соответствует PWM3 и pwmchip1
    • CIXH2011:5 соответствует PWM5 и pwmchip2

Затем используйте следующую последовательность команд, чтобы на выходе PWM3 ( для PWM5 команды будут аналогичные ) получить прямоугольный сигнал частотой 50 Гц:

  • Переключитесь на пользователя root

    sudo -i
  • Выключите шину

    echo 0 > /sys/class/pwm/pwmchip1/export
  • Задайте период импульса

    echo 20000 > /sys/class/pwm/pwmchip1/pwm0/period
  • Укажите рабочий цикл

    echo 10000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
  • Включите шину

    echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable

Для управления PWM5 нужно просто заменить в командах pwmchip1 на pwmchip2