habrahabr

Разработка мини-ПК на основе модуля SMARC

  • пятница, 6 декабря 2024 г. в 00:00:10
https://habr.com/ru/companies/selectel/articles/862978/


Приветствую, Хабр! После того, как были разработаны модуль SMARC и материнская плата для проверки всех его интерфейсов, я решил пойти немного дальше и сделать для себя мини-ПК. Хотелось получить маленькую коробочку с необходимыми мне разъемами для замены старенького настольного ПК. Что из этого получилось, рассказываю под катом.

Выбор корпуса


Начал я не с набора интерфейсов, как это принято, а с поисков корпуса. Хотелось иметь максимально компактные габариты с учетом SMARC-модуля размером 82х50 мм. Это не должен получиться кубик, поэтому я ограничился высотой 30-40 мм, чтобы иметь возможность добавить систему охлаждения. Немного покопавшись в интернете, нашел замечательный вариант размером 120х88х38 мм, черный из алюминия. Его я незамедлительно и приобрел.


Рис.1. Алюминиевый корпус 120х88х38 мм.

Китайцы даже положили запасные винтики, выключатель и кусочек провода (почему-то только один). Корпус я специально выбирал разъемный, скрепляющийся боковинами, чтобы можно было и отлаживать, и температуру измерить. Выглядит очень симпатично.

Внешние интерфейсы


Сам модуль использовал SECO Intel Atom x6425RE (SOM-SMARC-EHL (C93), если кому-то интересно). Просто он у меня уже был (на Intel). Модуль имеет довольно мощный четырехъядерный процессор (1,9ГГц). Также на борту eMMC 64 ГБ, LPDDR4x 16ГБ и полный фарш интерфейсов. Незадолго до заказа корпуса я решил определиться, что же мне все-таки нужно и как это расположить (а то вдруг и правда не влезет), чтобы все было оптимально и ничего не мешало.

На задней стенке вывел:
  1. Питание 12В. Блок питания на 5А тянет все без проблем.
  2. HDMI. Бывают еще совмещенные разъемы HDMI + DP, но я хотел все развести на четырех слоях платы, а еще добавить внутренние модули (много высокоскоростных линий данных).
  3. 2xUSB2.0. Отказался от внутреннего модуля Wi-Fi/Bluetooth в пользу внешних донглов на задней стенке. Корпус металлический, а ставить выносную антенну, как у моего первого сотового телефона, совсем не хотелось. Второй USB нужен для беспроводной клавиатуры/мышки.
  4. Гигабитный Ethernet. Хоть Wi-Fi и планируется, но проводной интерфейс решил оставить.


Рис.2. Интерфейсы на задней стенке ПК.

На передней стенке вывел:
  1. Светодиоды питания и работы. Индикация никогда не повредит. Можно было забахать даже третий светодиод активности диска, но не стал.
  2. Кнопка включения/выключения. Скорее всего, можно будет настроить для гибернации.
  3. Разъем гарнитуры. Вывел наушники и микрофон. Про кодек напишу ниже отдельно.
  4. Две кнопки: reset и recovery. Они будут утоплены, чтобы нажимать иголкой (надеюсь, не пригодятся).
  5. 2xUSB3.0. Для удобства использования высокоскоростные USB вывел Type-A, а не Type-C. Хотя было дикое желание сделать все, даже питание, на Type-C.



Рис.3. Интерфейсы на передней стенке ПК.

Кодек


Раз уж начал говорить про кодек, то продолжу. Модуль имеет интерфейс I2S. Сделал под него схему на NAU88C22YG (рекомендую). Как известно, для настройки кодека необходим I2C, чтобы можно было его конфигурировать. Полез в BIOS и застрял на час. Столько настроек я еще не видел. Так и не нашел, как мне для конкретного аудио интерфейса сделать привязку I2C.

А что с драйверами? Понял, что мне все это избыточно и вспомнил, что на SMARC есть еще два свободных USB2.0, которые просто не поместились в виде разъемов. Не так давно делал звуковую карту на PCM2912 и понял, что это как раз то, что нужно. Это USB2.0 кодек с одним микрофонным входом и стереовыходом. Драйвера под Windows/Linux для него есть. Если кому-то интересно – ниже схема.


