Почему не читается eMarker?
I NВ прошлой статье https://telegra.ph/Kak-USB-tester-chitaet-eMarker-01-16 мы обсудили механизм, с помощью которого USB-тестеры запрашивают у кабеля данные из eMarker. И было сказано, что механизм извлечения кривой, нестандартный, но работает с большинством кабелей. И вот у меня оказался кабель, который вёл себя удивительным образом:
- С тестером Ryken X3 при использовании Варианта 1 (питание через HID) eMarker не читался
- С тестером Ryken X3 при использовании Варианта 3 (питание через разъем-"папу" и адаптер в USB A) маркер прекрасно читался
- С тестером KM003c при использовании Варианта 3 маркер прекрасно читался
- Самое удивительное было с тестером KM003c при использовании Варианта 1: маркер читался только в одном положении. А после переворота штекера маркер переставал читаться.
То есть, если использовать рабочий разъем-"папу" для питания, то всё читается, а если запитывать через hid, то Ryken не читает, а KM003C читает только в одном положении штекера.
Начнем с базы. Как выглядит штатный процесс ?

На графике три полезных области.
- Отсоединение sinkа. Это сделал телефон при загрузке, поэтому мгновенно начинается соединение
- Напряжение на СС1 1.6V, на CC2 0.33V. Это явное подключение потребителя, причем линия CC подсоединена к CC1
- Через некоторое время видим поднятие напряжения на CC2 до 3.1V. Это использование CC2 как линии VCONN для питания маркера.
Для наглядности с графика убрано напряжение на VBUS, туда подаётся 5V через 400ms после поднятия напряжения на VCONN/CC2. Source запрашивает маркер уже после получения 5V на VBUS.

А вот что делает тестер Ryken X3 при поиске маркера. Тестер поочередно имитирует подачу напряжения 3.2V на VCONN и ждет 1.5c ответа от маркера. При этом на предполагаемой линии CC напряжение равно нулю. Считаем, что если нет потребителя, то и смотреть на CC некому. Центральный узкий пик в 300 ms - это как раз получение ответа от маркера. Получили ответ на CC, показали на дисплее и продолжили искать маркер.
Картинка напряжений на CC1/2 не меняется, если использовать один и тот же хороший кабель при запитывании тестера через HID и через разъем-папу. Отличие только на линии VBUS: при питании через HID там ноль, а при питании через папу там будут стабильные 5V.
А вот кабель Toocki 240W с экранчиком ваттметра при питании через HID маркер тестеру Ruken X3 не отдаёт. И очевидной причиной является ноль на VBUS. Похоже, что этому кабелю не нравится ноль на VBUS. Похоже, что электронике кабеля недостаточно 3.2V на VCONN и он требует также 5V на VBUS.
Первый нюанс: кабель может потребовать напряжение на VBUS для чтения маркера. Для Ryken X3 это можно сделать только в вариантах с подключением питания через рабочий разъем-"папу".
Цитата из первой статьи: Если вдруг кабель (его электронные компоненты) ожидает правильных напряжений от VBUS или CC, то конструкция с питанием через HID не сработает.
Параллельно обнаружился второй нюанс: иногда маркер не читался даже с питанием через "папу". Дело было в распайке адаптера USB A - Type C. У плохого адаптера пин VCONN был подключен pull-up. Наличие резистора бесполезно для штатного использования адаптера, поскольку на стыке с USB A некому проверять Ra и поднимать напряжение на VCONN, но для нашей задачи, где тестер должен единолично управлять напряжением на VCONN, наличие pull-up резистора просто меняет напряжение. У второго адаптера резистор был только на CC, так что с ним проблем не было. Вопрос про резистор на B5 можно прочитать здесь: https://electronics.stackexchange.com/questions/684206/is-pin-b5-vconn-connected-to-anything-in-a-usb-type-c-legacy-cable-assembly .
Второй нюанс: при подключении через разъем-"папу" чтению может мешать pull-up резистор в адаптере. Есть три решения проблемы. Первое решение: использовать Вариант 4, в котором pull-up будет влиять на другую сторону кабеля (мы же помним, что линия VCONN не должна доходить до второго конца кабеля). Второе решение: взять адаптер из комплекта для измерения сопротивлений и отключить линии CC1/2 (я описывал адаптер тут: https://telegra.ph/Soprotivlenie-USB-kabelej-01-17). Ну и третье решение: найти адаптер без резистора на VCONN. Для проверки нужно проверить сопротивление между VCC и пинами A5/B5. Только на один из них должно быть сопротивление 55кОм.
Цитата из первой статьи: В вариантах 2-4 на состояние шины также будет влиять pull-up резистор на 56кОм между VBUS и CC, который находится в любом переходнике с USB A на Type C.
Перейдем к тестеру KM003C. Почему у него получается считать маркер даже при питании от HID-порта?

Ответ на графике выше. На CC1/CC2 обычные напряжения, но мы еще видим и 4V на VBUS. "Сколько смог".

А вот после переворота штекера тестер зачем-то выдал СС1 3.2V и CC2(VCONN) 2.6V. И на VBUS напряжения не осталось.

Выше график четырех последовательных чтений маркеров. Штекер переворачивался. Нечетные чтения хорошие, с правильными напряжениями VBUS/VCONN/CC: 4.3/3.2/0.5, а четные плохие: 0.0/3.2/2.7. Понятно, что как раз на четных не читается проблемный кабель.
Почему KM003C там себя ведет - неизвестно. Может быть возможности управления напряжением на CC1/CC2 у него ограничены и связаны между собой. Возможно вторая комбинация напряжений нужна для чтения маркера у других проблемных кабелей (и было добавлено опытным путем). Но это факт: логика имитации тестером коннекта по-разному обрабатывает стороны штекера в условиях питания от HID-разъема.
Третий нюанс: тестер KM003C ведет себя по-разному для двух сторон разъема кабеля при питании от HID. Судя по сообщению "переверните разъем", это осознанное и известное производителю поведение. Решение: либо перевернуть разъем, либо питать от разъема-папы
Резюмируем: алгоритмы чтения маркеров у разных тестеров немного отличаются, но для большинства случаев подходит любой из четырех вариантов, описанных в прошлой статье. Но в любом случае существуют проблемные кабели, у которых будет сложно прочитать маркер.
Максимально параноидальная конфигурация, которая решает все известные проблемы - это Вариант 3 (тестируемый кабель с повешенным концом, питание подаётся на разъем-папу), причём питание подключено через переходник с выключенными линиями CC1/CC2. Ну или для KM003C схема с питанием через HID, но с готовностью перевернуть разъем.
Удачи в измерениях!