Добавить в корзинуПозвонить
Найти в Дзене
FPV COVENANT

ELTAY RM66 первое знакомство: настройка UART, подключение камеры MIPI CSI и то, что не написано в документации

Когда нам первый раз попался ELTAY RM66, мы прошли мимо. Российский CM4-совместимый модуль звучало как маркетинговый ход с шильдиком поверх импортного железа. Но потом начали попадаться живые проекты на нём: OpenCV работает, камера по MIPI CSI подключается, гигабитный Ethernet тянет нормально. Купили, разобрались. Потеряли несколько часов на нюансах которые нигде не написаны явно. Теперь расскажем что там внутри, и где реально прячутся подводные камни. Форм-фактор тот же что у Raspberry Pi CM4 и Orange Pi CM4: плата 55 на 40 мм, 2 разъёма снизу для установки в плату расширения. Внутри чип Rockchip RK3566, четыре ядра Cortex-A55 на 1.8 ГГц, видеоускоритель Mali-G52. Конфигурации по памяти: LPDDR4 2, 4 или 8 ГБ. Хранилище: eMMC 5.1 от 16 до 64 ГБ. Беспроводные интерфейсы на чипе AP6256 - WiFi двухдиапазонный плюс Bluetooth 5.2. Вес 12 граммов. Из интересного: на борту есть NPU на 0.8 TOPS. Это нейросетевой ускоритель от Rockchip, небольшой по нынешним меркам, но для лёгкого детектировани
Оглавление

Когда нам первый раз попался ELTAY RM66, мы прошли мимо. Российский CM4-совместимый модуль звучало как маркетинговый ход с шильдиком поверх импортного железа. Но потом начали попадаться живые проекты на нём: OpenCV работает, камера по MIPI CSI подключается, гигабитный Ethernet тянет нормально. Купили, разобрались. Потеряли несколько часов на нюансах которые нигде не написаны явно. Теперь расскажем что там внутри, и где реально прячутся подводные камни.

Упаковка и комплектация ELTAY RM66
Упаковка и комплектация ELTAY RM66

Микрокомпьютер ELTAY RM66: характеристики комплекта

Форм-фактор тот же что у Raspberry Pi CM4 и Orange Pi CM4: плата 55 на 40 мм, 2 разъёма снизу для установки в плату расширения. Внутри чип Rockchip RK3566, четыре ядра Cortex-A55 на 1.8 ГГц, видеоускоритель Mali-G52. Конфигурации по памяти: LPDDR4 2, 4 или 8 ГБ. Хранилище: eMMC 5.1 от 16 до 64 ГБ. Беспроводные интерфейсы на чипе AP6256 - WiFi двухдиапазонный плюс Bluetooth 5.2. Вес 12 граммов.

Вид модуля ELTAY RM66 сверху
Вид модуля ELTAY RM66 сверху

Из интересного: на борту есть NPU на 0.8 TOPS. Это нейросетевой ускоритель от Rockchip, небольшой по нынешним меркам, но для лёгкого детектирования объектов или предобработки кадров его хватает. Не CUDA и не что-то серьёзное для трансформеров, но для optical flow и простых задач компьютерного зрения - работает.

По интерфейсам набор рабочий. Ethernet гигабитный. HDMI 2.0 до 4K@60fps. eDP 1.3 до 2560×1600. USB: 1 порт 3.0 и 3 порта 2.0. PCIe 2.0 x1, или альтернативно SATA 3.0 - одновременно не работают, выбирается на уровне device tree. 2 интерфейса MIPI DSI для дисплеев, 1 интерфейс MIPI CSI для камеры с пропускной способностью до 2.5 Гб/с. 28 линий GPIO на 3.3 В.

Вид модуля снизу
Вид модуля снизу

Питается от 5 В по USB-C, максимальный ток 3 А. Сам модуль формирует из них 3.3 В до 2 А и 1.8 В до 600 мА для периферии. Если планируете голодную периферию, берите источник питания с запасом - 5 В при 3 А это минимум под нагрузкой с подключённой камерой и WiFi.

