Запуск сложных плат с производства (и не только)

Доброго времени суток, Хабр!

mxgcv9xqounn9lmtkqim8mynwag.jpeg

Решил написать небольшую статью по запуску разработанного и спаянного устройства на основе процессора iMX8MQ от NXP. Идея возникла в связи с тем, что приходится запускать много различных проектов, а характер первичного тестирования и запуска однообразен и, возможно, не раз пройденный мной путь поможет кому-нибудь не сделать ошибок при пуско-наладке и не спалить устройство. Статья не является универсальной инструкцией к действиям, а представляет собой результат проделанной работы по запуску конкретной платы.

Печатная плата

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

bjgt9ykrn5rmj28lyoz9kxw-bia.jpeg

Рис. 1. Печатная плата модуля на iMX8MQ без компонентов.

Пассив на bottom

Первым делом, я установил пассив на нижнем слое платы. Сразу нашлась первая проблема. Изначально, под iMX8 устанавливаются конденсаторы типоразмером 0201, которые я решил поменять на 0402. Чтобы они установились корректно, я подредактировал наши стандартные футпринты (и правила в Altium), чтобы иметь возможность установить компоненты ближе друг к другу. Также, я решил изменить типоразмеры 0603 и немного не рассчитал. Видно, что на плате эти конденсаторы прижаты друг к другу, что не позволительно для автоматизированного монтажа. Так как проблема наблюдается только на 0603, и их расстановка позволяет увеличить расстояние между ними, я это исправлю на следующей итерации.

leghwlnuzvjxeieblagjwx6tvcg.jpeg

Рис. 2. Установка пассивных компонентов на bottom.

На всякий случай, я прозвонил мультиметром на предмет КЗ все точки выходов источников питания относительно GND, так как допущенную на этом этапе ошибку в виде «залипа», будет сложно отыскать на следующих этапах. Короткого замыкания нигде не обнаружено, можно продолжать…

Установка части компонентов на top

На bottom я буду ставить пассив и часть актива, а именно первичные источники питания. Входное питание моего модуля 3V3. Помимо нескольких DC/DC и LDO, на плате установлен PMIC (MC34PF4210A1ES) — контроллер управления питанием, а также несколько вторичных источников питания. У PMIC входное напряжение тоже 3V3, но его устанавливать я пока не буду. Для фиксации платы я использую простой держатель, который не позволяет сдвинуться компонентам на bottom при прогреве платы феном сверху.

o2td9xmv0pmmtbosi1blps6q0vu.jpeg

Рис. 3. Установка части компонентов на top.

Теперь важно произвести визуальный осмотр платы с обеих сторон и убедиться, что все компоненты стоят ровно, нигде нет лишнего припоя и отсутствуют «залипы» между выводами компонентов. Следующий шаг — снова проверка на КЗ мультиметром точек выходов источников питания.

Первая подача напряжения

Напряжение на плату я буду подавать от лабораторного источника питания с ограничением тока. Так как я еще не уверен в правильности схемы и трассировки источников питания, необходимо ограничить ток, например до 100 мА, и установить напряжение 3V3. При таком токе сгореть ничего не должно, а в случае КЗ — это я увижу на блоке питания.

sqi30boc4l6ovgsam5z5ujotf3a.jpeg

Рис. 4. Подача напряжения на плату.

Просто подпаиваю два проводка и включаю лабораторник. Дыма нет, потребление почти то же. Считаем, что пока все в норме. Кроме контроллера питания от 3V3 питается два DC/DC и два LDO. Для подачи разрешающего сигнала на питатели я использовал супервизор питания, так что, он тоже должен быть запаян. Обнаружилась вторая проблема. При разработке схемы, я забыл рассчитать делитель одного из DC/DC и, как следствие, вместо 0V9 на его выходе оказалось 2V5. Если бы в этот момент был запаян процессор, то с большой вероятностью он бы сгорел, так как это напряжение ядра. Делаю корректировки резисторов для feedback питателя, запускаю, все в норме.

Установка PMIC

Данный контроллер питания имеет несколько встроенных DC/DC и LDO. Помимо этого, он управляется по I2C и имеет несколько сигналов, типа PORb (сигнал сброса процессора) и др.

r64ynugnanvmwxd7a-_mjc_8bty.jpeg

Рис. 5. Установка PMIC на плату.

После установки микросхемы снова проверяем на КЗ входные/выходные цепи питания. Далее устанавливаем ограничение тока лабораторника на 200 мА и подаем питание. По умолчанию, все выходы PMIC имеют фиксированные значения, поэтому сверяемся с даташитом и смотрим осциллографом питания. Помимо самих выходных напряжений, я смотрю генерацию выводов SW (перед индуктивностями), чтобы оценить нет ли срывов частоты. Проверяю выдается ли сигнал сброса для процессора. Все в норме. Продолжаем.

