- PVSM.RU - https://www.pvsm.ru -

iMX6ULL. Переход к процессорным модулям

iMX6ULL. Переход к процессорным модулям - 1
Доброго времени суток!
Внимание, много текста и фоток. На рынке можно встретить множество вариаций одноплатных ПК с шилдами или решения «все в одном». Одни заточены под конкретные задачи, например, сбор и отображение данных, другие универсальные и включают в себя всевозможные интерфейсы на все случаи жизни. Существенные отличия наблюдаются также и в конфигурации, типах крепления, соединительных разъемам, форм-факторе и т.д. Для чего разрабатывать свое устройство, спросите Вы, если можно выбрать уже имеющееся в продаже? Несколько лет назад, вертя в руках плату на IMX6Q – «BD-SL-i.MX6» от Freescale (читаем NXP) появилась идея сделать модуль, который бы …

1. Покрывал наши потребности по макетированию плат на IMX6. На тот момент уже было несколько проектов реализованных на этом чипе. Тут стоит пояснить что имея свой модуль и разработав для него материнскую плату под конкретный проект можно достаточно быстро протестировать всю периферию, «поднять» софт, внести изменения и перенести все на те самые 8 слоев, которые необходимы для IMX6Q (линейка этих чипов не ограничивается четырехъядерным вариантом, помимо QUAD, есть еще DUAL и SOLO – все «пин-ту-пин», что дает широкие возможности для реализации разных по функционалу устройств на основе одной «борды»). Напомню, что материнская плата может быть 4-слойной и даже 2-слойной, что значительно ускоряет сроки ее производства и снижает затраты.

2. Использовать модуль в качестве компонента и предоставить заказчику выбор: переносить все на одну плату или использовать как есть. Справедливости ради скажу, что не рассматривается использование покупных модулей под коммерческие проекты. Во-первых, не найти модуль, который всем бы устраивал (либо разъемов много, либо мало, либо крепежных отверстий нет, либо плата большая и т.д., в общем, кто искал под свои нужды, тот поймет), а, во-вторых, своя разработка всегда надежнее. Можно закидать меня помидорами, но я доверяю только себе.

3. Дать заказчику возможность разработать свое устройство на базе нашего модуля. Да – это тоже оказалось востребовано, но большую роль играет не то, что было описано выше (про сложности подбора модуля), а то, что это Российская разработка и производство. Видимо, слово «импортозамещение», очень сильно повлияло на нашу промышленность и разработку, в том числе.

IMX6 начало

Коротко о главном, но это не будет сутью статьи. Наш первый модуль на IMX6Q используется и сейчас в разработках, имеет размеры 50x75мм. OS Linux и Android.

iMX6ULL. Переход к процессорным модулям - 2
Рис. 1. Модуль на IMX6Q

Не буду перечислять его интерфейсы, достоинства и недостатки. На нем выведено почти все, что имеет чип и этого вполне хватает для реализации многих проектов. На борту стоит eMMC, интерфейсные разъемы, физика Ethernet гигабит и питание. Краткий экскурс закончен, теперь суть.

К чему мы пришли

Линейка IMX6 не заканчивается и на вышеперечисленных чипах. Уже появился IMX7, IMX8 в различных вариантах, но нас заинтересовала более слабая версия в меньших габаритах, урезанная по функционалу – это IMX6UL/IMX6ULL (они тоже «пин-ту-пин» между собой). Обратили внимание мы на него не просто так, а потому что появилось сразу несколько задач, связанных с передачей голоса по Ethernet по протоколу SIP, а также необходимость в разработке устройств в малых габаритах и без возможности отвода тепла. IMX6UL имеет на борту довольно неплохой набор для подключения периферии:

iMX6ULL. Переход к процессорным модулям - 3
Рис. 2. IMX6UL Block Diagram

Кому мало картинки, может залезть на сайт NXP и посмотреть подробности линейки данных чипов. Одним из удобств применения этого процессора является его корпус. Шаг его контактов 0.8мм, а контактная площадка 0.356мм (BGA), а это означает ровно то, что плату можно выполнить на 4-х слоях (что, в принципе, и сделано в референсной плате NXP на этот чип). Мы используем версию 14х14мм (также существует и 9х9мм с шагом 0.5мм).

Почему именно NXP, а не Broadcom, ST, Ali или еще какой-нибудь гигант по производству процессоров? На самом деле, все дело в доступности чипов, техподдержке и кроссплатформенности. Сделав модуль на IMX6Q мы относительно просто портировали софт на IMX6UL/IMX6ULL. Линейки чипов «пин-ту-пин», поэтому отладив ПО на UL можно перейти на более дешевый ULL. Второе – это низкое энергопотребление и как следствие малый нагрев. Я намеренно не привожу тех-параметры процессоров, итак много «воды» в статье, а эта информация общедоступная.

Один из интересных проектов, реализованных на IMX6ULэто устройство передачи голоса по Ethernet – SIP телефон, а по сути переговорное устройство.

iMX6ULL. Переход к процессорным модулям - 4
Рис. 3. SIP телефон.

О главном

Сердцем проекта является IMX6, на котором «крутится» OS с установленным SIP клиентом. Перед тем как загрузиться Linux, с отдельной SPI Flash грузится u-boot (загрузчик). Разделение загрузчика и основной прошивки сделаны не случайно (в отличие от референса), а для того, чтобы сделать устройство выносливым с неожиданным выключением питания. Если Вы начнете говорить об ubifs и read-only разделе на NAND, то я сильно расстроюсь. Практика показала, что даже самые лучшие микросхемы NAND имеют право умирать и делают это весьма неожиданно. Для связи с внешним Миром имеется интерфейс RMII, а на плате установлена Ethernet switch LAN9303 – 10/100 (данный IMX не поддерживает гигабит) и было необходимо два порта. IMX6UL имеет два порта RMII с роутингом, но была необходимость в именно в двух независимых интерфейсах в виде хаба.

Для хранения прошивки и файлов используется NAND (Остановились на Самсунг K9F1G08U0D в корпусе TSOP48. Не начинаем плеваться и не закрываем статью, так как память в таком форм-факторе при маленьких партиях очень дешевая, по сравнению с BGA63). Одна микросхема памяти DDR3 – K4B4G1646D, кодек ADAU1761. На кодеке стоит остановиться подробнее. До этого, в нескольких проектах использовался SGTL5000, но с ADAU жизнь стала намного веселее. Про него можно написать отдельную статью, но я постараюсь кратко изложить его суть в моем проекте. Мало того, что микросхема имеет 6 аналоговых входов, 7 выходов и, конечно, интерфейс I2S, так еще компания Analog Devices вместе с кодеком выпустила для него специализированное ПО для написания прошивок под встроенный DSP. Кому интересно, и кто не в курсе можете почитать инфу что такое DSP и с чем его едят.

iMX6ULL. Переход к процессорным модулям - 5
Рис. 4. ADAU1761 Block Diagram

Во время написания софта первым делом программисты наигрались с всевозможными функциями искажения, эхо подавления, фильтрования и микширования звука. На слух очень эффектно, я Вам скажу. Интерфейс очень дружественный, много настроек, фильтров, преобразований, возможности перенаправления звука и т.д.

iMX6ULL. Переход к процессорным модулям - 6
Рис. 5. SigmaStudio от Analog Devices

В проекте задействованы по 4 канала (вход/выход), так как имеются встроенные стереодинамики и микрофоны, а также разъемы для подключения внешних.

К плате (на рис. 3) стыкуется сверху периферийная плата, как раз с кодеком, сканером матричной клавиатуры и пр., про нее писать не стал.

Один из разъемов RJ45 используется для питания по PoE, в качестве Powered Device (PD) используется микросхема Si3402 от Silicon Laboratories. Схема включения использовалась практически стандартная без гальванической развязки с выходом 12В (напряжение настраивается резисторами). Немного отвлекусь, кому интересна тема PoE+ с гальваноразвязкой, существует очень хорошая микросхема от TI – LM5072MH-80. Отлично зарекомендовала себя в нескольких проектах.

Вторичные питания реализованы на DC/DC ST1S10PHR – не самые дешевые, не самые высокочастотные, но отлично работают и доступны вагонами. Вообще, у нас целый зоопарк DC/DC и LDO под разные нужды, но, когда важно качество, выбираем известных производителей.

На плате также имеются USBHOST, USBOTG и SD карта. Через USB и SD можно накатывать/обновлять прошивку. Обновление по сети также есть, но это уже относится к ПО и к web интерфейсу.

Немного о трассировке

Можно бесконечно постить гербера и куски трассировки плат, но я этого делать не буду, а затрону только основные и критичные моменты. Порядок слоев плат стандартный:

— TOP – сигнальный с полигоном земли
— GND – полигоны земли
— POWER – полигоны питания
— BOTTOM – сигнальный с полигоном земли

1. DDR3. С самостоятельной разводкой памяти нужно быть осторожными, поэтому я этого делать не стал, а взял за пример референс. Для трассировки используется только два слоя (top и bot), остальные два слоя не задействованы. Переходные отверстия 0.203/0.406мм, толщина линии 0.114мм. Изменил здесь только линии земли под процессором и сделал их немного толще – до 0.3мм. На слое GND получилась хорошая земля, в которой пришлось провести RGB интерфейс, что не совсем правильно, но другого варианта я просто не увидел со своим количеством интерфейсов на плате.

iMX6ULL. Переход к процессорным модулям - 7
Рис. 6. Трассировка памяти

iMX6ULL. Переход к процессорным модулям - 8
Рис. 7. Полигоны питания и земли

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

2. PoE, как я писал ранее, реализовано на микросхеме Si3402. Она разводится строго на четырех слоях платы с большими зазорами от основных полигонов. Думаю, на двух слоях она тоже заведется, но качество при этом никто не гарантирует. При проектировании узлов питания я обычно руководствуюсь evaluation board к микросхемам, а при тестировании сверяюсь с осциллограммами сигналов, приведенными в документации. Если как в референсе сделать не получается, из-за размеров или конфигурации платы, то приходится руководствоваться только опытом и здравым смыслом.

В слое питания для PoE выделен полигон 12В. Остальные слои используются для сигналов и полигонов земли PoE – GND_EXT. Все полигоны находятся строго друг под другом без «нахлестов» на соседние полигоны в других слоях. Отступ между полигонами PoE и основными порядка 1мм. При разработке PoE с гальванической развязкой я обычно дополнительно делаю вырез фрезой (при производстве плат) под трансформатором и оптронами обратной связи.

iMX6ULL. Переход к процессорным модулям - 9
Рис. 9. PoE. TOP.

3. Периферия. Доводилось мне делать разводку платы на чипе M3616 компании ALi Corporation, он имеет всего 292 шарика, но посмотрите, как качественно продуман процессор в плане облегчения трассировки платы. Как четко в нужном порядке выходят все интерфейсы. Внимание, плата разводится на двух слоях, а оперативка полностью в одном.

iMX6ULL. Переход к процессорным модулям - 10
Рис. 10. Полигоны питания и земли

На IMX6UL/IMX6ULL с интерфейсами пришлось повозиться. На рис. 6. можно увидеть на сколько плотно идут проводники и места для переходных отверстий не хватает, а выводить нужно из 5-ого ряда шариков. Тут главное соблюсти импеданс в дифференциальных парах (например, USB) и не переборщить с переходными отверстиями, так как от этого испортится полигоны земли и питания.

И все-таки модуль

Что не делай, а все равно получится модуль. Когда количество проектов на IMX6UL/IMX6ULL превзошло ожидания, а основной функционал был написан, было решено перейти на модульную систему, как и в прошлый раз, да еще и сделать это элегантно.

iMX6ULL. Переход к процессорным модулям - 11
Рис. 11. Модуль mx6ull-m02c на IMX6UL/IMX6ULL

Почему элегантно?

  1. Модуль выполнен в форм-факторе «на плату» и не имеет интерфейсных разъемов, дает возможность его использования как «микросхему».
  2. На бору он имеет только все необходимое: чип, DDR3, NAND, SPI, физику Ethernet, один питатель на 1,35В (что позволяет подавать на модуль только одно напряжение 3,3В), кварцы и пассив.
  3. Односторонний монтаж. Не каждое модульное решеное может похвастаться отсутствием компонентов на боттом. Это дает сразу несколько преимуществ: отвод тепла на материнскую плату, возможность трассировки под модулем (так как отсутствует вырез на плате для выступающих компонентов) и удешевление производства самих модулей (минус трафарет, переворот платы при монтаже и др.).
  4. Пады по периметру платы. Нет никаких сигнальных точек пайки под модулем.
  5. Размеры модуля всего 45x36мм.
  6. Как-нибудь расскажу про одно из устройств, разработанных на данном модуле, а пока фото материнской платы для отладки и написания софта.

iMX6ULL. Переход к процессорным модулям - 12
Рис. 12. Модуль IMX6UL/IMX6ULL на плате

Плата двухслойная и имеет интерфейсные разъемы, необходимые для запуска и работы. На таких платах мы проводим внутреннее тестирование на охлаждение и нагрев во время работы, проверяем устойчивость работы под нагрузкой и отлаживаем ПО.

Заключение

Что же конкретно дает модульная система, при разработке устройств?

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

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

В рамках одной статьи очень сложно написать все что хочется. Описание даже одного проекта занимает много букв, а хочется затронуть несколько проектов, поделиться впечатлениями о различной периферии, о используемых микросхемах, особенностях трассировки интерфейсов и т.п. Но главное, вовремя остановиться.

PS: ссылка на исходники github.com/trotill/adk_yocto [1]

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

Автор: the_bat

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/moduli/276542

Ссылки в тексте:

[1] github.com/trotill/adk_yocto: https://github.com/trotill/adk_yocto/

[2] Источник: https://geektimes.ru/post/299499/?utm_campaign=299499