Jump to content

    
Sign in to follow this  
billidean

EZ-USB FX3 в режиме ФИФО

Recommended Posts

Добрый день всем.

 

Пытаюсь запустить обмен ПЛИС с EZ-USB FX3 в режиме синхронного Slave FIFO.

На данный момент добился того, что ПЛИС читает данные из этого ФИФО...но только одни ноли )

 

Очень нужна помощь опытного пользователя данных типов USB-мостов.

 

В-общем, я опишу, что и как я сделал, а вы, если в теме, подскажите (плзз), что я делаю не так

 

1. Из фирменного архива AN65974.zip ввзял примерный проект для настрой GPIF II "GPIFII_Designer_sync_SlaveFIFO.cydsn" и доработал его

следующим образом

post-59925-1510242819_thumb.png

 

Все флаги имеют активный уровень 1, а инициализацию 0.

 

2. Полученный после компиляции файл cyfxgpif2config.h копирую в папку с фирменным примером "SlaveFifoSync" из того же архива.

Что там где изменять в проекте под Еклипсом, я не знаю...поэтому просто компилю его.

 

3. Результирующий файл SlaveFifoSync.img из папки "Release" заливаю в EEPROM платы EZ-USB FX3.

 

4. Для ПЛИСки написал управление ногами GPIF ФИФО. По циелограмме работы требуется сначал почитать одно слово из ФИФО,

проанализировать его и уже потом продолжить чтение остальных слов из ФИФО.

Когда подключал плату с ПЛИС к плате USB моста, у меня кончились проводнички, поэтому я вынужден был ограничиться

подключением только двух линий ДАННЫХ от ФИФО, поэтому анализировать по SignalTap'у можно только два разряда cy_fd[6] и cy_fd[7].

В-общем, запускаю SignslTap на ПЛИСке, подаю данные на USB-мост, и вижу такую картину

 

post-59925-1510242827_thumb.png

 

post-59925-1510242823_thumb.png

 

...читаются НОЛИ...

 

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

Тактирование обмена с ФИФО ведет ПЛИС с чатотой около 25 кГц (системную тактовую ПЛИС 50 МГц поделил на 2000...для опытов).

 

То, что данные вычитываются из ФИФО - это факт. Если данные из ФИФО не вычитываются (если ПЛИС не подключать к ФИФО),

то после нескольких подач данных с компа мост вешается намертво и со стороны компа выдаются ошибки. А с моей прошитой ПЛИСкой мост не зависает при многократных подачах данных.

 

 

Кто что может сказать о правильности моих действий?

Share this post


Link to post
Share on other sites

Как чип маркирован ?

На какой линии идет стробирование читаемых байтов ?

Почему CS снимается, он же должен сниматься после чтения пакета из буфера ?

Для упрощения попробуйте сперва запустить асинхронный режим.

ps

Аппаратные линии задания номера FIFO выставляются правильно ?

psps

синхронный режим предполагает кроме стробов RD-WR наличие тактов CLK, которые подаются на FX.

Share this post


Link to post
Share on other sites
Как чип маркирован ?

На какой линии идет стробирование читаемых байтов ?

Почему CS снимается, он же должен сниматься после чтения пакета из буфера ?

Для упрощения попробуйте сперва запустить асинхронный режим.

ps

Аппаратные линии задания номера FIFO выставляются правильно ?

psps

синхронный режим предполагает кроме стробов RD-WR наличие тактов CLK, которые подаются на FX.

Маркировка чипа - CYUSB3014-BZX (или 8ZX - очень плохо читается) CYP 623831

Стробирование по линии PCLK, у чипа она настроена как вход (без этих тактов даже флаг С не изменяется)

CS настроен на активный уровень 0...пробовал его чуть ранее выставлять в 0 и не снимать вообще...никакой разницы.

Номер ФИФО выставлен в "11" (т.е. 3) (с другими номерами никакой реакции чипа не наблюдается)

CLK как писал выше подается на PCLK (25 кГц)

 

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

 

Очень большие подозрения, что нужно что-то сделать с процессором чипа, но что там и как...очень грустно лезть в эти изучения, да и времени уйдет не один месяц (

Очень надеялся, что будет, как с FTDI...настроил в FT_PROG галочки, зашил и забыл про этот чип...только и пиши программы для устройств, использующих его.

 

Асинхронный режим попробую...но он мне не нужен, в дальнейшем нужна максимально возможная скорость обмена.

Share this post


Link to post
Share on other sites

Я использую FX2 в асинхронном режиме (CY7C68013).

Если есть режим запустите чип в "стандартном" режиме (без GPIF) и асинхронном (стробирование только RD/WR, без CLK)

-------

Помню, на CLK есть ограничение по частоте снизу (и сверху естественно). И нижний предел - не 25 кГц.

Проверьте по DS.

А где на красненькой диаграмме эта линия ? (PCLK)

-------

По воспоминаниям "полетов" с FX2 надо очень внимательно проверять исходник FW.

А именно - конфигурационный файл, в котором есть #def определяющие алгоритм работы чипа.

Одно неловкое движение, и .... :)

Share this post


Link to post
Share on other sites
Я использую FX2 в асинхронном режиме (CY7C68013).

Если есть режим запустите чип в "стандартном" режиме (без GPIF) и асинхронном (стробирование только RD/WR, без CLK)

-------

Помню, на CLK есть ограничение по частоте снизу (и сверху естественно). И нижний предел - не 25 кГц.

Проверьте по DS.

А где на красненькой диаграмме эта линия ? (PCLK)

-------

По воспоминаниям "полетов" с FX2 надо очень внимательно проверять исходник FW.

А именно - конфигурационный файл, в котором есть #def определяющие алгоритм работы чипа.

Одно неловкое движение, и .... :)

Да, кстати про нижний предел тактовой...он 5 МГц! Но я пробовал и на 10-50 МГц - результат примерно тот же.

Про #def'ы спасибо, посмотрю.

На диаграмме тактирование идет самой тактовой PCLK.

Share this post


Link to post
Share on other sites

Вот диаграмма для синхронного чтения CY7. Подобная дб и для Вашего чипа.

CY7.jpg

ps - это "стандартный" интерфейс, без GPIF.

Если что не идет, я бы запустил в этом режиме, а затем при тойже прошивке FPGA

перешел на GPIF. Далее - доправлять-изменять напильником до требуемой формы.

 

Share this post


Link to post
Share on other sites
Вот диаграмма для синхронного чтения CY7. Подобная дб и для Вашего чипа.

ps - это "стандартный" интерфейс, без GPIF.

Если что не идет, я бы запустил в этом режиме, а затем при тойже прошивке FPGA

перешел на GPIF. Далее - доправлять-изменять напильником до требуемой формы.

 

Был очень занят, некогда было пока этим заниматься...

Я не совсем понял, что значит без GPIF? Можете подробнее сказать?

post-59925-1510500864_thumb.png

глядя на эту картинку из даташита, без GPIF никак не получится.

Share this post


Link to post
Share on other sites

FX2 настройка дает возможность использования fifo как отдельного/автономного узла,

со стандартными управляющими линиями (я в этом смысле, "без GPIF"), или же в режиме конфигурирования GPIF.

Посмотрел даташит FX3.

Да, FX3 только GPIF. Но насколько понял, его можно настроить и на стандартное fifo как в FX2

(001-52136_CYUSB301X_CYUSB201X_EZ-USB_R_FX3_SUPERSPEED_USB_CONTROLLER.pdf)

slave_fifo.png

Эта схема один-в-один какую я реализовывал на FX2.

Асихнронный режим в FX3 есть. Если не надо максимизировать пропускную способность, можно использовать его.

А если надо - запустить/отладится на асинхронном, перейти на синхронный.

По крайней мере диаграмма проще и нет ограничения на частоту стробов RD "снизу".

В FX3 это Figure 15/16. Asynchronous Slave FIFO Read/Write Mode.

Проверьте соответствие в FX3 и ПЛИС активных Rais/Fail.

Share this post


Link to post
Share on other sites

На днях попробую асинхронный режим (времени вообще нет).

Но в чем меня убивает текущий синхронный режим, так это то, что флаги-то от ФИФО идут какими и должны быть при чтении. Когда данные кончаются, т.е. все вычитаны, то они возвращаются в исходное состояние...но данные = 0.

Share this post


Link to post
Share on other sites
.... Когда данные кончаются, т.е. все вычитаны, то они возвращаются в исходное состояние...но данные = 0.

те Вы записываете в fifo, скажем, 10 байт, и "флаговая" линия "фифо пусто" отрабатывает после 10 чтений ?

--

Если испытания проводите на малой тактовой - то это не соответствует требованиям DS (не менее 5 Мег)

Если на допустимой - 5 и более - то чем смотрите аппаратную осцилограмму ?. Там для синх. режима,

обратите внимание на тактирующие стробы, их Raise-Fail, и их привязку на выдаваемые на шину данные,

их задержку относительно CLK. Вообще на лог. анализаторе должно быть сразу видно, где собака порылась.

В качестве данных в фифо заливайте "бегущую единицу". Так будет хорошо виден момент перевыставления

данных по линиям FX3.

 

Если работу надо сделать-сдать, и скорости асинхронного режима будет достаточно - делайте на нем.

По крайней мере выполните работу и отладите цепочку <софт_PC> <HW/софт_FW3> <HW-"софт" ПЛИС> < XXX >

Если это будет работать - допиливайте до синхронного.

А так может оказаться, что ошибка в софте на PC, а "виновата невестка" :)

А какой лог.анализатор (HW) Вы используете ?

 

 

 

 

Share this post


Link to post
Share on other sites
те Вы записываете в fifo, скажем, 10 байт, и "флаговая" линия "фифо пусто" отрабатывает после 10 чтений ?

Да, все так и получается...данные типа вычитываются, флаги меняются как надо...но самих данных нет...

 

Попробовал асинхр. режим...толку ноль.

 

Здесь самая беда в том, что я почти не понимаю проекты для МК cypress, которые пишутся на эклипсе.

Я не понимаю, где и что надо изменить или добавить, чтобы перевести чип в режим работы СлейвФИФО без вмешательства МК, т.е. в режим AUTO (где-то вычитал, что такое можно).

 

Огромная просьба поделиться прошивкой для чипа cypress...я просто не могу ничего понять (((

 

Блинн...........

Что вообще надо этой фигне сделать?????

 

Все примеры перепробовал...

 

Про всякие там "длительность управляющих сигналов, синфазность и т.п." рассуждать нет смысла, т.к. в доках все делается просто, на CS подается 0, на OE подается 0, на RD подается 0. На остальные подается 1...всё, чтение сделано.

 

С другой стороны, если бы данные с компа не записывались в буферы чипа, то флаги не устанавливались бы...и т.д.

 

ПЛЗЗЗ!!! Памагите люди добрые!!!

Share this post


Link to post
Share on other sites
. . .

Попробовал асинхр. режим...толку ноль.

. . .

Поделиться прошивкой не могу, тк. "немое". Да и сделана она в Keil/FX2 и привязана на inf-конфигурацию, опятьже "немою".

Отличается от примера только парой строк в ассемблерно файле прошивки и-или в опциях поекта.

Пороюсь в архивах, цитаты выложу (для работы в асинхр. режиме).

----

Повторяю свой вопрос, чем смотрите линии данных ? (осцилограф, или что)

Проверьте настройки полярностей, в частности OE.

Если есть возможность - вместо ПЛИС прикрутите на кипариса эмулятор ПЛИСы в виде любого процессора,

который позволяет делать отладку (это если нет нормальных средств чтоб нормально аппаратно мониторить - осцилограф и лог.анализатор). Это всего-то 10 линий подключить (всю шину данных не надо, достаточно 1-4 линии).

Запустить "с лету" такую систему можно если, как предлагается у кипариса, взять 2 ихних кита и сделать кольцевой канал fifo.

Если китов нет (я стартовал без них), то самое оптимальное - это

- Консольное win32 утилита на базе ихней библиотеки

(за основу можно взять ихний исходник, не помню чего, но назывался cydesc)

- собственно fifo

- процессор "клиент/сервер" для fifo.

 

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

#include <windows.h>
#include <stdio.h>
#include "cyapi.h"
#include <conio.h>
#include <time.h>

int main()
{
    CCyUSBDevice *USBDevice;
    USB_DEVICE_DESCRIPTOR descr;
    USBDevice = new CCyUSBDevice(NULL);  

    printf("device count = %d \n",USBDevice->DeviceCount());
    for (int i=0; i < USBDevice->DeviceCount(); i++)
    {
        if (USBDevice->Open(i))
        {
            USBDevice->GetDeviceDescriptor(&descr);
            printf("bLength \t\t 0x%02x\n",descr.bLength);
. . . . .
            printf("iSerialNumber \t\t 0x%02x\n",descr.iSerialNumber);
            printf("bNumConfigurations \t 0x%02x\n\n",descr.bNumConfigurations);
            USBDevice->Close();
        }
        else  
         {    printf("unable to open device\n");  
            exit(-1);
         }
    }

  USBDevice->Close();

OVERLAPPED outOvLap, inOvLap;
CCyUSBDevice  *USBDevice1 = new  CCyUSBDevice(NULL);
int n_devices = USBDevice1->DeviceCount();

if ( n_devices <= 0 ) 
{    printf("\nINFO:  Unable to open device CYPRESS;\n");  
    exit(-1);
}

outOvLap.hEvent  = CreateEvent(NULL, false, false, "CYUSB_OUT");
inOvLap.hEvent   = CreateEvent(NULL, false, false, "CYUSB_IN");

static unsigned char inBuf[100000];
LONG  length = 65000; //128;
ZeroMemory(inBuf, sizeof(inBuf));

clock_t start, stop;
double  duration;

while( !kbhit() ) 
{
    length = 65000;
    start = clock( );    // метка времени старта цикла опроса
    UCHAR  *inContext = USBDevice1->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);
    USBDevice1->BulkInEndPt->WaitForXfer(&inOvLap,5000);
    USBDevice1->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext);
    stop = clock( );    // метка времени стопа
    duration = (double)(stop - start) / CLOCKS_PER_SEC;
    printf("\nLen = %lu PacketInterval = %02.2f sec", length, duration);
    display_hex( inBuf, 100, "=== Packet In =====");
    ZeroMemory(inBuf, sizeof(inBuf));
    Beep(6000, 10); 
}
CloseHandle(outOvLap.hEvent);
CloseHandle(inOvLap.hEvent);
exit(0);
} // main

 

Update:

В оригинале было так (переключение через установку в опциях компилятора - #defaine)

#ifdef FREE
IFCONFIG = 0x03; // IFCLK Source external (i.e.) connected to MPEG_CLK minimum should be 5 MHz
                 // Synchronous Mode, Free Running MPEG_CLK,  MPEG_VALID is used as SLWR strobe
                 // FX2LP in SLAVE FIFO Mode
SYNCDELAY;
#endif

#ifdef GATED
IFCONFIG = 0xCB; // IFCLK Source internal (i.e.) Gated MPEG_CLK,  MPEG_CLK is connected to SLWR
                 // FX2LP in SLAVE FIFO Mode
SYNCDELAY;
#endif

 

Чтоб заработало (асинхронный режим) - переделал так (и убрал переключатель)

IFCONFIG = 0xCB; // IFCLK Source internal (i.e.) Gated MPEG_CLK,  MPEG_CLK is connected to SLWR
                 // FX2LP in SLAVE FIFO Mode
SYNCDELAY;

// стробирующие сигналы с активным отрицательным уровнем

// FIFOPINPOLAR = 0x04; // SLWR is configured as active HIGH : Can be changed to 0x00 for SLWR to be active Low
FIFOPINPOLAR = 0x00;

Share this post


Link to post
Share on other sites
А кто-то еще на параллельной шине висит на другом CS?

Нет, работа будет только с одним девайсом. Я пробовал ставить CS=0 на постоянку.

 

Повторяю свой вопрос, чем смотрите линии данных ? (осцилограф, или что)

Это SignalTap, инструмент отладки прям внутри ПЛИС, встроенный отладчик (анализатор внутренних сигналов проекта ПЛИС).

 

Вот код тестилки, которую я использовал

Похожий код у меня тоже используется в программе для компа. Но для выдачи данных я использую также и программу ControlCenter от кипариса.

 

Да я бы понял, если бы вообще не работало ничего, значит косяк СИЛЬНЫЙ в кодах. Но здесь же, когда ПЛИС вычитывает ФИФО, то оно после чтения данных опустошается, количество считываемых данных, после которого ФИФО становится пустым, совпадает с количеством подаваемых с компа данных.

 

В оригинале было так (переключение через установку в опциях компилятора - #defaine)...

Чтоб заработало (асинхронный режим) - переделал так (и убрал переключатель)

Это вы в каких кодах переделывали? Наверное для FX2?

Для FX3 примеры идут под Эклипс. Пробовал найти в этих проектах похожие слова...нашел только такое:

post-59925-1511196109_thumb.png

т.е. типа нет в этих проектах таких макросов...

 

 

post-59925-1511196977_thumb.png

Вот автомат состояний FX3 из одного из примеров, который я использовал (из программы GPIF II Designer).

 

Там видно условие перехода в режим чтения...прям как у меня сделано...

Share this post


Link to post
Share on other sites

Сегодня немного продвинулся...получил пару битиков "правильных" данных )))

Но в том-то и дело, что всего лишь пару битов из слова:

Вот, какие данные я подавал:

post-59925-1511204163_thumb.png

 

И вот, какая циклограмма получилась:

post-59925-1511204166_thumb.png

 

Сейчас у меня проводками подключены только 4 разряда данных (DQ0..DQ3) и они на картинке cy_fd7..cy_fd4.

 

4-й и 7-й биты при активации кипариса падают в 0 и не дышат...а два других что-то кажут, но тоже пока не понятно...как-то неуверенно это делают.

 

Бедаааа.....

 

Мне бы кто подарил прошивочку бодрую/рабочую на этот cypress :crying:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this