|
|
  |
USB CDC driver, Notification проблема |
|
|
|
Nov 21 2007, 19:19
|
Профессионал
    
Группа: Свой
Сообщений: 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 }, };
Нет ли каких идей на сей счет?
|
|
|
|
|
Nov 22 2007, 07:46
|
Гуру
     
Группа: Свой
Сообщений: 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 почему-то  . Я несколько озадачен.
|
|
|
|
|
Nov 22 2007, 08:01
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|