Jump to content

    
Sign in to follow this  
SancheSZ

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

Recommended Posts

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Edited by SancheSZ

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

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

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

Share this post


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

 

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


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

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

 

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

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

Share this post


Link to post
Share on other sites
И на этом спасибо. Хотя я надеялся на более подробные ответы. :)

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

 

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

 

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

 

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

 

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

Edited by AndreyS

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

Edited by SancheSZ

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this