реклама на сайте
подробности

 
 
> Проблемы с обменом по USB...
Ostec
сообщение Feb 4 2005, 07:32
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 14-01-05
Пользователь №: 1 943



Принимаю данные по USB используюя контроллер-USB FT232BM (www.ftdichip.com), но получаю рваный поток с пропадающими пакетами, пакет в данном случае - это озаглавленный мной блок данных.
Кто работал с этим подскажите как заставить его принимать данные без пропусков и потерь? С другой стороны загоняю в него данные со скорость 1.5 или 2 Мбит/сек.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ostec
сообщение Feb 4 2005, 12:06
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 14-01-05
Пользователь №: 1 943



Передаю данные по RS232 со скоростью 2 Мбит/сек в контроллер USB FT232BM, и далее хочу передать эти данные в комп. Передача осуществляется в одном направлении, от компа в FT232BM, никогда ничего не передается, flow control не применяется, посылка состоит из 10 байт (RS-232, 2 Мбит), потом пауза порядка половины посылки, посылка 10 байт, пауза и т.д.
В PC пользуюсь direct driver (D2XX), а не виртуальным COM. Поток ориентировочно - 150-200 кбайт/сек. У меня возникло желание поиграться с размером буфера и задержками, как описано в родных AppNotes, но пока результат не достигнут...
Go to the top of the page
 
+Quote Post
Вилли
сообщение Feb 6 2005, 13:02
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 26
Регистрация: 6-02-05
Пользователь №: 2 455



Цитата(Ostec @ Feb 4 2005, 15:06)
Передаю данные по RS232 со скоростью 2 Мбит/сек в контроллер USB FT232BM, и далее хочу передать эти данные в комп. Передача осуществляется в одном направлении, от компа в FT232BM, никогда ничего не передается, flow control не применяется, посылка состоит из 10 байт (RS-232, 2 Мбит), потом пауза порядка половины посылки, посылка 10 байт, пауза и т.д.
В PC пользуюсь direct driver (D2XX), а не виртуальным COM. Поток ориентировочно - 150-200 кбайт/сек. У меня возникло желание поиграться с размером буфера и задержками, как описано в родных AppNotes, но пока результат не достигнут...
*


Для этого чипа для обеспечения такой высокой скорости есть одно единственное условие: применение Flow control/handshake. Это решит проблему с потерями данных. Если необходимо еще и обеспечить постоянно высокую скорость - необходимо ставить FIFO буфер. И это не связано с глючностью самого чипа или вообще с чем-то аппаратным. Объяснение здесь одно: для передачи данных по USB используется BULK точка (стандартными дровами от FTDI) с размером пакета в 64 байта, из которых 2 - зарезервировано. Поскольку BULK - не гарантирует время доставки данных, а гарантирует только безошибочость (см. спецификацию USB), то в процессе передачи данных могут происходить паузы, обусловленные занятостью шины USB (другим USB устройством с более высоким приоритетом), либо занятостью компа (например операциями с жестким диском). И если возникает пауза более нескольких милисекунд - происходит переполнение встроенного в FTDI буфера (384 байта). Именно поэтому надо искользовать FlowControl и свой буфер для хранения данных в то время, когда буфер FTDI забит.
Вообще это касается всех USB мостов которые используют BULK режим. Если не хотите таких проблем - ищите мосты с режимами Isochronous либо Interrupt. Правда, мне такие не известны...
Ну и напоследок: Есть еще один очень неплохой вариант решения этой проблемы - найти или написать дрова для FTDI для Isochronous или Interrupt режима работы. Но это уже совершенно другая история...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.02941 секунд с 7
ELECTRONIX ©2004-2016