Создание собственного ноутбука было моей давней мечтой. Сегодня, благодаря стремительному развитию ARM-архитектуры, эта затея перестала быть фантастикой и превратилась в реализуемый инженерный вызов.
В этой статье я поделюсь опытом проектирования портативного ARM-устройства: разберу доступные подходы к разработке, приведу знаковые примеры из мира DIY и опишу тернистый путь, полный неожиданных технических преград.
Введение
В отличие от классической x86-архитектуры, ARM-чипы объединяют множество периферийных узлов непосредственно на кристалле, что существенно упрощает разводку печатной платы. Существуют решения, такие как RV1106G3, где даже оперативная память интегрирована в корпус процессора. Подобная степень интеграции делает создание базовой компьютерной системы задачей не сложнее, чем проектирование платы для Arduino. Я уже касался темы компактных одноплатников, например, Luckfox Pico, в своей прошлой публикации.
Важным преимуществом ARM является энергоэффективность: TDP большинства таких процессоров укладывается в 5 Вт, что значительно облегчает проектирование системы питания и теплоотвода.
Кроме того, открытость документации и популярность одноплатных компьютеров играют на руку разработчикам — многие производители выкладывают принципиальные схемы, которые становятся отличным подспорьем при проектировании собственных систем.
Архитектурные концепции
Существует несколько стратегий построения материнской платы для мобильного устройства:
Кастомная разработка «с нуля»
Самый очевидный, но трудоемкий путь — полная разработка материнской платы с распаянным процессором и всей необходимой обвязкой.
Здесь возможны два сценария. Простой: взять процессор уровня RV1106G3, добавить микроконтроллер для эмуляции клавиатуры и вывода видео через UART/SPI. Это позволит создать минималистичный консольный Linux-ноутбук без сложной схемотехники. Правда, функциональность такого решения ограничена, и оно вряд ли подойдет для повседневных задач. Примеры близких по духу проектов — Beepberry и PicoCalc.

Сложный сценарий предполагает создание полноценного высокопроизводительного устройства. Это дорого, требует серьезных инженерных компетенций и редко встречается в любительской среде. Пожалуй, единственный яркий представитель — легендарный проект OpenPandora.

Использование Core-модулей
Этот подход предполагает использование готового модуля, содержащего SoC, ОЗУ, eMMC и беспроводные интерфейсы, который распаивается непосредственно на вашу несущую плату. Это упрощает разводку критических узлов, оставляя свободу творчества в реализации портов и периферии.

На практике здесь много подводных камней: качественные модули с доступной документацией — огромная редкость. Чаще всего приходится выбирать между «слабыми» чипами с поддержкой и мощными решениями, которые «черный ящик» для разработчика.
Compute-модули
Золотая середина — использование съемных compute-модулей. Установка через разъем позволяет легко апгрейдить «мозги» устройства. Платой за универсальность становится увеличенная толщина корпуса.

Стандартом индустрии здесь стала Raspberry Pi CM-серия. Поддержка сообществом и отличная совместимость с софтом породили целый класс устройств — «кибердеки». Среди наиболее известных — uConsole, Hackberry CM5 и DevTerm CM4.

Готовый одноплатник
Самый простой путь — взять готовый одноплатный ПК и расширить его возможности с помощью собственных «шилдов» (плат расширения). Примеры: Pi Flux, Beepberry, PocketTerm35.

Периферийные устройства
Компактность диктует жесткие требования к интерфейсам и эргономике.
Экран
Наиболее критичный и сложный узел:
-
Консольный вывод через UART-микроконтроллер: примитивно, но надежно.
-
SPI-дисплеи: просто реализовать, но производительность катастрофически мала для полноценного рабочего стола.
-
MIPI DSI: профессиональный стандарт. Максимальная интеграция, но полное отсутствие единых стандартов распиновки, закрытость документации и сложность настройки драйверов делают этот путь крайне тернистым.
-
HDMI: самый «безопасный» вариант с точки зрения программной поддержки, но требует использования громоздких конвертеров сигнала.
Клавиатура
Для создания эргономичного устройства лучше проектировать клавиатуру самостоятельно.
-
USB-HID: «золотой стандарт». Поддержка драйверов из коробки, обилие библиотек для микроконтроллеров (включая легковесный V-USB для AVR).
-
HID over I2C: технически изящно, но крайне трудоемко в реализации из-за дефицита документации и специфики настройки в Linux.
-
UART/SPI/I2C с проприетарным протоколом: дает полный контроль, но требует написания кастомных драйверов для ОС.
Что касается механики, популярны клавиатуры от BlackBerry или разборка готовых Bluetooth-решений с интеграцией их кнопок в свой корпус.
Мой экспериментальный образец
Оценив масштаб задачи, я решил пойти по пути наименьшего сопротивления: взял за основу плату в форм-факторе Raspberry Pi Zero. Моя цель — спроектировать лишь вспомогательную плату для клавиатуры, питания и адаптера дисплея.
Выбор пал на Radxa Zero 2 Pro из-за поддержки MIPI DSI. С экраном пришлось помучиться: выбрал 5-дюймовую матрицу на базе контроллера ST7701. В качестве интерфейса ввода взял M5Stack CardKB II.

Для питания я подобрал аккумулятор на 5000 мА·ч и сопутствующие модули заряда.

С какими сложностями я столкнулся
Главный просчет — нехватка портов у Radxa Zero 2 Pro. Два порта USB — это критически мало для периферии. К тому же, отсутствие поддержки сообщества у этой модели делает каждую программную проблему «квестом» на выживание.
Отдельная глава — дисплей. Оказалось, что даже распиновка с сайта продавца может быть ошибочной. Несмотря на попытки настройки драйвера, добиться изображения на DSI-интерфейсе я не смог, и сейчас мой опыт в этой области оказался недостаточным для диагностики проблемы.
Положительный опыт
Тем не менее, Armbian на плате завелся, производительность процессора и GPU оказалась вполне приемлемой для простых задач и CAD-проектирования. Я убедился в работоспособности UART, SPI и I2C. Автономность устройства радует — около 7 часов работы, что является достойным результатом для самодельной сборки.
Итоги
Путь DIY-разработчика полон сюрпризов. Простая на вид задача обрастает горами нюансов, которые невозможно просчитать на этапе планирования. Сейчас я взял паузу, чтобы переосмыслить подход. В планах — собрать прототип на «макетке» без ограничений по размеру, чтобы отладить каждый компонент, а уже потом упаковать всё в компактный и эргономичный корпус.


