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

    

ft232h в режиме синхронного FIFO

Привет всем.

 

Делаю управление ПЛИСкой со стороны ПК с применением FT232H в режиме синхронного FIFO. Данные могут быть от одного до 1000 байт.

В сторону ПЛИС данные идут стабильно, ПЛИС их читает, все нормально.

Но вот обратно из ПЛИС не получается выдать ни одного байта ((

 

Вроде все делаю стандартно:

- проверяю TX# чтобы был 0

- ставлю WR#=0 и на каждом такте CLK (от FTDI) подставляю байты

- по окончании данных ставлю WR#=1

 

...Пока пытаюсь передать 4 байта.

 

На ПК код такой:

    ftStatus = FT_Write(ftHandle, byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent);
    if( (ftStatus != FT_OK) || (dwNumBytesSent != dwNumBytesToSend) ) // Did the write-command execute OK?
    {
        mdebug("Error in FT_Write");
        return -1; // Exit with error
    }

        while(1)
        {
            qApp->processEvents();

//            ftStatus = FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
            ftStatus = FT_GetQueueStatus(ftHandle,&RxBytes);
            if( (ftStatus != FT_OK) ) // Did the FT_GetStatus-command execute OK?
            {
                mdebug("Error in FT_GetStatus");
                return -1; // Exit with error
            }

            mdebug("RxBytes=" + QString::number(RxBytes) + "\tTxBytes=" + QString::number(TxBytes) + "\tEventDWord=" + QString::number(EventDWord));
            Sleep(1000);

            // проверяем наличие данных в приемном буфере микросхемы
            if (RxBytes > 0)
            {
                ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived); // по этой команде считываем данные
                                                                              // из микросхемы, RxBuffer содержит сами данные,
                                                                              // RxBytes — количество доступных для чтения данных,
                                                                              // BytesReceived — число принятых данных
                if (ftStatus == !FT_OK)
                {
                    mdebug("Error in FT_GetStatus");
                    return -1; // Exit with error
                }
                else
                {
                    mdebug("Data is OK");
                    return 0;
                }
            }
        }

 

Сигналтапом в ПЛИСке вижу, что сигналы TX# и WR# имеют запланированные уровни. Но прога на ПК висит в цикле и пишет, что RxBytes = 0.

 

Все связи прозвонил...уже не знаю, к чему придраться...

 

Кто работал с такими микросхемами, подскажите плз, что может быть не так у меня.

 

Буду очень благодарен за рабочие проектики по подобной теме.

 

post-59925-1508089480_thumb.png

Вот картина на сигналтапе, здесь я пытаюсь выдать 12 байт 0xFF (не спрашивайте зачем...так надо)

Видно, что циклограмма "рабочая"...

 

...но ПК не видит данных в буфере FT232H...

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


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

Ахахахах...как часто бывает, причина - плохой контакт/непропай :)

 

Получилось так, что соединив платы ПЛИС и FTDI я прозвонил все линии между платами (с обратной стороны разъемов)...и делал это раза три...

 

Сегодня к плате FTDI подцепил еще одну ПЛИСку с проектом АЛЯ-осциллограф и увидел, что сигнал WR# не приходит на FTDI, хотя сигналтап на ПЛИСке-отправителе присуствовал...

Не знаю, может порт вылетел или еще чего, но особо выяснять не стал, взял перекинул линию на другой порт...и всё стало норм.

 

Всем спасибо за советы и удачи ))

 

UPD:

 

Позже перепаялся обратно, все стало нормально.

 

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация