Приставки > Джойстики и прочие манипуляторы
DualShock 3 — заряд только после полной инициализации?
(1/1)
Kingsize Selector:
Есть 7 штук DualShock 3, все ведут себя абсолютно одинаково. Аккумуляторы проверены, где нужно заменены — с батареями всё в порядке.
Дальше начинается “фирменная магия Sony”.
На системах с Windows 10 (чистая установка, без ScpToolkit) контроллер определяется, виден в joy.cpl, но на кнопки не реагирует и не заряжается. Потребление около 15–20 мА — то есть просто висит как USB-устройство без какой-либо жизни.
На ноутбуке с установленным ScpToolkit — всё внезапно становится “исправным”: контроллер нормально инициализируется, работает и сразу начинает заряжаться. Но но только на одном порту. Чтобы не было мыслей про "битый порты": все USB-порты проверены, флешки/накопители работают без проблем. Но при этом только один конкретный порт даёт нормальную инициализацию DS3, остальные ведут себя как на чистой системе. Через USB-хаб на этих же машинах контроллер либо не определяется, либо не инициализируется.
Дополнительно проверено на третьем ноутбуке (ThinkPad X1 Carbon Gen 13, Win11). ScpToolkit там удалён, но, возможно, остались хвосты. И вот тут поведение ещё интереснее: контроллер начинает заряжаться практически сразу — и через USB-хаб, и напрямую. При этом в joy.cpl его нет, а в устройствах висит как PLAYSTATION(R)3 Controller (libusbK).
В итоге складывается ощущение, что для включения зарядки недостаточно ни 5 В, ни самого факта определения устройства — контроллер ждёт, пока его нормально “дожмут” до полной инициализации (скорее всего через HID/feature report), и только после этого разрешает заряд.
Собственно вопрос:
это штатное поведение DS3 или очередная "гениальная" реализация?
Кто-нибудь копал, что именно триггерит включение зарядки?
И можно ли заставить его заряжаться от ПК без всей этой истории с драйверами/ScpToolkit?
А то складывается впечатление, что у Sony "просто заряжаться" было признано излишне тривиальной задачей 😄
Mad:
Dualshock 3 НЕ заряжается от обычных зарядок 5В (типа телефонных). Ему нужен сигнал по дата линиям, например, он будет заряжаться от Плейстейшн 3.
Yoti:
--- Цитата: Kingsize Selector от 24 Март 2026, 15:37:32 ---Кто-нибудь копал, что именно триггерит включение зарядки?
--- Конец цитаты ---
Когда было интересно, находил множество информации в Гугле по этой теме. Например, схемы для создания подходящей зарядки. Ищущий да обрящет
Kingsize Selector:
--- Цитата: Mad от 24 Март 2026, 16:27:06 ---Dualshock 3 НЕ заряжается от обычных зарядок 5В (типа телефонных). Ему нужен сигнал по дата линиям, например, он будет заряжаться от Плейстейшн 3.
--- Конец цитаты ---
Это как раз базовый момент, про него в курсе.
Вопрос не в отсутствии D+/D-, а в том, что контроллер в системе определяется, но заряд не запускается, пока не произойдёт полноценная инициализация (например через ScpToolkit).
Поэтому и спрашиваю, что именно триггерит включение зарядки, а не от чего он в принципе умеет заряжаться.
Добавлено позже:
--- Цитата: Yoti от 24 Март 2026, 16:32:21 ---Когда было интересно, находил множество информации в Гугле по этой теме. Например, схемы для создания подходящей зарядки. Ищущий да обрящет
--- Конец цитаты ---
но сейчас то что можно встретить, это замещение на модуль tp4056 c али, но это не интерсно.
megavolt85:
--- Цитата: Kingsize Selector от 24 Март 2026, 15:37:32 ---И можно ли заставить его заряжаться от ПК без всей этой истории с драйверами/ScpToolkit?
--- Конец цитаты ---
нет нельзя
--- Цитата: Kingsize Selector от 24 Март 2026, 15:37:32 ---А то складывается впечатление, что у Sony "просто заряжаться" было признано излишне тривиальной задачей
--- Конец цитаты ---
это не впечатление, а общеизвестный факт, тётя соня в тот момент жизни пыталась косить под apple и барыжила спец зарядками для джоев, либо заряжай через саму плойку, либо покупай док станцию для зарядки.
Yoti:
--- Цитата: Kingsize Selector от 24 Март 2026, 17:08:50 ---но сейчас то что можно встретить, это замещение на модуль tp4056 c али, но это не интерсно.
--- Конец цитаты ---
Нет, это не так.
Kingsize Selector:
Yoti, а что еще есть?
Я ещё посмотрел проект DS3PicoCharger — там идея как раз в том, что контроллер начинает заряжаться после базового USB-handshake.
https://github.com/radu-gs/DS3PicoCharger/blob/main/code.py
Если кратко по коду: Pico просто поднимает USB host и в цикле проверяет наличие устройства (usb.core.find()), никаких явных команд (типа HID report или control transfer) не отправляется. То есть, по сути, достаточно того, что контроллер определился как USB-устройство.
Но у меня наблюдения этому не полностью соответствуют.
На одних машинах (или даже на одном и том же ноутбуке, но в разных USB-портах) контроллер определяется, но заряд не запускается.
На других — при тех же условиях заряд начинается сразу (в том числе через USB-хаб и даже через тестер).
Отсюда вопрос, получается, что одного факта enumeration всё-таки недостаточно?
Возможно, разные USB-контроллеры/драйверы проходят разные стадии инициализации (или выполняют какие-то дополнительные запросы), и именно это включает заряд?
Yoti:
Kingsize Selector,
буквально по твоей ссылке в абзацах Why? и How? всё поведение и расписано.
Kingsize Selector:
--- Цитата ---буквально по твоей ссылке в абзацах 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’ами.
Yoti:
--- Цитата: Kingsize Selector от 26 Март 2026, 19:43:41 ---Поэтому и спрашиваю: где именно в “Why?” и “How?” есть объяснение этой разницы?
--- Конец цитаты ---
1 и 2 пункт в why и весь how. Нужно рукопожатие (чего не будет от з/у), но не должно быть инициализации как обычного игрового устройства либо должна быть инициализация правильным драйвером.
Dyons:
--- Цитата: Yoti от 26 Март 2026, 22:24:02 ---либо должна быть инициализация правильным драйвером.
--- Конец цитаты ---
Правильным это каким, потому что с официальным драйвером от Сони, пад при подключении к ПеКа не показывает никаких признаков что заряд идет. При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно) индикация заряда ДШ3 идет.
Yoti:
--- Цитата: Dyons от 26 Март 2026, 23:27:19 ---Правильным это каким, потому что с официальным драйвером от Сони, пад при подключении к ПеКа не показывает никаких признаков что заряд идет. При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно) индикация заряда ДШ3 идет.
--- Конец цитаты ---
Правильным -- это тем, что даст рукопожатие, но не начнёт привязку, оставив управление через BlueTooth.
Возможно, я не очень понятно выразился, но конкретика есть в оригинале, про что я уже упоминал ранее.
PS4 вполне может поддерживать DS3. Если это не так (мои знания ограничены), то это искусственное ограничение.
Mad:
--- Цитата: Dyons от 26 Март 2026, 23:27:19 ---При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно)
--- Конец цитаты ---
В смысле? Сто лет поддерживает в определенных играх (в основном знаю по файтингам), называется функция что-то типа Legacy Controllers. Нужна в целом была, чтобы обеспечивать совместимость с аркадными стиками от ПС3 в этих же файтингах.
Dyons:
--- Цитата: Mad от 26 Март 2026, 23:42:06 ---В смысле? Сто лет поддерживает в определенных играх (в основном знаю по файтингам), называется функция что-то типа Legacy Controllers.
--- Конец цитаты ---
При подключении ДШ3 к ПС4 выскакивает уведомление что фиг вам, а не поддержка ДШ3, так что хз где оно там поддерживается.
Mad:
Если приставка говорит, что она не может использовать PS3 контроллер, значит она умеет корректно распознавать PS3 контроллер.
Дополнение: Legacy Controller Support в поддерживаемых играх позволяет играть на DS3 паде только по проводу.
Kingsize Selector:
И еще наблюдения, на этот раз ноут под управлением win8. и это ломает предыдущую гипотезу.
Есть:enumeration, SETUP на EP0, устройство видно в joy.cpl, дальше идут IN/NAK
То есть устройство уже полностью инициализировано, но заряд НЕ идет.
на скрине видно: Address=0x00 Endpoint=0x00, потом IN + NAK, хост уже общается с устройством, но устройство не выдает данные (NAK), и не переходит в активный режим.
в общем настоящая гипотеза сейчас такая: DS3 начинает заряд НЕ от enumeration, а от перехода в "активный HID режим"
(когда устройство начинает реально отдавать отчеты, а не просто висит)
Рабочий случай
SYNC
PID IN <-- хост просит данные
дальше устройство отвечает данными
потом ACK
Нерабочий случай
SYNC
PID IN <-- хост тоже просит данные
устройство отвечает PID NAK
EOP
То есть разница не в том, что хост "по-другому обращается", а в том, что сам DS3 в одном случае готов отдавать данные, а в другом говорит "данных нет / не готов".
По сути USB enumeration прошло, endpoint уже есть, хост делает IN, но контроллер в нерабочем случае не перешёл в состояние, где начинает выдавать HID-отчёты, и, похоже, заряд тоже не разрешает. И какого собственно хрена происходит!? В чем разница то?
Kingsize Selector:
Чуть дальше глянул общение на том порту, где заряд не начинается, это тот комп где заряд только с одного порта идет (SPC стоит, Win10).
Здесь уже есть:
PID SETUP
Address=0x04 Endpoint=0x00
DATA0
байты:
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00
Это стандартный USB-запрос:
bmRequestType = 0x80
bRequest = 0x06 → GET_DESCRIPTOR
wValue = 0x0100 → Device Descriptor
wIndex = 0x0000
wLength = 0x0012 → 18 байт
То есть хост уже обращается к устройству по адресу 0x04, и enumeration явно зашёл дальше, чем "совсем не стартовал". Дальше ACK, потом IN Address=0x04 Endpoint=0x00 и в ответ: NAK, NAK, NAK
Т.е. хост отправил SETUP stage запроса GET_DESCRIPTOR, устройство этот SETUP приняло (ACK),
а потом хост пытается забрать data stage через IN на EP0. И вот тут устройство вместо данных отвечает NAK. По сути запрос начат, но устройство не отдаёт данные на стадии чтения ответа.
потом в конце записи (вторая картинка) уже STALL, т.е. если NAK это "я сейчас не готов, попробуй позже", то STALL - "этот запрос/стадия для меня некорректна или я не могу её обработать"
Что может отличаться между USB-портами/контроллерами, из-за чего один и тот же DS3 на одном порту успешно проходит control sequence, а на другом уходит в NAK/STALL????
формально устройство определяется в системе в обоих случаях, но до рабочего состояния доходит только на одном порту.
Судя по логам, одного факта enumeration недостаточно — критично именно успешное завершение control-инициализации. Хотелось бы понять, что именно в поведении хоста это определяет.
Навигация
Перейти к полной версии