Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ft232h в режиме синхронного FIFO
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Среды разработки - обсуждаем САПРы
billidean
Привет всем.

Делаю управление ПЛИСкой со стороны ПК с применением 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.

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

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

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

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

...но ПК не видит данных в буфере FT232H...
billidean
Ахахахах...как часто бывает, причина - плохой контакт/непропай sm.gif

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

Сегодня к плате FTDI подцепил еще одну ПЛИСку с проектом АЛЯ-осциллограф и увидел, что сигнал WR# не приходит на FTDI, хотя сигналтап на ПЛИСке-отправителе присуствовал...
Не знаю, может порт вылетел или еще чего, но особо выяснять не стал, взял перекинул линию на другой порт...и всё стало норм.

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

UPD:

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

Т.е. получилось так, что для прозвонки контакта между штекером разъема и проводом хватало, а вот для нормальной передачи короткого импульса - не хватало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.