Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Еще раз о связке ПК-USB-FTDI-ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
toretto
Здрствуйте. У меня вопрос к людям, которые сталкивались с реализацией интерфейса USB, в частности при помощи преобразователей фирмы FTDI USB-FIFO.

Возникла потребность связать ПЛИС и ПК через USB (только передать файл размером ~500 Мб, желательна скорость от 1 Мб/с). Порыскав по просторам форума и интернета несколько раз натыкался на продукты фирмы FTDI. Микросхемы предлагают превратить поток данных из USB в FIFO или UART по выбору. На аппаратном уровне вроде бы все просто: фифо получает данные из вне, а мы все это счастье забираем плисиной и дальше по нуждам... Вопрос вот в чем: от меня на програмном уровне требуется только слать пакеты Token, затем пакеты Data и принимать Handshake'и. Все необходимые прошивки предоставляет FTDI. Например, мне не требуется описывать процесс подключения устройства к хосту (это задача драйвера). Прав ли я или я не учел еще какие-то нюансы в проектировании и программировании? Приму к сведению все советы, сам только осваиваю USB
nmurzin
5 лет назад я реализовывал связь FTDI с ПЛИС.

ПЛИС ни чего не должна знать о USB.
Она тупо общается с интерфейсом FTDI как с буфером FIFO.

От программиста ПК тоже особых знаний про USB не требуется.
Достаточно вызывать функции предоставляемые dll библиотекой,
которая поставляется с драйвером.


Если требуется производительность, лучше использовать контроллер фирмы Cypress.
yes
Цитата(nmurzin @ Mar 14 2011, 14:38) *
Если требуется производительность, лучше использовать контроллер фирмы Cypress.


спорный вопрос, с Cypress много лишней возни, и с EzUSB предельные скорости не получишь, нужно что-то ковырять в виндовых потрохах

в новых FTDI есть
USB to synchronous 245 parallel FIFO mode for transfers up to 40 Mbytes/Sec
http://www.ftdichip.com/Products/ICs/FT232H.htm

да и не самые новые
http://www.ftdichip.com/Products/ICs/FT2232H.htm

только непонятно, как в софте это поддерживается?
кто-нибудь пользовал synchronous 245 parallel FIFO mode?
alexPec
1 Mб/с вряд ли получите с usb1.1 - там всего 12 мбит минус служебные биты, crc, итого меньше 10 мбит всяко. Да и беда какая-то была помню с самой виндой XP, в частности с общением через ком-порт, при большой скорости проц грузился под завязку, а скорости даже в 300 кб/сек не выходило. Советовали ставить какие-то патчи, с этим связанные, но я не пробовал, вобщем был получен порог около 250-270 кбайт/сек.
EvgenyV
FTDI ооооочень простая в использовании микросхема. С одной стороны у нее USB с другой UART/FIFO.
Выше правильно написали, что FPGA о USB ничего не знает. Общается с ней как UARTом либо как с FIFO.

После подключения к компу вашего устроийства с FTDI-микросхемой, обычно в винде появляется еще один последовательный ком-порт (в винде уже миллион лет есть стандартные дравйвера для FTDI). Если же порт не появляется, то с сайта FTDI можно скачать и установить. Тогда все появится.
После этого в программе для виндоус открываете порт как файл и пишете-читаете с него.

Код
fopen(COM4,...)
fread( ...)
fwrite( ...)


Можно просто в обычном терминале открыть этот порт и читать/писать в него.

Скорость у FTDI не шибко высокая, сколько знаю. До 1Мбс вроде. Могу ошибаться.
Cypress намного быстрее, но с ним действительно гораздо больше возни, по-сравнению с FTDI.
alexadmin
Цитата(yes @ Mar 14 2011, 14:50) *
только непонятно, как в софте это поддерживается?
кто-нибудь пользовал synchronous 245 parallel FIFO mode?


В софте очень просто - FTDI переводится в соответсвующий режим работы, после чего работа с ним происходит точно так же, как и раньше - почитать-записать. В тесте удавалось добиться пиковой скорости порядка 35-40 мбит/с.
toretto
Я так понимаю режим UART и FIFO это разные режимы. С какой скоростью гоняются данные в режиме COM-порта?
Anatol'
Цитата(toretto @ Mar 14 2011, 19:59) *
Я так понимаю режим UART и FIFO это разные режимы. С какой скоростью гоняются данные в режиме COM-порта?

