Jump to content

    

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...

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

 

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

 

UPD:

 

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

 

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

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