Перейти к содержанию
    

Господа!

 

Нет ли у кого примеров (если это вообще возможно) реализации в USB CDC устройстве эмуляции сигналов RTS/CTS и DSR/DCS?

 

Заранее благодарю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сам пока не сталкивался с такой задачей, но знаю, что

на сегодняшний день для организации виртуального COM-порта через USB в России популярны ИМС фирмы FTDI - FT232BM,

FT245BM и др.

Сайт производителя www.ftdichip.com

Сайт официального поставщика www.efo.ru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По большому счету это работа специально написанного драйвера (WDM), который делает преобразование USB протокола в аналог работы COM порта - отсюда и его 'виртуальность'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть ещё вариант - мост USB - UART CP2101.

Судя по документации сигналы RTS/CTS и DSR/DCS поддерживаются.

В Питере официальный поставщик Электроснаб - www.electrosnab.ru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CP2101 не рекомендована производителем для новых разработок. Вместо нее выпускается pin-to-pin compatible CP2102. Есть еще CP2103 с 4-ми доп. GPIO, три из которых могут выполнять автоматически функции управления TX_LED, RX_LED и сигнала DE для драйвера RS485.

см. раздел USB to UART Bridge на сайте SiLabs.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет применения специализированных USB контроллеров – дело понятное. Тем более, если сам пишешь драйвер, то можно там что хочешь придумать и реализовать.

 

Наверное я не очень внятно сначала сформулировал свой вопрос. Хотелось на стандартном USB контроллере (мы сейчас используем PDIUSBD12) реализовать CDC устройство и работать с ним через стандартный usbcomm.sys драйвер из Windows’a. Изучение запросов, которые должено обрабатывать CDC устройство, показало, что там таковые (на установку и сброс сигналов DTR и пр.) отсутствуют. Так что похоже это вариант не проходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось на стандартном USB контроллере (мы сейчас используем PDIUSBD12) реализовать CDC устройство и работать с ним через стандартный usbcomm.sys драйвер из Windows’a. Изучение запросов, которые должено обрабатывать CDC устройство, показало, что там таковые (на установку и сброс сигналов DTR и пр.) отсутствуют. Так что похоже это вариант не проходит.

 

Я делал CDC устройство на связке ATMega16L + PDIUSBD12. CDC класс поддерживает сигнализацию

DTR/DSR, RTS, DCD, RI и Break (т.е. все, кроме CTS). Если есть заинтересованность, могу

рассказать подробнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используешь так же как и на обычном порте. Только вот проблемы со скоростью возникают медленно это все(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал 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. Но я так понимаю их можно игнорировать, что я и делаю...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте Atmel есть новый проект - AT91 USB Framework - Core 1.01 + CDC 1.0.zip.

 

Сам в нем пока не разбирался - полно другой работы. Погляди как там реализовано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все разобрался.... :)

 

 

 

Для начала: я не правильно декодировал запросы, было не

 

GET_ENCAPSULATED_RESPONSE и SET_COMM_FEATURE,

 

 

 

а было

 

GET_LINE_CODING и SET_CONTROL_LINE_STATE

 

 

 

А я их не отрабатывал... Как обычно дело было не в бобине...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтоб не поднимать новую тему продолжу здесь ибо все равно она касается заголовка темы:

решил я пойти дальше, а именно сделать два девайса в одном, то бишь два моста USB - RS232...

Составил дескрипторы как положено - ОС определила составное устройство - далее потребовало дрова для устройств в него входящих, подсунул ей свой инф где прописанны оба интерфейса - взяла - установила дрова, но вот для второго устройста пожаловалось, что:

"Запуск этого устройства невозможен. (Код 10)" :( ...

 

Кроме того, после инсталяции в setupapi.log появилась запись для второго интерфейса вида:

"Устройство не запущено: обнаружена проблема: 0x0a: CM_PROB_FAILED_START".

 

Может быть кто знает, куда копать. Неохота самому писать собственный драйвер :)

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кроме того, после инсталяции в setupapi.log появилась запись для второго интерфейса вида:

"Устройство не запущено: обнаружена проблема: 0x0a: CM_PROB_FAILED_START".

 

Может быть кто знает, куда копать. Неохота самому писать собственный драйвер :)

Спасибо

Недавно где-то здесь же на форуме промелькнула информация о схожей проблеме и о том, сколько реально нужно endpoints для реализации двух CDC в одном устройстве. Поищите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...