буквально по твоей ссылке в абзацах Why? и How? всё поведение и расписано.
Я это читал. Там описан общий принцип, но он не объясняет мой случай.
На практике:
один порт - заряд идёт
другой порт - нет
на другом ПК контроллер определяется, но заряд не запускается
Поэтому и спрашиваю: где именно в “Why?” и “How?” есть объяснение этой разницы?
в общем посмотрел я что на линиях D+ и D-
по первой картинке, где заряд идет:
повторяющиеся записи вида:
PID IN
Address=0x08 Endpoint=0x02
CRC OK
Это очень похоже на нормальную рабочую фазу после успешной инициализации, устройство уже получило адрес 0x08
хост уже знает его endpoint, и дальше просто регулярно опрашивает endpoint 0x02. заряд идет.
по второй картинке, где заряд не идет:
Reset
SYNC
PID SOF
Frame #...
CRC OK
тут хост шлет SOF кадры как положено по шине USB, но до нормальной рабочей стадии общения с устройством не доходит либо устройство после сброса не переходит в рабочее состояние, либо enumeration где-то срывается / застревает раньше.
Судя по этим двум кадрам, когда заряд идет то есть уже обращения к конкретному адресу и endpoint устройства. Когда заряд не идет - видны в основном только общешинные кадры SOF и сбросы, но не видно нормального обмена с endpoint’ами контроллера.
Похоже, что для старта зарядки у DS3 достаточно не какой-то магической sony-команды, а того, чтобы устройство было успешно перечислено и переведено в рабочее USB-состояние. Reset сам по себе недостаточен, SOF сам по себе недостаточен, а вот когда начинается нормальный обмен с endpoint’ами -заряд уже идёт
В общем похоже что DS3 начинает заряжаться не просто от наличия USB и не обязательно из-за ScpToolkit, а все же после успешного завершения enumeration до стадии активной конфигурации и реального обмена с endpoint’ами.