В датащите написано, максимум 3 Мбита. У меня 1 мегабит гоняло без проблем, больше не проверял.
alexadmin
Цитата(alexadmin @ Mar 14 2011, 16:12) *
В тесте удавалось добиться пиковой скорости порядка 35-40 мбит/с.


35-40 Мбайт/с, конечно же.
backa
Цитата(yes @ Mar 14 2011, 15:50) *
спорный вопрос, с Cypress много лишней возни, и с EzUSB предельные скорости не получишь


у меня кристаллы реально работают без затыков на скорости 24МБАЙТА - гонят поток в комп .... без заморочек
yes
Цитата(alexadmin @ Mar 14 2011, 16:12) *
В софте очень просто - FTDI переводится в соответсвующий режим работы, после чего работа с ним происходит точно так же, как и раньше - почитать-записать. В тесте удавалось добиться пиковой скорости порядка 35-40 мбит/с.


ну то есть через D2XX, больше никаких хитростей не надо?
просто про Cypress FX2 слышал, что больше 25Мбайт/с получить нельзя - типа проблемы хоста и это как бы практический потолок под виндой

пользуюсь FTDI в режимах отличных от UART и с драйверами не сериальными, но как-то никак руки не доходят проверить FIFO
у меня как раз нужно 26-30Мбайт/с, но программист соскочил и придется самому писать - вот хочу понять, чего ожидать

des00
Цитата(yes @ Mar 15 2011, 07:24) *
просто про Cypress FX2 слышал, что больше 25Мбайт/с получить нельзя - типа проблемы хоста и это как бы практический потолок под виндой

хммм, SM рапортовал что получил под 50 мегабайт на FX2 в режиме sync fifo на 48МГц
alexadmin
Цитата(yes @ Mar 15 2011, 16:24) *
ну то есть через D2XX, больше никаких хитростей не надо?
просто про Cypress FX2 слышал, что больше 25Мбайт/с получить нельзя - типа проблемы хоста и это как бы практический потолок под виндой


Да, в софте устанавливаете синхронный режим, не забываете включить RTS/CTS (в какой-то AN написано иначе данные бьются), и дальше работаете обычными функциями чтения/записи. Около 40 мбайт/с получалось в простом тесте типа прочитать данные, проверить на отсутствие ошибок, скинуть на диск.
Nepston
а как в квартусе описать связку PC<=>USB<=>FPGA? может кто-нить это обьяснить или скинуть какой нибудь пример?
Maverick
Цитата(Nepston @ Oct 27 2011, 20:59) *
а как в квартусе описать связку PC<=>USB<=>FPGA? может кто-нить это обьяснить или скинуть какой нибудь пример?

ft2232hcore
flamehj
FT232H в режиме FIFO245 сигнал TXE#(передача данных из ПЛИС в FTDI) и RXF#(передача данных из FTDI в ПЛИС) делятся на несколько импульсов, разделённых задержкой ( FT_latency_timer как я понял), ибо USB-контроллер в буфер FTDI присылает USB-пакеты по 512 байт и читает обратно тоже по 512 байт. Поэтому сигнал TXE#, RXF# делятся на то количество импульсов, сколько пачек по 512 байт вы хотите принять или отправить. Поэтому, что б читать в ПК, лучше использовать сигнал SIWU, когда буфер FTDI не ждёт заполнения до конца, а сразу отправляет полученные данные. И лучше очищать буфер микросхемы перед каждым чтением, а то там копится какой-то мусор.

Пробовал выставить флаг FT_FlowControl(RTS_CTS - как-то так) в 1, но он никаких координальных изменений не дал. Если он выставляется ещё где-то, то где?

Хочу заметить, что RXF# в активном уровне - не сигнал записи в ПЛИС/контроллер, он лишь говорит о том, что в буфере FTDI есть данные для записи, и так же TXE# - говорит о том, что приёмный буфер FTDI полностью не заполнен, и можно туда ещё записать.

Вот тут хорошо описана настройка этого режима:

http://www.kit-e.ru/articles/interface/2010_08_90.php

http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.