Производит модуль новосибирская компания ELRON. У них есть нормальная документация на сайте с отдельными страницами по ОС, совместимости и GPIO. Armbian-поддержка появилась уже после первых релизов.

Микрокомпьютер ELTAY RM66: какую конфигурацию брать

Логика простая. 2 ГБ RAM хватит для задач без GUI: сервер, телеметрия, лёгкий Python-скрипт. Для OpenCV с камерой в реальном времени уже начинает давить, особенно если держите несколько потоков. Мы бы не брали 2 ГБ если планируете компьютерное зрение.

4 ГБ - нормальный рабочий вариант для большинства задач. Optical flow, Python с NumPy, несколько процессов параллельно - всё входит с запасом. 8 ГБ нужны если планируете Yolov8 или тяжелее, или хотите запускать десктопное окружение.

По eMMC: 16 ГБ хватит для минимальной ОС и вашего приложения. 32 ГБ комфортно. 64 ГБ нужны только если собираетесь хранить данные непосредственно на модуле, а не на внешней карте. Для записи образа берите SD-карту класса UHS-I U3, минимум 16 ГБ. Class 10 тоже работает, но первый boot будет медленнее.

В нашем случае модуль имеет 8 ГБ RAM и 32 ГБ eMMC.

Микрокомпьютер ELTAY RM66: операционные системы

Первое что надо усвоить: ELTAY RM66 совместим по распиновке с Orange Pi CM4, а не с Raspberry Pi CM4. Внешне разъёмы похожи, но распиновка разная. Официальная Raspberry Pi OS на него не встаёт - не "работает с ограничениями", а именно не встаёт. Другой вендор, другой бутлоадер, другой device tree.

ELRON официально указывает совместимые ОС: Ubuntu 22.04 и 20.04 LTS, Debian 12 и 11, Android 11, Orange Pi OS на базе Arch, OpenWRT. Все эти образы собраны для Orange Pi CM4 с тем же RK3566.

Для задач с Python, OpenCV, MAVLink мы бы ставили Armbian для Orange Pi 3B. Тот же чип, образы регулярно обновляются, репозитории Debian работают стандартно. Дефолтные данные для входа там root/1234. Документация ELRON на Armbian есть отдельная страница.

Ubuntu 22.04 LTS подходит для долгосрочных проектов, поддержка до 2027 года. Образы лучше брать у Joshua Riek (проект ubuntu-rockchip на гитхабе) - он специально собирает Ubuntu под Rockchip-платы. Дефолтный логин там root/orangepi. Не путайте: на официальных Ubuntu-образах от Orange Pi пароль orangepi, а не ubuntu/ubuntu - это от Joshua Riek другой проект.

Есть неофициальный порт Raspberry Pi OS от команды Orange Pi - он поднимается, но с гигабитной сетью там отдельная история, о ней в конце.

Микрокомпьютер ELTAY RM66: платы расширения

Здесь концентрируется большинство вопросов от людей которые только взяли модуль. Разбираем по порядку.

Родная плата ELRON (ELTAY BASE BOARD CM4) - лучший выбор по совместимости. Всё работает из коробки. Orange Pi CM4 Base Board тоже полная совместимость.

Waveshare CM4-NANO-B - компактная плата расширения, популярная для проектов с камерой. С ELTAY RM66 работает, но есть нюансы.

Waveshare CM4-NANO-B
Waveshare CM4-NANO-B

На плате есть переключатель BOOT. Позиция ON означает режим прошивки через USB, Linux не загружается вообще. Для нормальной работы переключатель должен быть в OFF. Звучит элементарно, но мы на этом теряли час - думали что модуль мёртвый.

Waveshare CM4-NANO-C - более компактная версия той же серии, без разъёма Ethernet на борту.

Waveshare CM4-NANO-C
Waveshare CM4-NANO-C

USB-A и USB-C есть, гигабитного порта нет совсем. Мы пробовали поднять на ней ELTAY RM66, но подключение по сети отложили: заказали переходник USB-Ethernet, пока ждём. Если нужна сеть прямо сейчас - берите CM4-NANO-B, там Ethernet есть.

Raspberry Pi CM4 IO Board - физически ELTAY RM66 в неё встаёт, но HDMI1 не работает и его активация может повредить модуль аппаратно. Это прямая цитата из документации ELRON. Не "зависнет" или "не покажет картинку", а аппаратное повреждение. На этой плате только HDMI2. Также там ограничено MIPI CSI: доступна только 1 линия из 4, что режет максимальное разрешение камеры.

Микрокомпьютер ELTAY RM66: первое включение

Мы для тестов, для начала попробуем модуль расширения Waveshare CM4-NANO-B и установленный образ Ubuntu 22.04 LTS (Jammy).

Запись скачанного образа производится стандартно через Raspberry Pi Imager (Windows).

После первой загрузки на официальных Ubuntu-образах от Orange Pi hostname будет orangepicmp4.

SSH открыт сразу, пароль root/orangepi.

IP проще всего найти в списке DHCP-клиентов при подключении к роутеру. Или через nmap -sn 192.168.x.0/24 если роутера нет под рукой.

SSH подключение:

ssh root@<IP-адрес>

# пароль: orangepi (для официального Ubuntu 22.04)

Первое подключение по SSH
Первое подключение по SSH

Что видно при первом boot:
-
Hostname: orangepicmp4
- OS: Orange Pi 1.0.6 Jammy
- Kernel: 5.10.160-rockchip-rk356x
- IP: выдаётся по DHCP

При подключении на прямую к MAC нужно убедиться что Internet Sharing на маке включён (WiFi → USB 10/100 LAN), иначе ELTAY не получит IP.

Базовые интерфейсы после загрузки: /dev/ttyS1 для UART, несколько шин I2C (/dev/i2c-0, /dev/i2c-1, /dev/i2c-3, /dev/i2c-6), eth0 для гигабитного Ethernet.

Первым делом после входа проверка ключевых интерфейсов:

Проверка ключевых интерфейсов
Проверка ключевых интерфейсов

# UART планируем использовать для MAVLink

ls /dev/ttyS*

# I2C планируем для подключения камеры

ls /dev/i2c-*

# Ethernet для настройки Eltay

ip a show eth0

Доступные интерфейсы:
/dev/ttyS1 - UART для MAVLink
/dev/i2c-0 /dev/i2c-1 -
I2C для камеры
/dev/i2c-3 /dev/i2c-6 -
Дополнительные I2C
eth0 -
Ethernet 1Gbit

Если всё на месте - обновление системы:

apt update && apt upgrade

Начинаем работать.

UART и overlays ELTAY RM66: главная ловушка

Это то что потеряло время нескольким людям на форумах, и что находится не сразу. Двойная ловушка, причём обе части не очевидны с первого взгляда.

В Linux на RK3566 UART-интерфейсы включаются через device tree overlay в файле /boot/orangepiEnv.txt. Максимум одновременно работают 5 UART (1 по умолчанию плюс 4 через overlays). Несколько overlays пишутся через пробел, не через запятую:

Включение overlay:

sudo nano /boot/orangepiEnv.txt

# Добавить строку:

overlays=uart9-m2

# Или несколько сразу (через ПРОБЕЛ, не запятую!):

overlays=uart2-m0 uart7-m2 uart9-m2

sudo reboot

Проверка после ребута:

ls -la /dev/ttyS*

# Должны появиться ttyS2, ttyS7, ttyS9 и т.д.

Проверка overlays
Проверка overlays

Отлично, всё как надо:

- ttyS1 - UART2, наш MAVLink к FC

- ttyS7 - UART7, наше дополнительное устройство TF02-Pro

Overlays подхватились корректно!

При запятой активируется только первый overlay, остальные молча игнорируются. Мы на это напоролись - думали что uart7-m2 просто не поддерживается, пока не перечитали документацию.

Первая ловушка: названия overlay не совпадают с номерами UART.

Maximum: 5 UART одновременно** (1 default + 4 через overlays)
Maximum: 5 UART одновременно** (1 default + 4 через overlays)

Overlay uart2-m0 включает UART3 (не UART2!).

Overlay uart3-m0 включает UART4.

Overlay uart7-m2 включает UART7.

Overlay uart9-m2 включает UART9.

Это не ошибка в документации - так устроена нумерация периферии в дереве устройств RK3566. Просто надо знать заранее, иначе потратите время в поисках /dev/ttyS2 которого нет.

Вторая ловушка, и серьёзнее: если планируете камеру по MIPI CSI, не включайте overlay uart9-m2. UART9 использует GPIO5 на пине 34, а этот пин на Waveshare CM4-NANO-B занят линией MIPI CSI. Включите uart9-m2 - камера перестаёт работать. Никакой ошибки при загрузке не будет, просто камера не инициализируется при попытке открыть. Час отладки гарантирован если не знать заранее.

Для работы одновременно с камерой и дополнительным UART используйте UART7.

КРИТИЧНО для Waveshare CM4-NANO-B
КРИТИЧНО для Waveshare CM4-NANO-B

Это ttyS7, overlay uart7-m2, пины 46 (TX) и 47 (RX). Этот UART с MIPI CSI не конфликтует.

UART2 (ttyS1) работает по умолчанию без overlay на пинах 51 (RX) и 55 (TX) - тоже безопасен.

Ключевые пины (GPIO)
Ключевые пины (GPIO)

Все GPIO на уровне 3.3 В - если подключаете что-то на 5 В, нужен делитель или согласователь уровней.

ELTAY RM66: Подключение камеры по MIPI CSI

В стоковом ядре 5.10.160-rockchip-rk356x для RK356x готовых camera overlay только два:

ls /boot/dtb/rockchip/overlay/ | grep -i "ov\|imx\|cam"

Видим только camera overlay - какие сенсоры поддерживает ядро из коробки
Видим только camera overlay - какие сенсоры поддерживает ядро из коробки

Видим только camera overlay - какие сенсоры поддерживает ядро из коробки

Для нашего RK3566 подходят только эти два:
rk356x-ov5647-c1.dtbo - RPi Camera (B), I2C bus 1
rk356x-ov5647-c2.dtbo -
RPi Camera (B), I2C bus 3

Оба для RPi Camera (B) с сенсором OV5647. IMX219, IMX477, SC3336, IMX290 - overlay под RK356x в ядре отсутствуют, потребуется кастомная dtbo.

Если нет времени разбираться с device tree - берите RPi Camera (B), она подключится сразу.

Выбираем камеру RPi Camera (B)
Выбираем камеру RPi Camera (B)

Подключать шлейф только при отключённом питании. CSI не поддерживает горячую замену.

Разница между c1 и c2 - не просто два варианта одного overlay, а разные I2C шины. Overlay c1 ищет камеру на I2C bus 1, overlay c2 ищет на bus 3.

На Waveshare CM4-NANO-B CSI разъём подключён к I2C bus 3. Если активировать c1 - камера не определится и никакой ошибки не будет, просто тишина.

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

i2cdetect -y 3

UU на адресе 0x36 - это камера.
UU на адресе 0x36 - это камера.

UU на адресе 0x36 - это камера. UU означает что устройство занято драйвером ядра, то есть overlay ov5647-c2 активен и камера уже захвачена системой.

Если на всех шинах пусто - переверните шлейф.

Шлейф бывает двух типов. Type A - контакты с одной стороны на обоих концах. Type B - контакты на разных сторонах (один конец лицом вверх, другой вниз). Если камера светится (питание есть), но I2C шина пустая - нужно перевернуть шлейф на одном конце.

Подключение камеры RPi Camera (B)
Подключение камеры RPi Camera (B)

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

nano /boot/orangepiEnv.txt

# Добавляем ov5647-c2 через пробел к overlays:

overlays=uart7-m2 ov5647-c2

reboot

После загрузки проверяем что камера определилась:

dmesg | grep ov5648

-16

Нас волнует строка:

Detected OV005647 sensor

Камера определилась. Остальные сообщения про Failed to get power-gpios и supply not found - не ошибки, просто в device tree не прописаны отдельные пины питания, но камера работает от общего питания модуля и это нормально для нашей конфигурации.

