|
|
  |
Ввод данных в компьютер., Бинарный поток. |
|
|
|
Aug 15 2012, 19:23
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 17-05-09
Из: Kiev
Пользователь №: 49 171

|
Дома более пристально изучил принятую структуру и оказалось что куда-то теряются четыре строчки. Т.е. принимаем четыре нормально, потом четыре пропуск, потом опять четыре принимаем и т.д. Длина строки 8192 бита. То есть 4*8192=32768 бит исчезают через раз. 73!
Сообщение отредактировал SNR - Aug 15 2012, 19:24
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 16 2012, 07:47
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(SNR @ Aug 15 2012, 22:23)  Дома более пристально изучил принятую структуру и оказалось что куда-то теряются четыре строчки... В void __fastcall TWriteThread::Execute() перед строками: UCHAR *inContext_1 = USBDevice->BulkInEndPt->BeginDataXfer(inBuf_1, BUFFER_LENGTH, &inOvLap_1); UCHAR *inContext_2 = USBDevice->BulkInEndPt->BeginDataXfer(inBuf_2, BUFFER_LENGTH, &inOvLap_2);добавьте строку: USBDevice->BulkInEndPt->SetXferSize(BUFFER_LENGTH);Иначе, по умолчанию XferSize=4096 байт и принимаемые данные поочередно пишутся в inBuf_1 и inBuf_2 по 4 килобайта.
|
|
|
|
|
Aug 16 2012, 20:20
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(SNR @ Aug 16 2012, 22:06)  Попутно возник вопрос по таймауту в функции WaitForXfer(&inOvLap_1,TIMEOUT) Если я правильно понял, это время в миллисекундах когда драйвер ждет прихода данных из-вне, и если данные не приходят, то ничего не отдает. Да правильно. Цитата(SNR @ Aug 16 2012, 22:06)  ...И чтоб записывать такие низкоскоростные потоки я так понимаю нужно менять и таймаут и размер буфера. Как это корректно подобрать или методом проб? Ну да, вообщем то, методом проб. Цитата(SNR @ Aug 16 2012, 22:06)  И корректно ли я закрываю работу ЮСБ устройтва или еще что-то надо дополнительно? Да, корректно. "Close( ) is called automatically by the ~CCyUSBDevice( ) destructor. It is also called automatically by the Open ( ) method, if a handle to the driver is already open."
|
|
|
|
|
Aug 17 2012, 08:37
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 17-05-09
Из: Kiev
Пользователь №: 49 171

|
День добрый! Вчера до поздней ночи тестил - на высоких скоростях проблем нет. А вот попробовал загнать CLK = 200 kHz, то есть данные защелкиваются с частотой 200/16= 12,5kHz , тут работает не совсем корректно. Естественно пока наберется 2 мб для записи , проходит длительное время и не понятно программа пишет или стоит ( т.е. тут надо какую-то придумывать визуальную фичу по которой бы видно было что все ок). Также выяснилось что после нажатия СТОП и закрытия программы она остается "висеть" и с помощью диспетчера не снимается. Только надо передернуть кабель. Повторюсь что это для низких частот.
Ну да ладно, думаю сделаю на форме чекбокс с помощю которого буду менять размер буфера на 10240 (выяснил экспериментально что пишет нормально, без разрывов при низких скоростях), но не получилось, при компиляции пишет что "невозможно изменить константу", менять из чекбокса хотел это: static const ULONG BUFFER_LENGTH = 1048576*2;
Спасибо!
|
|
|
|
|
Aug 17 2012, 09:53
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(SNR @ Aug 17 2012, 11:37)  ... при компиляции пишет что "невозможно изменить константу", менять из чекбокса хотел это: static const ULONG BUFFER_LENGTH = 1048576*2; Добавьте в Unit2.cpp переменную, например: static LONG blockLength = BUFFER_LENGTH;и замените BUFFER_LENGTH на blockLength во всех вызовах BeginDataXfer() и SetXferSize(). Константу TIMEOUT преобразуйте в переменную timeout, то есть объявление: static const ULONG TIMEOUT = 20000;замените на: static ULONG timeout = 20000;На форму добавьте два компонента класса TCSpinEdit (вкладка Samples панели компонентов CBuilder) для задания значений blockLength и timeout .
|
|
|
|
|
Aug 17 2012, 19:34
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 17-05-09
Из: Kiev
Пользователь №: 49 171

|
Все доделал, теперь работает отлично. Большое спасибо за помощь Konst_777. Я думаю Вы не будете против, если я сюда выкладу все материалы. Может кто-то тоже будет идти этим путем и пригодится. В архиве прошивка для CY7C68013A, драйвер, проект FPGA, и софт для записи на комп. Итак краткое описание: Запись бинарного последовательного потока в файл. FPGA + контроллер СY7C68013A. Основная задача FPGA из последовательного потока сделать параллельный 16-битный и по положительному фронту SLWR записать в CY7C68013A. Далее посредством CY7C68013A вводим в комп и записываем на жесткий диск. 73! С ув. Олег
|
|
|
|
|
Aug 28 2012, 20:58
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 17-05-09
Из: Kiev
Пользователь №: 49 171

|
В составе модема все работает отлично. Вот полученные изображения в эти выходные: один с спутника Метоп-А, другой с геостационара Электро-Л1 Олег.
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 28 2012, 09:41
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Если не секрет, какую максимальную скорость получили?
|
|
|
|
|
Sep 28 2012, 16:13
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(andrew smirnov @ Sep 28 2012, 12:41)  Если не секрет, какую максимальную скорость получили? Цитата(SNR @ Aug 16 2012, 22:06)  ...Тестировал на домашнем компьютере, на разных скоростях (СLK от 3 до 24.5 МГц)... То есть, для данного применения достаточной была скорость обмена 4 Мбайта в секунду.
|
|
|
|
|
Sep 28 2012, 16:51
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(Konst_777 @ Sep 28 2012, 20:13)  То есть, для данного применения достаточной была скорость обмена 4 Мбайта в секунду. Интересуюсь не из праздного любопытства - стоит задача по вводу сигнала как раз со спутникового модема, но за основу взят отладочный модуль ftdi um232h. Пока темный лес - я скорее программист, чем схемотехник... Не подскажете, какую микросхемку можно использовать для преобразования из последовательного кода в параллельный на 8 бит и формировать управляющий сигнал при заполнении регистра, чтобы передать их в um232h (сдвиговый регистр и делитель частоты, так сказать, в одном флаконе)? Хотелось бы выжать из этой микросхемки максимум...
Сообщение отредактировал andrew smirnov - Sep 28 2012, 16:55
|
|
|
|
|
Sep 29 2012, 07:01
|
Группа: Новичок
Сообщений: 8
Регистрация: 28-09-12
Пользователь №: 73 719

|
Цитата(_pv @ Sep 29 2012, 01:40)  у ft232h есть режимы последовательного интерфейса. а если скорости до 20-30МГц то можно тупо параллельным интерфесом сэмплить и клоки и данные на максимально частоте а потом программно разбирать. Да нет, хотелось бы получить значение, близкое к теоретическому максимуму для ft232h. Да и программно разбирать клоки и данные - не лучшее занятие. После ввода сигнал еще обрабатывать программно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|