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

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

Все выводы 26-контактного разъёма по умолчанию работают как GPIO. Помимо режима GPIO, отдельные выводы могут использовать альтернативные функции - UART, I2C, SPI, PWM.
Включение альтернативных функций производится через Device Tree overlay-файлы, которые переводят выбранные выводы в соответствующий аппаратный режим.

Подключение overlay-файлов​

Исходные файлы overlay для платы Eltay RM88S на Orange Pi CM5 Tablet Base Board располагаются в каталоге:

board/eltay/rm88s/op_tablet_baseboard/overlays/

После сборки соответствующие .dtbo должны находиться в образе по пути:

/boot/overlays/

Для включения одного или нескольких интерфейсов необходимо добавить параметр fdtoverlays в используемую секцию файла /boot/extlinux/extlinux.conf.

Пример включения одного overlay:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart4.dtbo

При одновременном включении нескольких совместимых overlay все файлы указываются в одной строке через пробел. Например:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart1.dtbo /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-i2c4.dtbo /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-spi0-cs0.dtbo

После изменения extlinux.conf устройство необходимо перезагрузить.

При изменении только overlay-файлов пересборка ядра не требуется. Достаточно повторно собрать образ/rootfs, чтобы обновленные .dtbo были помещены в /boot/overlays/.


Использование выводов в режиме GPIO​

Все сигнальные выводы разъема по умолчанию могут использоваться как GPIO, если не подключен overlay-файл, переводящий соответствующий вывод в аппаратную функцию UART, I2C, SPI или PWM.

Распиновка 26-контактного разъема:

НомерСигналНомерСигнал
13V325V
3GPIO1_B745V
5GPIO1_B66GND
7GPIO1_A38GPIO1_D0
9GND10GPIO1_D1
11GPIO1_D212GPIO1_A2
13GPIO1_D314GND
15GPIO1_B016GPIO1_A4
173V318GPIO1_A6
19GPIO1_B220GND
21GPIO1_B122GPIO1_A7
23GPIO1_B324GPIO1_B4
25GND26GPIO1_B5

Все сигнальные GPIO разъема относятся к gpiochip1.

Соответствие выводов GPIO-контроллеру и смещениям линий:

Вывод разъемаGPIOGPIO-контроллерСмещение линии
3GPIO1_B7gpiochip115
5GPIO1_B6gpiochip114
7GPIO1_A3gpiochip13
8GPIO1_D0gpiochip124
10GPIO1_D1gpiochip125
11GPIO1_D2gpiochip126
12GPIO1_A2gpiochip12
13GPIO1_D3gpiochip127
15GPIO1_B0gpiochip18
16GPIO1_A4gpiochip14
18GPIO1_A6gpiochip16
19GPIO1_B2gpiochip110
21GPIO1_B1gpiochip19
22GPIO1_A7gpiochip17
23GPIO1_B3gpiochip111
24GPIO1_B4gpiochip112
26GPIO1_B5gpiochip113

Перед использованием можно проверить линии:

gpioinfo gpiochip1

Например, для установки вывода 15 (GPIO1_B0) в единичное состояние:

gpioset -m wait gpiochip1 8=1

Команда удерживает линию до завершения процесса. Для выхода нажать Ctrl+C.

Для чтения состояния вывода 15:

gpioget gpiochip1 8

После включения overlay соответствующие линии заняты драйвером периферийного контроллера и не должны одновременно использоваться как GPIO.


Включение UART​

На разъем выведены три интерфейса UART: UART1, UART4 и UART6. Уровень логических сигналов составляет 3,3 В.

UART1​

Сигналы UART1:

UART1_RX_M1 -> GPIO1_B7 -> вывод 3
UART1_TX_M1 -> GPIO1_B6 -> вывод 5

Для включения UART1 используется overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-uart1.dtbo

Строка в /boot/extlinux/extlinux.conf:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart1.dtbo
внимание

UART1 использует те же выводы, что I2C5, а вывод 3 также используется PWM13. Поэтому overlay UART1 нельзя подключать одновременно с overlay-файлами для I2C5 или PWM13.

После перезагрузки проверить регистрацию контроллера:

dmesg | grep -Ei 'ttyS1|uart1|feb40000|serial'
ls -l /dev/ttyS1

Ожидается регистрация:

feb40000.serial: ttyS1 ... is a 16550A

UART1 доступен как:

/dev/ttyS1

UART4​

Сигналы UART4:

UART4_TX_M0 -> GPIO1_D2 -> вывод 11
UART4_RX_M0 -> GPIO1_D3 -> вывод 13

Для включения UART4 используется overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-uart4.dtbo

Строка в /boot/extlinux/extlinux.conf:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart4.dtbo
внимание

UART4 нельзя использовать одновременно с SPI1, поскольку SPI1 использует оба вывода UART4. Вывод 11 также используется как PWM0.

Проверка после перезагрузки:

dmesg | grep -Ei 'ttyS4|uart4|feb70000|serial'
ls -l /dev/ttyS4

Ожидается:

feb70000.serial: ttyS4 ... is a 16550A

UART4 доступен как:

/dev/ttyS4

UART6​

Сигналы UART6:

UART6_TX_M2 -> GPIO1_D0 -> вывод 8
UART6_RX_M2 -> GPIO1_D1 -> вывод 10

Для включения UART6 используется overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-uart6.dtbo

Строка в /boot/extlinux/extlinux.conf:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart6.dtbo
внимание

UART6 нельзя использовать одновременно с SPI1, поскольку выводы 8 и 10 используются как SPI1_MISO_M2 и SPI1_MOSI_M2.

Проверка:

dmesg | grep -Ei 'ttyS6|uart6|feb90000|serial'
ls -l /dev/ttyS6

Ожидается:

feb90000.serial: ttyS6 ... is a 16550A

UART6 доступен как:

/dev/ttyS6

Одновременная работа UART​

UART1, UART4 и UART6 используют разные физические выводы и могут быть включены одновременно:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart1.dtbo /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart4.dtbo /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-uart6.dtbo

Включение I2C​

На разъем выведены две шины I2C - I2C4 и I2C5.

Линии SDA и SCL должны иметь подтягивающие резисторы к 3,3 В. Если подтяжки отсутствуют на подключаемом модуле, их необходимо установить на внешней плате.

I2C4​

Сигналы I2C4:

I2C4_SCL_M3 -> GPIO1_A3 -> вывод 7
I2C4_SDA_M3 -> GPIO1_A2 -> вывод 12

Для включения используется overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-i2c4.dtbo

Строка в /boot/extlinux/extlinux.conf:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-i2c4.dtbo
внимание

I2C4 нельзя включать одновременно с PWM1, поскольку вывод 7 используется обоими интерфейсами.

После перезагрузки проверить появление шины:

ls -l /dev/i2c-*

for d in /sys/class/i2c-dev/i2c-*; do
echo "$d -> $(readlink -f "$d/device")"
done

Для I2C4 аппаратному контроллеру соответствует:

feac0000.i2c

Шина доступна как:

/dev/i2c-4

Для поиска устройств:

i2cdetect -y -r 4

Примеры обмена:

# запись одного байта 0x10 в устройство с адресом 0x42
i2ctransfer -y 4 w1@0x42 0x10

# чтение четырех байтов из устройства с адресом 0x42
i2ctransfer -y 4 r4@0x42

I2C5​

Сигналы I2C5:

I2C5_SDA_M3 -> GPIO1_B7 -> вывод 3
I2C5_SCL_M3 -> GPIO1_B6 -> вывод 5

Для включения используется overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-i2c5.dtbo

Строка:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-i2c5.dtbo
внимание

I2C5 нельзя включать одновременно с UART1 или PWM13.

Аппаратному контроллеру соответствует:

fead0000.i2c

Шина доступна как:

/dev/i2c-5

Проверка:

i2cdetect -y -r 5

Одновременная работа I2C​

I2C4 и I2C5 используют разные выводы и могут работать одновременно.


Включение SPI​

На разъем выведены две SPI-шины: SPI0_M2 и SPI1_M2.

Тестовые overlay создают spidev, позволяющий работать с SPI из userspace.

SPI0​

Сигналы SPI0:

SPI0_MOSI_M2 -> GPIO1_B2 -> вывод 19
SPI0_MISO_M2 -> GPIO1_B1 -> вывод 21
SPI0_CLK_M2 -> GPIO1_B3 -> вывод 23
SPI0_CS0_M2 -> GPIO1_B4 -> вывод 24
SPI0_CS1_M2 -> GPIO1_B5 -> вывод 26

Для SPI0 подготовлены три overlay. В конфигурации необходимо использовать только один из них:

  • SPI0 с CS0

    fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-spi0-cs0.dtbo

    Создается:

    /dev/spidev0.0
  • SPI0 с CS1

    fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-spi0-cs1.dtbo

    Создается:

    /dev/spidev0.1
  • SPI0 с двумя chip select

    fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-spi0-dual-cs.dtbo

    Создаются:

    /dev/spidev0.0
    /dev/spidev0.1
примечание

SPI0 использует отдельную группу выводов и может работать одновременно с подготовленными UART, I2C и PWM overlay.

Проверка после перезагрузки:

