Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Потеря данных виртуального COM-порта  (Прочитано 20681 раз)
0 Пользователей и 1 Гость смотрят эту тему.
WWX
Участник

ru
Offline Offline

« : 03-08-2017 20:47 » 

Добрый(ое, ая) вечер / ночь / утро / день.

Есть некое устройство, которое работает через USB (2.0).
Firmware устройства реализует класс CDC, соответственно на хосте видно как виртуальный COM-порт.
Принцип работы прост: устройство получает от хоста команду (16 байт) и отправляет обратно ответ (тоже 16 байт).
Тестовое приложение после открытия COM-порта в цикле производит запись команды и чтение ответа.

Пока устройство работает в режиме Full-speed (до 12 Мб/с) - всё нормально.

В режиме High-speed (до 480 Мб/с) на Windows (7 x64) (на некоторых компьютерах) начинаются проблемы: некоторое количество итераций работает нормально, потом зависает на чтении из порта. Количество итераций всегда разное (от нескольких десятков до нескольких сотен (иногда тысяч)).

При этом согласно анализаторам USB (как аппаратному, так и программному) ответ от устройства проходит по шине USB и попадает в систему. А вот снифер COM-порта ответ не видит.

На том же самом компьютере под Linux'ом в режиме High-speed всё работает без ошибок.

В чём может быть причина ошибок на Windows?
(Если я правильно понимаю, за создание виртуального COM-порта отвечает usbser.sys. Его версия определяемая в диспетчере устройств: 6.1.7601.18247 (win7sp1_gdr.130828-1532).)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-08-2017 04:40 » 

WWX, в винде CDC работает нестабильно, как мне подсказали. У нас прибор постоянно отваливался с таким драйвером. Посоветовали использовать HID или lib-usb . Первое я не осилил с ходу, второе зашло нормально, вот тут можно ознакомиться

https://sourceforge.net/p/libusb-win32/wiki/Documentation/
https://sourceforge.net/projects/libusb-win32/files/

Конечную точку девайса определил методом научного тыка (их 16), настроек никаких вроде не понадобилось задавать, работает
« Последнее редактирование: 05-08-2017 07:31 от Алексей++ » Записан

WWX
Участник

ru
Offline Offline

« Ответ #2 : 04-08-2017 09:23 » 

Алексей++, спасибо за ответ.
Если не найдётся чем заменить usbser.sys, то буду использовать lib-usb.
Записан
WWX
Участник

ru
Offline Offline

« Ответ #3 : 04-08-2017 13:41 » new

P. S.:
Временно проблема решается добавлением миллисекундной задержки перед вызовом ReadFile.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines