|
Эмуляция COM через USB |
|
|
|
Mar 4 2006, 16:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergeeff @ Mar 3 2006, 13:54)  Хотелось на стандартном USB контроллере (мы сейчас используем PDIUSBD12) реализовать CDC устройство и работать с ним через стандартный usbcomm.sys драйвер из Windows’a. Изучение запросов, которые должено обрабатывать CDC устройство, показало, что там таковые (на установку и сброс сигналов DTR и пр.) отсутствуют. Так что похоже это вариант не проходит. Я делал CDC устройство на связке ATMega16L + PDIUSBD12. CDC класс поддерживает сигнализацию DTR/DSR, RTS, DCD, RI и Break (т.е. все, кроме CTS). Если есть заинтересованность, могу рассказать подробнее.
|
|
|
|
|
Mar 17 2006, 08:53
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 8-11-05
Пользователь №: 10 602

|
Используешь так же как и на обычном порте. Только вот проблемы со скоростью возникают медленно это все(((
|
|
|
|
|
Jan 9 2007, 09:20
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(aaarrr @ Mar 4 2006, 20:19)  Я делал CDC устройство на связке ATMega16L + PDIUSBD12. CDC класс поддерживает сигнализацию DTR/DSR, RTS, DCD, RI и Break (т.е. все, кроме CTS). Если есть заинтересованность, могу рассказать подробнее. Занялся тоже данной связкой. Собрал, подкорректировал Филиповские исходники - мое устройство видится ОСью, все в порядке. Но ни как не могу открыть мой порт ни одной программой. Вот так его видит USBView: Код Device Descriptor: bcdUSB: 0x0110 bDeviceClass: 0x02 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x10 (16) idVendor: 0x5555 idProduct: 0x7777 bcdDevice: 0x0001 iManufacturer: 0x01 0x0409: "PROTTOSS" iProduct: 0x02 0x0409: "PDIUSBD12 test USB device" iSerialNumber: 0x00 bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x01 Open Pipes: 3
Endpoint Descriptor: bEndpointAddress: 0x81 IN Transfer Type: Interrupt wMaxPacketSize: 0x0010 (16) bInterval: 0x64
Endpoint Descriptor: bEndpointAddress: 0x02 OUT Transfer Type: Bulk wMaxPacketSize: 0x0010 (16) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x82 IN Transfer Type: Bulk wMaxPacketSize: 0x0010 (16) bInterval: 0x00
Configuration Descriptor: wTotalLength: 0x0043 bNumInterfaces: 0x02 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 (Bus Powered ) MaxPower: 0x32 (100 Ma)
Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x01 bInterfaceClass: 0x02 bInterfaceSubClass: 0x02 bInterfaceProtocol: 0x01 iInterface: 0x00
Unknown Descriptor: bDescriptorType: 0x24 bLength: 0x05 05 24 00 10 01
Unknown Descriptor: bDescriptorType: 0x24 bLength: 0x04 04 24 02 02
Unknown Descriptor: bDescriptorType: 0x24 bLength: 0x05 05 24 06 00 01
Unknown Descriptor: bDescriptorType: 0x24 bLength: 0x05 05 24 01 03 01
Endpoint Descriptor: bEndpointAddress: 0x81 IN Transfer Type: Interrupt wMaxPacketSize: 0x0010 (16) bInterval: 0x64
Interface Descriptor: bInterfaceNumber: 0x01 bAlternateSetting: 0x00 bNumEndpoints: 0x02 bInterfaceClass: 0x0A bInterfaceSubClass: 0x00 bInterfaceProtocol: 0x00 iInterface: 0x00
Endpoint Descriptor: bEndpointAddress: 0x02 OUT Transfer Type: Bulk wMaxPacketSize: 0x0010 (16) bInterval: 0x00
Endpoint Descriptor: bEndpointAddress: 0x82 IN Transfer Type: Bulk wMaxPacketSize: 0x0010 (16) bInterval: 0x00 Да еще... После энумерации приходит два запроса специфичных для класса: GET_ENCAPSULATED_RESPONSE и SET_COMM_FEATURE. Но я так понимаю их можно игнорировать, что я и делаю...
--------------------
|
|
|
|
|
Jan 10 2007, 10:06
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Все разобрался.... Для начала: я не правильно декодировал запросы, было не GET_ENCAPSULATED_RESPONSE и SET_COMM_FEATURE, а было GET_LINE_CODING и SET_CONTROL_LINE_STATE А я их не отрабатывал... Как обычно дело было не в бобине...
--------------------
|
|
|
|
|
Jan 23 2007, 20:46
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Чтоб не поднимать новую тему продолжу здесь ибо все равно она касается заголовка темы: решил я пойти дальше, а именно сделать два девайса в одном, то бишь два моста USB - RS232... Составил дескрипторы как положено - ОС определила составное устройство - далее потребовало дрова для устройств в него входящих, подсунул ей свой инф где прописанны оба интерфейса - взяла - установила дрова, но вот для второго устройста пожаловалось, что: "Запуск этого устройства невозможен. (Код 10)"  ... Кроме того, после инсталяции в setupapi.log появилась запись для второго интерфейса вида: "Устройство не запущено: обнаружена проблема: 0x0a: CM_PROB_FAILED_START". Может быть кто знает, куда копать. Неохота самому писать собственный драйвер Спасибо
--------------------
|
|
|
|
|
Jan 23 2007, 21:41
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(prottoss @ Jan 23 2007, 22:46)  Кроме того, после инсталяции в setupapi.log появилась запись для второго интерфейса вида: "Устройство не запущено: обнаружена проблема: 0x0a: CM_PROB_FAILED_START". Может быть кто знает, куда копать. Неохота самому писать собственный драйвер Спасибо Недавно где-то здесь же на форуме промелькнула информация о схожей проблеме и о том, сколько реально нужно endpoints для реализации двух CDC в одном устройстве. Поищите.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|