Проверим что видеоустройства появились:

v4l2-ctl --list-devices

-17

Всё на месте:
- video7 - сырой CSI вход, данные прямо с сенсора
- video8 - наш рабочий узел ISP, отсюда берём кадры через OpenCV
- video9-15 - дополнительные выходы ISP pipeline
- video16-17 - статистика ISP (экспозиция, баланс белого)

Failed to open /dev/video0 - не ошибка, просто /dev/video0 не существует, команда пытается его открыть по умолчанию.

Камера появляется не как /dev/video0, а как /dev/video8 - это нормально для ISP pipeline на RK3566. Видеоузел video7 это сырой CSI вход, video8 и дальше это ISP mainpath - именно отсюда берём кадры.

Камера готова к работе. Можно сделать тестовый снимок.

Тестовый захват ( код для Python):

import cv2
cap = cv2.VideoCapture('/dev/video8', cv2.CAP_V4L2)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
for i in range(5): cap.read() # ISP стабилизация
ret, frame = cap.read()
cv2.imwrite('/tmp/test.jpg', frame)

Обращаться нужно по пути устройства '/dev/video8', а не по числовому индексу 0 - иначе FAIL. После 5 пустых кадров ISP стабилизируется, дальше кадры приходят нормально. Поддерживаемые разрешения от 32×32 до 2592×1944.

Гигабитная сеть на Raspberry Pi OS

Если всё-таки решили ставить неофициальный Raspberry Pi OS - запомните: гигабитная сеть не работает нормально из коробки. Физически соединение поднимается, но из-за неправильных RGMII-таймингов нестабильное или принудительно падает до 100 мегабит.

Исправляется через fixup-скрипт для U-Boot.

Сначала переключаем на 100 мегабит чтобы вообще выйти в сеть и скачать нужный пакет:

sudo ip link set eth0 down
sudo ip link set eth0 address 02:e1:55:34:6e:4c
sudo ip link set eth0 up
sudo ethtool -s eth0 autoneg off speed 100 duplex full
sudo systemctl restart dhcpcd

Создаём fixup-скрипт с правильными RGMII-таймингами:

sudo apt install -y u-boot-tools
sudo install -d /boot/dtb/rockchip/overlay
sudo tee /boot/dtb/rockchip/overlay/rk356x-fixup.cmd >/dev/null <<'EOF'
fdt addr ${fdt_addr_r}
fdt set /ethernet@fe010000 phy-mode "rgmii-rxid"
fdt set /ethernet@fe010000 tx_delay <0x3f>
fdt set /ethernet@fe010000 rx_delay <0x00>
fdt set /ethernet@fe010000 local-mac-address [02 e1 55 34 6e 4c]
EOF
sudo mkimage -A arm -T script -C none -n "rk356x-fixup"
-d /boot/dtb/rockchip/overlay/rk356x-fixup.cmd
/boot/dtb/rockchip/overlay/rk356x-fixup.scr

Вернем автосогласование и перезагрузим:

sudo ethtool -s eth0 autoneg on
sudo reboot

После перезагрузки гигабит работает. На Armbian этой проблемы нет вообще - там RGMII-тайминги прописаны правильно в device tree. Если нет специфической причины тянуться к Raspberry Pi OS - берите Armbian, сэкономите час.

Что в итоге

ELTAY RM66 - отличный отечественный микрокомпьютер. Документация обновляется, раздел по сторонним ОС есть отдельно, Armbian упоминается с конкретными инструкциями. Для проектов где нужен компактный Linux с NPU, MIPI CSI и гигабитной сетью от российского вендора - вариант рабочий, без компромиссов по железу.

Подводные камни которые съедают время: BOOT jumper в позиции ON, overlay c1 вместо c2 для камеры на Waveshare, UART9 который убивает MIPI CSI, запятая вместо пробела в overlays, числовой индекс вместо пути устройства для видеозахвата. Всё это не написано в документации явно, а находится методом тыка.

В следующей нашей статье мы попробуем подключить внешнее устройство Лидар и получить с него данные. Ставим лайк)