Я говорю с изготовленным на заказ лабораторным устройством (маленькой аппаратной штукой) через USB-соединение. Как получить данные с лабораторного устройства на максимальной скорости?
Хост - это компьютер под управлением Windows XP, на котором выполняется c-код с использованием libsub-win32 в Visual Studio. Маленькая аппаратная штуковина собирает данные, много данных. Хост может запросить эти данные, а затем прочитать их. Все работает нормально. Что меня беспокоит, так это скорость, приблизительная оценка - 1 Мбит / с, что далеко от 480 Мбит / с, поддерживаемых 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 г .: Похоже, я использую полную скорость, но не высокую скорость. Как мне получить высокую скорость? Я неправильно указал какой-то параметр в файле дескриптора usb? (Да, я использую USB2.0, и устройство должно поддерживать высокую скорость.)
Редактировать 17 мая 2011 г .: Я реализовал связь с помощью winUSB (написал файл .inf и программу на C ++). Преимущество использования WinUSB заключается в том, что он может сказать мне, пытается ли он использовать высокую скорость или нет. И это так, но я все равно не получаю больше, чем около 11 + -2 Мбит / с. Почему?
В соответствии с протоколом USB2.0 компьютер должен отправлять маркер начала кадра (отправляется каждые мс), что, я думаю, он и делает - таким образом, 11 Мбит / с. Но при использовании высокой скорости он говорит, что «высокая скорость использует 'Microframe' длиной 125 мкс (8 микрофреймов в миллисекунду). Соответствие с нумерацией кадров в 1 мс поддерживается в высокоскоростных пакетах SOF путем повторения номера каждого кадра в 8 последовательных Микрофреймы ". Я не совсем понимаю это, но проблема может быть в недостаточной отправке микрокадров? Не мог бы кто-нибудь, кто разбирается в протоколе, просветите меня! Я хочу понять, как это работает, независимо от того, смогу ли я заставить его работать на моем компьютере или нет.
Изменить 15 июня
Проблема решена: никакие изменения на стороне компьютера не могут сделать связь быстрее, чем хотелось бы (если вы не измените количество конечных точек и у вас действительно есть соединение USB2.0). Проблема заключалась в коде процессора, который очень долго использовал свои области памяти. Это делает этот вопрос чем-то вроде вопроса. Спасибо за все указатели и информацию. Я многое узнал о USB!