|
|
  |
Ввод данных в компьютер., Бинарный поток. |
|
|
|
Sep 29 2012, 08:23
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(andrew smirnov @ Sep 29 2012, 14:01)  Да нет, хотелось бы получить значение, близкое к теоретическому максимуму для ft232h. Да и программно разбирать клоки и данные - не лучшее занятие. После ввода сигнал еще обрабатывать программно. а что же это за последовательный интерфейс такой на ~300мбит? если сделать что-то вроде Код #define CLK_BIT 0x01 #define DATA_BIT 0x02
int bitCnt = 0; int b1, b2 = 0; char data[100500]; while(1){ b1 = GetByteFromFT232H(); if ((b1 & (b1 ^ b2)) & CLK_BIT){ if (b1 & DATA_BIT) data[bitCnt>>3] |= (1 << (bitCnt & 0x07)); // (1 << (7 - (bitCnt & 0x07))) если байт вносят ногами вперед. bitCnt++; } b2 = b1; } по сравнению с обработкой данных не сильно много процессорного времени займёт. хотя по скорости в режиме FT1248 или MPSSE быстрее получится. FT1248 вроде как spi slave можно заставить работать до 30МГц. в MPSSE только как мастер. Цитата Не подскажете, какую микросхемку можно использовать для преобразования из последовательного кода в параллельный на 8 бит и формировать управляющий сигнал при заполнении регистра. мелкую cpld
|
|
|
|
|
Sep 29 2012, 10:47
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(_pv @ Sep 29 2012, 12:23)  а что же это за последовательный интерфейс такой на ~300мбит? если сделать что-то вроде Код #define CLK_BIT 0x01 #define DATA_BIT 0x02
int bitCnt = 0; int b1, b2 = 0; char data[100500]; while(1){ b1 = GetByteFromFT232H(); if ((b1 & (b1 ^ b2)) & CLK_BIT){ if (b1 & DATA_BIT) data[bitCnt>>3] |= (1 << (bitCnt & 0x07)); // (1 << (7 - (bitCnt & 0x07))) если байт вносят ногами вперед. bitCnt++; } b2 = b1; } по сравнению с обработкой данных не сильно много процессорного времени займёт. хотя по скорости в режиме FT1248 или MPSSE быстрее получится. FT1248 вроде как spi slave можно заставить работать до 30МГц. в MPSSE только как мастер. мелкую cpldнужно знать частоту следования клоков, как я понял. а это величина не постоянная и заранее не известная. последовательный интерфейс на 300 мбит? есть стандарт спутниковой связи DVB-S2 - там скорость примерно 30МГц*5 (размерность модуляции - АФМ32) - т.е., за вычетом декодера (например 9/10), скорость потока составит порядка 135 МБит/с. Демодулятор выдает в последовательном виде. Перспективный стандарт DVB NS3 обеспечивает скорость передачи до 365 МБит/с. Хотелось бы быть к нему готовым  . Ну, а пока хватит и заявленных 200 МБит/с, если получится. а насчет CPLD - я думал, что простой логики должно хватить? или я не прав? вопрос только в скорострельности...
Сообщение отредактировал andrew smirnov - Sep 29 2012, 10:16
|
|
|
|
|
Sep 29 2012, 17:10
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(andrew smirnov @ Sep 29 2012, 17:47)  нужно знать частоту следования клоков, как я понял. а это величина не постоянная и заранее не известная. нет, ((b1 & (b1 ^ b2)) & CLK_BIT) выделяет положительный фронт и по нему защёлкивает данные. Цитата(andrew smirnov @ Sep 29 2012, 17:47)  Перспективный стандарт DVB NS3 обеспечивает скорость передачи до 365 МБит/с. Хотелось бы быть к нему готовым . Ну, а пока хватит и заявленных 200 МБит/с, если получится. я к тому что это, скорее всего, не cmos 3.3V на таких скоростях. и 365Мбит/с с ft232h пожалуй не получится. Цитата(andrew smirnov @ Sep 29 2012, 17:47)  а насчет CPLD - я думал, что простой логики должно хватить? или я не прав? вопрос только в скорострельности... хватит, только понадобится сдвиговый регистр, счётчик на 8, пара триггеров, может инвертор, даже такую простую логику как правило проще в одном корпусе мелкой cpld иметь. а скорострельности логики какой-нибудь LVC/AUC серии должно хватить.
|
|
|
|
|
Oct 5 2012, 07:44
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Так, просьба не пинать - схемотехника была когда-то давно в институте. Начнем с начала. Есть желание ввести сигнал (за скоростью пока не гонимся, дальше разберемся) от источника в PC через USB. Сигнал представляет собой данные в последовательном виде, непрерывные. Данные идут в сопровождении тактовой. Итого имеем две линии. Сигнал в линии представляет собой последовательность прямоугольных импульсов. Уровень "0" - где-то в районе 0 Вольт, уровень "1" - где-то 5 Вольт (вроде TTL, если я ничего не путаю). Есть отладочный модуль FTDI - FT2232H mini module (есть еще одноканальный вариант - FT232H). Сигнал и тактовая подаются по кабелю длиной до 5 метров (пока реально используем 1,5 метра). На выходе источника сигнала - прямоугольные импульсы. На выходе кабеля - импульсы теряют свою форму, дробятся. Плюс появляется "двойник" сигнала - что-то похожее на сигнал, сдвинутое по времени. Сделан вывод о необходимости согласования нагрузки на выходе линии - включили между сигнальной жилой и землей сопротивление порядка 50 Ом. Сигнал на выходе кабеля стал похож на исходный. Теперь пытаемся подключить это на вход FT2232H в режиме синхронного FIFO по следующей схеме (почти так, как советовали выше): сигнальные жилы такта и данных - на входы данных первого канал (биты 0 и 1 буфера); сигнал записи берем от встроенного генератора на 60 МГц. Землю от входных линий цепляем на землю платы. Плата по питаю в режиме Bus-powered. Ничего не получается. В схемотехнике не силен, поэтому, если кто-то может ткнуть, где почитать или просто подсказать, как подключить - помогите, пожалуйста.
|
|
|
|
|
Oct 5 2012, 09:50
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(andrew smirnov @ Oct 5 2012, 13:44)  Начнем с начала ... Теперь пытаемся подключить это на вход FT2232H в режиме синхронного FIFO по следующей схеме (почти так, как советовали выше): сигнальные жилы такта и данных - на входы данных первого канал (биты 0 и 1 буфера); сигнал записи берем от встроенного генератора на 60 МГц. Ничего не получается. самого главного - тактовую частоту приходящих данных не сказали. ft[2]232 не может в усб непрерывно передать поток 60МБайт/с. посмотрите на сигнал TXE#, он показывает когда у ft внутренний буфер закончился. поделите 60МГц пополам тогда возможно получится, при этом, частота последовательного интерфейса должна быть еще более чем в два раза меньше. либо попробуйте режим FT1248 - это как раз spi slave. до 30МГц. а по хорошему надо взять какой-нибудь быстрый сдвиговый регистр, вроде 74[F/AHC][594/595], и из пары 74ххх74 или еще одного сдвигового регистра и пары лог вентилей сделать счётчик на 8 чтобы он на один такт CLKOUT дергал WR по заполнению сдвигового регистра. ну или мелкую cpld.
|
|
|
|
|
Oct 5 2012, 10:11
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(_pv @ Oct 5 2012, 13:50)  самого главного - тактовую частоту приходящих данных не сказали. ft[2]232 не может в усб непрерывно передать поток 60МБайт/с. посмотрите на сигнал TXE#, он показывает когда у ft внутренний буфер закончился. поделите 60МГц пополам тогда возможно получится, при этом, частота последовательного интерфейса должна быть еще более чем в два раза меньше. либо попробуйте режим FT1248 - это как раз spi slave. до 30МГц. а по хорошему надо взять какой-нибудь быстрый сдвиговый регистр, вроде 74[F/AHC][594/595], и из пары 74ххх74 или еще одного сдвигового регистра и пары лог вентилей сделать счётчик на 8 чтобы он на один такт CLKOUT дергал WR по заполнению сдвигового регистра. ну или мелкую cpld. за микруху спасибо, поищем. вопрос в другом - правильно ли я подключаю (нужно ли еще где-нибудь что-нибудь навесить, емкость, например, сопротивление) с точки зрения схемотехники, чтобы заработало. а то модуль не всегда определяется системой. тактовая частота приходящих данных задается на источнике сигнала (аппаратный имитатор). скорость может быть от 32 кбит/с до 10 мбит/с. есть еще вариант на 40 мбит/с, но пока даже 1 мбит/с не получили. не могу понять, как ее подключать. в даташитах ничего не нашел...
Сообщение отредактировал andrew smirnov - Oct 5 2012, 10:12
|
|
|
|
|
Oct 5 2012, 10:35
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(andrew smirnov @ Oct 5 2012, 16:11)  вопрос в другом - правильно ли я подключаю (нужно ли еще где-нибудь что-нибудь навесить, емкость, например, сопротивление) с точки зрения схемотехники, чтобы заработало. а то модуль не всегда определяется системой. тактовая частота приходящих данных задается на источнике сигнала (аппаратный имитатор). скорость может быть от 32 кбит/с до 10 мбит/с. если это готовый модуль всё что надо там уже есть. а подключаете неправильно, нельзя в синхронном режиме гнать непрерывно поток 60МБайт/с и уж тем более таким образом: Цитата сигнал записи берем от встроенного генератора на 60 МГц для начала попробуйте в асинхронном режиме фифо, клоки последовательно интерфейса на WR, только с нужной полярностью, данные на D0, до 8 МГц должно работать. каждый бит - один байт. зы про режим FT1248 наврал, никакой это не spi slave, ему там команды еще надо в поток данных подмешивать. а режим Fast Serial Interface, хоть и slave и до 50МГц, требует старт/стоповых битов. то есть чесловеческого режима spi slave у ft232h похоже нету.
|
|
|
|
|
Oct 5 2012, 11:56
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(_pv @ Oct 5 2012, 14:35)  ... клоки последовательно интерфейса на WR, только с нужной полярностью ... что Вы имеете ввиду под нужной полярностью?  есть жила и земля (обмотка). Подаю клоки с жилы
|
|
|
|
|
Oct 5 2012, 13:23
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(andrew smirnov @ Oct 5 2012, 17:56)  что Вы имеете ввиду под нужной полярностью?  есть жила и земля (обмотка). Подаю клоки с жилы не электричекую, а в смысле логических уровней. в асинхронном режиме фифо, данные защелкиваются по отрицательному фронту на WR, то есть по переходу 1 -> 0. в Вашем последовательном интерфейсе они скорее всего в этот момент как раз изменяются на линии данных. то есть если не инвертировать клоки данные будут захватываться в момент перехода от одного бита к другому, что не есть хорошо.
|
|
|
|
|
Oct 6 2012, 07:24
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(_pv @ Oct 5 2012, 17:23)  не электричекую, а в смысле логических уровней. в асинхронном режиме фифо, данные защелкиваются по отрицательному фронту на WR, то есть по переходу 1 -> 0. в Вашем последовательном интерфейсе они скорее всего в этот момент как раз изменяются на линии данных. то есть если не инвертировать клоки данные будут захватываться в момент перехода от одного бита к другому, что не есть хорошо. а, в этом смысле. да нет, есть возможность инвертировать сигналы тактов и данных. работаем в режиме инверсии тактов. данные - прямые.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|