Как мы разработали девкит Librem 5 полностью на свободном ПО

От переводчика: Librem 5 (на рендере) — защищённый смартфон под Linux от компании Purism, который создаётся на максимально открытом железе и софте за счёт краудфандинга.

Сегодня расскажем о разработке Librem 5 Developer Kit и о том, как мы использовали в его разработке только на 100% свободные программы.

Дизайн девкита опубликован на условиях лицензии GNU GPLv3+, аппаратный репозиторий Git лежит здесь.

KiCad — очевидный выбор EDA

Перед началом разработки было не совсем ясно, по какому пути разрабатывать проект. В частности, какой инструмент выбрать для автоматизации проектирования электроники (EDA). Изначально идея состояла в изменении платы i.MX 6QP OpenRex от FEDEVEL для соответствия всем требованиям к девкиту, но мы сразу столкнулись с двумя основными проблемами: там использовался архаичный процессор i.MX 6QP, а ещё хуже, что плата была разработана в проприетарной системе Altium. К счастью, у меня уже был опыт проектирования электроники с помощью EDA KiCad, поэтому мы сумели создать дизайн девкита, используя на 100% свободное ПО.

KiCad — очевидный выбор не только из-за свободной лицензии (GNU GPLv3+), но и потому, что это очень функциональный набор для проектирования электроники, который превосходит даже некоторые дорогие проприетарные инструменты.

Выбор компонентов, удовлетворяющих требованиям

Первый шаг при разработке девкита — поиск компонентов, отвечающих требованиям, определённым в ходе кампании. Кроме соблюдения заявленных спецификаций, при поиске компонентов мы решили добавить несколько дополнительных наворотов; в том числе:

  • контроллер заряда (BQ25896)
  • держатель батареи 18650 для дополнительного литий-ионного аккумулятора
  • USB-C
  • mini-HDMI
  • контроллер карты SD и разъём micro-SD (поскольку у i.MX 8M только два контроллера uSDHC)
  • Ethernet/RJ45
  • аудиокодек
  • динамик для наушника
  • микрофон
  • 4-полюсный разъём CTIA/AHJ для наушников 3,5 мм (с выбором между встроенным и внешним микрофоном)
  • разъём и умный кардридер GPG
  • вибромотор
  • программируемый LED
  • кнопки громкости и питания
  • аппаратные выключатели и переключатель режима загрузки
  • флэш-память 16Mb SPI NOR
  • часы реального времени (RTC)

Как и планировалось, мы добавили сквозные отверстия для отладочных контактов UART, которые по умолчанию не заняты (serial over USB работает на дефолтном образе, который поставляется с девкитом). Подсказка: если вы не любите паять, то хедеры поддерживают прессовую посадку, ищите номер детали Autosplice 23-1063. На плате предусмотрена опорная поверхность SMD 2×5 JTAG, а её функиональность проверена ещё на прототипе; если вам интересно поиграться, то ищите номер детали GRPB052VWQS-RC.

Для модема WWAN/baseband и WiFi+BT было ясно, что нужно найти какие-то готовые модули, например, с поверхностным креплением. На ранней стадии у Николь родилась блестящая идея использовать модули mPCIe и M.2, чтобы девкиты стали модульными, с возможностью апгрейда в будущем. В конце концов, мы остановились на модуле модема mPCIe SIMCom SIM7100A/E и модуле M.2 RedPine RS9116 Wi-Fi+BT.

Начало чертежа

По завершении фазы исследований следовало приступать к реализации наших идей. На рынке только появился процессор i.MX 8M Quad. Чтобы получить рывок со старта в разработке, а также добавить модульность и возможность будущих обновлений, мы выбрали вариант системы-на-модуле (SOM), включающий SoC, SDRAM, eMMC и PMIC. Но даже на ранних стадиях развития, когда мы только начинали рисовать схемы, ещё не начался серийный выпуск некоторых из интересующих нас SOM. Примерно в середине апреля мы установили хорошие отношения с компанией EmCraft, которая только приступила к первому крупному производственному циклу SOM и была близка к выпуску спецификации аппаратной архитектуры. Мы решили, что SOM от EmCraft и их ресурсы — именно то, что нам нужно. Как только был выбран конкретный SOM, мы сразу приступили к чертежу схем.

Процесс выбора конкретных компонентов для девкита проводился одновременно с составлением схем. Все работы проводились в системе контроля версий Git.


Рис. 1. Ранняя редакция схемы от 2 мая (хэш git-коммита 023915d5)

По завершении схем мы экспортировали файл netlist, что значительно приблизило нас к воплощению девкита в жизнь.

Моделирование HP_DET

Кроме KiCad, из свободного ПО мы ещё использовали инструмент под названием Qucs-S и SPICE-совместимый инструмент эмуляции Xyce для эмуляции микросхемы сенсора наушников, которая включает в себя стабилитрон для защиты соответствующего GPIO от слишком высокого или слишком низкого входного напряжения с выдачи HP DAC от аудиокодека. Сочетание Qucs-S и Xyce позволило использовать в микросхеме SPICE-модель диода MMSZ4688T1G, которая наилучшим образом представляет физическое состояние пустующего разъёма 3,5 мм с одновременно активным HP DAC.


Рис. 2. Моделирование схемы HP_DET с помощью Qucs-S и Xyce

Эта имитация, а также простой случай DC, где внутренний переключатель разъёма 3,5 мм открыт и 1MΩ доходит только до дефолтного напряжения 3V3_P — это позволило убедиться, что конкретный метод защиты действительно работает.

Создание площадок

Примерно в середине июня мы завершили составление списка материалов (BOM), начали размещать заказы на компоненты и стали создавать очертания всех площадок в устройстве (чипы, разъёмы, модули и т. д.). Мы взяли рекомендуемые характеристики из документации и четырежды проверили, что всё правильно.


Рис. 3. Площадка контроллера заряда BQ25896 (U301 на dev-плате, находится под SOM)

В великолепном режиме 3D-просмотра KiCad мы создали трёхмерные очертания почти всех компонентов.


Рис. 4. 3D-модель контроллера заряда BQ25896

Поуровневое планирование, разводка и обновление KiCad

На раннем этапе был составлен грубый поуровневый план, чтобы быстро прикинуть, какая площадь интегральной схемы будет задействована (90×180 мм) и куда поместить более крупные компоненты (разъёмы, гнёзда, слоты для карт, сокеты mPCIe и M.2, модули и т. д.). После размещения на макете некоторые детали ещё двигались, но быстро закрепились на конкретных местах.

В конце июня мы начали прокладывать разводку, начиная с USB-C (коммит a1bfc689). Это положило начало макетированию.


Рис. 5. Первый коммит с разводкой


Рис. 6. Какой в итоге стала разводка USB-C


Рис. 7. Ранний вариант схемы до размещения компонентов и разводки

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

Изначально не было уверенности, сколько нужно слоёв и нужно ли размещать компоненты с обеих сторон платы. Мы знали, что на плате i.MX 8M восемь слоёв и компоненты с обеих сторон, но были уверены, что сможем сократить количество слоёв. Мы быстро поняли, что с обратной стороны платы обязательно придётся размещать компоненты, потому что на телефоне некоторые модули находятся на «задней» стороне платы (сторона дисплея), включая разъёмы дисплея, датчик приближения/света, программируемый светодиод, динамик и микрофон. Наличие компонентов с обеих сторон сделало процесс компоновки несколько проще, так как освободило немного места, где можно разместить флэш-память SPI NOR, кардридер, RTC, 2.8V LDO, различные ИС и другие компоненты. Что касается количества слоёв, мы решили сократить его до шести. Ещё два дополнительных слоя решили добавить, только если застрянем в тупике и не сможем проложить какие-то сети. К счастью, этого не произошло и остался дизайн с шестью слоями.

Мы решили использовать общую компоновку, которая обеспечивает оптимальный баланс между простотой разводки и сокращает непреднамеренные выбросы излучения. В качестве диэлектрической подложки взяли слоистый пластик с медной фольгой NP-180TL от NAN YA, у которого относительная диэлектрическая проницаемость около 4,11 при нашей средней рабочей частоте около 1,7 ГГц. Наши расчёты питающей линии RF для микрополосковых и копланарных волноводных питающих линий платы (CPW) с использованием такой компоновки можно найти в репозитории Git.


Рис. 8: Схема слоёв девкита

Перед реализацией девкита в KiCad мы не знали, выпускать альфа-версии или придерживаться классических более стабильных релизов типа 4.0.7. Хотя у «ночных сборок» есть несколько полезных особенностей, мы всё-таки решили придерживаться стабильных релизов, чтобы не приходилось часто обновлять KiCad и рисковать появлением нескольких одновременных версий.

Когда мы уже начали работу, вышла версия KiCad 5.0.0! 16 июля мы без особых проблем обновили проект до KiCad 5.0.0 (в частности, коммиты 4f70b865 и a4e3de8a). К счастью, это обновление совпало с переходом большинства наших пассивных компонентов с 0603 на 0402, так как новые площадки в KiCad немного отличаются от старых значений по умолчанию, а у площадок закругленные углы, более эффективные для бессвинцового припоя.

После обновления на 5.0.0 мы сосредоточились на макетировании — и в течение месяца (а именно, 14 августа с коммитом 9b4dd2e0) довели количество неразведённых сетей до нуля.


Рис. 9: Релиз-кандидат от 14 августа с коммитом 9b4dd2e0 зафиксировал нулевое количество неразведённых сетей

После завершения разводки и проверки Design Rules Check (DRC) мы в течение недели наводили порядок в макете.

При макетировании платы самыми полезными ресурсами стали справочник по макетированию интегральных схем из официальной документации и Руководство по макетированию Toradex.


Рис. 10. Окончательный макет (области с медным покрытием скрыты)

Экспорт файлов и отправка на производство

После завершения макета нужно было экспортировать все файлы, необходимые для производства и сборки плат. Экспорт файлов Gerber в KiCad осуществляется довольно просто. Однако, подрядчик запросил ещё схему и макет для сборки, что потребовало некоторых усилий.

Для предварительного просмотра файлов при экспорте мы обычно использовали Gerbv из gEDA. Вот как выглядит наш девкит в Gerblook — этот инструмент применяет для веб-рендеринга Gerbv и ImageMagick.


Рис. 11. Файлы Gerber девкита при просмотре в Gerbv

Для создания чертежа требуемого вида мы задействовали слои F.Fab/B.Fab. Они отображают местоположения, контуры, полярность и опорные обозначения всех компонентов на плате. С помощью слоёв F/B.Fab для каждой площадки нам удалось создать окончательный чертёж, распечатав F.Fab и B.Fab в отдельные файлы PDF, а затем объединив в один документ.


Рис. 12. Схема со стороны SOM

Ещё больше пришлось потрудиться над схемой для производства. Чтобы её сделать, нужно было экспортировать заметки со слоя Cmts.User вместе с контуром платы как один архив DXF, а после этого экспортировать все метки для высверливания отверстий как другой архив DXF. После создания этих двух файлов они объединяются и в чертеже всей площадки (footprint). Получив этот особый “footprint”, который объединяет два файла DXF, мы почти всё в макете скрываем — и импортируем этот специальный футпринт «для завода» (без сохранения временного макета). На данный момент всё, что нужно, находится на слое Dwgs.User; поэтому можно распечатать его вместе с каркасом в окончательный PDF для производства.


Рис. 13. Метки для высверливания отверстий

Вместе со всеми этими файлами и документами используется список соединений IPC-D-356, с помощью которого завод может провести тест по методу «летающего щупа» и убедиться в отсутствии короткого замыкания или обрыва цепи. Также мы подготовили CSV-файл (чтобы на заводе знали, где размещать и как ориентировать все компоненты), и, наконец, вручную отредактированный файл GenCAD (для программирования заводского паяльного робота).

Испытания прототипов

Мы отправили окончательные файлы для производства, ответили на все вопросы подрядчика и изменили всё, что они попросили. Файлы были отправлены примерно в конце августа — и мы с нетерпением ждали, когда наш дизайн попадёт на конвейер в Шэньчжэне. К сожалению, как мы рассказывали в блоге, значительные задержки в производстве прототипов произошли из-за непредвиденных обстоятельств, таких как суровая погода и Золотая неделя [национальный праздник в Китае — прим. пер.]. Из-за этих задержек мы решили заказать производство прототипов на отечественном заводе, который доставил нам платы на две недели быстрее, чем китайцы.


Рис. 14. Прототип панели девкита v0.1.2 (перед сборкой)

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

Окончательное производство и поставка

Примерно в начале-середине ноября, после внесения незначительных корректировок в дизайн и проверки почти всех аппаратных подсистем, мы провели процедуру реэкспорта и повторно выпустили файлы для производства и окончательной сборки. Некоторые наши сотрудники провели 10-22 декабря, помогая со сборкой, тестированием, упаковкой и отправкой девкитов нашим бейкерам (многие доставили до Рождества!)


Рис. 15. Окончательный вид панели девкита v1.0.0 (до сборки)



Рис. 16. Полностью собранный девкит по сравнению с 3D-моделью (сторона дисплея)


Рис. 17. Полностью собранный девкит по сравнению с 3D-моделью (сторона SOM)

Весь процесс потребовал много усилий, но стоил того. Особенно когда мы увидели, как плодотворно сообщество может использовать результаты нашего труда. Некоторые уже начали разрабатывать 3D-печатные корпуса для девкита. Не терпится посмотреть, какое классное ПО и какие варианты использования вы придумаете для этих удивительных плат! Не стесняйтесь сообщать обо всех классных штуках по электронной почте на feedback@puri.sm. Если это действительно супер, мы расскажем о вашей разработке в будущих статьях блога.

Сейчас у нас всё время уходит на рассылку телефонов Librem 5. Так что до следующего раза, не теряйте находчивости!

FavoriteLoadingДобавить в избранное
Posted in Без рубрики

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *