Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прием данных из АЦП в ПК по USB
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Страницы: 1, 2
SancheSZ
Помогите выбрать микроконтроллер для следующей задачи:

необходимо по сигналу готовности данных принимать принимать данные из 8-10 разрядного АЦП с частотой порядка 10 Мегавыборок в секунду и без какой-либо обработки отправлять их в комп по USB, где приложение будет тупо этот поток сбрасывать на диск. Таким образом необходимая скорость передачи данных 10-15 МБ\сек.

Сам приматриваюсь к Cypress FX2.

Возможно ли на нем реализовать подобный обмен?
aal
http://www.kernelchip.ru/WoodmanUSB.php сделан похоже именно на кайпрессе....
SancheSZ
Понадобятся ли какие-либо дополнительные микросхемы (например буферная память, вспомогательные контроллеры и тд) или все можно сделать на одном FX2?

Насколько я понимаю там должна быть работа в режиме Slave FIFO...
slog
Слать данные с частотой 10MHz может далеко не каждый контроллер, не говоря уж про "микро". И если АЦП 10-ти разрядный, то нужна чистая пропускная способность 100MBit/sec так что про USB наверно придётся забыть. Я бы смотрел в сторону Ethernet + FPGA, и 100Mbit скорее всего еще и не хватит.
SancheSZ
Ну во-первых максимальная попускная способность USB 2.0 в High Speed режиме составляет 480 Мбит\сек, так что 100 не должно быть проблемой.

Да и о самого контроллера (ядра) особо ничего не требуется. Насколько я понял из чтения мануала USB приемо-передатчик реализован там на аппаратном уровне и может быть сконфигурирован, чтобы просто перегонять данные из FIFO к хосту.

Интересует мнение людей, имевших дело с данным контроллером, а так же любые пратические советы.
Konst_777
Цитата(SancheSZ @ Mar 7 2008, 09:50) *
Понадобятся ли какие-либо дополнительные микросхемы (например буферная память, вспомогательные контроллеры и тд) или все можно сделать на одном FX2?

Насколько я понимаю там должна быть работа в режиме Slave FIFO...

Сам по себе FX2LP в режиме Slave FIFO позволяет достичь скорости обмена до 40 МБайт/сек. Проблемы возникнут, если операционная система компьютера начнет переключать задачи. То есть, необходима буферная память, чтобы не терять данные во время переключения задач. Размер буферной памяти расчитывается исходя из необходимой скорости обмена и времени на вероятное переключение задач.
SancheSZ
Мне не понятно следующе: допустим мое устройство заполняет буфер FIFIO. После заполнения буфера (так ведь?) происходит отправка данных по USB. Во время этого процесса буфер получается заполнен и не доступен для моего усройства? Ведь отправка данных занимает некотрое время.... И потом, получается что пропускня способность USB (480 Mbit/s) не постоянна во времени, т.к. между передачами будут аузы, пока заполняется буфер, и чтоб обеспечить такую скорость нужно чтобы иковая скорость превышала 480.. Это так, размышления просто мне конечно максимальная скорость не нужна, но хоелось бы понять общие принципы.
Konst_777
Цитата(SancheSZ @ Mar 10 2008, 09:54) *
Мне не понятно следующе: допустим мое устройство заполняет буфер FIFIO. После заполнения буфера (так ведь?) происходит отправка данных по USB. Во время этого процесса буфер получается заполнен и не доступен для моего усройства? Ведь отправка данных занимает некотрое время.... И потом, получается что пропускня способность USB (480 Mbit/s) не постоянна во времени, т.к. между передачами будут аузы, пока заполняется буфер, и чтоб обеспечить такую скорость нужно чтобы иковая скорость превышала 480.. Это так, размышления просто мне конечно максимальная скорость не нужна, но хоелось бы понять общие принципы.

Практически любой современный контроллер USB позволяет использовать для endpoint-ов как минимум двойную буферизацию. То есть, пока в один из буферов происходит запись данных, другой используется для пересылки данных через шину USB. Аналогично для приема.

В режиме Synchronous Slave FIFO FX2LP позволяет обеспечить скорость чтения/записи из/в буферы FIFO до 96 МБайт/сек. Так, что задержек со стороны контроллера нет. Но, чтобы достичь максимально возможной скорости USB Bulk-обмена (53 МБайт/сек) нужно, чтобы хост-контроллер USB, расположенный в ПЭВМ, работал так, чтобы не было простоев на шине USB. Правильно говорить о том, как долго хост-контроллер может обеспечить максимальную скорость обмена. Это зависит от:
  • объема данных, которыми нужно обмениваться;
  • качества драйвера хост-контроллера, обеспечиваемого операционной системой;
  • качества драйвера для устройства USB;
  • объема памяти, установленной в компьютер;
  • объема и организации дисковой памяти;
  • количества задач и потоков, работающих одновременно;
  • качества работы приложения, которое обеспечивает обмен данными;
  • и т.д. и т.п.
Serg_Sm
У нас используются подобные системы на основе CY7C68013A и внешней FIFO. Скорость приема данных составляет более 40 Мбайт/с - это с доработанным драйвером, с родным будет где-то в районе ~20.
Так что никаких проблем в этом нет.
Konst_777
Цитата(Serg_Sm @ Mar 11 2008, 12:11) *
У нас используются подобные системы на основе CY7C68013A и внешней FIFO. Скорость приема данных составляет более 40 Мбайт/с - это с доработанным драйвером, с родным будет где-то в районе ~20.
Так что никаких проблем в этом нет.

Пожалуйста, напишите подробнее:
  • Какой объем FIFO Вы используете?
  • Какой максимальный объем данных выдают в компьютер Ваши системы?
  • Какой тип передачи (Bulk, Interrupt, Isochronous) Вы используете?
  • Какая, при этом, средняя скорость обмена, а также минимальная и максимальная?
  • Проверяете ли Вы (важна ли для Вас) целостность данных, т.е. прием данных в ПЭВМ без потерь?
  • Какой драйвер дорабатывался и в чем смысл доработок - увеличение максимальной или средней скорости обмена?
Мы тоже используем системы на основе CY7C68013A и внешней FIFO. Вот только в качестве FIFO мы используем динамическую память объемом до 64 МБайт. А хотелось бы использовать микросхем(у/ы) настоящего FIFO объемом до 1 МБайта.
Serg_Sm
Цитата(Konst_777 @ Mar 11 2008, 20:11) *
Пожалуйста, напишите подробнее:
  • Какой объем FIFO Вы используете?
  • Какой максимальный объем данных выдают в компьютер Ваши системы?
  • Какой тип передачи (Bulk, Interrupt, Isochronous) Вы используете?
  • Какая, при этом, средняя скорость обмена, а также минимальная и максимальная?
  • Проверяете ли Вы (важна ли для Вас) целостность данных, т.е. прием данных в ПЭВМ без потерь?
  • Какой драйвер дорабатывался и в чем смысл доработок - увеличение максимальной или средней скорости обмена?
Мы тоже используем системы на основе CY7C68013A и внешней FIFO. Вот только в качестве FIFO мы используем динамическую память объемом до 64 МБайт. А хотелось бы использовать микросхем(у/ы) настоящего FIFO объемом до 1 МБайта.


На все вопросы ответить не смогу - не я это устройство разрабатывал, но что знаю, то напишу:
FIFO 512Кбайт (IDT 32>16 бит - для двухканального АЦП);
Объем данных зависит от режима работы - если скорость обработки не меньше скорости приема, то ограничений в принципе нет. Либо зависит от размера выделенной памяти;
Тип передачи - кажется Bulk, другие режимы просто не позволят качать данные с приемлимой скоростью.
Насчет скоростей обмена не тестировал, но разработчик гарантировал минимум 40МБайт/с.
Целостность данных важна.
Перерабатывался родной сайпресовский драйвер ezusb.sys. Цель доработки - увеличение скорости обмена (в первую очередь минимальной).
SancheSZ
Можно ли в режиме Slave FIFO организовать такой обмен:

по факту наличия действительных данных на АЦП ме устройство вырабатывает строб, который падаетя на какой-то пин Cypress (какой?). Данные напрямую с АЦП на Cypress. По стробу данные загружаются в FIFO. Т.е. каждая выборка сопровождается стробом. По мере зполнения FIFO Cypress отправляет данные хосту, где программа просто их сбрасывает на диск.

Если что-то подобное реализуемо, то это синхронный или асинхроный Slave FIFO? smile.gif
Konst_777
Цитата(Serg_Sm @ Mar 12 2008, 14:35) *
На все вопросы ответить не смогу - не я это устройство разрабатывал, но что знаю, то напишу...

И на этом спасибо. Хотя я надеялся на более подробные ответы. smile.gif

Цитата(SancheSZ @ Mar 12 2008, 15:03) *
Можно ли в режиме Slave FIFO организовать такой обмен...

Это зависит от применяемого АЦП и от возможностей Вашего устройства. Написали бы Вы подробнее, что за АЦП Вы собираетесь применять и, что Вы понимаете под "устройством". Тогда и мой ответ будет более предметным. Одно могу сказать точно уже сейчас: асинхроный Slave FIFO медленнее GPIF. А с помощью GPIF можно организовать обмен с, практически, любым АЦП и без дополнительных устройств.
AndreyS
Цитата(Konst_777 @ Mar 12 2008, 20:54) *
И на этом спасибо. Хотя я надеялся на более подробные ответы. smile.gif
Это зависит от применяемого АЦП и от возможностей Вашего устройства. Написали бы Вы подробнее, что за АЦП Вы собираетесь применять и, что Вы понимаете под "устройством". Тогда и мой ответ будет более предметным. Одно могу сказать точно уже сейчас: асинхроный Slave FIFO медленнее GPIF. А с помощью GPIF можно организовать обмен с, практически, любым АЦП и без дополнительных устройств.


Ой. (наверное офтопик)

А каким образом это аппаратный FIFO народ так расширяет (я так понимаю что при этом не используется доп микруха для раскидывания данных из АЦП в память и потом уже в cypress)?????

Или речь идет исключительно о прогрммном (на стороне драйвера)???

Если все же об аппаратном, то как все таки оно организовано, да еще и с сохранением таких скоростей??? (двухпортовая ОЗУ в разрыв между АЦп и cypress???)
SancheSZ
Konst_777, опишу проект подробнее.

Значится так. Все затевается для считывания данных с ПЗС матрицы. Матрица будет тактироваться ПЛИСиной (т.е. ПЛИС будет вырабатывать тактовые импульсы вертикального и горизонтального сдвига в ПЗС). С выхода ПЗС аналоговый сигнал идет на абстрактный 10-битный АЦП. Дык вот, хотелось бы завести эти 10 бит на FX2 и подать на FX2 еще какой-нибудь сигнал с ПЛИС, который бы говорил о готовности данных, т.е. давался синхронно с изменением данных на выходе ПЗС (и АЦП соответственно).

Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом.

На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.

Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд...
jur
Цитата(SancheSZ @ Mar 12 2008, 22:02) *
Konst_777, опишу проект подробнее.
...
Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом.

У меня похожий проект (только передаются 8-разрядные данные АЦП, пачками по 512 байт). Я пробовал два варианта: Slave FIFO (применялась микросхема CY7C680001) и GPIF (это уже на CY7C680013A). Для режима Slave FIFO задал длительность импульса SLWR равной 80 нсек с периодом 160 нсек. При этом получается, что передача 256 16-разрядных слов занимает около 41 мксек. Предельная скорость в районе 12 МБайт/сек. Для меня в общем-то приемлемо, но запаса по скорости не остается. А это плохо.

Поэтому я остановился на режиме GPIF. Дело в том, что в этом режиме можно получить заметно бОльшую скорость передачи данных. Мы обсуждали вопрос предельного быстродействия передачи данных с помощью этой микросхемы в Винде вот в этом топике (см. скриншоты постов #49 и #50). Можно достичь предельной скорости порядка 40+ МБайт/сек.

Цитата(SancheSZ @ Mar 12 2008, 22:02) *
На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.

Только нужно тщательно организовать прием данных. Во-первых, по всей видимости однозначно следует принимать данные в отдельном потоке (IMHO, тут вообще без вариантов). Во-вторых, для сброса данных на диск следует вдумчиво организовать буферирование принятых данных (возможно, следует сделать два/четыре здоровых буфера в несколько сотен килобайт, или даже порядка мегабайтов).

Цитата(SancheSZ @ Mar 12 2008, 22:02) *
Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на 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
Цитата(AndreyS @ Mar 12 2008, 23:43) *
Если все же об аппаратном, то как все таки оно организовано, да еще и с сохранением таких скоростей??? (двухпортовая ОЗУ в разрыв между АЦп и cypress???)

Между АЦП и FX2LP как правило ставят FPGA. Подключите к FPGA динамическую память и получите FIFO такого объема, какого захотите. Мало? Подключите к FPGA жесткий диск. И все это будет FIFO. То есть, способ организации данных по типу Первый зашел, Первый вышел.

Цитата(SancheSZ @ Mar 13 2008, 00:02) *
Konst_777, опишу проект подробнее...

Похоже, что jur уже ответил на Ваши вопросы.
SancheSZ
Вот, нашел то, что надо. smile.gif

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
Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Вот, нашел то, что надо. smile.gif

Ой, боюсь то, что не надо sad.gif . Вряд ли Вы получите работающий модуль.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Человек подключает два 8-разрядных АЦП.

Это его проблемы.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Использует Slave FIFO в асинхронном варианте (только SLWR).

И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Насколько я понимаю программирование контроллера сводится к задаию значений некоторых регистров?

Но datasheet и EZ-USB® Technical Reference Manual все равно прочитать нужно.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
И еще: как я понял код загружается в 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
Цитата(Konst_777 @ Mar 15 2008, 09:42) *
И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек.


Это понятно. Возможно мне и этой скорости хватит, а простота реализации подкупает smile.gif.

На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее...

Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере.

Цитата(Konst_777 @ Mar 15 2008, 09:42) *
Если Вы будете подключать к компьютеру одновременно только одно устройство с 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
Цитата(SancheSZ @ Mar 15 2008, 11:19) *
На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее...

Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере.

Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. smile.gif

Цитата(SancheSZ @ Mar 15 2008, 11:19) *
Эти 2 высказываия немного протеворечат друг другу. Да, я осознаю, что без EEPROM я не смогуподключить 2 таких контроллера одновременно. Но в принципе, работать будет, если просто поставить вместо EEPROM подтягивающие резисторы? Т.е. кроме идентификации устройтва стандартными кодами и необходимости грузить прошивку с компа других ограничений не будет?

Работать будет, других ограничений не будет.

Цитата(SancheSZ @ Mar 15 2008, 11:19) *
Еще такой вопрос... Есть у меня платка тут одна со 128-pin cy7c86013 распаянным. Хотел с ней поигратся (типа завести с помощью сайпресовской панели прмер bulkloop). Тык вот, устройство (EEPROM missing - там резисторы вместо него) нормально подключается к компу, ставлю драйвер cyUSB, панель его видит. Загружаю пример bulkloop.hex в конроллер, вроде загружается (ну там видно как много текста бежит). Но после загрузки нажимаю GetPipeInfo - ничего не выводит... С чем может быть это связано? У меня есть схема этой платы, но выложить ее не могу. Много пинов контроллера заведены на ПЛИС, конфигурация в которой затерта неизвестно чем (и чего там должно быть у меня нету). Может ли прична быть в ПЛИС, т.е. какие критичные для контроллера пины нужно проверить?

Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников.
maxit
Цитата(SancheSZ @ Mar 12 2008, 23:02) *
Konst_777, опишу проект подробнее.

Значится так. Все затевается для считывания данных с ПЗС матрицы. Матрица будет тактироваться ПЛИСиной (т.е. ПЛИС будет вырабатывать тактовые импульсы вертикального и горизонтального сдвига в ПЗС). С выхода ПЗС аналоговый сигнал идет на абстрактный 10-битный АЦП. Дык вот, хотелось бы завести эти 10 бит на FX2 и подать на FX2 еще какой-нибудь сигнал с ПЛИС, который бы говорил о готовности данных, т.е. давался синхронно с изменением данных на выходе ПЗС (и АЦП соответственно).

Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом.

На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.

Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд...



если входной сигнал высокой частоты нельзя ли спектр сигнала перенести в область низких частот а потом преобразовать АЦП
SancheSZ
Цитата(Konst_777 @ Mar 17 2008, 22:58) *
Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. smile.gif


Ну если не сложно, давайте рассмотрим подключение к CY7C68013A-56PVXC АЦП AD9203.

Цитата(Konst_777 @ Mar 17 2008, 22:58) *
Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников.


Спасибо! Пример нормально завелся. Буду копать исходики.
-=HermiT=-
Цитата(SancheSZ @ Mar 12 2008, 23:02) *
На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.


У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013?
-=HermiT=-
Решил сделать так: в буфер EP6 записываю статус FIFOFULL для буфера EP8 и обновляю этот статус после каждого прочтения буфера EP6. Через буфер EP8 передаю сами данные.

Не знаю есть ли другой способ. Наверное, можно использовать биты STALL.
-Al-
Цитата(-=HermiT=- @ Apr 16 2008, 09:35) *
У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013?

А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных...
-=HermiT=-
Цитата(-Al- @ Apr 17 2008, 11:58) *
А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных...


Спасибо за ответ. Я не знал, что так можно сделать.
Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться.
-Al-
Цитата(-=HermiT=- @ Apr 17 2008, 13:20) *
Спасибо за ответ. Я не знал, что так можно сделать.
Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться.

Не делайте этого, ибо - глупость smile.gif Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;)
-=HermiT=-
http://www.efo.ru/doc/Cypress/Cypress.pl?2524 - полезная ссылка
-=HermiT=-
Цитата(-Al- @ Apr 17 2008, 13:53) *
Не делайте этого, ибо - глупость smile.gif Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;)

У меня еще такой вопрос. Смогу ли я отсылать с компьютера новые данные, если другой поток в это время пытается получать данные с этого же устройства (устройство данные выдать не может, т.к. их еще нет)?

Вроде, сам уже нашел ответ: маленький таймаут надо задать
-Al-
Цитата(-=HermiT=- @ Apr 18 2008, 12:06) *
У меня еще такой вопрос. Смогу ли я отсылать с компьютера новые данные, если другой поток в это время пытается получать данные с этого же устройства (устройство данные выдать не может, т.к. их еще нет)?

Вроде, сам уже нашел ответ: маленький таймаут надо задать

Из другого потока - без проблем smile.gif Каждый эндпоинт в устройстве живет своей жизнью ;)
Konst_777
Цитата(SancheSZ @ Mar 15 2008, 10:19) *
...
Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере.
...


Цитата(SancheSZ @ Apr 15 2008, 09:30) *
Ну если не сложно, давайте рассмотрим подключение к CY7C68013A-56PVXC АЦП AD9203.

CY7C68013A в 56 выводном корпусе не имеет последовательных портов, которые являются штатным средством отладки от Cypress. Как Вы будете отлаживать firmware?

"Archive.rar" содержит исполняемые файлы. После распаковки проверьте, что папка "Archive" не содержит вирусы.
Из папки "Archive\GPIF Designer_demo" запустите "GPIF Designer_demo.htm". Надеюсь, что эта демонстрация частично ответит на Ваши вопросы.
Папка "\Archive\Firmware" содержит исходники для firmware. Папка "\Archive\Software" содержит исходники для тестовой программы (*.exe в "\Archive\Software\Debug"). В папке "\Archive\Driver\SuiteUSB.NET 2.0" есть "CyUSB.inf", который потребуется при установке драйвера, после загрузки firmware.
Maverick
Цитата(Serg_Sm @ Mar 11 2008, 11:11) *
У нас используются подобные системы на основе CY7C68013A и внешней FIFO. Скорость приема данных составляет более 40 Мбайт/с - это с доработанным драйвером, с родным будет где-то в районе ~20.
Так что никаких проблем в этом нет.


Здраствуйте! Можете поделится каким образом Вы дорабатывали драйвер и в каком режиме CY7C68013A работает(bulk, изохрон, ...)?

Цитата(SancheSZ @ Mar 5 2008, 23:11) *
Помогите выбрать микроконтроллер для следующей задачи:

необходимо по сигналу готовности данных принимать принимать данные из 8-10 разрядного АЦП с частотой порядка 10 Мегавыборок в секунду и без какой-либо обработки отправлять их в комп по USB, где приложение будет тупо этот поток сбрасывать на диск. Таким образом необходимая скорость передачи данных 10-15 МБ\сек.

Сам приматриваюсь к Cypress FX2.

Возможно ли на нем реализовать подобный обмен?


http://www.kernelchip.ru/WoodmanUSB.php

http://www.ftdichip.com/
Serg_Sm
Цитата(Maverick @ Apr 28 2008, 22:03) *
Здраствуйте! Можете поделится каким образом Вы дорабатывали драйвер и в каком режиме CY7C68013A работает(bulk, изохрон, ...)?


Повторюсь - не я дорабатывал драйвер и точных данных по нему у меня нет. Кое-что я уже написал в предыдущих постах.
SancheSZ
Цитата(Konst_777 @ Apr 28 2008, 11:51) *
Из папки "Archive\GPIF Designer_demo" запустите "GPIF Designer_demo.htm". Надеюсь, что эта демонстрация частично ответит на Ваши вопросы.


Konst_777, огромное спасибо за презентацию, пример прошивки и приложения для компа!
Спаял тут свою тестовую платку, все это удалось запустить. Без примера было бы очень сложно начинать с 0.

Сейчас для тестовых целей ацп тактирую обственным генератором на 4,194 МГц, на вход просто посадил резистивный делитель с переменным резистором, модифицировал Ваш пример для ПК и по таймеру читаю по 512 байт (меньше - виснет) и вывожу на экран значения из АЦП.

Это так, тоб убедиться что ацп работает и контроллер действительно читает данные с него.

GPIF примеры с IFCLK и CTL0 поэтому функционируют абсолютно одинаково.

Однако в моей задаче (считывание данных с ПЗС матрицы) ситуация такова, что данные необходимо считывать не через равные промежутки времени (т.е. разные паузы между пикселями в строке, между строками между кадрами). АЦП как я понимаю требуется татовый сигнал со скважностью 50%.

Поэтому задумка такая: тактировать АЦП допустим 20 МГц всегда, а на контроллер на RDY0 подавать сигнал со схемы управления (которая также будет вырабатывать пачку сигналов управления для матрицы и тактовую АЦП). Т.е. требуется чтобы данные с АЦП передавались в ЮСБ только при активном RDY0.

Можно ли разрулить такое с помощью GPIF? Я вот пробовал модифицировать опять же Ваш пример с IFCLK (в принципе мне ни IFCLK ни CTL0 не нужен). Акивировал там линию RDY0, в Desigion Point поставил условие не IntReady = 1, а RDY0. Экспортировал в С файл, перекомпилил. Запутил прогу с таймером. Соединял проводком, RDY0 с землей и с питанием. Ожидал, что поток данных заткнется. Но этого не произошло. О безисходности пробовал переносить диаграмму из FIFORead в SingleRead (кстати чем они отличаются smile.gif ), но так данные не идут вообще (видимо надо менят код прошивки).

Буду благодарен за любую помощь. Просто пока нет полного понимания приципов GPIF.


Еще вопрос: что за файл UsbIF.cpp (класс CUsbIF). Понятно, что он содержит функции для общения с FX2. Cypress же дает библиотеку CyUSB.lib. Это и есть данная библиотека в виде исходника или может быть Ваша собственая разработка? Просто гуг по данному имени файла (и Н файла тоже) дал крайне мало результатов.
Konst_777
Цитата(SancheSZ @ May 25 2008, 11:46) *
...Поэтому задумка такая: тактировать АЦП допустим 20 МГц всегда, а на контроллер на RDY0 подавать сигнал со схемы управления (которая также будет вырабатывать пачку сигналов управления для матрицы и тактовую АЦП). Т.е. требуется чтобы данные с АЦП передавались в ЮСБ только при активном RDY0.

Можно ли разрулить такое с помощью GPIF?...

Для такого включения RDY0 является асинхронным по отношению к IFCLK. FX2LP будет реагировать на RDY0 с задержкой в два такта IFCLK (Примечание 21 на странице 41 "fx2lp_datasheet.pdf"). Если 20 МГц - это частота пикселов то, даже для IFCLK=48 МГц нельзя использовать GPIF в асинхронном режиме без дополнительной буферизации строк ПЗС матрицы. Ну и, мне до сих пор не удалось даже в синхронном режиме GPIF достичь скорости обмена более 31 МБайта в секунду с драйвером cyusb.sys.

По-моему, я слишком увлек Вас своим высказыванием:
Цитата(Konst_777 @ Mar 12 2008, 20:54) *
... А с помощью GPIF можно организовать обмен с, практически, любым АЦП и без дополнительных устройств.

Наверное, нужно вернутся к режиму Synchronous Slave FIFO.


Цитата(SancheSZ @ May 25 2008, 11:46) *
...Я вот пробовал модифицировать опять же Ваш пример с IFCLK (в принципе мне ни IFCLK ни CTL0 не нужен). Акивировал там линию RDY0, в Desigion Point поставил условие не IntReady = 1, а RDY0. Экспортировал в С файл, перекомпилил. Запутил прогу с таймером. Соединял проводком, RDY0 с землей и с питанием. Ожидал, что поток данных заткнется. Но этого не произошло...

Выложите Ваш файл *.gpf для GPIF Designer-а. Может быть Вы используете безусловный переход вместо условного?

Цитата(SancheSZ @ May 25 2008, 11:46) *
... пробовал переносить диаграмму из FIFORead в SingleRead (кстати чем они отличаются smile.gif )...

FX2LP способен хранить одновременно 4 временных диаграммы. Считается, что две из них будут использоваться для чтения/записи одного байта/слова (Single-Read/Single-Write), а еще две - для чтения/записи массива байтов/слов (FIFO-Read/FIFO-Write). Реально, можно использовать любую временную диаграмму для любого варианта обмена или даже все четыре временных диаграммы для какого-либо одного варианта обмена. Регистр GPIFWFSELECT служит для выбора одной из четырех временных диаграмм для требуемого варианта обмена. В GPIF Designer-е значение регистра GPIFWFSELECT задается с помощью меню Tools->Map Waweforms to WFSELECT.

Цитата(SancheSZ @ May 25 2008, 11:46) *
Еще вопрос: что за файл UsbIF.cpp (класс CUsbIF).

Класс CUsbIF был написан, чтобы общаться с драйвером cyusb.sys через интерфейс DeviceIoControl(). Какое-то время я должен был продолжать разработку в IDE Dev-C++. Там не было возможности воспользоваться CyAPI.lib.
AutoSerg
Есть задача: необходимо непрерывно пересылать данные с АЦП AD9235BRU/BCP-20Msps на компьютер через интерфейс USB, какое-либо управление переферией отсутствует. Главная задача контроллера -максимально быстро передать данные без подтверждения. Просмотрел форум и нашел впринципе подходящий МК CY7c68013, но есть вопрос: Сможет ли он передавать данные с необходимой скоростью и какой при этом необходим буфер между АЦП и МК, возможно ли это реализовать со стандартной прошивкой? Желательно иметь минимальный обвес.
Зарание спасибо.
Konst_777
Цитата(AutoSerg @ Sep 29 2008, 18:42) *
Есть задача: необходимо непрерывно пересылать данные с АЦП AD9235BRU/BCP-20Msps на компьютер через интерфейс USB, какое-либо управление переферией отсутствует. Главная задача контроллера -максимально быстро передать данные без подтверждения. Просмотрел форум и нашел впринципе подходящий МК CY7c68013, но есть вопрос: Сможет ли он передавать данные с необходимой скоростью и какой при этом необходим буфер между АЦП и МК, возможно ли это реализовать со стандартной прошивкой? Желательно иметь минимальный обвес.
Зарание спасибо.

12 бит АЦП на 20Msps - это 30 Мбайт/сек., при условии, что между АЦП и контроллером будет упаковщик четырех выборок АЦП в три 16-разрядных слова. Возможно использовать только передачу массивов данных (Bulk Transfers). Контроллер сможет передавать данные с такой скоростью. ПЭВМ может принимать данные с такой скоростью. Успеет ли операционная система - вот в чем вопрос. Размер буфера как раз и будет зависеть от способности ОС принимать (и обрабатывать?) непрерывный поток информации. При использовании ДОС и несложной обработке данных буфер может быть и не нужен. При использовании Windows потери данных можно избежать при бесконечном объеме буфера. smile.gif

Утром мир кажется не таким мрачным smile.gif
Думаю, что буфера объемом 64 Мбайт будет достаточно. Конечно, если не будет сбоев обмена через USB и не придется восстанавливать обмен.
AutoSerg
Спасибо, это действительно очень полезная информация! Маленькое уточнение: речь идет о каком-то конкретном упаковщике, рекомендованом Cypress, или я могу выбрать любой подходящий?
SancheSZ
Подниму тему...

Тут играюсь с асинхронным Slave Fifo (AUTOIN, на SLWR генератор 4 МГц) - столкнулся с интересным эффектом.

При чтении в хост с EP6 или EP8 все читается нормально (пакеты по 512 байт). Читаю в Borland C++ Builder с помощью BulkInEndPoint->XferData по 512 байт.

При использовании EP4 почему-то за один вызов читается только 2 байта (параметр len после вызова = 2), причем похоже на мусор (причем эти 2 байта повторяются помойму через раз от вызова к вызову). Аналогичный результат при чтении просто консолью Cypress.

С EP2 - вообще весело: в первый раз читается 512 байт, потом 2 байта, потом еще раз 2, потом уже 512 и далее нормально - как-то так.

Вот инициализация МК:

Код
void TD_Init(void)             // Called once at startup
{
REVCTL = 0x03; // must set REVCTL.0 and REVCTL.1 to 1
SYNCDELAY;

EP2CFG = 0xE0;   // Valid, IN, BULK, 512 byte, quad buf
SYNCDELAY;
EP4CFG = 0xE0;   // Valid, IN, BULK, 512 byte, double buf (биты 0...3 не настраиваются)
SYNCDELAY;
EP6CFG = 0xE2;  // Valid, IN, BULK, 512 byte, double buf
SYNCDELAY;
EP8CFG = 0xE0;  // Valid, IN, BULK, 512 byte, double buf (биты 0...3 не настраиваются)
SYNCDELAY;

IFCONFIG = 0xCB;
SYNCDELAY;

EP2FIFOCFG = 0x09;   // AUTOIN, 16 bit
SYNCDELAY;
EP4FIFOCFG = 0x09;   // AUTOIN, 16 bit
SYNCDELAY;
EP6FIFOCFG = 0x09;   // AUTOIN, 16 bit
SYNCDELAY;
EP8FIFOCFG = 0x09;   // AUTOIN, 16 bit
SYNCDELAY;

FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x04;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x08;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
}



В коде видно, что в EPxCFG пишу разные значения - хочу поиграться с буферированием (для EP4, EP8 значения по дефолту, т.к. в них это не настраивается).

Однако EP8 работает правильно, EP4 - нет, хотя настроены абсолютно одинаково...

Номер EP меняю в dscr.a51 (меняется в одной строчке) и перемычками на плате.
PKTEND пробовал и к земле, и к питанию привязывать...

P.S.: вопрос в догонку. Как добавить ендпоинтов в dscr.a51? Пробовал просто скопировать секцию для bulk EP ниже, изменить номер EP и увеличить счетчик ендпоинтов на 1. Но после ренумерации контроллер не определяется EZ Control Panel...


----------- далее автоматически скленный следующий пост ------------

Все, кажется разобрался...

Наверное я нарушил правила выбора конфигурации ендпоинтов из даташита.
Там одну из 12 выбрать можно, а моя конфигурация требовала 10*512 байт fifo памяти, хотя на чипе доступоно только 8*512 smile.gif

Возник правда новый вопрос. Допустим сконфигурировал я EP2 на 1024 байта, quad-buffered путем записи в EP2CFG (имею на это право по документации). Но это использует всю память, и EP4, 6, 8 я использовать не могу. Собственно как отказаться от других EP? Достаточно ли просто не писать их в dscr.a51? Просто в других EPxCFG поидее прописаны дефолтные значения... - не приведет ли это к тому, что память и под них будет выделяться? Не надо ли что-то еще делать, напрмер бит VALID = 0?

P.S.: рано радовался. Переписал инициализацию так:

EP2CFG = 0xE0; // Valid, IN, BULK, 512 byte, quad buf
SYNCDELAY;
EP6CFG = 0xE2; // Valid, IN, BULK, 512 byte, double buf
SYNCDELAY;
EP8CFG = 0xE0; // Valid, IN, BULK, 512 byte, double buf (биты 0...3 не настраиваются)
SYNCDELAY;

т.е. убрал EP4. Теперь EP2 с EP4 не должны конфликтовать. В даташите такой конфиг есть. Все равно EP2 глючит как и раньше - читает по 2 байта. Если сделать EP2 double-buffered, то не глючит...
Видимо это подтверждает еще раз мое предположение, что неиспользуемые ендпоинты (EP4) надо как-то отключать... (или дело вообще не в этом). Пробовал у EP4 ставить флаг VALID=0 и пробовал Type писать 00 (invalid) вместо дефолтного Bulk. Не помогло...


И остается все-таки вторая часть предыдущего вопроса - как добавлять ендпоинты в dscr.h (или что-то еще надо редактировать?)
SancheSZ
Все-таки решил отказаться от Slave FIFO в пользу GPIF и внешнего FIFO на FPGA.

Соответственно АЦП складывает данные во внешнее FIFO.
Требуется реализовать посредством GPIF чтение из FIFO и отправку в USB.

FIFO имеет флаг EMPTY, чтение из FIFO происходит по положительному фронту сигнала CLK1. Запись в FIFO (это задача не FX2) - по положительному фронту сигнала CLK2.

От FX2 требуется непрерывно читать данные из FIFO в USB при отсутствии флага EMPTY. При наличии EMPTY - ждать, пока он пропадет и опять читать. Т.е. как я понимаю нужно нарисовать временную диаграмму FIFO Read в GPIF Designer и при старте FX2 ее запустить.

В качестве IFCLK видимо в данном случае целесообразно использовать внутренний IFCLK 48 MHz, для сигнала CLK1 на FIFO - например линию CTL0, для контроля флага EMPTY - например линию RDY0.

Просьба знающим людям поправить меня, если я где-то ошибаюсь, и помочь в создании временной диаграммы, реализуюбщей такую задачу, т.к. сам я пока не очень понимаю логику работы GPIF...
NOVY
Цитата(AutoSerg @ Sep 29 2008, 19:42) *
Есть задача: необходимо непрерывно пересылать данные с АЦП AD9235BRU/BCP-20Msps на компьютер через интерфейс USB, какое-либо управление переферией отсутствует. Главная задача контроллера -максимально быстро передать данные без подтверждения. Просмотрел форум и нашел впринципе подходящий МК CY7c68013, но есть вопрос: Сможет ли он передавать данные с необходимой скоростью и какой при этом необходим буфер между АЦП и МК, возможно ли это реализовать со стандартной прошивкой? Желательно иметь минимальный обвес.
Зарание спасибо.


Задача похожая.
Предполагаю работать в режиме SlaveFifo c AutoIN по какому-то EndPoint.

Вопрос:
Возможно ли запихивать в FIFO (установив соответствующий адрес) сигнал с частотой повторения порядка 1kHz .
Сигнал SLWR формирую 120ns в "0".
Konst_777
Цитата(NOVY @ Feb 9 2010, 13:22) *
Сигнал SLWR формирую 120ns в "0".

То есть, похоже, что собираетесь использовать Asynchronous Slave FIFO Writes.
Цитата(NOVY @ Feb 9 2010, 13:22) *
Возможно ли запихивать в FIFO (установив соответствующий адрес) сигнал с частотой повторения порядка 1kHz .

Без проблем и в асинхронном и в синхронном режиме.
NOVY
Цитата(Konst_777 @ Feb 10 2010, 23:34) *
То есть, похоже, что собираетесь использовать Asynchronous Slave FIFO Writes.

Без проблем и в асинхронном и в синхронном режиме.


Да, пока собираюсь Asynchronous Slave FIFO, т.к. скорость пока до 1МГц.
Как я понял, для синхронного частота IFCLK не менее 5 МГц.
Далее предстоит передавать с частотой 10МГц.
В асинхронном более 7-8 МГц не потянет.
А в синхронном потянет? Пока не хочу использовать GPIF.

Хочу использовать две кон.точки - одна для приема данных из АЦП с автом.формирования пакета,
а другая в обратную сторону.

Никогда не работал с микроконтроллерами rolleyes.gif
С файлом PERIPH.C более или менее понятно.
Непонятно пока настройка дискрипторов в DSCR.A51, они ведь должны соответствовать инициализации в PERIPH.C.
Может кто полезную ссылку выложит?
Konst_777
Цитата(NOVY @ Feb 11 2010, 10:01) *
Далее предстоит передавать с частотой 10МГц.
В асинхронном более 7-8 МГц не потянет.
А в синхронном потянет? Пока не хочу использовать GPIF.

Потянет. Вообще, режим Synchronous Slave FIFO способен обеспечить более быстрый обмен по USB, по сравнению с Synchronous GPIF.
F15
Здравствуйте. Я вот хочу замутить девайс: звуковой АЦП + ЮСБ. Нужно для качественной оцифровки аудиосигналов. Начал с поиска качественного АЦП. Остановился на WM8785 24@192кГц. При внимательном изучении даташита обнаружил неприятный факт: тактовый сигнал BCLK оцифрованых данных соответствует тактовой частоте самой имс, т.е. 40 МГц!! Ну что ж CY7С68013 сразу в топку - дорого и не понятно. Взору пал ARM7. Но где то слышал, что он не потянет такой поток. Поэтому пришлось искать другой АЦП. Номенклатура большая а доступных ФИГ.
Остановился на pcm1803. Частота BCLK 6 МГц. Хочу использовать с AT90USB. Тактовая частота у нее 16 МГц, а пропускная способность ЮСБ - 12Мбит, что с запасом - 24*92000.
Собственно вопрос - испльзовал ли кто AT90USB для таких целей, и потянел ли она?
После выбора pcm1803 давит жаба - очень желательно 192 кГц, но не могу найти доступную в Украине. Может кто знает ?
NOVY
Цитата(SancheSZ @ Mar 5 2008, 23:11) *
Помогите выбрать микроконтроллер для следующей задачи:

необходимо по сигналу готовности данных принимать принимать данные из 8-10 разрядного АЦП с частотой порядка 10 Мегавыборок в секунду и без какой-либо обработки отправлять их в комп по USB, где приложение будет тупо этот поток сбрасывать на диск. Таким образом необходимая скорость передачи данных 10-15 МБ\сек.

Сам приматриваюсь к Cypress FX2.

Возможно ли на нем реализовать подобный обмен?



Ситема: АЦП - FPGA - USB (68013).
Работаю в режиме AsincSlaveFifo. Данные от АЦП постоянно пишу в 68013. Использую 2 ENDPOINT , один на передачу, другой - на прием.
Прием - изменение параметров сбора. При получении прерывания сбор прекращаю установкой сигнала PKTEND, чтобы закончился пакет .
При приеме от 68013 по IRQ (знаю, что придет 4 байта), прекращаю передачу в 68013 ,изменяю адрес FIFO, читаю ....
Возникла проблема: посланный код получаю лишь по второй посылке.
Т.е первое чтение - предыдущее значение, второе - правильный код.
Может кто подскажет?
gumanoid
Осваиваю CY7C68013A
Требуется выдача/приём из/в ПК в FPGA со скоростью 60 МБит/с (либо выдача либо приём).
Насколько я понимаю необходимо сделать большой буфер на EP2 (4*1024) и слать туда данные, а на устройстве организовать SLAVE FIFO
Попробовал проект Archive.rar из http://electronix.ru/forum/index.php?showt...st&p=403476.
Насколько я понял там используется GPIF для приёма данных.
Хотелось бы сделать что-то подобное.
Для начала я хотел использовать пин IFCLK как выход - записываю в IFCONFIG 0xA3 - на пин IFCLK ничего не появляется - почему?

Konst_777
Цитата(gumanoid @ Jan 24 2011, 21:10) *
Осваиваю CY7C68013A
...
Для начала я хотел использовать пин IFCLK как выход - записываю в IFCONFIG 0xA3 - на пин IFCLK ничего не появляется - почему?

Проверьте не закорочен ли вывод IFCLK.
Силаев
Цитата(gumanoid @ Jan 24 2011, 21:10) *
Осваиваю CY7C68013A
Требуется выдача/приём из/в ПК в FPGA со скоростью 60 МБит/с (либо выдача либо приём).
Насколько я понимаю необходимо сделать большой буфер на EP2 (4*1024) и слать туда данные, а на устройстве организовать SLAVE FIFO
Попробовал проект Archive.rar из http://electronix.ru/forum/index.php?showt...st&p=403476.
Насколько я понял там используется GPIF для приёма данных.
Хотелось бы сделать что-то подобное.
Для начала я хотел использовать пин IFCLK как выход - записываю в IFCONFIG 0xA3 - на пин IFCLK ничего не появляется - почему?


При ваших скоростях подойдет любой буфер (любая конфигура буферов кроме EP2 (4*1024)). Слать туда-сюда надо 2 ендпоинта: один IN, другой OUT. Вам подойдет 5ая конфигурация буферов ФИФО из описания CY7C68013A.
Скачайте с сайта Cypress AN61345 и приложения к нему, там все подробно изложено и используется как-раз 5 конфигурация. В прошивке контроллера не забудьте правильные VID PID прописать, иначе примеры не работают со Streamer.exe.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.