Когда нам первый раз попался ELTAY RM66, мы прошли мимо. Российский CM4-совместимый модуль звучало как маркетинговый ход с шильдиком поверх импортного железа. Но потом начали попадаться живые проекты на нём: OpenCV работает, камера по MIPI CSI подключается, гигабитный Ethernet тянет нормально. Купили, разобрались. Потеряли несколько часов на нюансах которые нигде не написаны явно. Теперь расскажем что там внутри, и где реально прячутся подводные камни.
Микрокомпьютер 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 граммов.
Из интересного: на борту есть 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 работает, но есть нюансы.
На плате есть переключатель BOOT. Позиция ON означает режим прошивки через USB, Linux не загружается вообще. Для нормальной работы переключатель должен быть в OFF. Звучит элементарно, но мы на этом теряли час - думали что модуль мёртвый.
Waveshare CM4-NANO-C - более компактная версия той же серии, без разъёма Ethernet на борту.
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)
Что видно при первом 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 и т.д.
Отлично, всё как надо:
- ttyS1 - UART2, наш MAVLink к FC
- ttyS7 - UART7, наше дополнительное устройство TF02-Pro
Overlays подхватились корректно!
При запятой активируется только первый overlay, остальные молча игнорируются. Мы на это напоролись - думали что uart7-m2 просто не поддерживается, пока не перечитали документацию.
Первая ловушка: названия overlay не совпадают с номерами UART.
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.
Это ttyS7, overlay uart7-m2, пины 46 (TX) и 47 (RX). Этот UART с MIPI CSI не конфликтует.
UART2 (ttyS1) работает по умолчанию без overlay на пинах 51 (RX) и 55 (TX) - тоже безопасен.
Все 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 - какие сенсоры поддерживает ядро из коробки
Для нашего 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), она подключится сразу.
Подключать шлейф только при отключённом питании. 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 означает что устройство занято драйвером ядра, то есть overlay ov5647-c2 активен и камера уже захвачена системой.
Если на всех шинах пусто - переверните шлейф.
Шлейф бывает двух типов. Type A - контакты с одной стороны на обоих концах. Type B - контакты на разных сторонах (один конец лицом вверх, другой вниз). Если камера светится (питание есть), но I2C шина пустая - нужно перевернуть шлейф на одном конце.
После физического подключения активируем нужный overlay:
nano /boot/orangepiEnv.txt
# Добавляем ov5647-c2 через пробел к overlays:
overlays=uart7-m2 ov5647-c2
reboot
После загрузки проверяем что камера определилась:
dmesg | grep ov5648
Нас волнует строка:
Detected OV005647 sensor
Камера определилась. Остальные сообщения про Failed to get power-gpios и supply not found - не ошибки, просто в device tree не прописаны отдельные пины питания, но камера работает от общего питания модуля и это нормально для нашей конфигурации.
Проверим что видеоустройства появились:
v4l2-ctl --list-devices
Всё на месте:
- 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, числовой индекс вместо пути устройства для видеозахвата. Всё это не написано в документации явно, а находится методом тыка.
В следующей нашей статье мы попробуем подключить внешнее устройство Лидар и получить с него данные. Ставим лайк)