Перейти к содержанию
    

День добрый,

 

Пытаемся адаптировать оный микрух под передачу данных с PC в режиме bulk. Пошли простейшим путем - взяли плату Digilent USB2, вывели ifclk наружу, сделали прошивку для работы в режиме slave FIFO (внешний клок, 8-разрядная шина, автоматическая передача данных с USB на шину в обход фирмвари, работаем только с EP2). Для управления этим делом привесили ПЛИС (генерирует клоки, управляющие сигналы и забирает данные).

 

Собственно проблема: наблюдаем зависание cy7c68013a в процессе передачи. Количество передаваемых пакетов варьируется от пары-тройки до сотен тысяч, потом - зависание. Судя по флагам, буфер FIFO при этом пустой.

Передачу организуем мелкой тестовой самописной софтинкой, использующей CyAPI из DVK. Передача производится блоками по 512 байт, проблема наблюдается вне зависимости от задержки между передачей отдельных блоков.

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

У меня подобное наблюдалось, когда я делал управление локальной шиной PLX9054 (PCI мост). Стояла не очень быстрая плисина и при небольшом изменение проекта PCI-плата работала то с зависаниями, то они вдруг исчезали (в симуляции все было отлично). Избавился от этого только после внесения в проект контроля задержек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

 

Да, проблема была в ПЛИС, теперь у нас новая беда :) Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Копать в сторону отказа от Slave FIFO и написания GPIF интерфейса.

 

 

p.s. Проверьте корректность работы флагов пустого и полного FIFO.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

 

Да, проблема была в ПЛИС, теперь у нас новая беда :) Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать?

А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ?

 

Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?

На уровне драйвера у Вас есть только одна возможность - задать таймаут для операции передачи данных настолько большим, чтобы неготовность ПЛИС принимать данные не приводила к возникновению таймаута EP2. Поскольку Вы так не делаете, то после возникновения таймаута Вам необходимо перезапустить EP2. Не уверен, что для этого достаточно перезапустить только драйвер (вызвать метод void CyUSBEndPoint::Abort(void) для EP2). Скорее всего придется перезапускать EP2 в FX2LP (проще всего перезапустить сам FX2LP вызвав bool CCyUSBDevice::Reset( void) ). Но, при перезапуске EP2 (драйвера и/или FX2LP) будут теряться данные.

 

Реальное управление потоком данных ПЭВМ --> ПЛИС предусматривает опрос готовности ПЛИС принять определенный объем данных, перед выдачей ПЛИС этого объема данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

Kaamos, у меня к Вам вопрос по прошивке для 68013. Как Вы ее разрабатывали? С помощью отладочной платы сайпрес? У меня плата Nexys от того же производителя (digilent). Имею возможность грузить .iic проект в ром, но вот отладку по шагам осуществить похоже невозможно(

Изменено пользователем Artkop

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день,

 

Мы работали не с отладочной платой сайпресс, а адаптировали готовую; по поводу отладочных плат, к сожалению, сказать ничего не могу :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но вот отладку по шагам осуществить похоже невозможно(

Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня вот тоже есть вопрос почти в тему:

 

Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? Или для заливки прошивки через USB к cy7c68013a обязательно не должно быть подключено внешней памяти, откуда бы она могла загрузиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу.

У FX2LP в 56-выводном корпусе нет последовательных портов.

 

 

У меня вот тоже есть вопрос почти в тему:

 

Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? ...

Можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У FX2LP в 56-выводном корпусе нет последовательных портов.

 

Тогда облом. Простыми средствами отладку не запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно.

А что для этого делать то надо?

Драйвер её не видит, потому что она уже имеет другой VID-PID.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...