Русский
Русский
English
Статистика
Реклама

Imx8

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

01.04.2021 18:23:17 | Автор: admin
Доброго времени суток, Хабр!



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



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

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



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

Пассив на bottom

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



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

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

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

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



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

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

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

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



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

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

Установка PMIC

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



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

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

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

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



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

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



Рис.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 и все необходимые разъемы для тестирования интерфейсов. Плата сложная, но это тоже макет, который позволит быстро все проверить и запустить. Процесс запуска был похожим на описанный выше.



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

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



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

Заключение

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

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru