Мне нужен эксперт по USB. У меня есть небольшое аппаратное обеспечение с MAX3421 как USB-хост. Я подключаю свой принтер, который изначально состоит из двух устройств: самого принтера и сканера. Оба устройства отображаются как отдельные устройства через встроенный концентратор. Устройства являются полноскоростными.Как связаться с устройствами за концентратором USB?
Я прочитал огромное руководство по USB 2.0 (http://www.usb.org/developers/docs/usb20_docs), где я искал способ связи через концентратор с устройствами позади, но в документации отсутствует эта важная деталь.
Я могу отправить команды в концентратор, как описано в главе 11.24.2, например, получить дескриптор концентратора, SET_FEATURE (Reset), который сбрасывает устройство на принтере, GET_STATUS (Port1), который корректно возвращает 4 байта с состояние порта 1 в концентраторе.
Но как получить, например, дескриптор устройства сканера?
Я назначил адрес устройства 1 концентратору и попытался связаться со сканером/принтером по адресу устройства 2 (предположим, что он может быть там), но MAX3421 отвечает ошибкой JERR при отправке GET_DESCRIPTOR (Device) на адрес устройства 2, хотя оба порта концентратора питаются и включаются после выполнения сброса.
Я много читал о токенах SPLIT, но они, похоже, используются только в высокоскоростных концентраторах. Но концентратор в моем принтере - Full-Speed.
В документации не говорится ни о каком месте, как это сделать. Где это задокументировано?
Команда SET_FEATURE (PORT_RESET) к нисходящему порту концентратора генерирует состояние переустановки USB на шине. По спецификациям USB любое USB-устройство, подключенное к этому порту, должно перезагрузить свой SIE (Serial Interface Engine) в состояние по умолчанию, которое сбрасывает адресный декодер на значение по умолчанию «00». Он называется «панель управления по умолчанию», все в спецификациях. Это то же самое состояние, что и «power-on». Из этого следует следующий алгоритм перечисления. –