Kaamos 0 1 августа, 2008 Опубликовано 1 августа, 2008 · Жалоба День добрый, Пытаемся адаптировать оный микрух под передачу данных с PC в режиме bulk. Пошли простейшим путем - взяли плату Digilent USB2, вывели ifclk наружу, сделали прошивку для работы в режиме slave FIFO (внешний клок, 8-разрядная шина, автоматическая передача данных с USB на шину в обход фирмвари, работаем только с EP2). Для управления этим делом привесили ПЛИС (генерирует клоки, управляющие сигналы и забирает данные). Собственно проблема: наблюдаем зависание cy7c68013a в процессе передачи. Количество передаваемых пакетов варьируется от пары-тройки до сотен тысяч, потом - зависание. Судя по флагам, буфер FIFO при этом пустой. Передачу организуем мелкой тестовой самописной софтинкой, использующей CyAPI из DVK. Передача производится блоками по 512 байт, проблема наблюдается вне зависимости от задержки между передачей отдельных блоков. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_Sm 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба У вас скорее всего проблемы в прошивке ПЛИС. Проверяйте соответствие временных задержек. У меня подобное наблюдалось, когда я делал управление локальной шиной PLX9054 (PCI мост). Стояла не очень быстрая плисина и при небольшом изменение проекта PCI-плата работала то с зависаниями, то они вдруг исчезали (в симуляции все было отлично). Избавился от этого только после внесения в проект контроля задержек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kaamos 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба Спасибо! Да, проблема была в ПЛИС, теперь у нас новая беда :) Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Renom 0 7 августа, 2008 Опубликовано 7 августа, 2008 · Жалоба Копать в сторону отказа от Slave FIFO и написания GPIF интерфейса. p.s. Проверьте корректность работы флагов пустого и полного FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kaamos 0 8 августа, 2008 Опубликовано 8 августа, 2008 · Жалоба Флаги работают корректно. В чем преимущество GPIF (в данном случае)? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 18 августа, 2008 Опубликовано 18 августа, 2008 · Жалоба Спасибо! Да, проблема была в ПЛИС, теперь у нас новая беда :) Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать? А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kaamos 0 19 августа, 2008 Опубликовано 19 августа, 2008 · Жалоба А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ? Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 19 августа, 2008 Опубликовано 19 августа, 2008 · Жалоба Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)? На уровне драйвера у Вас есть только одна возможность - задать таймаут для операции передачи данных настолько большим, чтобы неготовность ПЛИС принимать данные не приводила к возникновению таймаута EP2. Поскольку Вы так не делаете, то после возникновения таймаута Вам необходимо перезапустить EP2. Не уверен, что для этого достаточно перезапустить только драйвер (вызвать метод void CyUSBEndPoint::Abort(void) для EP2). Скорее всего придется перезапускать EP2 в FX2LP (проще всего перезапустить сам FX2LP вызвав bool CCyUSBDevice::Reset( void) ). Но, при перезапуске EP2 (драйвера и/или FX2LP) будут теряться данные. Реальное управление потоком данных ПЭВМ --> ПЛИС предусматривает опрос готовности ПЛИС принять определенный объем данных, перед выдачей ПЛИС этого объема данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artkop 0 1 сентября, 2008 Опубликовано 1 сентября, 2008 (изменено) · Жалоба Добрый день! Kaamos, у меня к Вам вопрос по прошивке для 68013. Как Вы ее разрабатывали? С помощью отладочной платы сайпрес? У меня плата Nexys от того же производителя (digilent). Имею возможность грузить .iic проект в ром, но вот отладку по шагам осуществить похоже невозможно( Изменено 1 сентября, 2008 пользователем Artkop Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kaamos 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба Добрый день, Мы работали не с отладочной платой сайпресс, а адаптировали готовую; по поводу отладочных плат, к сожалению, сказать ничего не могу :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба но вот отладку по шагам осуществить похоже невозможно( Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slog 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба У меня вот тоже есть вопрос почти в тему: Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? Или для заливки прошивки через USB к cy7c68013a обязательно не должно быть подключено внешней памяти, откуда бы она могла загрузиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Konst_777 0 3 сентября, 2008 Опубликовано 3 сентября, 2008 · Жалоба Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу. У FX2LP в 56-выводном корпусе нет последовательных портов. У меня вот тоже есть вопрос почти в тему: Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? ... Можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 4 сентября, 2008 Опубликовано 4 сентября, 2008 · Жалоба У FX2LP в 56-выводном корпусе нет последовательных портов. Тогда облом. Простыми средствами отладку не запустить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slog 0 4 сентября, 2008 Опубликовано 4 сентября, 2008 · Жалоба Можно. А что для этого делать то надо? Драйвер её не видит, потому что она уже имеет другой VID-PID. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться