billidean 0 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Добрый день всем. Пытаюсь запустить обмен ПЛИС с EZ-USB FX3 в режиме синхронного Slave FIFO. На данный момент добился того, что ПЛИС читает данные из этого ФИФО...но только одни ноли ) Очень нужна помощь опытного пользователя данных типов USB-мостов. В-общем, я опишу, что и как я сделал, а вы, если в теме, подскажите (плзз), что я делаю не так 1. Из фирменного архива AN65974.zip ввзял примерный проект для настрой GPIF II "GPIFII_Designer_sync_SlaveFIFO.cydsn" и доработал его следующим образом Все флаги имеют активный уровень 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-мост, и вижу такую картину ...читаются НОЛИ... По картинке вижу что сначала вычитывается одно слово, затем пауза в один такт, затем читается все остальное. Тактирование обмена с ФИФО ведет ПЛИС с чатотой около 25 кГц (системную тактовую ПЛИС 50 МГц поделил на 2000...для опытов). То, что данные вычитываются из ФИФО - это факт. Если данные из ФИФО не вычитываются (если ПЛИС не подключать к ФИФО), то после нескольких подач данных с компа мост вешается намертво и со стороны компа выдаются ошибки. А с моей прошитой ПЛИСкой мост не зависает при многократных подачах данных. Кто что может сказать о правильности моих действий? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Как чип маркирован ? На какой линии идет стробирование читаемых байтов ? Почему CS снимается, он же должен сниматься после чтения пакета из буфера ? Для упрощения попробуйте сперва запустить асинхронный режим. ps Аппаратные линии задания номера FIFO выставляются правильно ? psps синхронный режим предполагает кроме стробов RD-WR наличие тактов CLK, которые подаются на FX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Как чип маркирован ? На какой линии идет стробирование читаемых байтов ? Почему 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 галочки, зашил и забыл про этот чип...только и пиши программы для устройств, использующих его. Асинхронный режим попробую...но он мне не нужен, в дальнейшем нужна максимально возможная скорость обмена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Я использую FX2 в асинхронном режиме (CY7C68013). Если есть режим запустите чип в "стандартном" режиме (без GPIF) и асинхронном (стробирование только RD/WR, без CLK) ------- Помню, на CLK есть ограничение по частоте снизу (и сверху естественно). И нижний предел - не 25 кГц. Проверьте по DS. А где на красненькой диаграмме эта линия ? (PCLK) ------- По воспоминаниям "полетов" с FX2 надо очень внимательно проверять исходник FW. А именно - конфигурационный файл, в котором есть #def определяющие алгоритм работы чипа. Одно неловкое движение, и .... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Я использую FX2 в асинхронном режиме (CY7C68013). Если есть режим запустите чип в "стандартном" режиме (без GPIF) и асинхронном (стробирование только RD/WR, без CLK) ------- Помню, на CLK есть ограничение по частоте снизу (и сверху естественно). И нижний предел - не 25 кГц. Проверьте по DS. А где на красненькой диаграмме эта линия ? (PCLK) ------- По воспоминаниям "полетов" с FX2 надо очень внимательно проверять исходник FW. А именно - конфигурационный файл, в котором есть #def определяющие алгоритм работы чипа. Одно неловкое движение, и .... :) Да, кстати про нижний предел тактовой...он 5 МГц! Но я пробовал и на 10-50 МГц - результат примерно тот же. Про #def'ы спасибо, посмотрю. На диаграмме тактирование идет самой тактовой PCLK. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 9 ноября, 2017 Опубликовано 9 ноября, 2017 · Жалоба Вот диаграмма для синхронного чтения CY7. Подобная дб и для Вашего чипа. ps - это "стандартный" интерфейс, без GPIF. Если что не идет, я бы запустил в этом режиме, а затем при тойже прошивке FPGA перешел на GPIF. Далее - доправлять-изменять напильником до требуемой формы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 12 ноября, 2017 Опубликовано 12 ноября, 2017 · Жалоба Вот диаграмма для синхронного чтения CY7. Подобная дб и для Вашего чипа. ps - это "стандартный" интерфейс, без GPIF. Если что не идет, я бы запустил в этом режиме, а затем при тойже прошивке FPGA перешел на GPIF. Далее - доправлять-изменять напильником до требуемой формы. Был очень занят, некогда было пока этим заниматься... Я не совсем понял, что значит без GPIF? Можете подробнее сказать? глядя на эту картинку из даташита, без GPIF никак не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 12 ноября, 2017 Опубликовано 12 ноября, 2017 · Жалоба FX2 настройка дает возможность использования fifo как отдельного/автономного узла, со стандартными управляющими линиями (я в этом смысле, "без GPIF"), или же в режиме конфигурирования GPIF. Посмотрел даташит FX3. Да, FX3 только GPIF. Но насколько понял, его можно настроить и на стандартное fifo как в FX2 (001-52136_CYUSB301X_CYUSB201X_EZ-USB_R_FX3_SUPERSPEED_USB_CONTROLLER.pdf) Эта схема один-в-один какую я реализовывал на FX2. Асихнронный режим в FX3 есть. Если не надо максимизировать пропускную способность, можно использовать его. А если надо - запустить/отладится на асинхронном, перейти на синхронный. По крайней мере диаграмма проще и нет ограничения на частоту стробов RD "снизу". В FX3 это Figure 15/16. Asynchronous Slave FIFO Read/Write Mode. Проверьте соответствие в FX3 и ПЛИС активных Rais/Fail. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 13 ноября, 2017 Опубликовано 13 ноября, 2017 · Жалоба На днях попробую асинхронный режим (времени вообще нет). Но в чем меня убивает текущий синхронный режим, так это то, что флаги-то от ФИФО идут какими и должны быть при чтении. Когда данные кончаются, т.е. все вычитаны, то они возвращаются в исходное состояние...но данные = 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 14 ноября, 2017 Опубликовано 14 ноября, 2017 · Жалоба .... Когда данные кончаются, т.е. все вычитаны, то они возвращаются в исходное состояние...но данные = 0. те Вы записываете в fifo, скажем, 10 байт, и "флаговая" линия "фифо пусто" отрабатывает после 10 чтений ? -- Если испытания проводите на малой тактовой - то это не соответствует требованиям DS (не менее 5 Мег) Если на допустимой - 5 и более - то чем смотрите аппаратную осцилограмму ?. Там для синх. режима, обратите внимание на тактирующие стробы, их Raise-Fail, и их привязку на выдаваемые на шину данные, их задержку относительно CLK. Вообще на лог. анализаторе должно быть сразу видно, где собака порылась. В качестве данных в фифо заливайте "бегущую единицу". Так будет хорошо виден момент перевыставления данных по линиям FX3. Если работу надо сделать-сдать, и скорости асинхронного режима будет достаточно - делайте на нем. По крайней мере выполните работу и отладите цепочку <софт_PC> <HW/софт_FW3> <HW-"софт" ПЛИС> < XXX > Если это будет работать - допиливайте до синхронного. А так может оказаться, что ошибка в софте на PC, а "виновата невестка" :) А какой лог.анализатор (HW) Вы используете ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 19 ноября, 2017 Опубликовано 19 ноября, 2017 · Жалоба те Вы записываете в fifo, скажем, 10 байт, и "флаговая" линия "фифо пусто" отрабатывает после 10 чтений ? Да, все так и получается...данные типа вычитываются, флаги меняются как надо...но самих данных нет... Попробовал асинхр. режим...толку ноль. Здесь самая беда в том, что я почти не понимаю проекты для МК cypress, которые пишутся на эклипсе. Я не понимаю, где и что надо изменить или добавить, чтобы перевести чип в режим работы СлейвФИФО без вмешательства МК, т.е. в режим AUTO (где-то вычитал, что такое можно). Огромная просьба поделиться прошивкой для чипа cypress...я просто не могу ничего понять ((( Блинн........... Что вообще надо этой фигне сделать????? Все примеры перепробовал... Про всякие там "длительность управляющих сигналов, синфазность и т.п." рассуждать нет смысла, т.к. в доках все делается просто, на CS подается 0, на OE подается 0, на RD подается 0. На остальные подается 1...всё, чтение сделано. С другой стороны, если бы данные с компа не записывались в буферы чипа, то флаги не устанавливались бы...и т.д. ПЛЗЗЗ!!! Памагите люди добрые!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 19 ноября, 2017 Опубликовано 19 ноября, 2017 · Жалоба А кто-то еще на параллельной шине висит на другом CS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 20 ноября, 2017 Опубликовано 20 ноября, 2017 · Жалоба . . . Попробовал асинхр. режим...толку ноль. . . . Поделиться прошивкой не могу, тк. "немое". Да и сделана она в 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 20 ноября, 2017 Опубликовано 20 ноября, 2017 · Жалоба А кто-то еще на параллельной шине висит на другом CS? Нет, работа будет только с одним девайсом. Я пробовал ставить CS=0 на постоянку. Повторяю свой вопрос, чем смотрите линии данных ? (осцилограф, или что) Это SignalTap, инструмент отладки прям внутри ПЛИС, встроенный отладчик (анализатор внутренних сигналов проекта ПЛИС). Вот код тестилки, которую я использовал Похожий код у меня тоже используется в программе для компа. Но для выдачи данных я использую также и программу ControlCenter от кипариса. Да я бы понял, если бы вообще не работало ничего, значит косяк СИЛЬНЫЙ в кодах. Но здесь же, когда ПЛИС вычитывает ФИФО, то оно после чтения данных опустошается, количество считываемых данных, после которого ФИФО становится пустым, совпадает с количеством подаваемых с компа данных. В оригинале было так (переключение через установку в опциях компилятора - #defaine)... Чтоб заработало (асинхронный режим) - переделал так (и убрал переключатель) Это вы в каких кодах переделывали? Наверное для FX2? Для FX3 примеры идут под Эклипс. Пробовал найти в этих проектах похожие слова...нашел только такое: т.е. типа нет в этих проектах таких макросов... Вот автомат состояний FX3 из одного из примеров, который я использовал (из программы GPIF II Designer). Там видно условие перехода в режим чтения...прям как у меня сделано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 20 ноября, 2017 Опубликовано 20 ноября, 2017 · Жалоба Сегодня немного продвинулся...получил пару битиков "правильных" данных ))) Но в том-то и дело, что всего лишь пару битов из слова: Вот, какие данные я подавал: И вот, какая циклограмма получилась: Сейчас у меня проводками подключены только 4 разряда данных (DQ0..DQ3) и они на картинке cy_fd7..cy_fd4. 4-й и 7-й биты при активации кипариса падают в 0 и не дышат...а два других что-то кажут, но тоже пока не понятно...как-то неуверенно это делают. Бедаааа..... Мне бы кто подарил прошивочку бодрую/рабочую на этот cypress :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться