Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Составное USB, нехватка конечных точек
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
pil
Собственно на LPC1343 реализованно composite device. Все получается, но! нехватает конечных точек. Вычитал, что можно как то подцепиться к 0й endpoint. Как? Подскажите где копать, пожалуйста.
Дальше вопрос, сможет ли в таком случае соответствующий интерфейс стать стандартным (kbd, mouse) ?

Конкретезирую. У меня composite: mouse+kbd+Virtual COM.

mouse 1 endpoint interrupt in
kbd 1 endpoint interrupt in
Virt COM 3: 1 in interrupt + 1 in bulk + 1 out bulk

тем временем в контроллере:
0 0 Control Out 64 No
0 1 Control In 64 No
1 2 Interrupt/Bulk Out 64 No
1 3 Interrupt/Bulk In 64 No
2 4 Interrupt/Bulk Out 64 No
2 5 Interrupt/Bulk In 64 No
3 6 Interrupt/Bulk Out 64 Yes
3 7 Interrupt/Bulk In 64 Yes
4 8 Isochronous Out 512 Yes
4 9 Isochronous In 512 Yes

Проблема в том что 4ая endpoint Isochronous и её никуда не подсунишь. А влезть как то нужно. КАК?

Увидел что вроди как CDC можно и через Isochronous делать. Пока ковыряю в эту сторону
Konst_777
Цитата(pil @ Jul 19 2011, 15:50) *
...
Virt COM 3: 1 in interrupt + 1 in bulk + 1 out bulk
...

Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk. Переходник USB2.0 - RS232 (COM) VE024 имеет именно такую конфигурацию эндпоинтов. И работает.
galjoen
Цитата(pil @ Jul 19 2011, 16:50) *
Вычитал, что можно как то подцепиться к 0й endpoint. Как?

HID устройства могут не иметь EP кроме 0-й. Я так делал, всё отлично работает. Но я использовал только запросы GET/SET Report. Но интеррупт канал, по идее, должен работать через EP0. Для этого всё предусмотрено. Там просто будет запрос от интерфейса с соотв-м номером. Просто нужно на него ответить и всё.
Проверить легко - не описывать HID-овские EP и посмотреть запросы сниффером.
pil
Цитата(Konst_777 @ Jul 19 2011, 20:36) *
Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk. Переходник USB2.0 - RS232 (COM) VE024 имеет именно такую конфигурацию эндпоинтов. И работает.


а можно дескриптор?

Цитата
HID устройства могут не иметь EP кроме 0-й. Я так делал, всё отлично работает. Но я использовал только запросы GET/SET Feature. Но интеррупт канал, по идее, должен работать через EP0. Для этого всё предусмотрено. Там просто будет запрос от интерфейса с соотв-м номером. Просто нужно на него ответить и всё.
Проверить легко - не описывать HID-овские EP и посмотреть запросы сниффером.

Пока запасной вариант, попробую.
galjoen
Цитата(Konst_777 @ Jul 19 2011, 20:36) *
Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk.

Видимо то же самое - InterruptIn переносится на 0-ю EP.
Konst_777
Цитата(pil @ Jul 19 2011, 19:44) *
а можно дескриптор?

Вот что выдает UVCView.x86.exe
Код
           ---===>Device Information<===---
English product name: "usb serial conveter"

ConnectionStatus:                  
Current Config Value:              0x01  -> Device Bus Speed: Full
Device Address:                    0x01
Open Pipes:                           2

           ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
bInterval:                         0x00

           ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x02  -> Direction: OUT - EndpointID: 2
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
bInterval:                         0x00

           ===>Device Descriptor<===
bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0200
bDeviceClass:                      0x00  -> This is an Interface Class Defined Device
bDeviceSubClass:                   0x00
bDeviceProtocol:                   0x00
bMaxPacketSize0:                   0x08 = (8) Bytes
idVendor:                        0x0403 = Future Technology Devices International Limited
idProduct:                       0x6001
bcdDevice:                       0x0400
iManufacturer:                     0x01
      English (United States)  "ftdi"
iProduct:                          0x02
      English (United States)  "usb serial conveter"
iSerialNumber:                     0x03
      English (United States)  "ftQPMA5P"
bNumConfigurations:                0x01

           ===>Configuration Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x02
wTotalLength:                    0x0020  -> Validated
bNumInterfaces:                    0x01
bConfigurationValue:               0x01
iConfiguration:                    0x00
bmAttributes:                      0xA0  -> Bus Powered
MaxPower:                          0x16 =  44 mA

           ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x00
bNumEndpoints:                     0x02
bInterfaceClass:                   0xFF  -> Vendor Specific Device
bInterfaceSubClass:                0xFF
*!*CAUTION:    This appears to be an invalid bInterfaceSubClass
bInterfaceProtocol:                0xFF
*!*WARNING:  must be set to PC_PROTOCOL_UNDEFINED 0 for this class
iInterface:                        0x02
      English (United States)  "usb serial conveter"
*!*ERROR:  0xFF is the prerelease USB Video Class ID

           ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
bInterval:                         0x00

           ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x02  -> Direction: OUT - EndpointID: 2
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
bInterval:                         0x00
sergeeff
Можно хоть все интерфейсы на одни и те же конечные точки посадить. Но... Если захотите одновременно пользоваться этими интерфейсами (читай, разными драйверами), будут проблемы. Как и в устройстве. Вы не сможете различить кто вам информацию посылал.
galjoen
Цитата(Konst_777 @ Jul 19 2011, 21:34) *
idVendor: 0x0403 = Future Technology Devices International Limited
idProduct: 0x6001

Так это значит драйвер по VID/PID установится. Там что угодно может быть.
Кстати, а ведь насколько я помню, класс CDC должен быть в дескрипторе устройства прописан. Из дескриптора интерфейса драйвер не установится. Т.е. составного устройства, включающего в себя CDC, быть не может. Т.е. может, конечно, но только со своим драйвером, а значит покупка VID.

Цитата(sergeeff @ Jul 19 2011, 22:24) *
Можно хоть все интерфейсы на одни и те же конечные точки посадить. Но... Если захотите одновременно пользоваться этими интерфейсами (читай, разными драйверами), будут проблемы. Как и в устройстве. Вы не сможете различить кто вам информацию посылал.

То, что идёт через EP0 можно отличить. Там в запросе N интерфейса присутствует.
sergeeff
Цитата(galjoen @ Jul 19 2011, 21:31) *
Кстати, а ведь насколько я помню, класс CDC должен быть в дескрипторе устройства прописан. Из дескриптора интерфейса драйвер не установится. Т.е. составного устройства, включающего в себя CDC, быть не может. Т.е. может, конечно, но только со своим драйвером, а значит покупка VID.


Все там ставится. Прописываете в *.inf к какому интерфесу относится драйвер и все путем.
pil
Цитата(sergeeff @ Jul 19 2011, 22:52) *
Все там ставится. Прописываете в *.inf к какому интерфесу относится драйвер и все путем.

vid pid не нулевые, про это речь была. Проблема только при массовом выпуске.
galjoen
Цитата(sergeeff @ Jul 19 2011, 22:52) *
Все там ставится. Прописываете в *.inf к какому интерфесу относится драйвер и все путем.

Да, с записью в *.inf можно, я и забыл про такую возможность.
Но тогда в режиме Plug and Play работать невозможно будет, а у нас это обязательным условием было.
К тому же опять проблема с тем, что VID должен быть не равен 0.

Кстати, а почему клавиатура и мышь разными устройствами?
Насколько я помню, там их можно в один HID объединить. Только усаги у него соответствующие написать.
sergeeff
Цитата(pil @ Jul 19 2011, 22:00) *
vid pid не нулевые, про это речь была. Проблема только при массовом выпуске.


При массовом выпуске платишь около 400 евро и получаешь официальные vid и pid (не путать с правом посадить usb label. это на порядок дороже).
galjoen
Цитата(sergeeff @ Jul 20 2011, 00:10) *
При массовом выпуске платишь около 400 евро и получаешь официальные vid и pid (не путать с правом посадить usb label. это на порядок дороже).

Кто-нибудь у нас VID уже за такие деньги получил?
Или это про перепродавцов, которые покупают VID и продают PIDы в розницу, речь? Так это чистый развод, т.к. ничего официального в этом нет.
pil
Цитата(Konst_777 @ Jul 19 2011, 20:36) *
Попробуйте для Virt COM 3 использовать 1 in bulk + 1 out bulk. Переходник USB2.0 - RS232 (COM) VE024 имеет именно такую конфигурацию эндпоинтов. И работает.

Вообщем использовал самый простой вариант, т.е. Virt COM = 1 in bulk + 1 out bulk. Причем InterruptIn не убрал из описания, а просто посадил на несуществующую конечную точку. Все пашет ОК.
Всем спасибо, хоть дискусия ушла к vid|pid=)
sergeeff
Цитата(pil @ Jul 22 2011, 04:09) *
Вообщем использовал самый простой вариант, т.е. Virt COM = 1 in bulk + 1 out bulk. Причем InterruptIn не убрал из описания, а просто посадил на несуществующую конечную точку. Все пашет ОК.
Всем спасибо, хоть дискусия ушла к vid|pid=)


Все это и будет работать, если вы не собираетесь хосту сообщать о состоянии своих сигналов DTR/CTS и параметрах baud, parity и пр.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.