Если консоль представляет собой уже привычный способ связи с исполняемой внутри современной встраиваемой вычислительной системы программой, то коаксиал в качестве среды передачи соответствующего электрического сигнала привычен не столь. Тем временем, их симбиоз не лишен логики, удобства и перспектив, в свете чего, далее рассказано, как удалось соединить такой способ и такую среду в духе здорового минимализма.
Предисловие
Для передачи электрического сигнала достаточно двух проводников, по которым электрический ток потечет в одном и, соответственно, противоположном направлениях. Электрически коаксиальный кабель (англ. coax, coaxial cable) [W1] представляет собой, как раз, два таких проводника, которыми конструктивно являются его центральная жила и экран вокруг разделяющего их изолятора. Такой вид кабеля, особенно в микроминиатюрном исполнении с оконцовкой типа U.FL [W2], оказывается очень удобным при взаимодействии на небольших, коротеньких расстояниях порядка 10…20 см, иными словами, на расстоянии ручки (англ. pen), карандаша (англ. pencil), щупа осциллографа (англ. probe), и т. д., что и дает неформальное название всем таким примерам — связь на расстоянии ручки-карандаша-щупа (англ. pen-reach communication, PRC), см. рис. 1 выше.
Таким образом, ОКК, или однокоаксиальная консоль (англ. one-coax console, OCC), о поиске решения для которой далее и пойдет речь, представляет собой одно из практических приложений PRC в области встраиваемых вычислительных систем, где для разработки, настройки и отладки ПО изделия требуется простое, дешевое соединение для преимущественно текстового обмена данными. ОКК, как правило, не используется во время работы изделия. Кроме того, конструкция ОКК предполагает, что простым и дешевым должно оставаться лишь ее исполнение на стороне тиражируемого, серийного изделия, в то время как адаптер на обратной стороне может быть сколь угодно сложным и дорогим, т. к. изготавливается в единичных количествах.
Очевидно, для того, кто в своих изделиях применят готовые ИМС процессоров и микроконтроллеров, и для того, кто производит такие ИМС, оптимальная конструкции ОКК будет отличаться. Практическое рассмотрение далее идет именно с первой точки зрения, заходя на вторую лишь теоретически для полноты и связности изложения, хотя ничто не лишает ценности и таких, пусть пока и чисто гипотетических, решений.
Подход первый = USB минус один провод
Шина USB [U1, U2], как подходящий способ связи, привлекла внимание первой, т. к., во-первых, широко распространена и, во-вторых, «из коробки» позволяет получить решение с раздельными, т. е. несмешивающимися или различимыми (англ. distinguishable), потоками ввода-вывода, см. рис. 2.
На практике очень удобно иметь раздельные потоки ввода-вывода, где данные каждого потока (англ. stream), отличающегося своим уникальным числовым дескриптором (англ. handle), не смешиваются между собой. Также удобно, когда кроме трех стандартных потоков StdIn, StdOut, StdErr (дескрипторы 0, 1, 2, соответственно) [W3], доступны и дополнительные, например, StdPrn/DosPrn (4) и StdAux/DosAux (3), менее стандартные [W4, w4]. Назначение раздельных потоков, как правило, традиционное. Например, если в StdErr процесс пишет ошибки как на «экран ЭВМ», т. е. более новые данные вытесняют более старые, то в StdPrn сообщения пишутся как на, соответственно, «принтер», т. е. никакие данные не теряются до тех пор, пока «есть бумага». И т. д.
Поиск решения на базе USB велся перебором пар доступных ИМС оконечных (USB device) и корневых (USB host) или промежуточных (USB hub) устройств, работающих в низкоскоростном (англ. low speed, LS) или полноскоростном (англ. full speed, FS) режимах, с подбором параметров обвязки, см. рис. 3 ниже, исходя из некоторых ожиданий, см. рис. 4 (скрыт), а также довольно оптимистичного допущения, см. рис. 5 (скрыт), что вдруг существует ИМС, детектирующая конец пакета в режимах LS/FS как в высокоскоростном (англ. high speed, HS) режиме, чего, конечно же, не произошло.
Нормативные «основания» поиска — рис. рис. 4 и 5 (скрыты).
С одной стороны, такой подход изначально представлял собой попытку решить техническую проблему магическим способом. С другой стороны, благодаря ему общая задача по ОКК вообще появилась, т. е. была осознана и сформулирована. Да, сконструировать ОКК поверх USB на базе готовых ИМС сегодня не получится, однако, кто его знает, может быть в недалеком будущем такие ИМС появятся в ходе «естественной эволюции» технологии USB и расширении области ее применения, в частном, скорее всего, или даже институциональном порядке, чему изложенное здесь в т. ч. и призвано поспособствовать.
Подход второй = UART + HYBRID
Оставаясь в рамках применения готовых ИМС, следующим после USB ожидаемо шел UART [W5], в связи с чем, поисковая задача соответствующе изменилась, см. рис. 6.
Здесь UART на стороне испытуемого изделия (англ. device under test, DUT, D.U.T.) связан двумя разнонаправленными симплексными каналами с неким черным ящиком (?), оптимальную конструкцию которого требуется далее найти, а сам ящик связан одним двунаправленным полнодуплексным каналом с таким же ящиком на стороне испытательного адаптера (англ. testing probe), благодаря чему схема и выглядит, и работает симметрично.
Если рассматривать совокупную логику работы такого канала, то с т. з. каждой из сторон в любой момент времени канал находится в одном из ровно шести статических состояний, см. рис. 7.
Состояния 1Х и 0Х, линия отключена (disconnected). Когда испытуемое изделие отключено от адаптера, на входе его приемника (RXD1) должна перманентно присутствовать логическая единица, не зависящая от выхода передатчика (TXD1) самого изделия.
Состояния 11, 10, 01, 00, линия подключена (connected). Когда испытуемое изделие подключено к адаптеру, вход приемника изделия должен соответствовать (только и только) выходу передатчика адаптера, т. е. RXD1 = TXD2. И, наоборот, в обратную сторону, вход приемника адаптера должен соответствовать (только и только) выходу передатчика изделия, т. е. RXD2 = TXD1.
Сконструировать такой канал с таким поведением, или предметно, искомый черный ящик, возможно на базе пассивного гибридного фильтра (англ. hybrid, hybrid filter), широко известного из полнодуплексных протоколов типа Ethernet [G1, G2], см. рис. 8 ниже, однако напрямую заимствовать здесь не выйдет, всп. рис. 7 и см. рис 9 (скрыт).
Почему симметричная схема плохо применима — рис. 9 (скрыт).
Такое ограничение вызвано тем, что напрямую заимствованной схеме будет присуща неоднозначность (англ. ambiguation) в восстановлении состояния входа приемника в зависимости от состояния полнодуплексного канала (линии связи), т. к. такая схема изначально рассчитана на биполярный сигнал, а UART использует однополярный сигнал с размахом на выходе передатчика от «земли» (нуля, 0) до напряжения питания (Vcc).
Однако, можно сделать такой однополярный сигнал псевдобиполярным, введя опорный потенциал в половину напряжения питания (½•Vcc) и выстроив (сместив) фильтр относительно него вместо «земли», см. рис. 10 ниже, что, впрочем, будет лишь необходимым, но не достаточным шагом, т. к. все также приводит к неприемлемой неоднозначности, снова всп. рис. 7 и см. рис. 11 (скрыт).
Почему улучшенная схема тоже неприменима — рис. 11 (скрыт).
Достаточным же шагом здесь будет рассимметрировать внешний делитель фильтра, фактически оставив в нем лишь одно конечное плечо (верхний резистор R), что увеличит размах сигнала в линии в два раза по сравнению с предыдущей схемой, т. е. с четверти до половины напряжения питания, что и самое по себе есть хорошо, т. к. более помехоустойчиво, а также явно обозначит два опорных потенциала, равных четверти (¼•Vcc) и без четверти (¾•Vcc) напряжению питания, теперь никогда не равные сигналу в линии, см. рис. 12.
Такая схема уже может стать основой для ОКК, см. рис. 13 ниже, хотя и отклоняется от желаемого (идеального, целевого) поведения, т. к. при отключенной линии вход приемника изделия оказывается логически «замкнут» на выход его передатчика (RXD1 = TXD1), что, однако, можно отследить и, соответственно, скомпенсировать программно, а также, например, вообще использовать для детектирования состояния линии (подключено или отключено), еще раз всп. рис. 7 и см. рис. 14 (скрыт).
Почему упрощенная схема применима с оговорками — рис. 14 (скрыт).
Дальнейшая оптимизация исключает из конструкции ОКК аналоговый мультиплексор (mux) с двумя неявными источниками опорных потенциалов, заменяя их на цепь из инвертора (inv) и двух резисторов в отношении 3 к 1, теперь динамически задающую опорный потенциал либо в четверть от напряжения питания (¼•Vcc, как и ранее), либо без четверти напряжение питания (¾•Vcc, как и ранее) на опорном входе компаратора (cmp), в зависимости от выхода передатчика, см. рис. 15.
Таким образом, такая конструкция ОКК требует, кроме трех пассивных компонентов — резисторов, что приемлемо, двух активных компонентов — ИМС компаратора и ИМС инвертора… что уже не приемлемо, как минимум, ни по цене, ни по занимаемой площади.
ИМС компаратора и ИМС инвертора можно заменить на одну ИМС трансивера RS-422 типа ADM3491 [C1], MAX3079 [C2], или аналогичных, содержащих раздельные по пинам дифференциальный драйвер и дифференциальный сенсор… что тоже будет неприемлемо по тем же показателям. Да, это можно использовать для межмодульной связи в модульном приборе, что есть побочный результат, своеобразный утешительный приз в нашем поиске… но опять не простое и дешевое решение для ОКК в изделиях, тиражируемых серийно и массово.
Т. е. опять, как и в случае с USB, исполнение ОКК на базе UART и симметричного соединения через гибриды привлекательно только для тех, кто производит свои ИМС и может их адаптировать под такую задачу, например, как минимум интегрировав компаратор в звено UART и сделав инверсный выход передатчика, см. рис. рис.16 и 17 (скрыты).
Поддержка упрощенной схемы со стороны ИМС — рис. рис. 16 и 17 (скрыты).
Оставляя же за скобками применимость именно в нашей задаче и рассматривая применимость симметричной схемы в общем, стоит отметить, что такая схема легко отображается на стандартный протокол UART, например, 8-N-1, где каждый четный символ содержит данные потока, а в каждом нечетном кодируются дескриптор этого потока и контрольная сумма, обеспечивающая как проверку целостности, так и самовыравнивание пар символов на приемнике за счет статистической сходимости, всп. рис. 2 (повт. ниже) и см. рис. 18.
Повтор рис. 2 (скрыт).
Снова немного мечтая о том, какой бы могла быть идеальная ИМС, очень странно подмечать, что до сих пор не существует ничего подобного вроде UART с длиной полезной нагрузки (англ. payload) в более чем 8 бит, хотя современные микроконтроллеры и микропроцессоры уже давно 32/64-битные, и поддержкой контрольных механизмов типа циклических кодов (англ. cyclic redundancy check, CRC) и упреждающей коррекции ошибок (англ. forward error correction, FEC), более совершенного фреймирования, и пр., см. рис. 19 (скрыт).
(Да и вообще, очень странно, что UART до сих пор не может работать с нулевым, а не единичным логическим уровнем по умолчанию, хотя технология NMOS уже давно канула в лету и найти не-CMOS ИМС нереально.)
Возможное расширение протокола UART — рис. 19 (скрыт).
Что ж, победа стала ближе, но все же вновь не была достигнута. Применимость симметричной схемы в других задачах дала некоторое инженерное утешение, что все еще не есть успех для тех, кто воплощает ОКК на готовых ИМС.
Подход третий = UART + два резистора
Путем проб и ошибок поиск пришел к асимметричной схеме, «донельзя» упрощающей часть на стороне изделия, в чем собственно и была цель, и пропорционально этому усложняющей часть на стороне адаптера, см. рис. 20 ниже, при этом схеме логически совершенной, всп. рис. 7 (повт. ниже) и см. рис. 21 (скрыт).
Повтор рис. 7 (скрыт).
Рис. 21 (скрыт).
Таким образом, конструкция ОКК на стороне изделия вырождается до двух резисторов, подтягивающего (R1) и последовательного (R2), и одного разъема, который, при дальнейшем удешевлении, заменяется на просто пятно-площадку (англ. test point, test spot), электрическое сочленение с которой во время испытаний происходит при помощи подпружиненного иглового контакта (англ. spring contact) типа как в щупе осциллографа [C3], или другого аналогичного механизма, обеспечивающего одиночный точечный контакт, т. е. одиночную электрическую цепь (англ. circuit), чем, кроме всего прочего, обеспечивает, что ОКК остается ОКК даже по аббревиатуре: однокоаксиальная консоль становится одноконтактной (англ. one-contact console, one-circuit console, и т. д., т. е. снова OCC). В таком случае, неявно подразумевается что вторая необходимая для электрического взаимодействия цепь, «земля», ранее создаваемая экраном коаксила, подана через общую цепь внешнего питания испытуемого изделия.
На стороне адаптера конструкция ОКК, завершающая асимметричную схему, тоже не слишком сложна или даже не необычна, но, скорее, просто громоздка, что обусловлено сложностью ее приемного канала, тогда как ее передающий канал, по большому счету, построен вокруг обычного шунта (R3), см. рис. 22.
Параметры такой схемы находятся подбором подходящего соотношения трех резисторов (R1, R2, R3) исходя из стандарта ввода-вывода и учитывают, как правило, напряжение питания выходного каскада и внутренние пределы значений входного каскада CMOS, см. рис. 23.
По сравнению с симметричной схемой, имеющей регулярные уровни сигнала в половину и половину плюс-минус половину напряжения питания, регулярные опорные уровни (пороги квантования сигнала компаратором) в половину плюс-минус четверть напряжения питания, но при этом применимой с оговорками, асимметричная схема имеет крайне нерегулярные, хотя и достаточные (зазор не менее 200 мВ между сигналом и порогом квантования при напряжении питания 3,3 В и не менее 100 мВ для 1,8 В) для уверенной, безошибочной работы на целевых расстояниях «в один карандаш», характеристики, но работает без каких-либо логических оговорок, см. рис. 24.
Близко к очевидному, что для того, кто в своих изделиях применят готовые ИМС процессоров и микроконтроллеров, конструкция ОКК вряд ли сможет быть еще более оптимальной.
Послесловие
Давайте обобщим, к чему же привел поиск. Итак…
Подход первый = USB минус один провод. Очень привлекателен, но на сегодня чисто гипотетичен. Можно только мечтать и надеяться, что когда-нибудь кто-нибудь из разработчиков-производителей ИМС воплотит такое в жизнь.
Подход второй = UART + HYBRID. Технически осуществим на уровне готовых ИМС, несколько необычен, даже прекрасен, применим за рамками, однако неприменим в рамках задачи ОКК, т. к. и не прост, и не дешев при тираже, но, опять же, лишь пока не воплощен именно в кремнии ИМС.
Подход третий = UART + два резистора. Ад перфекциониста. Технически тривиален. Прост. Дешев. Поэтому решает задачу ОКК полностью. Итого, на сегодня это идеальное решение в духе здорового минимализма (но не более).
Что ж, на сегодня выбор очевиден. А вот будет ли он очевиден в будущем, будем надеяться, покажет время.
Ссылки на все источники, упомянутые в тексте, собранные в одном месте
[C1] ADM3491 @ ChipDip.Ru, https://www.chipdip.ru/product0/2913200999
[C2] MAX3079 @ ChipDip.Ru, https://www.chipdip.ru/product0/9000583134
[C3] https://www.chipdip.ru/product0/8026543288 (например)
[G1] Kirsten Matheus & Thomas Königseder, Automotive Ethernet, 1st Ed., Section 4.1.1.1, https://doi.org/10.1017/CBO9781107414884.006
[G2] Kirsten Matheus & Thomas Königseder, Automotive Ethernet, 2st Ed., Section 4.3.1.1, https://doi.org/10.1017/9781316869543.006
[U1] USB 1.1 Specification, http://esd.cs.ucr.edu/webres/usb11.pdf
[U2] USB 2.0 Specification, https://www.usb.org/sites/default/files/usb_20_20250603.zip (оф. источник, все в одном), либо https://wcours.gel.ulaval.ca/GIF1001/old/h20/docs/USB_20.pdf (предметно)
[W1] https://en.wikipedia.org/wiki/Coaxial_cable
[W2] https://en.wikipedia.org/wiki/Hirose_U.FL
[W3] https://en.wikipedia.org/wiki/Standard_streams
[W4] https://ru.wikipedia.org/wiki/Стандартные_потоки
[w4] https://it.wikireading.ru/35193
[W5] https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter
Ссылки на весь графический материал, собранные в одном месте // CC-BY
Рис. 1 на [Habra Storage] и на [imgur], PNG, 370 кБ
Рис. 2 на [Habra Storage] и на [imgur], PNG, 15 кБ
Рис. 3 на [Habra Storage] и на [imgur], PNG, 27 кБ
Рис. 4 на [Habra Storage] и на [imgur], PNG, 236 кБ
Рис. 5 на [Habra Storage] и на [imgur], PNG, 34 кБ
Рис. 6 на [Habra Storage] и на [imgur], PNG, 20 кБ
Рис. 7 на [Habra Storage] и на [imgur], PNG, 30 кБ
Рис. 8 на [Habra Storage] и на [imgur], PNG, 22 кБ
Рис. 9 на [Habra Storage] и на [imgur], PNG, 82 кБ
Рис. 10 на [Habra Storage] и на [imgur], PNG, 17 кБ
Рис. 11 на [Habra Storage] и на [imgur], PNG, 93 кБ
Рис. 12 на [Habra Storage] и на [imgur], PNG, 33 кБ
Рис. 13 на [Habra Storage] и на [imgur], PNG, 19 кБ
Рис. 14 на [Habra Storage] и на [imgur], PNG, 97 кБ
Рис. 15 на [Habra Storage] и на [imgur], PNG, 20 кБ
Рис. 16 на [Habra Storage] и на [imgur], PNG, 23 кБ
Рис. 17 на [Habra Storage] и на [imgur], PNG, 14 кБ
Рис. 18 на [Habra Storage] и на [imgur], PNG, 29 кБ
Рис. 19 на [Habra Storage] и на [imgur], PNG, 36 кБ
Рис. 20 на [Habra Storage] и на [imgur], PNG, 25 кБ
Рис. 21 на [Habra Storage] и на [imgur], PNG, 72 кБ
Рис. 22 на [Habra Storage] и на [imgur], PNG, 35 кБ
Рис. 23 на [Habra Storage] и на [imgur], PNG, 16 кБ
Рис. 24 на [Habra Storage] и на [imgur], PNG, 28 кБ
Рис. 25 на [Habra Storage] и на [imgur], PNG, 167 кБ
Весь пост на imgur — https://imgur.com/a/wk43rzj
ссылка на оригинал статьи https://habr.com/ru/articles/1025630/