Pull to refresh

Comments 36

UFO just landed and posted this here

Вот типичная ситуация. Вам принесли 6ти слойную плату с производства. Её ещё ни разу не включали. Обычно в таких случаях 90% вероятность, что в PCB есть какие-то аппаратные баги: короткие замыкания на GND, короткие замыкания на VCC или вовсе не пропай.

какая глупость. работаю на производстве, подобные проблеммы с платами или с пайкой возникают в 0.01% случаев.

Производство- то может быть и отличное.

Часто аппаратные баги российские схемотехники по невнимательности загладывают прямо в схемотехнику и топологию.

А такого понятия как hardware review в русском языке не существует.

Часто аппаратные баги российские схемотехники по невнимательности загладывают прямо в схемотехнику и топологию.

И с учётом, что 99,9 % аппаратных багов этот ваш LD не поймает, время на его написание и запуск не окупится примерно никогда.

Да там писать - то нечего. Весь код 400 строк. Fsm тривиальный. Три состояния. Я этот ld накропал за 2 вечера.

И на первой же новой плате нашёл неочевидный баг,который указал в тексте. Можно смело сказать что LD уже окупился, в первый же день использования.

И вообще этот ld не моё изобретение. Это стандарт индустрии в европейских электронных конторах. Только в развивающихся и не развитых странах которые не могут повторить mersedes не знают про ld.

Идея интересная, даже, возможно, попробую ее реализовать, но в смысл пришлось очень активно вчитываться, и все эти диаграммы, таблицы и прочее не помогают совершенно, только запутывают, все же гораздо проще на самом деле. И зачем эти 3.3/0 в таблице, если можно было занести HI/LO? И да, если речь идет не о замыкании на землю/питание, а о сопле между двумя соседними контактами, то отловить проблему, анализируя лишь один пин, практически невозможно.

 И да, если речь идет не о замыкании на землю/питание, а о сопле между двумя соседними контактами, то отловить проблему, анализируя лишь один пин, практически невозможно.

Для этого 2 соседних пина надо рассматривать как H-мост и применять алгоритм LD для H-моста.

https://habr.com/ru/articles/709374/

 И зачем эти 3.3/0 в таблице, если можно было занести HI/LO?

3,3 V это конкретнее. Это физика.
Я встречал российские микроконтроллеры у которых Lo по докам считалось 3,3V.

а о сопле между двумя соседними контактами, то отловить проблему, анализируя лишь один пин, практически невозможно.

В BGA корпусах у каждого пина 6 соседних пинов!

На каждой паре пинов надо проделать load-detect для H-моста.

Получается 6 измерений на пин!

В худшем случае это займёт
(94[пинов])*(6[пинов соседей])*(4 [ms])*(4 [состояния]) = 9024ms = 9 секунд на плату.

Тогда можно также выявить и короткие замыкания между пинами!

И да, если речь идет не о замыкании на землю/питание, а о сопле между двумя соседними контактами, то отловить проблему, анализируя лишь один пин, практически невозможно.

Эту проблему теперь решает мой новый конечный автомат Cross-Detect для проверки качества пайки в электронных цепях

https://habr.com/ru/articles/762142/

Для подобного я вижу только один крайне редкий сценарий как у одного знакомого, который делает электронику для аэроспейса. Одна "космическая микросхема" может стоить больше 500 баксов и поэтому BGA и прочее паяет специальная бригада вручную.

В остальном бесполезно. Во-первых, подтяжки появились в контроллерах относительно недавно и они есть не на всех пинах и, соответственно не на всех чипах. Во-вторых если вам приносят платы с производства это значит что все довольно печально у вас на предприятии.
У больших мальчиков, при условии что чипы это поддерживают, используется периферийное сканирование IEEE 1149.1. Летающие щупы и прочие дорогущие штуки.
Но это дорого. При массовом производстве - копеечные игольчатые стенды и оснастки для тестирования. Обычно оснастки проектируются параллельно с разработкой.
Заглядывать под BGA не нужно. У сертифицированного производства всегда есть рентген. И качество производства это их проблемы.
Обычно, специальной прошивки не требуется, это просто отдельный режим, который включается при замыкании определенных ножек.
Итого, секрет успеха - стратегию тестирования на производстве нужно разрабатывать сразу при проектировании устройства, а не выдумывать "когда принесут".

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

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

хотя зачастую любые стройные теории разбиваюца о криворукие практики.

в этом деле точно не нужно изобретать универсальное решение, а исходить из конкретного изделия.
Я был на некоторых заводах в России и Китае. Видел много оснасток. Самая крутая была на производстве неких промышленных компьютеров (в России) за 1 млн евро - большой станок, как часть линии конвейера. Где не только подключалось ложе гвоздей сверху и снизу но и автоматически втыкались все разъемы для компьютера. Но это не значит что это решение подходит для всех случаев - банально дорого, это оправдано только для тех ребят с миллиоными тиражами по году.
На работе заказал в digilent.com - USB-осциллограф. Включил - не работает. Техподдержка пыталась помочь, а потом забанила, чтобы я не портил статистику на форуме. Через несколько месяцев решил починить - починил - непропай разъема USB. То есть эти красавцы запрограммировали, проверили (судя по точкам на плате) но даже не включали!

Летающие щупы и прочие дорогущие штуки.

Разные методы тестирования не исключают друг друга, а дополняют.

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

А вот это как раз признак отчаянного колхоза.
Промышленный способ посылать команды это UART-CLI (Shell), а не совать джамперы на GPIO.

Производство больших партий несколько отличается. Наступает непреодолимое желание акционеров двигать конвейер со скоростью, например, одно изделие в 30 секунд. Отсюда нужно параллелить посты для программирования и проверки, а также резко сокращать время проверки. То есть практически это может быть 10 оснасток и (3 оснастки в подменном фонде на полке, для оперативной замены). Если в приборе 6 плат, то 60 оснасток...
То есть "разные методы тестирования... дополняют" и "отчаяный колхоз" "посылать команды" это хорошо когда объемы производства смехотворные и можно дергать разработчика.

Но когда платы сами себя проверяют без компьютера это очень круто. Прошивать также лучше без компьютера через недорогой jtag-программатор с кнопкой.
При наличии сети сервисных центров это также вызывает восторг сервисменов.
Да, рабочих нельзя смущать приборами и излишней индикацией. Оснастка должна показывать зеленую или красную лампочку. (расширенный режим диагностики отдельно для инженера)
Однажды своё производство заказало разработке сделать стенд для параллельного программирования и проверки десятка плат. Стендов должно было быть десяток. Разработка выполнила эту работу качественно с подключением аналитиков и тестировщиков - время работы 6 минут. Производство работу отклонило - запросили 30 секунд. Подключилось руководство - ни в чем себе не отказывайте, но сделайте как просят - 6 минут никуда не годится. В итоге наступили на горло собственной песне и сделали как хотят. Вот это - суровая правда жизни. Никому не интересно, чтобы это было по учебнику, согласно буржуинскому стандарту или как иначе. Управляют качеством всегда акционеры.

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

В надежных системах в прошивке generic в принципе не должно быть лишнего кода. Это требование ISO26262.

 Во-первых, подтяжки появились в контроллерах относительно недавно и они есть не на всех пинах и, соответственно не на всех чипах.

С 2012 года работаю программистом МК. Подтяжки были всегда и везде (у STM32, CC26xx, NRF5340, SPC5x, MDR32, ESP32, LPC4xxx).

11 лет это не "недавно". Это "уже давно как".

Справедливости ради, у AVR есть только Pull-Up, а у контроллеров с ядром 8051 от SiLabs этот Pull-Up еще и неконфигурируемый, его можно включить только для всех ножек.

, у AVR есть только Pull-Up,

Что ж.
По крайней мере можно будет Load detect (ом) определять КЗ на GND.


А если схемотехники поставят высокомный резистор на каждую ножку, то еще и KЗ на VСС.

SiLabs этот Pull-Up еще и неконфигурируемый, его можно включить только для всех ножек.

Дык, в алгоритме, что я описал как раз это и нужно.

Как видите драйвер load-detect разом командует сразу всеми N пинами из конфига, подобно тому как в армии лейтенант командует сразу всем взводом (ровняясь! смирно! Напра-аааа-во !). Поэтому все N пинов переключают свои подтяжки синхронно.

Поэтому все N пинов переключают свои подтяжки синхронно

А, ну тогда ценность этой проверки вообще ничего из себя не представляет, какова вероятность замыкания на землю или питание? Куда ожидаемее были бы контакты с соседними пинами, но так это вообще невозможно отследить.

Куда ожидаемее были бы контакты с соседними пинами, но так это вообще невозможно отследить.

Для этого 2 соседних пина надо рассматривать как H-мост и применять алгоритм LD для H-моста.

https://habr.com/ru/articles/709374/

 Куда ожидаемее были бы контакты с соседними пинами, но так это вообще невозможно отследить.

Очень даже возможно. Про это как раз мой новый текст:
Конечный Автомат Cross-Detect для Проверки Качества Пайки в Электронных Цепях

https://habr.com/ru/articles/762142/

Либо описание хромает, либо автомат не дописан.
Откуда в 4-й строке таблицы 3,3 В для Z-состояния и почему вердикт "open load"? Это может быть и внешний "pull up". В общем случае — можно оценивать ещё время от перехода уверенного чтения уровня к неуверенному, которое зависит от наличия гистерезиса входного буфера, которое… и вот уже граф автомата не помещается в ПЗУ.
Если есть JTAG — то его использовать. Если нет — можно подумать и о таком тесте. Или о "гвоздях" и пр. В каждом случае — будут разные приоритеты.

Хм, вот у меня сейчас кейс: пин может быть либо висящим в воздухе, либо подключен к внешней дохлой подтяжке к питанию (более слабой, чем подтяжки на пине). Есть ли детерминированный (не вероятностный) способ определить, висит в воздухе пин или нет?

Немного странно, что в статье ни разу не упомянут JTAG, который как раз для подобных нужд и разрабатывался.
Если в микроконтроллере есть JTAG, то почему бы не использовать штатный JTAG?
Если в микросхеме нет JTAG-а, почему бы не написать программный JTAG и не продолжить работу с ним штатными средствами тестирования?

В профессиональных пакетах JTAG-тестирования (к примеру, JTAG ProVision или XJDeveloper) заложены тестовые последовательности для обширной номенклатуры периферийных микросхем. Такие последовательности позволяют, например, при помощи JTAG-битбандинга писать/читать данные из подключенных к микроконтроллеру микросхем памяти, у которых нет своего JTAG-а. И таким образом не только проверять непропаи, но и работоспособность самих периферийных микросхем, а также банально записывать в них определённые данные. Кроме того, данные пакеты могут автоматически сгенерировать тестовые последовательности из net-листа проекта печатной платы. Писать подобные тесты полностью вручную чревато неоправданными трудозатратами и человеческими ошибками.

В вашей же статье речь идёт, фактически, о анти-стандартном решении, призванном перехватить функционал JTAG-а. Есть сомнения, что данные подход правилен.

Если в микроконтроллере есть JTAG, то почему бы не использовать штатный JTAG?

Обыкновенный инженер может проверить что-то только одним единственным способом, хороший - тремя способам.

Вам принесли 6ти слойную электронную плату прямо с производства. Её ещё ни разу не включали. Обычно в таких случаях 90% вероятность, что в PCB есть какие-то аппаратные баги: короткие замыкания на GND, короткие замыкания на VCC или вовсе непропай пинов MCU.

Срочно менять такое забагованное производство.

Как вы думаете зачем в микроконтроллерах есть функция pull-up/pull-down, если можно просто воспользоваться установкой логического уровня push-pull?

Например для выходов open-emitter/open-collector.

90% шанс ошибки на сборке????????

Это вы где такие производства находили?

А вообще тестирование для того и создано что бы проверять продукт. Самое лучшее решение это когда на устройсво заливается тестовая прошивка прямо в модуле тестирования. Вставили, оно залило тест, протестировало, при полном покрытии залило мастер.

Это вы где такие производства находили?

Да в любой российской электронной организации, где собирают электронные платы (особенно вручную) всегда при первом включении PCB обнаруживается то КЗ, то непропай.

Иногда еще компоненты бракованные попадаются.
Часто и вовсе ошибки схемотехников на стадии разработки самой принципиальной схемы.

Ну назовите хоть одну боле-мене крупную, раз вообще в любой. Мне вот такие не попадались. У крупняка и электротестирование как услуга есть, если надо.

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

А для этого нужны тестировочные стенды под каждый проект.

UFO just landed and posted this here
Sign up to leave a comment.

Articles