Установка процессора и памяти

Процессор имеет 621 болл (от англ. ball — шарик), память LPDDR4 на 200 выводов, тоже в BGA исполнении. Их я запаиваю феном с нижним воздушным подогревом, так как корпуса маленькие и нет опасения что можно перегреть.

bams8g8m2bca1cg_0oyqx6nqmww.jpeg

Рис. 6. Установка BGA на плату.

Новый этап пайки — новая прозвонка на КЗ и новый визуальный осмотр. Важно, чтобы BGA стояли ровно относительно платы, боковые шарики были одинакового размера и не было перекосов относительно шелкографии. У процессора есть ножка управления питанием VDD_ARM, важно проверить, что она не замкнута ни на питание, ни на землю.

vwsc0i-srun6-o7xz-m86vu8ynw.png

Рис. 7. Схема управления питанием VDD_ARM.

У меня этот вывод назван как PWM_LED (нужно будет назвать более корректно, чтобы не было путаницы в дальнейшем). Проверяем PORb, PMIC_nINT, PMIC_ON и другие сигналы на наличие КЗ. На этом этапе нужно особенно внимательно отнестись к тестированию, так как перепаивать процессор долго и дорого, а лишний раз нагревать плату не желательно.

Позволю себе сделать небольшое отступление по поводу выводов, которые находятся под процессором. Так как у нас нет рентген контроля, то сложно оценить пайку всех выводов под BGA, но способ все-таки есть. Если нужно убедиться, что проводник доходит до процессора, можно убрать с него все подтяжки и компоненты и прозвонить мультиметром относительно GND на диодной прозвонке. Например, если в дальнейшем будет не ясно доходит ли вывод PMIC_ON до процессора, можно снять PMIC, резисторы R117, R118 и конденсатор C240 (по схеме на рис. 7.), тем самым освободив этот вывод. Есть еще вариант — это в u-boot (загрузчик) настроить выводы на выход и выставлять на них логические 0 и 1, проверяя мультиметром напряжение, но это возможно далеко не всегда, например, если u-boot не стартует, либо вывод чипа нельзя сконфигурировать как GPIO, например, как выводы CSI/DSI для камеры и дисплея.

Данный процессор имеет множество вариантов загрузки. Я предусмотрел все возможные варианты с помощью резисторов boot_cfg. Углубляться в эту тему не буду, так как на данном этапе у меня подготовлена SD карта с u-boot. Таким образом, мне нужен только этот режим. В дальнейшем старт u-boot будет происходить с QSPI, а образ загружаться с eMMC. На этапе тестирования наиболее удобной является именно SD карта.

Еще до пайки платы модуля я собрал материнскую плату, на которой у меня выведен USB для консоли (консолей в iMX8 две, поэтому я использовал двухканальную микросхему USB-UART — CP2105-F01-GMR). Также плата имеет мощный преобразователь на 3V3 и все необходимые разъемы для тестирования интерфейсов. Плата сложная, но это тоже макет, который позволит быстро все проверить и запустить. Процесс запуска был похожим на описанный выше.

qqnqitifvisgbeikdc0gbztaf1w.jpeg

Рис. 8.Модуль на материнской плате.

Подаю питание и в консоли … ничего. Потребление в норме, все питания на месте. Сигнал сброса присутствует. Проверяю генерацию кварцевых резонаторов и генераторов — клоки есть. Нагрев процессора низкий. Для загрузки платы (как я выше писал) может быть использовано несколько интерфейсов: SD/eSD, MMC/eMMC, NAND, QSPI и SPI_NOR. Все эти интерфейсы имеют вывод клоков. Встаем поочередно на эти клоки перезагружая плату. Я увидел клоки на QSPI, следовательно, процессор пытается загрузиться с пустой микросхемы. Вот и третья проблема — выбран не тот интерфейс загрузки. Переставляю режим на SD/eSD и:

0otypdkl_roypnxditnou1osdda.jpeg

Рис. 9. Первый старт u-boot.

Заключение

После того, как произошел старт u-boot, с помощью программы MSCALE_DDR_Tool от NXP был проведен тест DDR (через USB_OTG), далее зашит образ и постепенно подняты интерфейсы, такие как I2S, MIPICSI, MIPIDSI, USB, HDMI и др. На момент написания статьи не запустилась только физика Ethernet, но, надеюсь, проблема скоро будет решена (обязательно допишу, когда запустится).
Спасибо за внимание и до скорых встреч и быстрых запусков!

© Habrahabr.ru