Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разная длина конфигурационного дскриптора.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
misyachniy
Отлаживаю плату с USB хостом (LM3S9B95)
Устройство видеокамера

Дескриптор устройства считывается одинаково как на PC так и на плате.

12 01 00 02 EF 02 01 40 45 0C C0 62 00 01 02 01 00 01

Последняя цифра говорит что только одна конфигурация.

Запрос о конфигурации отрабатывется по разному

USBSnoop
Запрос: не виден
Ответ: 09 02 31 02 02 01 00 80 31

USBTrace
запрос: 80 06 00 02 00 00 39 02
Ответ: 09 02 39 02 02 01 00 80 31

В устройстве (LM3S9B95)
Запрос: 80 06 00 02 00 00 2A 02
Ответ: 09 02 2A 02 02 01 00 80 31

Во всех трех случаях длина данных конфигурации разная.

0231
0239
022A


Понятно что программы пишут разные программисты но непонятно почему так по разному ;-)
Владивольт
взглянем на строки "запрос" случаев 2 и 3.
Мне вспоминается, что при Input Request поле wLength задает максимальную длину данных, ожидаемых хостом в ответе от устройства.
Так вот в ответах ровно столько, сколько хост установил в качестве предела.
misyachniy
Цитата(Владивольт @ Feb 19 2010, 14:35) *
взглянем на строки "запрос" случаев 2 и 3.
Мне вспоминается, что при Input Request поле wLength задает максимальную длину данных, ожидаемых хостом в ответе от устройства.
Так вот в ответах ровно столько, сколько хост установил в качестве предела.


Устройство должно отдавать дескриптор конфигурации без изменений.
Меняется только количество байт в ответе.
В начале обычно запрашивают 9 байт и смотрят сколько нужно всего.
Затем полный дескриптор.
Владивольт
Мда, давно это было...
Сейчас сподвигнут перечесть Главу 9 и просмотреть дампы своих отладок.

А что отвечает, когда спрашивают 9 байт?

P.S. А в строках "Ответ: 09 02 2A 02 02 01 00 80 31" исходного поста жирным шрифтом следовало выделить четвертое слева число 02. Второй байт, сразу после 09 -- это bDescriptorType
misyachniy
Цитата(Владивольт @ Feb 19 2010, 16:25) *
Мда, давно это было...
Сейчас сподвигнут перечесть Главу 9 и просмотреть дампы своих отладок.

А что отвечает, когда спрашивают 9 байт?

P.S. А в строках "Ответ: 09 02 2A 02 02 01 00 80 31" исходного поста жирным шрифтом следовало выделить четвертое слева число 02. Второй байт, сразу после 09 -- это bDescriptorType


Ну да на всех дескрипторах нужно было на байт сдвинутся.
misyachniy
Сравнил посылки которые показали USBSnoop/USBTrace

USBSnoop
09 02 31 02 02 01 00 80 31
09 04 00 00 01 0e 01 00 01
0d 24 01 00 01 67 00 c0 e1 e4 00 01 01
09 24 03 02 01 01 00 05 00
1a 24 06 04 70 33 f0 28 11 63 2e 4a ba 2c 68 90 eb 33 40 16 08 01 03 01 0f 00


USBTrace
09 02 39 02 02 01 00 80 31
08 0B 00 02 0E 03 00 01
09 04 00 00 01 0E 01 00 01
0D 24 01 00 01 67 00 C0 E1 E4 00 01 01
09 24 03 02 01 01 00 05 00
1A 24 06 04 70 33 F0 28 11 63 2E 4A BA 2C 68 90 EB 33 40 16 08 01 03 01 0F 00


В дескрипторе отсутствует Standard Video Interface Collection IAD

По примеру из стандарта для видеоустройств 1.1 разобрал так ответ

Table 2-3 Standard Video Interface Collection IAD

08 bLength
0B - INTERFACE ASSOCIATION Descriptor
00 - bFirstInterface Interface number of the VideoControl interface that is associated with this function
02 - bInterfaceCount - два потоковых видео в этой функции
0E - bFunctionClass = CC_VIDEO
03 - bFunctionSubClass = SC_VIDEO_INTERFACE_COLLECTION
00 - bFunctionProtocol Not used. Must be set to PC_PROTOCOL_UNDEFINED
01 - Index to string descriptor that contains the string <Your Product Name> in Unicode.
Have to match iInterface field in Standard VC Interface Descriptor


Получается, что дескриптор может менятся в зависимости от состояния в котором находиться устройство?

По поводу того, что в при опросе из LM3SB95 устройстве дескриптор имеет длину 0х022A, следующие соображения:

Пересмотрел в дескрипторе конфигурации "хвост".
В длинных 231/239 дескрипторах есть 6 различных длин посылок конечной точки с какими может работать видеокамера.
По команде Set Interface можно выбрать эту длину в байтах 128/256/512/800/2848/4896/5120/

В дескрипторе длиной 22A максимальная длина конечной точки 128/256/512/600/800/956.

По стандарту длина посылки для FULL SPEED режима в USB максимум 1023 байта.
Очевидно в зависимости от скорости по шине и конфигурацию устройство показывает разную.

Так что остановлюсь на длине 22A и буду с ней работать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.