Автор Тема: DualShock 3 — заряд только после полной инициализации?  (Прочитано 1036 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kingsize Selector

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
Есть 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

  • Модератор
  • Сообщений: 9216
  • Пол: Мужской
    • Просмотр профиля
Dualshock 3 НЕ заряжается от обычных зарядок 5В (типа телефонных). Ему нужен сигнал по дата линиям, например, он будет заряжаться от Плейстейшн 3.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4629
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Кто-нибудь копал, что именно триггерит включение зарядки?
Когда было интересно, находил множество информации в Гугле по этой теме. Например, схемы для создания подходящей зарядки. Ищущий да обрящет

Оффлайн Kingsize Selector

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
Dualshock 3 НЕ заряжается от обычных зарядок 5В (типа телефонных). Ему нужен сигнал по дата линиям, например, он будет заряжаться от Плейстейшн 3.

Это как раз базовый момент, про него в курсе.

Вопрос не в отсутствии D+/D-, а в том, что контроллер в системе определяется, но заряд не запускается, пока не произойдёт полноценная инициализация (например через ScpToolkit).

Поэтому и спрашиваю, что именно триггерит включение зарядки, а не от чего он в принципе умеет заряжаться.

Добавлено позже:
Когда было интересно, находил множество информации в Гугле по этой теме. Например, схемы для создания подходящей зарядки. Ищущий да обрящет


но сейчас то что можно встретить, это замещение  на  модуль  tp4056 c али, но это не интерсно.
« Последнее редактирование: 24 Март 2026, 17:19:39 от Kingsize Selector »

Оффлайн megavolt85

  • Пользователь
  • Сообщений: 2361
  • Пол: Мужской
    • Просмотр профиля
И можно ли заставить его заряжаться от ПК без всей этой истории с драйверами/ScpToolkit?
нет нельзя

А то складывается впечатление, что у Sony "просто заряжаться" было признано излишне тривиальной задачей
это не впечатление, а общеизвестный факт, тётя соня в тот момент жизни пыталась косить под apple и барыжила спец зарядками для джоев, либо заряжай через саму плойку, либо покупай док станцию для зарядки.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4629
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
но сейчас то что можно встретить, это замещение  на  модуль  tp4056 c али, но это не интерсно.
Нет, это не так.

Оффлайн Kingsize Selector

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
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

  • Пользователь
  • Сообщений: 4629
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Kingsize Selector,
буквально по твоей ссылке в абзацах Why? и How? всё поведение и расписано.

Оффлайн Kingsize Selector

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
Цитата
буквально по твоей ссылке в абзацах 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

  • Пользователь
  • Сообщений: 4629
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Поэтому и спрашиваю: где именно в “Why?” и “How?” есть объяснение этой разницы?
1 и 2 пункт в why и весь how. Нужно рукопожатие (чего не будет от з/у), но не должно быть инициализации как обычного игрового устройства либо должна быть инициализация правильным драйвером.

Оффлайн Dyons

  • Пользователь
  • Сообщений: 7957
  • инфернальный колдун
    • Youtube
    • Просмотр профиля
либо должна быть инициализация правильным драйвером.
Правильным это каким, потому что с официальным драйвером от Сони, пад при подключении к ПеКа не показывает никаких признаков что заряд идет. При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно) индикация заряда ДШ3 идет.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4629
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Правильным это каким, потому что с официальным драйвером от Сони, пад при подключении к ПеКа не показывает никаких признаков что заряд идет. При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно) индикация заряда ДШ3 идет.
Правильным -- это тем, что даст рукопожатие, но не начнёт привязку, оставив управление через BlueTooth.

Возможно, я не очень понятно выразился, но конкретика есть в оригинале, про что я уже упоминал ранее.

PS4 вполне может поддерживать DS3. Если это не так (мои знания ограничены), то это искусственное ограничение.

Оффлайн Mad

  • Модератор
  • Сообщений: 9216
  • Пол: Мужской
    • Просмотр профиля
При этом например при подключении того же ДШ3 кабелем к ПС4 (которая ДШ3 не поддерживает абсолютно)
В смысле? Сто лет поддерживает в определенных играх (в основном знаю по файтингам), называется функция что-то типа Legacy Controllers. Нужна в целом была, чтобы обеспечивать совместимость с аркадными стиками от ПС3 в этих же файтингах.

Оффлайн Dyons

  • Пользователь
  • Сообщений: 7957
  • инфернальный колдун
    • Youtube
    • Просмотр профиля
В смысле? Сто лет поддерживает в определенных играх (в основном знаю по файтингам), называется функция что-то типа Legacy Controllers.
При подключении ДШ3 к ПС4 выскакивает уведомление что фиг вам, а не поддержка ДШ3, так что хз где оно там поддерживается.

Оффлайн Mad

  • Модератор
  • Сообщений: 9216
  • Пол: Мужской
    • Просмотр профиля
Если приставка говорит, что она не может использовать PS3 контроллер, значит она умеет корректно распознавать PS3 контроллер. 
311278-0

Дополнение: Legacy Controller Support в поддерживаемых играх позволяет играть на DS3 паде только по проводу.
« Последнее редактирование: 27 Март 2026, 11:46:53 от Mad »

Оффлайн Kingsize Selector

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
И еще наблюдения, на этот раз ноут под управлением 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

  • Пользователь
  • Сообщений: 407
  • Пол: Мужской
    • Просмотр профиля
Чуть дальше глянул общение на том порту, где заряд не начинается, это тот комп где заряд только с одного порта идет (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-инициализации. Хотелось бы понять, что именно в поведении хоста это определяет.
« Последнее редактирование: 27 Март 2026, 13:33:47 от Kingsize Selector »