[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Михаил Евстафьев 25 апреля 2002 г. 16:34
В ответ на: Нужна консультация по USBN9604 (+) отправлено OverMem 25 апреля 2002 г. 13:00

>На РС детектируется новое 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