[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
>На РС детектируется новое USB устройство.
>Потом комп задумывается секунд на 10.
Странно, у меня это происходит почти мгновенно...
>После первого пакета моего ответа генерируется либо NAK,
>либо RESET,либо SUSPEND
Должен быть и NAK и RESET. Когда хост первый раз читает дескриптор из несконфигурированного устройства, он читает только его начало, потом чтение обрывает, делает RESET, и назначает устройству адрес. См. мой протокол событий ниже.
>Хотелось бы где-нибудь посмотреть пример работы с этим контроллером.
Есть пример от National. Хорошим его назвать нельзя.
Там и схемы обвязки можно найти.
Вот мой протокол событий при подключении устройства к шине.
IntAltSusp //сначала вышестоящий хаб "усыпляет" устройство, чтоб зря не кушало
IntAltRst //а теперь хаб начинает будить спящее устройство
IntAltRst //таких событий дальше много, т.к. на просыпание может понадобиться большое время
...
IntRx0SetupGetDescDevice //теперь хост начинает читать дескриптор используя 0-й адрес
IntTx0 //читает первые 8 байт, из них он узнает размер EP0, версию USB поддерживаемую устройством
IntNakRx0 //и обрывает чтение, переключая направление ControlPipe в сторону передачи от хоста
IntAltRst //опять множество RESET
IntAltRst
...
IntRx0SetupSetAddr82 //хост задает адрес, значимые только 7 младших бит, поэтому адрес 0x02
IntTx0ControlPipeRxOK //транзакция успешно подтверждается
IntRx0SetupGetDescDevice //хост читает дескриптор устройства
IntTx0 //несколькими порциями по 8 байт, кроме последней, которая меньше или вовсе пустая
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntRx0SetupGetDescConfig //хост читает дескриптор конфигурации
IntTx0
IntTx0
IntTx0
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntRx0SetupGetDescDevice //хост читает дескриптор устройства и дескриптор конфигурации еще несколько раз
IntTx0
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntRx0SetupGetDescConfig
IntTx0
IntTx0
IntTx0
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntRx0SetupGetDescConfig
IntTx0
IntTx0
IntTx0
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntRx0SetupSetConf01 //хост задает номер конфигурации (0x01) в которой будет использовать устройство
IntTx0ControlPipeRxOK //транзакция успешно подтверждается
IntRx0SetupSetIdle //хост инициализирует HID устройство
IntTx0ControlPipeRxOK //транзакция успешно подтверждается
IntRx0SetupGetDescHidrep //хост читает HID дескриптор
IntTx0
IntTx0
IntTx0
IntTx0
IntRx0ControlPipeTxOK //транзакция успешно подтверждается
IntNakTx1 //хост начинает опрашивать EP1, чтобы забирать через него HID report
IntNakTx1 //а так как я ничего в FIFO1 не положил, то USBN на эти попытки чтения дает NAK
IntNakTx1
... //так продолжается бесконечно
E-mail: info@telesys.ru