bash.im ithappens.me zadolba.li
11184

Объедков хватит

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

Сделали разработчики в несекретном военном НИИ некий несекретный военный прибор. Помимо прочего в приборе есть программно управляемый ключ, подцепленный к слабенькому микроконтроллеру. От микроконтроллера уходит наружу UART, используемый в основном для отладки, и некоторые другие интерфейсы. Ну да бог с этими некоторыми, дело касалось именно UART. Наблюдался интересный эффект: при выключенном питании контроллер благополучно общался по этому самому UART с хостом, адекватно ему отвечал, пытался включить тот самый ключ, честно выдавал ошибку (питания-то нет!) и чуть ли не с собачьей преданностью готов был вертеть хвостиком в ожидании очередной команды от «хозяина».

Увидев такое дело в первый раз, разрабы были серьёзно удивлены. Настолько серьёзно, что первым комментарием было короткое, но очень уж нецензурное слово. Ещё бы — где это видано, чтобы прибор без электричества работал?

Эффект объяснялся довольно просто. Питания хватало от самого UART: линия TX в состоянии логического нуля всегда держится в высоком (+5 вольт) состоянии. Эти-то пять вольт и переходили через защитный диод внутри микроконтроллера на его же линию питания, к которой снаружи, естественно, была подключена кучка конденсаторов. Хватало, чтобы питать маленького и преданного зверька, а вот до гальванически развязанного управляемого ключа уже не доходило.

Баг радостно объявили фичей, убирать не стали. На будущее решили отметить необходимость буферных резисторов.