Поменять USB device class на лету.

Jun 02, 2004 4 Replies

Hi All,



Есть процессор с USB device на борту. Возникла задача на ходу поменять ему Device class. Hу скажем был serial поверх USB, а надо теперь стать mass-storage. Так вот, что-то я не нашел как заставить хост пере-enumerate этот девайс(хм, а как это по русски сказать?) не отключая/подключая устройство к USB шине? Манипуляция pull-up резисторами для имитации этого действия, к сожалению, тоже невозможна.



/Sam samutin(ат)hotbox.ru


Thu Jun 03 2004 07:48, Rudolf Ladyzhenskii wrote to Alex Samutin:

RL> Pri poluchenii etoi kommandi, modem otkluchaet USB i zapuskaet ego opita' RL> no uzhe s drugimi device id i t.d. Chto pri etom vidit host? On vidit RL> chto odin device otkluchilsia, a drugoi vkluchilsia.

Hасколько я понимаю, чтобы заставить хост понять что Device отключился - надо снять 3 вольта с D+/D- а потом включить опять. Сделать это можно вытащив разъем или отключив pull-up резистор (если он управляемый). Hо в моем случае он не управляемый. Если просто не отвечать на запросы хоста, то после 3-х попыток хост считает девайс неисправным и перестает к нему обращаться. А enumeration заново для него не запускает. Модифицировать драйвер хоста я не могу (Windows). Соответственно вопрос - можно ли как еще заставит хост заново считать дескрипторы интерфейсов (или всего устройства целиком)?

/Sam samutin(ат)hotbox.ru

Vot kak raz sdelal takoe.

U menia modem kotorii vedet sebia kak standartnii CDC modem. Nado sdelat' eche odin rezhim raboti i CDC ne udobno.

Kak ia sdelal -- modem vkluchaetsia kak obichnii modem. Esli host znaet chto eto za device, on posilaet spethial'nuiu kommandu kak k modemu (AT command). Pri poluchenii etoi kommandi, modem otkluchaet USB i zapuskaet ego opita' no uzhe s drugimi device id i t.d. Chto pri etom vidit host? On vidit chto odin device otkluchilsia, a drugoi vkluchilsia.

Edinstvenno chto, v moment perekluchenia na hoste ne dolzhna rabotat' ni odna proga kotoraia obchaetsia s devisom. V moem sluchae terminal. Windows, naprimer voobche mozhet povisnut' ili reboot. Linux vozmuchetsia, no potom rabotaet. Ia prosto sdelal delay v modeme na 5s chtob uspet' otkluchit terminal.

V tvoem sluchae, prosto shutdown USB controller i re-initialise opiat. U menia stoit Infineon C165UTAH s USB na bortu i vse rabotaet OK.

Rudolf

Ia proboval na Infineon C165UTAH. Esli v software otkluchit' USB controller, to host vidit eto kak disconnect. Poprobui -- ti nichego ne teriaesh'.

Rudolf

Привет Alex, а не поговорить ли нам про Re: Поменять USB device class на лету..

03 Июн 04 08:26, Alex Samutin разговаривал с Rudolf Ladyzhenskii:

AS> Hасколько я понимаю, чтобы заставить хост понять что Device отключился AS> - надо снять 3 вольта с D+/D- а потом включить опять. Сделать это AS> можно вытащив разъем или отключив pull-up резистор (если он AS> управляемый). Hо в моем случае он не управляемый. Если просто не AS> отвечать на запросы хоста, то после 3-х попыток хост считает девайс AS> неисправным и перестает к нему обращаться. А enumeration заново AS> для AS> него не запускает. Модифицировать драйвер хоста я не могу (Windows). AS> Соответственно вопрос - можно ли как еще заставит хост заново считать AS> дескрипторы интерфейсов (или всего устройства целиком)?

Попробуй resume signaling, может быть после этого хост заново начнёт обращатся к устройству. Если это не поможет, то можно считать дескрипторы через драйвер хоста. Обычно такая функция присутствует в api драйвера.

До скорой встречи, Nikolay AKA Lazy Dreamer.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required