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

 
 
> Не могу заставить работать CDC на LPC2378
Regressor
сообщение Mar 6 2009, 03:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 10-01-09
Пользователь №: 43 111



Люди добрые мы сами не местные... Эх... Не так начал...

В общем проблема в следующем - делаю некое устройство в авто на LPC2378. Само устройство будет общаться с компьютером через HID (тут все работает), плюс на это устройство заведен GPS, который устройство использует для синхронизации времени. Но ГПС также нужен на комьютере (не ставить же два). Делаю на LPC2378 составное устройство CDC serial + HID. Взял пример USB для KEIL (bundle LPC23XX_.R5/USBDEV v1.10) и немного дописал его.

На сегодняшний день устройство нормально проходит enumeration, в системе появляется HID устройство и дополнительный ком-порт (на хосте стоит Windows XP-SP3 со всеми последними обновлениями). Однако при попытке открыть устройство выдается "Не удается открыть COMx. Проверьте параметры порта."

При этом при подключении провода usb проходят 1 запрос GET_LINE_CODING и сразу следом за ним SET_LINE_CONTROL_STATE. При попытке подключения к com порту с помощью hiperterminal проходят 4! запроса GET_LINE_CODING, потом SET_LINE_CODING c параметрами spd=0, char=0, Par=0, DB=0 затем еще три GET_LINE_CODING, затем SET_LINE_CODING с параметрами spd=4800, char=0, Par=0, DB=8 (т.е. те, которые я указал при подключении), потом GET_LINE_CODING и наконец SET_LINE_CONTROL_STATE.

Если бы был лог рабочего CDC устройства снятый каким-нибуть USB сниффером, можно было бы посмотреть что я делаю не так. Но лога нету, а я уже всю голову сломал пытаясь понять что неправильно. Подозреваю, что хосту неверно отдается инфа по GET_LINE_CODING.

Код обработки запросов в EP0 обработчике такой:

CODE
if (SetupPacket.wIndex.WB.L == USB_CDC_IF_NUM)
{
switch (SetupPacket.bRequest)
{
case SET_LINE_CODING:
memcpy((BYTE *)&LineCoding, EP0Data.pData, 7);
USB_StatusInStage();
goto class_ok;

case GET_LINE_CODING:
memcpy(EP0Buf, (BYTE *)&LineCoding, 7);
EP0Data.pData = EP0Buf;
EP0Data.Count = 7;
USB_DataInStage();
goto class_ok;

case SET_CONTROL_LINE_STATE:
USB_StatusInStage();
goto class_ok;

// Unhandled request
default:
printf("Unhandled CDC request %d\n", SetupPacket.bRequest);
}
}



SysNucleus USBTrace показывает вот такую картинку:
Прикрепленное изображение


Структура LineCoding вроде правильно передается...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uriy
сообщение Mar 6 2009, 05:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Попробуйте те ка для начала разными терминалками открыть ком порт. У меня какая-то беда была с виртуальными портами, правда это было с блютуз но все же. Терминалки говорили якобы порт уже кем-то занят. Перепробовал около 5 терминалок. Только вот эта Terminal by Br@y++ и MATLAB смогли открыть порт. У меня есть плата на LPC2378. Вечерами занимаюсь изучением USB. Мне нужно будет делать составное устройство AUDIO+CDC. Могу проверить в выходные у себя как будут вести себя терминалки с исходниками от кейла.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:41
Рейтинг@Mail.ru


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