Перейти к содержанию
    

прием данных из АЦП в ПК по USB

Помогите выбрать микроконтроллер для следующей задачи:

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://www.kernelchip.ru/WoodmanUSB.php сделан похоже именно на кайпрессе....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понадобятся ли какие-либо дополнительные микросхемы (например буферная память, вспомогательные контроллеры и тд) или все можно сделать на одном FX2?

 

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

Изменено пользователем SancheSZ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну во-первых максимальная попускная способность USB 2.0 в High Speed режиме составляет 480 Мбит\сек, так что 100 не должно быть проблемой.

 

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

 

Интересует мнение людей, имевших дело с данным контроллером, а так же любые пратические советы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понадобятся ли какие-либо дополнительные микросхемы (например буферная память, вспомогательные контроллеры и тд) или все можно сделать на одном FX2?

 

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

Сам по себе FX2LP в режиме Slave FIFO позволяет достичь скорости обмена до 40 МБайт/сек. Проблемы возникнут, если операционная система компьютера начнет переключать задачи. То есть, необходима буферная память, чтобы не терять данные во время переключения задач. Размер буферной памяти расчитывается исходя из необходимой скорости обмена и времени на вероятное переключение задач.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне не понятно следующе: допустим мое устройство заполняет буфер FIFIO. После заполнения буфера (так ведь?) происходит отправка данных по USB. Во время этого процесса буфер получается заполнен и не доступен для моего усройства? Ведь отправка данных занимает некотрое время.... И потом, получается что пропускня способность USB (480 Mbit/s) не постоянна во времени, т.к. между передачами будут аузы, пока заполняется буфер, и чтоб обеспечить такую скорость нужно чтобы иковая скорость превышала 480.. Это так, размышления просто мне конечно максимальная скорость не нужна, но хоелось бы понять общие принципы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне не понятно следующе: допустим мое устройство заполняет буфер FIFIO. После заполнения буфера (так ведь?) происходит отправка данных по USB. Во время этого процесса буфер получается заполнен и не доступен для моего усройства? Ведь отправка данных занимает некотрое время.... И потом, получается что пропускня способность USB (480 Mbit/s) не постоянна во времени, т.к. между передачами будут аузы, пока заполняется буфер, и чтоб обеспечить такую скорость нужно чтобы иковая скорость превышала 480.. Это так, размышления просто мне конечно максимальная скорость не нужна, но хоелось бы понять общие принципы.

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

 

В режиме Synchronous Slave FIFO FX2LP позволяет обеспечить скорость чтения/записи из/в буферы FIFO до 96 МБайт/сек. Так, что задержек со стороны контроллера нет. Но, чтобы достичь максимально возможной скорости USB Bulk-обмена (53 МБайт/сек) нужно, чтобы хост-контроллер USB, расположенный в ПЭВМ, работал так, чтобы не было простоев на шине USB. Правильно говорить о том, как долго хост-контроллер может обеспечить максимальную скорость обмена. Это зависит от:

  • объема данных, которыми нужно обмениваться;
  • качества драйвера хост-контроллера, обеспечиваемого операционной системой;
  • качества драйвера для устройства USB;
  • объема памяти, установленной в компьютер;
  • объема и организации дисковой памяти;
  • количества задач и потоков, работающих одновременно;
  • качества работы приложения, которое обеспечивает обмен данными;
  • и т.д. и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас используются подобные системы на основе CY7C68013A и внешней FIFO. Скорость приема данных составляет более 40 Мбайт/с - это с доработанным драйвером, с родным будет где-то в районе ~20.

Так что никаких проблем в этом нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас используются подобные системы на основе CY7C68013A и внешней FIFO. Скорость приема данных составляет более 40 Мбайт/с - это с доработанным драйвером, с родным будет где-то в районе ~20.

Так что никаких проблем в этом нет.

Пожалуйста, напишите подробнее:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

На все вопросы ответить не смогу - не я это устройство разрабатывал, но что знаю, то напишу:

FIFO 512Кбайт (IDT 32>16 бит - для двухканального АЦП);

Объем данных зависит от режима работы - если скорость обработки не меньше скорости приема, то ограничений в принципе нет. Либо зависит от размера выделенной памяти;

Тип передачи - кажется Bulk, другие режимы просто не позволят качать данные с приемлимой скоростью.

Насчет скоростей обмена не тестировал, но разработчик гарантировал минимум 40МБайт/с.

Целостность данных важна.

Перерабатывался родной сайпресовский драйвер ezusb.sys. Цель доработки - увеличение скорости обмена (в первую очередь минимальной).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли в режиме Slave FIFO организовать такой обмен:

 

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

 

Если что-то подобное реализуемо, то это синхронный или асинхроный Slave FIFO? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На все вопросы ответить не смогу - не я это устройство разрабатывал, но что знаю, то напишу...

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

 

Можно ли в режиме Slave FIFO организовать такой обмен...

Это зависит от применяемого АЦП и от возможностей Вашего устройства. Написали бы Вы подробнее, что за АЦП Вы собираетесь применять и, что Вы понимаете под "устройством". Тогда и мой ответ будет более предметным. Одно могу сказать точно уже сейчас: асинхроный Slave FIFO медленнее GPIF. А с помощью GPIF можно организовать обмен с, практически, любым АЦП и без дополнительных устройств.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Это зависит от применяемого АЦП и от возможностей Вашего устройства. Написали бы Вы подробнее, что за АЦП Вы собираетесь применять и, что Вы понимаете под "устройством". Тогда и мой ответ будет более предметным. Одно могу сказать точно уже сейчас: асинхроный Slave FIFO медленнее GPIF. А с помощью GPIF можно организовать обмен с, практически, любым АЦП и без дополнительных устройств.

 

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

 

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

 

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

 

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

Изменено пользователем AndreyS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Konst_777, опишу проект подробнее.

 

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

 

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

 

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

 

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

Изменено пользователем SancheSZ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...