Рис.4. Схема USB-кодека на PCM2912.

Для его питания необходимо только 5В. Получилось отличное и простое решение. Обвязки почти нет, а значит я получаю экономию места на плате и нервов на настройку.



Внутренние интерфейсы


На борту модуля, как я уже писал ранее, есть eMMC на 64 ГБ. Думаю, парочка интерфейсов для подключения SSD мне не помешает.

  1. Разъем для подключения SSD mSATA в формфакторе mini PCI-Е (52 контакта).
  2. Разъем для подключения SSD PCIE3.0x4 M.2 NGFF (75 контактов).
  3. Два разъема microUSB, запараллеленных с Type-A (USB_OTG), чтобы не колхозить кабель.
  4. Батарейка для RTC, формата CR1220. Хотел больше, но не поместилась (только если использовать вертикальный слот).
  5. Разъем для подключения кулера системы охлаждения с отслеживанием оборотов и возможностью выбора напряжения питания 5В/12В (джампер). В BIOS, кстати, можно настроить, какой тип вентилятора будет использоваться (3-wire/4-wire).
  6. Дип-переключатель (под модулем) для выбора режимов загрузки (eMMC, SATA, PCIE, USB и т.д.).


Рис.5. Внутренние интерфейсы ПК (bottom).

На bottom помимо SSD я разместил питание, схему управления вентилятором и кодек. mSATA по сравнению с M.2, конечно, великоват по габаритам.

Для питания модуля (5В) используется отдельный DC/DC MP8759GD на 8А. Точно такой же Buck формирует напряжения для USB (5В), а дальше пара питателей на 3,3В и 1,8В для SSD и внутренних цепей.


Рис.6. Внутренние интерфейсы ПК (top).

Из-за того, что я порезал большое количество интерфейсов (оставив только те, что мне необходимы), трассировка на четырех слоях оказалась не сложной. Было острое желание разместить все компоненты на одной стороне, но тогда понадобилось бы увеличение габаритов, да и для простоты отладки не хотел размещать ничего под модулем.


Рис.7. Плата в Альтиум.

Хотел вывести microSD карту, но не нашел, куда ее приткнуть. Очень не хотелось на длинную сторону, поэтому просто решил выкинуть. Есть USB картридеры, в конце концов.

Запуск и косяк


Включаю, а по HDMI ничего. И так, и сяк, вентилятор крутится, лампочки горят, все питания в норме, а изо нет. Начал разбираться с документацией на модуль. Английским по белому написано «2xDP++ 1.4 or 1xDP++ 1.4 and 1xHDMI 1.4 interfaces». Получается, что один интерфейс из двух может быть как DP++, так и HDMI – это понятно. Я даже вывел резистор выбора интерфейса… А вот и нет. Вывел, но для того DP, который не используется у меня на плате (использовался в другом проекте).


Рис.8. Ошибка в DP_AUX_SEL.

Обидно, единственный навесной провод на плате.


Рис.9. Первое (второе) включение.

И вот он, долгожданный рабочий стол Windows 10. Кулер я пока просто бросил на плату, даже без радиатора (температура проца 65-75 градусов, пока тыкал мышкой и ставил проги). Тепловыделение процессора всего 12Вт, так что она работает даже без вентилятора, но греется жутко. Попробую поиграться с радиатором, чтобы не ставить кулер, но думаю, пассивного охлаждения не получится.

Половины драйверов в установленной операционке не было, но на сайте SECO нашел архив на 1,2 ГБ, из которого все и установил.


Рис.10. Диски в системе.

Корпус и охлаждение


Корпус-то я, конечно, купил, но нужно еще как-то сделать вырезы под все разъемы. Как выпилить красиво, я пока еще не придумал. Сидеть точить надфилем – идея не из лучших, как мне кажется. Пока делаю чертеж, может, фрезеровку или что-то подобное получится замутить.

Присматриваюсь к системам охлаждения от ноутбуков. Думаю, это здравая мысль с учетом нехватки места в корпусе.


Рис.11. Система охлаждения ноутбука HP.

А вообще была еще одна грандиозная идея все это реализовать в корпусе от ноутбука. На модуле есть все необходимое, в том числе и LVDS для подключения матрицы. Уффф…

Спасибо за внимание и успехов!