jur 0 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Konst_777, опишу проект подробнее. ... Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом. У меня похожий проект (только передаются 8-разрядные данные АЦП, пачками по 512 байт). Я пробовал два варианта: Slave FIFO (применялась микросхема CY7C680001) и GPIF (это уже на CY7C680013A). Для режима Slave FIFO задал длительность импульса SLWR равной 80 нсек с периодом 160 нсек. При этом получается, что передача 256 16-разрядных слов занимает около 41 мксек. Предельная скорость в районе 12 МБайт/сек. Для меня в общем-то приемлемо, но запаса по скорости не остается. А это плохо. Поэтому я остановился на режиме GPIF. Дело в том, что в этом режиме можно получить заметно бОльшую скорость передачи данных. Мы обсуждали вопрос предельного быстродействия передачи данных с помощью этой микросхемы в Винде вот в этом топике (см. скриншоты постов #49 и #50). Можно достичь предельной скорости порядка 40+ МБайт/сек. На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск. Только нужно тщательно организовать прием данных. Во-первых, по всей видимости однозначно следует принимать данные в отдельном потоке (IMHO, тут вообще без вариантов). Во-вторых, для сброса данных на диск следует вдумчиво организовать буферирование принятых данных (возможно, следует сделать два/четыре здоровых буфера в несколько сотен килобайт, или даже порядка мегабайтов). Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд... Для режима Slave FIFO нужно использовать SLWR, адрес (номер) FIFO и, наверное, этого достаточно. Для режима GPIF в общем-то все то же самое, только используются линии CTLx. Например я использую CTL0 в качестве сигнала RD#, а CTL1 в качестве OE#. Для квитирования (проверки готовности) можно использовать линии RDYx. Но я поступил проще: применил линию порта ввода микросхемы CY7C680013A, которая опрашивает готовность и программно запускает очередной цикл считывания блока данных. Передача одного блока (512 байт) ПЛИС->CY7C680013A занимает что-то порядка 8.5 мксек (я выбрал частоту интерфейса 30 MHz, т.к. мне этого достаточно за глаза. Но можно и 48 MHz, тогда скорость пропорционально возрастет). В моем проекте блоки следуют один за другим с периодом от ~35 до ~300 мксек. Если у тебя данные идут непрерывным потоком, то, наверное, следует все же применить линию RDYx. Но в любом случае получить скорость 10-15 МБайт/сек можно лёгко. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Если все же об аппаратном, то как все таки оно организовано, да еще и с сохранением таких скоростей??? (двухпортовая ОЗУ в разрыв между АЦп и cypress???) Между АЦП и FX2LP как правило ставят FPGA. Подключите к FPGA динамическую память и получите FIFO такого объема, какого захотите. Мало? Подключите к FPGA жесткий диск. И все это будет FIFO. То есть, способ организации данных по типу Первый зашел, Первый вышел. Konst_777, опишу проект подробнее... Похоже, что jur уже ответил на Ваши вопросы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SancheSZ 0 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Вот, нашел то, что надо. :) http://lea.hamradio.si/~s57uuu/uuusb/simplead.png Человек подключает два 8-разрядных АЦП. Подробнее: http://lea.hamradio.si/~s57uuu/uuusb/index.htm Использует Slave FIFO в асинхронном варианте (только SLWR). Там внизу есть раздел Software и соответствующая ссылка, по которой описывается програмная сторона вопроса - правда под Linux. Насколько я понимаю программирование контроллера сводится к задаию значений некоторых регистров? И еще: как я понял код загружается в RAM контроллера по USB, после чего девайс перезагружается. Вот собственно каким образом код загружается? Это должна делать моя программа? Нужен ли в таком случае EEPROM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 15 марта, 2008 Опубликовано 15 марта, 2008 · Жалоба Вот, нашел то, что надо. :) Ой, боюсь то, что не надо :( . Вряд ли Вы получите работающий модуль. Человек подключает два 8-разрядных АЦП. Это его проблемы. Использует Slave FIFO в асинхронном варианте (только SLWR). И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек. Насколько я понимаю программирование контроллера сводится к задаию значений некоторых регистров? Но datasheet и EZ-USB® Technical Reference Manual все равно прочитать нужно. И еще: как я понял код загружается в RAM контроллера по USB, после чего девайс перезагружается. Вот собственно каким образом код загружается? Это должна делать моя программа? Нужен ли в таком случае EEPROM? Если Вы будете подключать к компьютеру одновременно только одно устройство с VID=04B4 и PID=8613 ("Cypress EZ-USB FX2LP - EEPROM missing"), то можно не устанавливать EEPROM на плату. Драйвер CyUSB.sys может загружать скипт, содержащий программу для FX2LP из файла на диске. Эта возможность описана в документе "CyUSB.chm" раздел "Modifying CyUSB.INF" подраздел "4. Execute a saved script of commands at driver load time". Но, все равно, на Вашем модуле должна быть EEPROM, правильно подключенная к контроллеру FX2LP (Э3 и PCB должны содержать EEPROM). Иначе Вы рискуете оказаться перед необходимостью повторной разработки модуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SancheSZ 0 15 марта, 2008 Опубликовано 15 марта, 2008 · Жалоба И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек. Это понятно. Возможно мне и этой скорости хватит, а простота реализации подкупает :). На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее... Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере. Если Вы будете подключать к компьютеру одновременно только одно устройство с VID=04B4 и PID=8613 ("Cypress EZ-USB FX2LP - EEPROM missing"), то можно не устанавливать EEPROM на плату. Но, все равно, на Вашем модуле должна быть EEPROM, правильно подключенная к контроллеру FX2LP (Э3 и PCB должны содержать EEPROM). Иначе Вы рискуете оказаться перед необходимостью повторной разработки модуля. Эти 2 высказываия немного протеворечат друг другу. Да, я осознаю, что без EEPROM я не смогуподключить 2 таких контроллера одновременно. Но в принципе, работать будет, если просто поставить вместо EEPROM подтягивающие резисторы? Т.е. кроме идентификации устройтва стандартными кодами и необходимости грузить прошивку с компа других ограничений не будет? Еще такой вопрос... Есть у меня платка тут одна со 128-pin cy7c86013 распаянным. Хотел с ней поигратся (типа завести с помощью сайпресовской панели прмер bulkloop). Тык вот, устройство (EEPROM missing - там резисторы вместо него) нормально подключается к компу, ставлю драйвер cyUSB, панель его видит. Загружаю пример bulkloop.hex в конроллер, вроде загружается (ну там видно как много текста бежит). Но после загрузки нажимаю GetPipeInfo - ничего не выводит... С чем может быть это связано? У меня есть схема этой платы, но выложить ее не могу. Много пинов контроллера заведены на ПЛИС, конфигурация в которой затерта неизвестно чем (и чего там должно быть у меня нету). Может ли прична быть в ПЛИС, т.е. какие критичные для контроллера пины нужно проверить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее... Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере. Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. :) Эти 2 высказываия немного протеворечат друг другу. Да, я осознаю, что без EEPROM я не смогуподключить 2 таких контроллера одновременно. Но в принципе, работать будет, если просто поставить вместо EEPROM подтягивающие резисторы? Т.е. кроме идентификации устройтва стандартными кодами и необходимости грузить прошивку с компа других ограничений не будет? Работать будет, других ограничений не будет. Еще такой вопрос... Есть у меня платка тут одна со 128-pin cy7c86013 распаянным. Хотел с ней поигратся (типа завести с помощью сайпресовской панели прмер bulkloop). Тык вот, устройство (EEPROM missing - там резисторы вместо него) нормально подключается к компу, ставлю драйвер cyUSB, панель его видит. Загружаю пример bulkloop.hex в конроллер, вроде загружается (ну там видно как много текста бежит). Но после загрузки нажимаю GetPipeInfo - ничего не выводит... С чем может быть это связано? У меня есть схема этой платы, но выложить ее не могу. Много пинов контроллера заведены на ПЛИС, конфигурация в которой затерта неизвестно чем (и чего там должно быть у меня нету). Может ли прична быть в ПЛИС, т.е. какие критичные для контроллера пины нужно проверить? Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников. bulkloop_FX2.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maxit 0 19 марта, 2008 Опубликовано 19 марта, 2008 · Жалоба Konst_777, опишу проект подробнее. Значится так. Все затевается для считывания данных с ПЗС матрицы. Матрица будет тактироваться ПЛИСиной (т.е. ПЛИС будет вырабатывать тактовые импульсы вертикального и горизонтального сдвига в ПЗС). С выхода ПЗС аналоговый сигнал идет на абстрактный 10-битный АЦП. Дык вот, хотелось бы завести эти 10 бит на FX2 и подать на FX2 еще какой-нибудь сигнал с ПЛИС, который бы говорил о готовности данных, т.е. давался синхронно с изменением данных на выходе ПЗС (и АЦП соответственно). Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом. На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск. Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд... если входной сигнал высокой частоты нельзя ли спектр сигнала перенести в область низких частот а потом преобразовать АЦП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SancheSZ 0 15 апреля, 2008 Опубликовано 15 апреля, 2008 · Жалоба Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. :) Ну если не сложно, давайте рассмотрим подключение к CY7C68013A-56PVXC АЦП AD9203. Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников. Спасибо! Пример нормально завелся. Буду копать исходики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=HermiT=- 0 16 апреля, 2008 Опубликовано 16 апреля, 2008 · Жалоба На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск. У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=HermiT=- 0 17 апреля, 2008 Опубликовано 17 апреля, 2008 · Жалоба Решил сделать так: в буфер EP6 записываю статус FIFOFULL для буфера EP8 и обновляю этот статус после каждого прочтения буфера EP6. Через буфер EP8 передаю сами данные. Не знаю есть ли другой способ. Наверное, можно использовать биты STALL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 17 апреля, 2008 Опубликовано 17 апреля, 2008 · Жалоба У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013? А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=HermiT=- 0 17 апреля, 2008 Опубликовано 17 апреля, 2008 · Жалоба А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных... Спасибо за ответ. Я не знал, что так можно сделать. Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 17 апреля, 2008 Опубликовано 17 апреля, 2008 · Жалоба Спасибо за ответ. Я не знал, что так можно сделать. Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться. Не делайте этого, ибо - глупость :) Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=HermiT=- 0 18 апреля, 2008 Опубликовано 18 апреля, 2008 · Жалоба http://www.efo.ru/doc/Cypress/Cypress.pl?2524 - полезная ссылка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=HermiT=- 0 18 апреля, 2008 Опубликовано 18 апреля, 2008 · Жалоба Не делайте этого, ибо - глупость :) Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;) У меня еще такой вопрос. Смогу ли я отсылать с компьютера новые данные, если другой поток в это время пытается получать данные с этого же устройства (устройство данные выдать не может, т.к. их еще нет)? Вроде, сам уже нашел ответ: маленький таймаут надо задать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться