Jump to content

    

FT2232 + PGA + Delphi

Приветствую всех.

 

Помогите, плз, определится со скоростью обмена данными через FT2232 в связки с ПЛИСиной.

Есть устройство с альтерой. Его нужно подключить к компу с Delphi-программистом. Выбор пока пал на FT2232С, так как в нём есть параллельный интерфейс, который хорошо стыкуется с альтерой (и можно без проблем приобрести). Надо обеспечить перекачку данных с устройства в комп на максимально возможной скорости. Возник такой вопрос - какая получится скорость перекачки если использовать параллельный интерфейс и прогу, на основе D2XXUnit.pas? Может ли кто поделится фрагментом кода на Делфи, где идёт чтение массивов данных при максимально допустимой скорости обмена.

 

И ещё, может есть примеры работы через параллельный интерфейс FT2232 кроме тех, что на их сайте.

Share this post


Link to post
Share on other sites

Не более 1МБ/сек. Если нужно больше, посмотрите в сторону CY7C68013A от Cypress.

Share this post


Link to post
Share on other sites
Не более 1МБ/сек. Если нужно больше, посмотрите в сторону CY7C68013A от Cypress.

 

Спасибо за ответ. Уточните пожалуйста 1 Мегабайт/сек или 1 Мегабит/сек ?

 

Если FT2232L обеспечит 1 Мегабайт/сек, то мне этой скорости вполне хватит. Остаётся открытым вопрос о примерах на делфи, которые бы обеспечили такой поток.

Share this post


Link to post
Share on other sites
Спасибо за ответ. Уточните пожалуйста 1 Мегабайт/сек или 1 Мегабит/сек ?

 

Если FT2232L обеспечит 1 Мегабайт/сек, то мне этой скорости вполне хватит. Остаётся открытым вопрос о примерах на делфи, которые бы обеспечили такой поток.

1 Мегабайт/сек. В реальном времени без дополнительного буфера поток ~300кБайт/сек, если надо больше - понадобится дополнительный внешний буфер в несколько килобайт. Примеры были у FTDI, там ничего экстраординарного нет, скорости не те...

Share this post


Link to post
Share on other sites
1 Мегабайт/сек. В реальном времени без дополнительного буфера поток ~300кБайт/сек, если надо больше - понадобится дополнительный внешний буфер в несколько килобайт. Примеры были у FTDI, там ничего экстраординарного нет, скорости не те...

 

300кбайт/с это минимально необходимая мне скорость. Боюсь что всё будет на пределе, что может привести к глюкам. Буду пробовать FIFO режим, хотя, просмотревши примеры с сайта FTDI, с ходу не совсем понятно как программа на компе будет знать, что устройство опустошило TX буфер, что б передавать следующую порцию данных.

Share this post


Link to post
Share on other sites
1 Мегабайт/сек. В реальном времени без дополнительного буфера поток ~300кБайт/сек, если надо больше - понадобится дополнительный внешний буфер в несколько килобайт.

 

В описание на FT2232L написано про 1 Мегабайт/сек и про дополнительные буфера ни слова нет. Устройство может выдовать и больше чем 1 Мбайт/с, не вопрос. Тогда зачем дополнительный буфер и есть ли примеры реализации потоков больших 300кБ/с?

Share this post


Link to post
Share on other sites
В описание на FT2232L написано про 1 Мегабайт/сек и про дополнительные буфера ни слова нет. Устройство может выдовать и больше чем 1 Мбайт/с, не вопрос. Тогда зачем дополнительный буфер и есть ли примеры реализации потоков больших 300кБ/с?

В реальном времени, т.е. равномерно поступающие данные, на скорости 1МБ/сек не выдаст из-за задержек (миллисекунды) на шине USB, т.к. во время таких пауз складывать данные будет некуда вследствие маленького внутреннего буфера контроллера. На такой скорости, буфера контроллера хватит на 0.3мс, а задержка может выскочить на 1мс и данные в течение оставшихся 0.7мс будут утеряны, вот и получается, что 300кб/сек максимум для передачи потока. А в среднем, действительно, 1МБ/сек получается, т.к. потом догоняет. На эти грабли многие наступают ;)

Share this post


Link to post
Share on other sites
В реальном времени, т.е. равномерно поступающие данные, на скорости 1МБ/сек не выдаст из-за задержек (миллисекунды) на шине USB, т.к. во время таких пауз складывать данные будет некуда вследствие маленького внутреннего буфера контроллера. На такой скорости, буфера контроллера хватит на 0.3мс, а задержка может выскочить на 1мс и данные в течение оставшихся 0.7мс будут утеряны, вот и получается, что 300кб/сек максимум для передачи потока. А в среднем, действительно, 1МБ/сек получается, т.к. потом догоняет. На эти грабли многие наступают ;)

 

Спасибо за разъяснение. Теперь стало проясняться. Потеря данных у меня исключена, тут задача сохранить всё в целосности при передачи, посему изохронный режим не рассматриваю.

Получится что процессор за 0.3мс забъёт приёмный буффер (384 байта) и потом будет ждать его опустошения. И поток получится не больше 384байт в 1мс, т.е. 384000 байт/с. Это на передачу. А на приём буфер вообще 128 байт. Тогда поток на запись в процессор будет не более 128000 байт/с. что для задачи маловато будет :crying: . Может средний поток в 1МБ/с выходит, когда используют оба канала и на приём и на передачу, хотя следуя этим расчётам выходит 896000 байт/с. Или как тут правильно проводить калькуляцию? :wacko:

Share this post


Link to post
Share on other sites

Про дельфи ничего не скажу, однажды делал железку, которая состояла из PIC18F4550 и самописного драйвера во FreeBSD. Скорость обмена была что-то около полумегабайта в секунду. Думаю какой-нибудь вариант libUSB и под паскакаль есть, так что может быть в эту сторону покопать?

Share this post


Link to post
Share on other sites
Про дельфи ничего не скажу, однажды делал железку, которая состояла из PIC18F4550 и самописного драйвера во FreeBSD. Скорость обмена была что-то около полумегабайта в секунду. Думаю какой-нибудь вариант libUSB и под паскакаль есть, так что может быть в эту сторону покопать?

 

На PIC18F4550 уже задача выресовалась. Будет интелектуальным мостом RS485 - PC. Тут больших скоростей не нужно. А вот загонять поток с 250кГцового АЦП уже будет напряжно ИМХО. Паралельно копаю в направлении к CY7C68001. FIFO интерфейс очень удобный, почти то что нужно и саму микруху программить не нужно . Может у кого-то есть на дельфе примеры работы с CY7C68001, подкиньте, пожалуйста :)

Share this post


Link to post
Share on other sites
На PIC18F4550 уже задача выресовалась. Будет интелектуальным мостом RS485 - PC. Тут больших скоростей не нужно. А вот загонять поток с 250кГцового АЦП уже будет напряжно ИМХО. Паралельно копаю в направлении к CY7C68001. FIFO интерфейс очень удобный, почти то что нужно и саму микруху программить не нужно . Может у кого-то есть на дельфе примеры работы с CY7C68001, подкиньте, пожалуйста :)

Насчет ненужно программить, это Вы зря, её программить как раз нужно, и делать придется это внешнему железу. Берите лучше Cy7C68013A, он и жрет меньше (раза в 3) и функций у него больше (из-за встроенного 51) и программить в итоге легче :) Есть GPIF, так что интерфейс обмена можно любой реализовать :) По поводу дельфи ничего сказать не могу, т.к. всю жизнь пользую исключительно C/C++, библиотеки и примеры для Cypress'овских контроллеров есть только под C.

Share this post


Link to post
Share on other sites

А без разницы, Delphi или нет. Я в код на Паскале вставлял ассемблерные вставки с цепочечными операциями, и получал с параллельного порта, например, больше мегабайта в секунду, давно, правда, сейчас таких параллельных портов не найти.

Share this post


Link to post
Share on other sites

ОФФ, возможно, но почему же не найти? У меня на буке, например, скорость прошивки в AVREAL в несколько раз выше, нежели на старой маме. Я даже подумал, что новые все быстрее (хотя бук 2001г :) )

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this