Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CY7C68013A ПОДВИСАЕТ
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
alevnew
Суть проблемы:
Имеем CY7C68013A в режиме SLAVEFIFO, EP2 - 2x, AUTOOUT, EP4 - 2x AUTOIN, EP6 - 4x AUTOIN.
Indexed mode. Шина 16 бит. Синхронный режим.
Это все привязано к FPGA с управляющим процем и памятью.
Проц через FPGA управляет потоками данных между CY и FPGA.
Итак через EP2 устройство принимает небольшие пакеты данных, через EP4 отправляет пакеты, все пакеты защищены контрольными суммами.
Через EP6 устройство отправляет на комп данные, размер несколько мегабайт.
Драйвер CyUSB.sys, использую функции IOCTL.

Ситуция такая:
1. передаем малые пакеты по EP2 и EP4 - передаем поочередно туда-сюда, долго, "часами" - все работает.
2. Теперь начинаем передавть мегабайты по EP6. Если передаем разом 32 мегабайта, они проходят в норме, без единой ошибки.
Но вот после этой успешной передачи у меня проходит в направлении к девайсу через EP2 пакет, девайс отвечает пакетом через EP4.
И вот этот пакет EP4 уже НЕ ПРОХОДИТ. После этого не проходит уже совсем ничего ни по одной EP!
Девайс можно отключить от компа (питание у него свое), подключить снова, как устройство он будет видется, но уже ни одна EP2,4,6 не работает!
Все EP висят намертво!.
3. Та же ситуация, но дробим пакет 32 мегабайта на 2 по 16 МБ и добавляем к каждому по 2 байта, чтоб проходил PKTEND.
Шлем пакеты по всем EP ПООЧЕРЕДНО (то есть дожидаемся, пока прошли все данные по одной EP, потом переключаемся на другую).
Все работает ОК, очень долго тестировал непрерывно, без сбоев.
4. Все вроде бы ОК в пункте 3, но хотелось бы, пока идут пакеты через EP6 общаться еще и по Ep2+EP4.
Делаю так - в моменты, когда EP6 ставит флаг FULL, переключаюсь на другие EP, и считываю и отправляю пакетик данных, потом снова переключаюсь на Ep6.
Это работает некоторое время, но рано или поздно все EP на CY виснут, причет точно также, как описано в п. 2.
Причем иногда достаточно сократить размер пакета, передаваемого через EP6 на 1 килобайт, как вроде все начинает работать до некоторого момента, потом все снова виснет.

Уже голову сломал. Сделал задержки по нескольку тактов между сигналами WR (RD) и преключениями адреса EP - как мертвому припарки.
Уже так сделал - сигнал WR (RD) становится неактивным, ждем 8 тактов IFCLK, переключаем адрес, ждем 8 тактов, производим операции с выбранной EP - все равно виснет. А вот если дождаться окончания передачи всех данных по текущей EP, тогда все работает.
kimstik
Посмотри эрраты на FX2.
У них с FIFO стробированием были парочка тонких моментов.
alevnew
Цитата(kimstik @ Mar 17 2009, 19:15) *
Посмотри эрраты на FX2.
У них с FIFO стробированием были парочка тонких моментов.

Да я скачл эррату с их сайта - написано No errata items. biggrin.gif
Может есть ссылка какая еще ?
kimstik
Цитата(alevnew @ Mar 17 2009, 17:22) *
Да я скачл эррату с их сайта - написано No errata items. biggrin.gif
Может есть ссылка какая еще ?


Или это аппликуха была. Помню что нарвался на подобное.
alevnew
В общем после почти недельной борьбы все-таки удалось одержать победу над сим девайсом !
Долго не мог понять толком закономерность подвисания - то вроде часами работает, а то виснет с первого раза.
В конце концов заметил, что если передавать "сгусток" байт 0xFF, то практически всегда подвисает, а если 0 - то никогда.
Пришел к выводу, что это "ground bounce" - звон земли, проложил дополнительную землю между FPGA и CY7C68013A, и все нормализовалось.
(Плату на опытный образец сделал 2-хстороннюю, вот и вылезла проблема).
Кстати, по поводу подвисания при передаче 0xFF вроде где-то мелькали сообщения, видимо та же проблема.
Так что вот так...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.