Полная версия этой страницы:
Еще раз про USB.
Работаю с AT91SAM7. Перекачивается поток информации с железки в комп.
Прикинулся FTDI-девайсом. Дрова встали, все работает.
Только скорость больше 400Kb/c получить не удается.
Есть подозрение, что ограничение по скорости дают дрова от ftdi (2.00.00 May 18, 2006).
Кто нибудь получал нормальную скорость для USB 2
Bosicc
Apr 14 2007, 13:12
Цитата(KAlex @ Apr 12 2007, 12:27)

Есть подозрение, что ограничение по скорости дают дрова от ftdi (2.00.00 May 18, 2006).
Кто нибудь получал нормальную скорость для USB 2
Тестом скорости не занимался, но обратите внимание драйвер со стороны ПК. Попробуйте написать свой.
И какие ендпоинты Вы используете для передачи и приема?
USB Device Viewer:
Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
Цитата(KAlex @ Apr 12 2007, 13:27)

Работаю с AT91SAM7. Перекачивается поток информации с железки в комп.
Прикинулся FTDI-девайсом. Дрова встали, все работает.
Только скорость больше 400Kb/c получить не удается.
Есть подозрение, что ограничение по скорости дают дрова от ftdi (2.00.00 May 18, 2006).
Кто нибудь получал нормальную скорость для USB 2
Я читал что это проблема драйверов VCP (виртуального ком-порта). Если поставить другие дрова, которые через ДЛЛ работают, с того же сайта фтди, то скорость возрастет.
Работаю через DLL. Для VCP не знаю дескриптора и прочих нужностей.
cebotor
Apr 18 2007, 12:19
Цитата(KAlex @ Apr 18 2007, 13:08)

Работаю через DLL. Для VCP не знаю дескриптора и прочих нужностей.
простите , может немного не в тему , но зачем Вам , если вы работаете не как виртуал ком порт , вообще использование драйверов FTDI ?
у чипов FTDI работа через ДЛЛ имеется и она аналогична работе со стандартными CDC USB устройствами , но Вы же не юзаете ни их чип ни их возможности виртуального ком порта, так почему все таки их дрова ?
Так исторически сложилось. Сначала был девайс на Меге+Фтди. Соответственно был заточен компьютерный софт. Теперь Мегу заменили на АРМ, надобность в Фтди отпала, софт остался.
Если вы знаете хорошие дрова, примерно с теми же возможностями что и Фтди, только быстрее - скажите мне.
с d2xx драйверами получались стабильные 1 мегабайт/секунда.
от версии дров ничего не менялось особенно.
какие вы используете буфера/тайм ауты и т.д.?
/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - OUT
0x02, // bmAttributes BULK
0x40, // wMaxPacketSize: 64 bytes (button, x, y)
0x00,
0x00, // bInterval
Таймаутов как таковых нет. С d2xx по скорости было тоже самое, но с ними невозможно отлаживать
программу, любой останов на брейкпоинте вешает комп - синий экран.
cebotor
Apr 18 2007, 13:45
Цитата(KAlex @ Apr 18 2007, 14:05)

/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - OUT
0x02, // bmAttributes BULK
0x40, // wMaxPacketSize: 64 bytes (button, x, y)
0x00,
0x00, // bInterval
Таймаутов как таковых нет. С d2xx по скорости было тоже самое, но с ними невозможно отлаживать
программу, любой останов на брейкпоинте вешает комп - синий экран.
а что это за коментарий такой про кнорку и x y ? у вас устройство часом не как HID объявлено ?
Цитата(KAlex @ Apr 18 2007, 13:05)

/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x02, // bEndpointAddress, Endpoint 02 - OUT
0x02, // bmAttributes BULK
0x40, // wMaxPacketSize: 64 bytes (button, x, y)
0x00,
0x00, // bInterval
Таймаутов как таковых нет. С d2xx по скорости было тоже самое, но с ними невозможно отлаживать
программу, любой останов на брейкпоинте вешает комп - синий экран.
Вы немного не поняли меня.
Какие параметры заданы в SetLatencyTimer, SetUSBParameters, Set_USB_Device_TimeOuts
Это в Вашем приложении, которое использует dll.
Ну это как всегда, что то готовое берется за пример, камментарии остаются.
Нет, не HID.
Set_USB_Device_TimeOuts(2000,2000);
Остальное по умолчанию.
Set_USB_Device_TimeOuts(2000;2000)
Остальное по умолчанию.
установите SetLatencyTimer 2-3.
по умолчанию там стоит 16. это много. это сразу даст прирост 20-40 %
возможно следует изменить размер приемного буфера.
какой характер передачи данных?
вы непрерывно передаете большой объем?
у меня была длительная передача данных 100-500 мбайт.
и скорость держалась постоянно на одном уровне.
разумеется в том же хабе больше ничего не было.
>>установите SetLatencyTimer 2-3.
>>по умолчанию там стоит 16. это много. это сразу даст прирост 20-40 %
>>возможно следует изменить размер приемного буфера.
Нет еффекта.
>>какой характер передачи данных?
>>вы непрерывно передаете большой объем?
Передаются блоки по 48К. В секунду успевает пройти 8-9 блоков.
К стати, как померить время передачи блока без учета времени на его подготовку?
IAR+JTAG.
Померил реальную скорость одного пакета (засек по таймеру). Получилось около 950К/с.
Так что ...
вы передайте 40-50 мегабайт и засеките время.
тогда увидите реальную скорость...
Реальная - 400Кс (подготовка данных, упаковка, передача).
Передача - 900-950Кс.
Тема закрыта. Всем спасибо.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.