реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> USB CDC driver, Notification проблема
sergeeff
сообщение Nov 21 2007, 19:19
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Уважаемые коллеги!

Реализовал CDC ACM устройство на at91rm9200. Драйвер благополучно ставится. Порт в терминальноы программе открывается, обмен данными происходит. Монитор последовательного порта отображает состояние линии. CTS не активно. Для его активации посылаю NetworkConnection notification через INT endpoint (0ха1, 0х0, 0х1, 0х0, 0х0, 0х0, 0х0, 0х0). Данные через этот endpoint уходят, но ровным счетом ничего не происходит.

Мой Conf Descriptor:


static USB_CONFIG1 UsbConfiguration1 = // alternate configuration (FD Virtual COM Port)
{
{
sizeof(USB_CONFIGURATION_DESCRIPTOR),
USB_CONFIGURATION_DESCRIPTOR_TYPE,
sizeof(USB_CONFIG1), // size of UsbConfiguration in bytes
0x02, // number of interfaces
0x01, // number of THIS configuration
0x00, // index of config. string
USB_CONFIG_SELF_POWERED | USB_CONFIG_BUS_POWERED, // self powered
0x00 // max. power
},

// CDC ACM Comm Interface - Interface 0
{
sizeof(USB_INTERFACE_DESCRIPTOR),
USB_INTERFACE_DESCRIPTOR_TYPE,
0, // interface number, OK
0, // alternate settings
1, // number of (non 0) EPs
CDC_INTERFACE_COMMUNICATION, // interface class : 0x02
CDC_ABSTRACT_CONTROL_MODEL, // interface subclass : 0x02
0x01, // interface protocol
0 // index of intf. string
},
// Header Functional Descriptor
{
sizeof(HEADER_FUNCTIONAL_DESCRIPTOR), // bFunction Length
CS_INTERFACE_DESCRIPTOR_TYPE, // bDescriptor type: CS_INTERFACE : 0x24
HEADER_FD, // bDescriptor subtype: Header Func Desc : 0x00
0x0110, // bcdCDC:1.1
},

// Call Management Functional Descriptor
{
sizeof(CM_FUNCTIONAL_DESCRIPTOR), // bFunctionLength
CS_INTERFACE_DESCRIPTOR_TYPE, // bDescriptor Type: CS_INTERFACE : 0x24
CM_FD, // bDescriptor Subtype: Call Management Func Desc : 0x01
0x03, // bmCapabilities: D1 + D0
0x01 // bDataInterface: Data Class Interface 1
},
// ACM Functional Descriptor
{
sizeof(ACM_FUNCTIONAL_DESCRIPTOR), // bFunctionLength
CS_INTERFACE_DESCRIPTOR_TYPE, // bDescriptor Type: CS_INTERFACE : 0x24
ACM_FD, // bDescriptor Subtype: ACM Func Desc : 0x02
0x0f // Every notification/request except NetworkConnection supported
},
// The capabilities that this configuration
// supports. (A bit value of zero means that the
// request is not supported.)
// D7..D4: RESERVED (Reset to zero)
// D3: 1 - Device supports the notification
// Network_Connection.
// D2: 1 - Device supports the request
// Send_Break
// D1: 1 - Device supports the request
// combination of Set_Line_Coding,
// Set_Control_Line_State,
// Get_Line_Coding, and the
// notification Serial_State.
// D0: 1 - Device supports the request
// combination of
// Set_Comm_Feature,
// Clear_Comm_Feature, and
// Get_Comm_Feature.
// The previous bits, in combination, identify
// which requests/notifications are supported by
// a Communication Class interface with the
// SubClass code of Abstract Control Model.
// Union Functional Descriptor
{
sizeof(UNION_FUNCTIONAL_DESCRIPTOR), // bFunctionLength
CS_INTERFACE_DESCRIPTOR_TYPE, // bDescriptorType: CS_INTERFACE : 0x24
UNION_FD, // bDescriptor Subtype: Union Func Desc : 0x06
0x00, // bMasterInterface: Communication Class Interface
0x01 // bSlaveInterface0: Data Class Interface
},





// Notification ENDPOINT_DESCRIPTOR
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x83, // EP-Nummer, 8.Bit gibt Richtung an //! 0x83
USB_ENDPOINT_TYPE_INTERRUPT,
EP1_PACKET_SIZE,
0x10 // Endpoint polled every 10ms
},

// CDC ACM Data Interface - Interface 1
{
sizeof( USB_INTERFACE_DESCRIPTOR ),
USB_INTERFACE_DESCRIPTOR_TYPE,
1, // interface number, OK
0, // alternate settings
2, // number of (non 0) EPs
0x0A, // interface class (CDC ACM Data)
0x00, // interface subclass
0x00, // interface protocol
0 // index of intf. string
},


// ENDPOINT_DESCRIPTOR
// ENDPOINT_DESCRIPTOR
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x84, // ep5 bulk in
USB_ENDPOINT_TYPE_BULK,
EP2_PACKET_SIZE,
0x00 // interval
},
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x05, // ep4 bulk out
USB_ENDPOINT_TYPE_BULK,
EP2_PACKET_SIZE,
0x00 // interval
},

};


Нет ли каких идей на сей счет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 21 2007, 23:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Если используется стандартный usbser.sys, то он не поддерживает RTS/CTS сигнализацию.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 22 2007, 06:34
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Рабоаю сейчас с драйвером от http://www.thesycon.de/eng/home.shtml. Там демо версия доступна и полностью работоспособна в течении 4 часов от момента загрузки PC. В драйвере, в частности решена проблема с PNP. В документации написано, что там сделан mapping network_connection на CTS.

Но дело не в этом. В стандартном usbser можно же послать notofication с serial_state, что я тоже пробовал делать. Ни один сигнал состояния линии не узменился. Вот в чем проблема.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 22 2007, 07:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff @ Nov 22 2007, 09:34) *
Рабоаю сейчас с драйвером от http://www.thesycon.de/eng/home.shtml. Там демо версия доступна и полностью работоспособна в течении 4 часов от момента загрузки PC. В драйвере, в частности решена проблема с PNP. В документации написано, что там сделан mapping network_connection на CTS.

Пробовал. С моим устройством этот драйвер почему-то виснет.

Цитата(sergeeff @ Nov 22 2007, 09:34) *
Но дело не в этом. В стандартном usbser можно же послать notofication с serial_state, что я тоже пробовал делать. Ни один сигнал состояния линии не узменился. Вот в чем проблема.

Попробовал у себя: в SERIAL_STATE бит bTxCarrier управляет DSR, а bRxCarrier - CTS почему-то 07.gif . Я несколько озадачен.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 22 2007, 07:56
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



ПОследняя доступная версия от Thesycon 1.61. У меня работает устойчиво.

По поводе notification. Я правильно понимаю, что надо просто послать это сообщение через interrupt endpoint? Или перед этой посылкой надо какие-то ритуальные действия выполнить?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 22 2007, 08:01
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff @ Nov 22 2007, 10:56) *
ПОследняя доступная версия от Thesycon 1.61. У меня работает устойчиво.

У меня напрочь зависают приложения при обращении к порту.

Цитата(sergeeff @ Nov 22 2007, 10:56) *
По поводе notification. Я правильно понимаю, что надо просто послать это сообщение через interrupt endpoint? Или перед этой посылкой надо какие-то ритуальные действия выполнить?

Да, правильно.

Вот это у меня поднимает CTS:
Код
0xa1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 22 2007, 10:13
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Мистика. Для надежности использую стандартный usbser. Посылаю ту же notification. Ровным счетом ничего не происходит. Фукция передачи данных через INT ENDPOINT ровно таже, что и для BULK (там все работает). Не могу понять в чем дело.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 22 2007, 10:39
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А сигналы Вы чем смотрите, м.б. в смотрелке проблема?
Можно сниффером USB обмен снять на предмет наличия notification.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 22 2007, 10:54
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



С помошью HHD Free Serial Port Monitor
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 22 2007, 11:06
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



У меня он отображает нормально. Посмотрите, что творится на USB.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 22 2007, 14:26
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Большое спасибо за советы. Все тоже самое перепроверил под XP - работает влет! Осталось понять почему на том же компьютере но под 2000 SP4 рабатать не хочет.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 22 2007, 14:37
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



На Win2K usbser гораздо более глючный и тормозной, чем на XP. Например, напрочь слетает при выдергивании устройства с открытым портом.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 02:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01466 секунд с 7
ELECTRONIX ©2004-2016