dmesg | grep -Ei 'spi0|spidev|feb00000'
ls -l /dev/spidev*

SPI1​

На разъем выведен только CS0 интерфейса SPI1:

SPI1_MISO_M2 -> GPIO1_D0 -> вывод 8
SPI1_MOSI_M2 -> GPIO1_D1 -> вывод 10
SPI1_CLK_M2 -> GPIO1_D2 -> вывод 11
SPI1_CS0_M2 -> GPIO1_D3 -> вывод 13

Для включения SPI1 используется overlay:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-spi1-cs0.dtbo
внимание

SPI1 нельзя включать одновременно с UART4, UART6 или PWM0.

Создается:

/dev/spidev1.0

Проверка:

dmesg | grep -Ei 'spi1|spidev|feb10000'
ls -l /dev/spidev*

Подключение реального SPI-устройства с kernel-драйвером​

Тестовые overlay создают spidev. Для штатной работы с устройством, имеющим собственный драйвер ядра, узел spidev следует заменить описанием конкретного устройства.

Например, для устройства на SPI0 CS0:

&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0m2_pins &spi0m2_cs0>;
num-cs = <1>;
status = "okay";

#address-cells = <1>;
#size-cells = <0>;

device@0 {
compatible = "vendor,device-name";
reg = <0>;
spi-max-frequency = <5000000>;
};
};

Значение compatible должно соответствовать драйверу подключенного устройства.


Включение PWM​

На 26-контактный разъем выведены четыре независимых PWM-контроллера:

PWM0_M1 -> GPIO1_D2 -> вывод 11
PWM1_M2 -> GPIO1_A3 -> вывод 7
PWM3_M3 -> GPIO1_A7 -> вывод 22
PWM13_M2 -> GPIO1_B7 -> вывод 3

Для каждого выхода используется отдельный overlay:

rk3588s-eltay-rm88s-on-op-cm5-tablet-pwm0.dtbo
rk3588s-eltay-rm88s-on-op-cm5-tablet-pwm1.dtbo
rk3588s-eltay-rm88s-on-op-cm5-tablet-pwm3.dtbo
rk3588s-eltay-rm88s-on-op-cm5-tablet-pwm13.dtbo

Например, для PWM13:

fdtoverlays /boot/overlays/rk3588s-eltay-rm88s-on-op-cm5-tablet-pwm13.dtbo

Несколько PWM overlay можно подключать одновременно, если их выводы не заняты другими включенными интерфейсами.

внимание

Ограничения совместного использования:

  • PWM0 нельзя использовать одновременно с UART4 или SPI1.
  • PWM1 нельзя использовать одновременно с I2C4.
  • PWM13 нельзя использовать одновременно с UART1 или I2C5.

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

for chip in /sys/class/pwm/pwmchip*; do
[ -e "$chip" ] || continue
echo "$chip -> $(basename "$(readlink -f "$chip/device")")"
done

Контроллерам соответствуют адреса:

fd8b0000.pwm -> PWM0 -> вывод 11
fd8b0010.pwm -> PWM1 -> вывод 7
fd8b0030.pwm -> PWM3 -> вывод 22
febf0010.pwm -> PWM13 -> вывод 3
febf0030.pwm -> PWM15 -> штатный вентилятор Tablet Base Board

Номера pwmchipN назначаются ядром динамически. Нужный PWM следует определять по адресу устройства, а не по номеру pwmchip.

PWM15 занят драйвером штатного вентилятора и не должен экспортироваться или перенастраиваться вручную.

Каждый из PWM0, PWM1, PWM3 и PWM13 содержит канал 0.

Например, если нужный контроллер определился как:

/sys/class/pwm/pwmchip2 -> febf0010.pwm

то для работы с PWM13 задайте:

PWMCHIP=/sys/class/pwm/pwmchip2

Экспортировать канал:

[ -d "$PWMCHIP/pwm0" ] || echo 0 > "$PWMCHIP/export"

Запустить сигнал частотой 1 кГц с коэффициентом заполнения 50%:

echo 0 > "$PWMCHIP/pwm0/enable" 2>/dev/null
echo 1000000 > "$PWMCHIP/pwm0/period"
echo 500000 > "$PWMCHIP/pwm0/duty_cycle"
echo normal > "$PWMCHIP/pwm0/polarity" 2>/dev/null
echo 1 > "$PWMCHIP/pwm0/enable"

Параметры задаются в наносекундах:

period = 1000000 нс = 1 мс = 1 кГц
duty_cycle = 500000 нс = 50%

Остановить генерацию:

echo 0 > "$PWMCHIP/pwm0/enable"

Освободить канал:

echo 0 > "$PWMCHIP/unexport"