ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: usb  (Прочитано 6307 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
usb
« : 26 Февраля, 2013, 18:08:18 »

Наиболее легкий способ переключения режимов usb client это замена ключа DefaultClientDriver в ветке [HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers] с последующей перзагрузкой платы.
Однако же небольшая утилитка под названием freescale usb utility, находящаяся в панели управления win ce, переключает режимы работы порта на лету. Есть ли порядок действий, позволяющий добиться аналогичного эффекта из своего приложения? Возможно порядок состоит из замены ключа с последующим передергиванием драйвера usb.
Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #1 : 27 Февраля, 2013, 16:47:54 »

Тут же вдогонку второй вопрос по USB client: ни USBSER_Class, ни CDC устройство (описание взять из EVK_imx28_WinCE60_RM.pdf) не запускают порт в режиме virtual com port. В первом случае порт определяется, но молчит, hyper terminal виснет. Как же все таки запустить обмен данными данным способом?
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: usb
« Ответ #2 : 01 Марта, 2013, 17:28:55 »

В BSP от Freescale есть исходники этой программы, которая переключает функцию порта. Можно там посмотреть как это делается на лету, без перезагрузки.
Исходники приложил к сообщению.

В режиме USB_Serial_Class порт используется ActiveSync`ом. VID и PID, прописанные на Тионе, соответствуют устройству "Microsoft USB Sync", и используется драйвер  WCEUSBSH.SYS на ПК. Чтобы его можно было использовать как COM-порт, нужно отключить на ПК ActiveSync, и обращаться к порту командой CreateFile("\\\\.\\wceusbsh001",...) .

Чтобы использовать виртуальный СОМ-порт, необходимо ассоциировать Тион с драйвером usbser.sys (для WinXP)  через VID и PID. Приложил к письму inf-файл для этого, а также пример использования порта в режиме CDC. VID и PID в этом inf-файле и реестре Тиона должны быть одинаковые.
Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #3 : 01 Марта, 2013, 18:20:16 »

Первый вопрос решен. Спасибо за исходники. По поводу второго так и нет результата. Собственно я уже производил подобные манипуляции: взял драйвер из каталога Microsoft ActiveSync\Drivers, совместив vid и pid устройства. Аналогичным же образом повел себя Ваш драйвер. Предварительно удалив все старые драйвера virtual com port (висящие еще в системе от Тион270), подключил Тион28 (в реестре предварительно выставив DefaulClientDriver в USBSER_Class, и перезапустив плату). Подключаем, видим неизвестное устройство, инсталлируем Ваш драйвер. В системе появляется COM 15. Далее пробуем открыть к примеру Hyper Terminal выбрав данный порт. Терминал ( после длительной паузы) сообщает нам, что присоединеное устройство не готово. Пробовал разными программами, а так же на втором компьютере (с чистой виндой), результат одинаков.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: usb
« Ответ #4 : 01 Марта, 2013, 18:32:03 »

А в режиме CDC?
Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #5 : 02 Марта, 2013, 22:38:37 »

Как я и писал выше, в режиме CDC (по умолчанию его нет в образе, но можно добавить, взяв информацию из VK_imx28_WinCE60_RM.pdf) плата вообще не видится сверху. Ничего не появляется, даже неизвестного устройства нет.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: usb
« Ответ #6 : 04 Марта, 2013, 20:55:07 »

По поводу второго так и нет результата. Собственно я уже производил подобные манипуляции: взял драйвер из каталога Microsoft ActiveSync\Drivers, совместив vid и pid устройства. Аналогичным же образом повел себя Ваш драйвер. Предварительно удалив все старые драйвера virtual com port (висящие еще в системе от Тион270), подключил Тион28 (в реестре предварительно выставив DefaulClientDriver в USBSER_Class, и перезапустив плату). Подключаем, видим неизвестное устройство, инсталлируем Ваш драйвер. В системе появляется COM 15. Далее пробуем открыть к примеру Hyper Terminal выбрав данный порт. Терминал ( после длительной паузы) сообщает нам, что присоединеное устройство не готово. Пробовал разными программами, а так же на втором компьютере (с чистой виндой), результат одинаков.

Проверил этот способ. У меня работает. Но открыть порт на ПК HyperTerminal'ом тоже не смог, возникла ошибка. Я использую Tera Term Pro 2.3, через этот терминал обмен идет. В настройках порта я отключил аппаратное управление потоком.
Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #7 : 05 Марта, 2013, 09:30:18 »

Осталось решить в чем разница в работе с виртуальным COM портом между tera term и hyperterminal (а так же прочими утилитами, работающими с портами)
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: usb
« Ответ #8 : 05 Марта, 2013, 13:01:04 »

Без терминала, просто командой Echo из командной строки, сообщения также успешно отправляются и принимаются.
Видимо HyperTerminal открывает порт командой, которую драйвер порта не поддерживает.
Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #9 : 06 Марта, 2013, 12:08:23 »

Драйвер виртуального порта Тион28 в отличие к примеру от Тион270, не поддерживает команду IOCTL_SERIAL_SET_BAUD_RATE. Только Tera term pro игнорирует данную ошибку, а hyperterminal (а так же например утилита верхнего уровня, работающая с SerialPort) сразу же закрывает соединение. Лог открытия порта Tera term pro и hyperterminal' отображен на картинке.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: usb
« Ответ #10 : 06 Марта, 2013, 16:41:02 »

Да, IOCTL_SERIAL_SET_BAUD_RATE в драйвере не реализован, видимо в связи с тем, что это не требуется по документации на WinCE http://msdn.microsoft.com/en-us/library/ee482050(v=winembedded.60).aspx

Записан

Сергей 16 RUS

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 18
Re: usb
« Ответ #11 : 06 Марта, 2013, 16:57:53 »

Нашли проблему и это здорово. Как теперь решить ее,если хотя бы к примеру тот же класс SerialPort в библиотеке .NET Framework 4.5 при вызове метода open принудительно выставляет BAUD_RATE, и в случае возврата ошибки вызывает исключение с последующим закрытием порта.
Записан