ЗАО «ЗЭО»
Техническая поддержка пользователей => Тион-Про28, Орион28 => Тема начата: Сергей 16 RUS от 26 Февраля, 2013, 18:08:18
-
Наиболее легкий способ переключения режимов usb client это замена ключа DefaultClientDriver в ветке [HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers] с последующей перзагрузкой платы.
Однако же небольшая утилитка под названием freescale usb utility, находящаяся в панели управления win ce, переключает режимы работы порта на лету. Есть ли порядок действий, позволяющий добиться аналогичного эффекта из своего приложения? Возможно порядок состоит из замены ключа с последующим передергиванием драйвера usb.
-
Тут же вдогонку второй вопрос по USB client: ни USBSER_Class, ни CDC устройство (описание взять из EVK_imx28_WinCE60_RM.pdf) не запускают порт в режиме virtual com port. В первом случае порт определяется, но молчит, hyper terminal виснет. Как же все таки запустить обмен данными данным способом?
-
В 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-файле и реестре Тиона должны быть одинаковые.
-
Первый вопрос решен. Спасибо за исходники. По поводу второго так и нет результата. Собственно я уже производил подобные манипуляции: взял драйвер из каталога Microsoft ActiveSync\Drivers, совместив vid и pid устройства. Аналогичным же образом повел себя Ваш драйвер. Предварительно удалив все старые драйвера virtual com port (висящие еще в системе от Тион270), подключил Тион28 (в реестре предварительно выставив DefaulClientDriver в USBSER_Class, и перезапустив плату). Подключаем, видим неизвестное устройство, инсталлируем Ваш драйвер. В системе появляется COM 15. Далее пробуем открыть к примеру Hyper Terminal выбрав данный порт. Терминал ( после длительной паузы) сообщает нам, что присоединеное устройство не готово. Пробовал разными программами, а так же на втором компьютере (с чистой виндой), результат одинаков.
-
А в режиме CDC?
-
Как я и писал выше, в режиме CDC (по умолчанию его нет в образе, но можно добавить, взяв информацию из VK_imx28_WinCE60_RM.pdf) плата вообще не видится сверху. Ничего не появляется, даже неизвестного устройства нет.
-
По поводу второго так и нет результата. Собственно я уже производил подобные манипуляции: взял драйвер из каталога Microsoft ActiveSync\Drivers, совместив vid и pid устройства. Аналогичным же образом повел себя Ваш драйвер. Предварительно удалив все старые драйвера virtual com port (висящие еще в системе от Тион270), подключил Тион28 (в реестре предварительно выставив DefaulClientDriver в USBSER_Class, и перезапустив плату). Подключаем, видим неизвестное устройство, инсталлируем Ваш драйвер. В системе появляется COM 15. Далее пробуем открыть к примеру Hyper Terminal выбрав данный порт. Терминал ( после длительной паузы) сообщает нам, что присоединеное устройство не готово. Пробовал разными программами, а так же на втором компьютере (с чистой виндой), результат одинаков.
Проверил этот способ. У меня работает. Но открыть порт на ПК HyperTerminal'ом тоже не смог, возникла ошибка. Я использую Tera Term Pro 2.3, через этот терминал обмен идет. В настройках порта я отключил аппаратное управление потоком.
-
Осталось решить в чем разница в работе с виртуальным COM портом между tera term и hyperterminal (а так же прочими утилитами, работающими с портами)
-
Без терминала, просто командой Echo из командной строки, сообщения также успешно отправляются и принимаются.
Видимо HyperTerminal открывает порт командой, которую драйвер порта не поддерживает.
-
Драйвер виртуального порта Тион28 в отличие к примеру от Тион270, не поддерживает команду IOCTL_SERIAL_SET_BAUD_RATE. Только Tera term pro игнорирует данную ошибку, а hyperterminal (а так же например утилита верхнего уровня, работающая с SerialPort) сразу же закрывает соединение. Лог открытия порта Tera term pro и hyperterminal' отображен на картинке.
(http://www.tehsmart.ru/quest.jpg)
-
Да, IOCTL_SERIAL_SET_BAUD_RATE в драйвере не реализован, видимо в связи с тем, что это не требуется по документации на WinCE http://msdn.microsoft.com/en-us/library/ee482050(v=winembedded.60).aspx
-
Нашли проблему и это здорово. Как теперь решить ее,если хотя бы к примеру тот же класс SerialPort в библиотеке .NET Framework 4.5 при вызове метода open принудительно выставляет BAUD_RATE, и в случае возврата ошибки вызывает исключение с последующим закрытием порта.