|
|
  |
Проблемы с обменом по USB... |
|
|
|
Feb 4 2005, 07:32
|
Группа: Новичок
Сообщений: 6
Регистрация: 14-01-05
Пользователь №: 1 943

|
Принимаю данные по USB используюя контроллер-USB FT232BM (www.ftdichip.com), но получаю рваный поток с пропадающими пакетами, пакет в данном случае - это озаглавленный мной блок данных. Кто работал с этим подскажите как заставить его принимать данные без пропусков и потерь? С другой стороны загоняю в него данные со скорость 1.5 или 2 Мбит/сек.
|
|
|
|
|
Feb 4 2005, 12:06
|
Группа: Новичок
Сообщений: 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, но пока результат не достигнут...
|
|
|
|
|
Feb 4 2005, 12:25
|

Помогу, чем смогу
     
Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25

|
Цитата(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, но пока результат не достигнут... Сдается мне, что при работе без квитирования нужно однозначно обеспечить непереполнение буфера, для этого либо уменьшите 2МБ поток, либо увеличте скорость в СОМ, там Вы указали 150-200 кбайт/c, т.е. при параметрах 1,8,N,1S получите ровно 2МБ, а нужно с запасом порядка 5-10%. Самый простой способ проверить правильность функционала, понизте скорость потока с 2МБ до 1МБ, а в выходном горле скорость не меняйте.
--------------------
|
|
|
|
|
Feb 6 2005, 13:02
|
Участник

Группа: Свой
Сообщений: 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 режима работы. Но это уже совершенно другая история...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|