Если вы следите за нашей сагой про USB-C, то уже знаете, что жила CC в этих кабелях используется для коммуникации и определения полярности. Однако есть и один малоизвестный факт, а именно то, что в USB-C коммуникация реализуется через два протокола – аналоговый и цифровой. Сегодня мы разберём аналоговую передачу, получше уяснив роль и принцип работы пресловутых резисторов 5,1кОм. Помимо этого, мы познакомимся с микросхемами E-Marker и таинственным VCONN.

Это продолжение серии статей про особенности реализации и использования стандарта USB-C. Другие части доступны здесь:


Источник питания с USB-C ожидает на линии CC стягивающего сигнала определённой величины, после чего уже подаёт на VBUS 5В. При этом более высокое напряжение должно согласовываться уже цифровым сигналом. Источник питания, будь то ноутбук или зарядное устройство, способен обнаружить стягивание (называемое Rd), поскольку поддерживает подтягивание (называемое Rp) на линии СС – после этого он проверяет, сформировался ли на CC делитель напряжения, и находится ли итоговое напряжение в допустимом диапазоне.

Если подключить устройство, которое не обеспечивает стягивание на линии CC, то оно никогда не получит питание от порта USB-C и работать будет только с кабелем USB-A – USB-C. Даже более продуманные девайсы, способные взаимодействовать через цифровую часть USB-C, должны иметь стягивающие резисторы. Разница лишь в том, что они устанавливаются внутри используемой для коммуникации микросхемы. Порт USB-C, на который требуется подать питание, должен иметь стягивающий резистор.

Всё это хорошо известно, но мы нередко встречали случаи сбоев, связанных с отсутствием резисторов в дешёвых устройствах, откуда и взялась рекомендация: «Добавляйте резисторы 5,1кОм». Вы можете не поверить, что всё настолько просто, но будете удивлены.

▍ Подтягивание + стягивание = делитель напряжения


У портов USB-С может быть две роли – передача и получение. Аналоговая часть USB-C позволяет разработчикам добавить простой способ согласования требований по питанию в случае использования USB-C при 5В, не применяя какие-либо специфичные или дорогостоящие микросхемы. Для этого они задействуют подтягивающие резисторы у источников и стягивающие у получателей. Комбинация подтягивания и стягивания формирует делитель напряжения, а само напряжение представляет токовые возможности зарядного устройства.


Теперь в аналоговом режиме передачи сигнала источник может скорректировать подтягивание на основе доступного бюджета питания, и это очень полезно. Представьте себе ноутбук или зарядное устройство с несколькими портами USB-C. По мере загрузки каждого из этих портов для других будет оставаться всё меньше доступного тока, величина которого в основном определяется внутренней схемой устройства. Возьмём в качестве примера ноутбук Framework с четырьмя портами USB-C. Каждый порт обеспечивает 15Вт мощности при 5В/3А. Но если вы хотите одновременно запитать четыре потребляющих устройства с USB-C, то на третий и четвёртый порты ноутбук сможет подать лишь 1,5А – довольно разумное ограничение с инженерной точки зрения.

Это означает, что устройства с повышенной потребностью к силе тока, например 1,5А и 3А, должны мониторить напряжение на линии CC, чтобы определять, не превысят ли они бюджет мощности. При этом они корректируют собственные потребности и в случае превышения возникшего ограничения по току отключаются.


Питание Default относится к заявленным ограничениям USB по силе тока – максимум 500мА для устройств USB 2 и 900мА для устройств USB 3. И хотя эти ограничения редко соблюдаются, в стандарте они действительно прописаны.

Что это значит для вас как для пользователя? Ничего, если ваши устройства не особо требовательны. Они должны мониторить напряжение на линии CC и соответствующим образом корректировать свой аппетит. Некоторые коммерческие устройства этого не умеют, но встречаются такие редко.

А если вы электронщик? В таком случае, создавая устройство, питающееся через USB-C, с намерением получить полноценные 3А при 5В, нужно помнить, что не все порты USB-C смогут его обеспечить. Хотя вы можете проверять возможность получения 3А путём измерения напряжения на линии CC. Но это уже на ваше усмотрение, многие самодельные девайсы неплохо справляются и без этого.

А какое напряжение можно ожидать на линии CC? Это напряжение, которое вы сможете считать посредством простого АЦП, присутствующего в вашем микроконтроллере, или даже с помощью компаратора.


Как видите, всё находится в пределах 3,3В, значит при использовании АЦП с полной амплитудой сигнала делитель напряжения вам не потребуется. И да, если у вас гнездо USB-C, то, естественно, мониторить контакты CC нужно по отдельности.

▍ Это действительно необходимо?


