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

миниатюрный аудио-видеорекордер mAVR

Отправлено Михаил Евстафьев 13 августа 2002 г. 18:25
В ответ на: USBN9603 энумерация отправлено AMOR 13 августа 2002 г. 16:45

Первое чтение дескриптора хост принудительно обрывает. Читает только первые 8 байт. Это ты и наблюдаешь. Так и должно быть.
Потом хост назначает адрес устройству и читает дескриптор еще раз. Теперь уже до конца. При инициализации драйверов каждый драйвер в стеке протоколов еще раз читает дескрипторы.

Вот протокол событий (прерываний) при енумерации:

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
... //так продолжается бесконечно

Что касается разницы между D12 и USBN9603 - то, по моему, чипы почти одинаковые. Просто пример для USBN9603 который можно скачать с сайта NS это откровенная халтура.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru