Я разговариваю с нестандартным лабораторным устройством (маленькая аппаратная штука) через USB-соединение. Как получить данные с лабораторного устройства на максимальной скорости?
Хост - это компьютер под управлением Windows XP, на котором выполняется c-код с использованием libsub-win32 в Visual Studio. Маленькая аппаратная штуковина собирает данные, много данных. Хост может запросить эти данные и затем прочитать их. Все работает просто отлично. Что меня беспокоит, так это скорость, грубая оценка составляет 1 Мбит / с, что далеко от поддержки 4802 Мбит / с USB2. Устройство должно иметь возможность отправлять мне данные как минимум с такой скоростью. У меня практически нет опыта работы с USB и libusb-win32, но я попытался прочитать о них. Хотя я не вижу, где и как изменить какие-либо настройки USB-связи. В спецификации, кажется, есть нечто, называемое микрокадрами на скоростных автобусах. Как я могу их использовать?
Мне не обязательно использовать библиотеку libusb-win32. Есть ли у вас другие рекомендации?
Подробная информация о текущей реализации:
Как уже упоминалось выше, я использую libusb-win32 для общения. Вся инициализация скопирована с небольшого примера, включенного в загрузку.
usb_init();
...
usb_open();
usb_set_configuration(...);
usb_claim_interface(...);
Затем я говорю (используя usb_bulk_write (...) и usb_bulk_read (...)) с лабораторным устройством и убеждаю его поделиться своими данными со мной, что он и делает. Это дает мне данные кусками по 512 байт. Каждый такой блок читается с использованием usb_bulk_read (...).
Изменить 27 апреля 2011 г .:
Похоже, я использую Full Speed, но не High Speed. Как я могу получить высокую скорость? Я неправильно указал какой-либо параметр в файле дескриптора usb? (Да, я использую USB2.0, и устройство должно поддерживать высокую скорость.)
Изменить 17 мая 2011 г .:
Сейчас я реализовал связь с помощью winUSB (написал файл .inf и программу на c ++). Преимущество использования WinUSB заключается в том, что он может сказать мне, пытается ли он использовать высокую скорость или нет. И это так, но я все еще не получаю более 11 + -2 Мбит / с. Зачем?
В соответствии с протоколом USB2.0 компьютер должен посылать маркер начала кадра (отправляется каждые мс), что, как я думаю, он выполняет - таким образом, 11 Мбит / с. Но при использовании высокоскоростной передачи он говорит, что «высокоскоростной использует« Микрофрейм », длина которого составляет 125 мкс (8 микрофкадров в миллисекунду). Соответствие нумерации кадров 1 мс поддерживается в высокоскоростных пакетах SOF путем повторения каждого номера кадра в 8 последовательных Microframes «. Я не очень понимаю это, но проблема не в том, чтобы посылать микро-кадры достаточно часто? Может ли кто-то, кто понимает протокол, пожалуйста, просветите меня! Я хочу понять, как это работает, независимо от того, смогу ли я заставить его работать на моем компьютере или нет.
Редактировать 15 июня
Проблема решена: никакие изменения на стороне компьютера не могут сделать обмен данными быстрее, чем он хочет (если вы не изменили количество конечных точек и у вас действительно есть соединение USB2.0). Проблема здесь заключалась в коде процессора, который использовал области памяти очень трудоемким образом. Это делает этот вопрос без вопросов. Спасибо за все указатели и информацию. Я многое узнал о USB!