Действительно ли вам необходимо мониторить напряжение на линии CC? Когда вы просто с чем-то экспериментируете, это не обязательно. Однако этот приём пригодится в случаях, когда вы хотите выйти за рамки 0,5А – 1А. Если вы превысите потребности в токе, который может обеспечить порт источника, то на ваше устройство просто перестанет подаваться питание – довольно безопасный исход. С другой стороны, концепция USB-C предполагает наличие нескольких уровней защиты. Так что если вы собираете устройство мощностью 15Вт, используя простой подход с резистором на 5,1кОм, то можете также внедрить в него возможность обнаруживать недостаток питания. К тому же, сделать это не так уж сложно.

В противном случае можете ожидать, что вашему устройству потребуется зарядка, всегда обеспечивающая 3А при 5В, на что способно подавляющее их большинство. Если так и окажется, то проблем у вас никогда не возникнет – вы всегда сможете получить необходимые 15Вт. Хотя в случае подключения устройства к порту ноутбука, будь то USB-C или USB-A, через переходник на USB-C, не стоит ожидать постоянного наличия 3А – тут уже придётся проверять.

Причём стягивающий резистор на 5,1кОм – не единственный, с которым вы столкнётесь. Существует и другой вид стягивания, с которым мы имели дело ранее. Речь идёт о Ra, который становится актуален при использовании кабелей с E-Marker.

▍ VCONN: правильное запитывание E-Marker


По своей сути, E-Marker – это микросхемы памяти, способные взаимодействовать по протоколу Power Delivery (PD). Их используют в кабелях, имеющих более широкие возможности в сравнении с обычными, то есть в высокоскоростных моделях вроде USB 3 и Thunderbolt, а также в тех, которые поддерживают 5А. Они подключаются к линии CC кабеля и опрашиваются источником либо получателем – хотя обычно это всё же источник.

Если в вашем кабеле USB-C установлена E-Marker, то ей потребуется питание, и в USB-C есть способ его обеспечить, называемый VCONN. Как вы знаете, для коммуникации задействуется лишь один контакт CC. Противоположный CC, не подключённый к линии CC, используется для подачи на E-Marker питания. Вот этот контакт и есть VCONN.


В штекере USB-C вы разберётесь, какой контакт CC связан с линией CC, а значит заранее узнаете, какой будет выступать в качестве VCONN. Однако штекер можно подключать в двух разных направлениях – в связи с чем принимающая сторона должна уметь распознать каждый контакт CC как отвечающий за коммуникацию либо за питание VCONN. Это делает кабели относительно простыми и дешёвыми, поскольку обработка всей сложности здесь ложится на сами устройства.

Как электронщику вам вряд ли придётся задумываться о VCONN. Большинство из нас работают с USB 2 или USB 3, поддерживающими не более 3А, и проверка E-Marker тут не обязательна. Кроме того, существуют микросхемы, способные взять на себя обработку многих аспектов USB-C, включая обеспечение питания для VCONN.

Требования VCONN здесь довольно гибкие в сравнении с 5В, которые требуются для VBUS – допустимый диапазон напряжения составляет от 3В до 5,5В. В смартфонах это питание зачастую обеспечивается напрямую от литий-ионного аккумулятора, что избавляет вас от двух преобразований и экономит энергию. Всё же подача питания на VCONN используется не только в случае E-Marker – его также можно задействовать для запитывания небольших аксессуаров и переходников на наушники с бюджетом мощности до 1Вт. В этой интересной презентации специалисты рассказывают о прототипировании устройств, которые работают на VCONN и охватывают весь спектр возможностей, допускаемых для них спецификацией.


Как бы то ни было, но чаще всего VCONN требуется именно для микросхем E-Marker, которые довольно просты. Иногда кабель содержит две таких микросхемы, иногда одну – тут уже выбор производителя. Во втором случае эта микросхема устанавливается с одной стороны кабеля, а к противоположному штекеру прокладывается дополнительная линия питания, подключаемая к контакту VCONN. Так что, если вы вдруг увидите упоминание линии VCONN, то именно об этом оно и говорит – изолированная диодом линия, подключённая к неиспользуемому контакту CC на одном из концов кабеля для запитывания E-Marker на другом конце.

Всё это очень круто, но что насчёт стягивания с помощью Ra?

▍ Проблема Ra-spberry Pi 4


E-Marker сигнализирует о своём присутствии через стягивающий резистор (Ra), подключённый к контакту VCONN. Его среднее сопротивление составляет 1кОм, балансируя в диапазоне от 800 Ом до 1200 Ом. Если принимающая сторона может предоставить VCONN, она ищет такой резистор на свободном в данный момент контакте CC, и в случае обнаружения подключает VCONN к этому контакту. В результате резистор оказывается доступен также второму контакту СС, расположенному в противоположном штекере.

Что произойдёт, если замкнуть два контакта CC в принимающем порту вашего устройства, а затем подключить кабель с E-Marker? Резистор 5,1кОм окажется запараллелен с резистором 1кОм, и вы получите общее стягивание ~840 Ом. Именно это стягивание, которое теперь отклоняется от ожидаемых 5,1кОм, источник питания и видит на линии СС. Говоря точнее, делитель излишне подтягивает напряжение вниз, в результате чего источник питания не подаёт на VBUS 5В.

Если помните, то именно это происходило в первых ревизиях Raspberry Pi 4. В итоге вы не могли запитать Малинку от зарядки Type-C через кабель с E-Marker – для этого приходилось брать кабель без этой микросхемы либо его альтернативу USB-A – USB-C с источником питания USB-A. Естественно, в комплектном кабеле блока питания Raspberry Pi микросхема E-Marker тоже отсутствует. Но ему она и не нужна — в конце концов E-Marker предназначены для опроса неизвестных кабелей, а комплектные, само собой, таковыми не являются.


Странно, но я ни разу не слышала вопрос: «Зачем они так сделали?». Если посмотреть схему, то на ней видно, что связка PD_SENSE из объединённых контактов CC идёт на аналоговый входной пин PMIC. Теперь вы можете догадаться – они реализовали часть стандарта, связанную с «мониторингом напряжения», но не озадачились должным образом по части E-Marker. Степень, в которой выполняется мониторинг напряжения, тут под вопросом, но такой функционал, по крайней мере, присутствует.

В последующих ревизиях разработчики Raspberry Pi устранили эту проблему, и если у вашей Малинки ревизия старая, то можете её пропатчить. Нам пока не известно, что именно подлатали разработчики, но в конечном счёте мы это узнаем. А пока это всё, что вам следует знать о резисторах, E-Marker и загадочном VCONN.

Играй в нашу новую игру прямо в Telegram!

Комментарии (11)


  1. khajiit
    30.01.2023 00:18

    Неудобно вышло с малинкой…


  1. aectaan
    30.01.2023 09:55
    +2

    покоробило слово "стягивающий". Все таки мне кажется, что более грамотно было бы сказать "подтяжка к питанию/земле".


    1. Bright_Translate Автор
      30.01.2023 10:23
      +2

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


      1. LogEdge
        30.01.2023 11:39

        "подтягивающие" на сленге называются


      1. Mike-M
        30.01.2023 23:22
        +2

        Предлагаю вообще не переводить эти термины, оставив их в виде pullup & pulldown.
        Думаю, это лучше, чем изобретать новые слова, которые нигде больше не используются.


        1. Bright_Translate Автор
          31.01.2023 06:47

          Хороший вариант, но стягивающий и подтягивающий - вполне используемые термины.


          1. khajiit
            31.01.2023 08:55
            +1

            Хм?
            На памяти каджита были только "подтягивающие", и всегда уточнялось к чему именно.


            1. Bright_Translate Автор
              31.01.2023 09:04

              Возьмем, к примеру, банальную Википедию:
              Подтягивающий резистор — резистор, включённый между проводником, по которому распространяется электрический сигнал, и питанием (pull-up resistor — подтягивающий вверх/подтягивающий к питанию резистор), либо между проводником и землёй (pull-down resistor — стягивающий резистор).

              Вот статья на специализированном ресурсе: http://www.texnic.ru/data/other/013.html

              На ютубе многие этот термин тоже используют: https://www.youtube.com/watch?v=HHFny1ikW78

              Много примеров.


              1. khajiit
                31.01.2023 09:12

                Кстати, по первой ссылке автор регулярно сбивается с пары подтягивающий/стягивающий на просто подтягивающий )


                Что ж, язык живет и меняется… спасибо.


              1. Mike-M
                31.01.2023 15:26

                Википедия, ролик на YouTube и уж тем более сайт отдельного радиолюбителя — не авторитетные источники.

                Про Википедию — отдельная история. В самом начале статьи замечание:

                Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 3 июля 2018 года; проверки требуют 4 правки.

                Открываем эти правки и видим, что 11.06.2021 неизвестный с IP-адреса 217.66.154.153 изменил определение подтягивающего резистора, которое было написано Ascola — старейшим участником Википедии с огромным вкладом:

                Подтягивающий резистор — резистор, включённый между проводником, по которому распространяется электрический сигнал, и питанием (pull-up resistor — подтягивающий вверх резистор), либо между проводником и землёй (pull-down resistor — подтягивающий вниз резистор).

                Я согласен, что выражение «подтягивание вниз» режет слух, ведь подтягиваться (на турнике) мы привыкли только вверх.

                Но в контексте электроники речь идет о создании потенциала в заданной точке. Поэтому выражение «подтягивание потенциала на выводе до высокого/низкого уровня» воспринимается нормально. А вот «стянуть» потенциал на выводе нельзя.

                У Вас в статье определения вообще перепутаны с точностью до наоборот — стягивающим резистором Вы называете pullup:

                способен обнаружить подтягивание (называемое Rd), поскольку поддерживает стягивание (называемое Rp) на линии СС


                1. Bright_Translate Автор
                  01.02.2023 08:34

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