В качестве девайса использую флэшку Transcend JetFlash, которая вроде бы как относится к USB Mass Storage Class Bulk-Only Transport.
После RESET'а проходят запросы: SetAddress, GetDeviceDescriptor, ещё раз GetDeviceDescriptor (но с другим значением в поле wLength), GetConfigurationDescriptor, ещё раз GetConfigurationDescriptor (но с другим значением в поле wLength), SetConfiguration, GetStringDescriptor(с индексом 0, т.е. запрос массива кодов LANGID). Все эти запросы вроде проходят нормально, т.е. сосдержимое полей пакетов соответствует спецификации. Только все эти запросы почему-то проходят не с первого раза, а с 3-го, 4-го. То есть последовательность прохождения запроса получается такая:
token setup пакет со стороны хоста data пакет со стороны хоста (в котором и содержится информация о запросе) handshake пакет со стороны устройства (ACK)
token IN пакет со стороны хоста NACK со стороны устройства token IN пакет со стороны хоста NACK со стороны устройства . . . так несколько раз . . token IN пакет со стороны хоста data пакет со стороны устройства (в этом пакете вобщем и содержится дескриптор устройства) handshake со стоорны хоста (ACK)
Далее, после того, как все вышеуказанные запросы проходят, хост посылает запрос GetStringDescriptor(с индексом 1). Этот запрос никак не может пройти и заканчивается таймаутом. Далее запрос GetStringDescriptor(с индексом 2) - тоже таймаут. и так далее...
P.S. Расписывать все запросы по пакетам с точностью до байта ОЧЕНЬ долго
|