Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с cy7c68013a
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Kaamos
День добрый,

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

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

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

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


p.s. Проверьте корректность работы флагов пустого и полного FIFO.
Kaamos
Флаги работают корректно. В чем преимущество GPIF (в данном случае)?

Спасибо!
Konst_777
Цитата(Kaamos @ Aug 6 2008, 10:42) *
Спасибо!

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

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


Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?
Konst_777
Цитата(Kaamos @ Aug 19 2008, 12:56) *
Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?

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

Реальное управление потоком данных ПЭВМ --> ПЛИС предусматривает опрос готовности ПЛИС принять определенный объем данных, перед выдачей ПЛИС этого объема данных.
Artkop
Добрый день!
Kaamos, у меня к Вам вопрос по прошивке для 68013. Как Вы ее разрабатывали? С помощью отладочной платы сайпрес? У меня плата Nexys от того же производителя (digilent). Имею возможность грузить .iic проект в ром, но вот отладку по шагам осуществить похоже невозможно(
Kaamos
Добрый день,

Мы работали не с отладочной платой сайпресс, а адаптировали готовую; по поводу отладочных плат, к сожалению, сказать ничего не могу sad.gif
vmp
Цитата(Artkop @ Sep 1 2008, 16:01) *
но вот отладку по шагам осуществить похоже невозможно(

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

Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? Или для заливки прошивки через USB к cy7c68013a обязательно не должно быть подключено внешней памяти, откуда бы она могла загрузиться.
Konst_777
Цитата(vmp @ Sep 3 2008, 17:09) *
Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу.

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


Цитата(slog @ Sep 3 2008, 19:06) *
У меня вот тоже есть вопрос почти в тему:

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

Можно.
vmp
Цитата(Konst_777 @ Sep 3 2008, 20:39) *
У FX2LP в 56-выводном корпусе нет последовательных портов.


Тогда облом. Простыми средствами отладку не запустить.
slog
Цитата(Konst_777 @ Sep 3 2008, 20:39) *
Можно.

А что для этого делать то надо?
Драйвер её не видит, потому что она уже имеет другой VID-PID.
Artkop
Цитата(slog @ Sep 4 2008, 11:43) *
А что для этого делать то надо?
Драйвер её не видит, потому что она уже имеет другой VID-PID.

Я делал так - взял .inf файл драйвера, прописал туда новый pid/vid (который в микросхеме теперь) и драйвер поставился и сайпресовская консоль плату подцепила.

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

У меня еще проблема - при загрузке .hex проекта в RAM и резета плата не опознается и видится как pid0000/vid0000.. В чем проблема может быть? Вроде как из рам прошивка должна работать?
Serg_Sm
В прошивке при инициализации поставьте:
EZUSB_Discon(TRUE); // инициируется переподключение
Никакого ресета не нужно.
Плата стартует автоматом после загрузки hex-файла и переподключается с новыми vid/pid.

Если не работает (pid0000/vid0000) - значит в прошивке ошибка.
Kaamos
Проверьте дескрипторы... И да, почему-то в сайпресовском дефолтном фреймворке EZUSB_Discon() вроде как не вызывается....
Artkop
C дескрипторами все ок, та же прошивка, зашитая в ром, работает и определяется как надо. Возможно что то с адресацией не то, я в этом еще не очень разобрался.. И да, посмотрю EZUSB_Discon(), спасибо!
slog
Еще раз подниму тему.
Есть CY7C64713, Это вроде примерно то же что и 68013. Она грузится из подключенной к ней I2C EEPROM. Надо не отключая EEPROM залить в неё новую прошивку через USB. Что-то не получается. В драйвере менял две строчки с VID-PID на те, что контроллер имеет после загрузки. Драйвер не устанавливается, винда говорит что там отсутствуют сведения об оборудовании, консоль контроллер не видит. Если отключить EEPROMку то все работает (с VID-PID по умолчанию). Это вообще возможно, залить прошивку через USB после того как контроллер загрузился из EEPROM ? Нет ли в нем каких-то блокировок на этот случай.
Konst_777
Цитата(slog @ Sep 16 2008, 17:04) *
Еще раз подниму тему.
Есть CY7C64713, Это вроде примерно то же что и 68013. Она грузится из подключенной к ней I2C EEPROM. Надо не отключая EEPROM залить в неё новую прошивку через USB. Что-то не получается. В драйвере менял две строчки с VID-PID на те, что контроллер имеет после загрузки. Драйвер не устанавливается, винда говорит что там отсутствуют сведения об оборудовании, консоль контроллер не видит...

Скорее всего есть ошибки в *.inf файле. Если выложите Ваши *.inf и *.hex файлы, то могу проверить на своем модуле.


Цитата(slog @ Sep 16 2008, 17:04) *
... Это вообще возможно, залить прошивку через USB после того как контроллер загрузился из EEPROM ? Нет ли в нем каких-то блокировок на этот случай.

Ну, у Вас же получилось. smile.gif И это стандартный путь для загрузки программы монитора от Cypress для последующей отладки firmware через последовательный порт. Так что, никаких блокировок быть не может.
Проблема может возникнуть лишь в случае, когда в EEPROM записана сбойная программа и Windows перестает видеть устройство USB. Да и то, только если не предусмотрена возможность отключать EEPROM. Например, с помощью установки джампера.
slog
Цитата(Konst_777 @ Sep 16 2008, 21:30) *
Скорее всего есть ошибки в *.inf файле. Если выложите Ваши *.inf и *.hex файлы, то могу проверить на своем модуле.

Я выложу только .inf файл, потому что проблемы с ним. Мой .hex работает, но до него дело не доходит, я не могу его загрузить потому что консоль не видит контроллера.
Еще раз попробую обьяснить в чем проблема: если я отключаю EEPROM от CY7C64713 то со стандартным драйвером винда видит моё устройство как Cypress EZ-USB FX2LP - EEPROM missing , консоль работает, свой хекс могу загрузить, всё работает. Если я подключаю EEPROM то контроллер после включения питания грузит из него свою прошивку, она мне не известна, винда теперь его видит как USB-HID совместимое устройство и использует свой драйвер. Теперь контроллер имеет VID 4242 PID 0200. Я в цайпрессовском драйвере исправляю пару строчек на этот пид. То что было заккоментировал, изменил VID-PID на нужный.
Вот как это теперь выглядит.

[Cypress]
; Cypress FX2LP default ID
;%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&PID_8613
%VID_4242&PID_0200.DeviceDesc%=CyUsb, USB\VID_4242&PID_0200

[Strings]
PROVIDER="Cypress"
MFGNAME="Cypress"
CYUSB_INSTALL="Cypress Generic USB Driver Installation Disk"
;VID_04B4&PID_8613.DeviceDesc="Cypress EZ-USB FX2LP - EEPROM missing"
VID_4242&PID_0200.DeviceDesc="My USB Example DevicYES"
CyUsb.SvcDesc="Cypress Generic USB Driver"

И теперь я пытаюсь заставить винду обновить драйвер для HID-устройства, тычу её в этот исправленный .inf она говорит что в этом файле отстутствуют сведения об оборудовании, драйвер не ставит, консоль контроллер не видит, ничего залить в него не могу. Help прочитал уже много раз, не помогает. Возможно проблема не в .inf а в том что я что-то не правильно делаю. А что не так ну ни как не пойму.
Konst_777
Если Вы хотите просто перепрограммировать EEPROM, то достаточно будет отключить EEPROM до подключения питания к CY7C64713. Затем подключить питание к контроллеру и затем подключить EEPROM. После подключения к шине USB Windows будет видеть Ваше устройство как "Cypress EZ-USB FX2LP EEPROM missing". С помощью CyConsole можно "залить" в EEPROM Вашу прошивку (файл *.iic).

Вопрос в том, что означает "отключить/подключить EEPROM" для Вашего модуля. Для моего модуля это означает установить/снять джампер XJ1 (см. "EEPROM.gif").

Если же Вы хотите, с помощью CyConsole, сохранить содержимое EEPROM на диске перед записью своего файла *.iic, то, действительно, нужно заменить драйвер Windows для HID устройства на драйвер "CyUSB.sys". Возможно Ваши неприятности связаны с использованием предыдущих версий "CyUSB.sys". Я использовал "CyUSB.sys" из SuiteUSB.NET 2.0. Вначале попробовал заменить драйвер для USB Debug Adapter от SiLabs. Получилось. Тогда решил усложнить задачу. Загрузил в контроллер C8051F340 в CP2201EB от SiLabs их же пример для HID устройства (\USB_HID\BlinkyExample). Только VID и PID заменил на Ваши. Тоже получилось. С помощью Adobe Captivate 3 записал процесс установки. В архиве "to_sloq.rar" есть две папки. Папка "SuiteUSB.NET 2.0" содержит "CyUSB.sys" и отредактированный "CyUSB.inf". В папке "to_sloq_demo" запустите "to_sloq_demo.htm" - увидите процесс замены драйвера на моем компьютере.
slog
To Konst_777
Спасибо за помощь, попробую по вашему. Я не хочу перезаписывать существующую прошивку во внешней пзу. Я хочу просто её заменить в ОЗУ контроллера на свою, во время подключения устройства к компу, и то не всегда. Родная прошивка должна остаться не тронутой. "отключить/подключить EEPROM" означает поднимание и обратная припайка ноги SDA EEPROM. Это очень не удобно, я хочу чтобы чтобы эта операция не нужна была.


YES! Заработала консоль с твоим драйвером!
Винда перестала ругаться на отсутствие сведений об оборудовании. Стала устанавливать драйвер. Но тоже получилось не с первого раза. Оказывается она находит два подходящих драйвера, свой HID и Cypress. И по умолчанию ставит свой. Чтобы поставить от Cypress надо его специально выбрать ручками, это не сразу очевидно.

Ну спасибо! У меня это и не получалось.


Теперь будет следующий этап smile.gif
Хочется сделать так, чтобы при подключении моего устройства драйвер от Cypress автоматически грузил в 68013 мой .hex файл. Я пока до этого не дошел еще. Это ведь возможно сделать?
Konst_777
Цитата(slog @ Sep 18 2008, 10:12) *
...Я не хочу перезаписывать существующую прошивку во внешней пзу. Я хочу просто её заменить в ОЗУ контроллера на свою, во время подключения устройства к компу, и то не всегда...
...Хочется сделать так, чтобы при подключении моего устройства драйвер от Cypress автоматически грузил в 68013 мой .hex файл...

Если загрузку firmware возложить на драйвер, то он будет делать это всегда. До тех пор пока Вы не деинсталируете или не переустановите драйвер. Каким должен быть *.inf файл, чтобы драйвер "CYUSB.SYS" при загрузке выполнял скрипт, описано в подразделе "Execute a script at start-up" раздела "Modifying CyUSB.INF" в "Cypress CyUSB.sys Programmer's Reference" (CyUSB.chm). Если возникнут трудности, напишите какие VID и PID у Вашего firmware. Тогда я выложу отредактированный "CyUSB.inf".

На мой взгляд, загрузка firmware с помощью приложения является более удобной. Во-первых, это просто, если приложение написано на C# (см. описание класса CyFX2Device в "Cypress CyUSB.NET DLL Programmer's Reference" (CyUsb.NET.chm)). Во-вторых, для восстановления обмена после сбоя можно использовать этот же метод. В третьих, можно использовать такие же VID и PID. В четвертых, каждое приложение может загружать свое firmware.

Независимо от способа загрузки. Важно помнить, что firmware при старте должно переподключаться к шине USB (вызывать EZUSB_Discon()). Только в этом случае хост (Windows) узнает, что подключено новое устройство USB и заново считает дескрипторы этого устройства.
Artkop
Цитата(Konst_777 @ Sep 18 2008, 00:19) *
Если Вы хотите просто перепрограммировать EEPROM, то достаточно будет отключить EEPROM до подключения питания к CY7C64713. Затем подключить питание к контроллеру и затем подключить EEPROM. После подключения к шине USB Windows будет видеть Ваше устройство как "Cypress EZ-USB FX2LP EEPROM missing". С помощью CyConsole можно "залить" в EEPROM Вашу прошивку (файл *.iic).

Вопрос в том, что означает "отключить/подключить EEPROM" для Вашего модуля. Для моего модуля это означает установить/снять джампер XJ1 (см. "EEPROM.gif").

Если же Вы хотите, с помощью CyConsole, сохранить содержимое EEPROM на диске перед записью своего файла *.iic, то, действительно, нужно заменить драйвер Windows для HID устройства на драйвер "CyUSB.sys". Возможно Ваши неприятности связаны с использованием предыдущих версий "CyUSB.sys". Я использовал "CyUSB.sys" из SuiteUSB.NET 2.0. Вначале попробовал заменить драйвер для USB Debug Adapter от SiLabs. Получилось. Тогда решил усложнить задачу. Загрузил в контроллер C8051F340 в CP2201EB от SiLabs их же пример для HID устройства (\USB_HID\BlinkyExample). Только VID и PID заменил на Ваши. Тоже получилось. С помощью Adobe Captivate 3 записал процесс установки. В архиве "to_sloq.rar" есть две папки. Папка "SuiteUSB.NET 2.0" содержит "CyUSB.sys" и отредактированный "CyUSB.inf". В папке "to_sloq_demo" запустите "to_sloq_demo.htm" - увидите процесс замены драйвера на моем компьютере.


Добрый день! Каким образом вы инициализируете EPPROM? Просто отключаете джампер и через сайпрессконсоль пишете в память? У меня после подобных манипуляций (на digilentовскую плату я впаял джампер (на схеме jp2)) без джампера грузится как EPPROM missing. После соединения джампера и попытки прошить консоль говорит - EPPROM not enabled..
АДИКМ
Расскажите как Вы прошиваете ? Отключаем память, подключаем плату, подключаем память, запускаем утилиту и прошиваем.

Сигнал защиты от записи в EEPROM, кстати, у Вас на плате куда подключен?
slog
А как прочитать содержимое подключенной к 68013 I2С EEPROM?

Чтобы сохранить в виде файла.
Artkop
АДИКМ, ошибка моя, все прошивается) Пытался прошить кнопочкой small EPPROM, а надо large 64k EPPROM) У меня же в свойствах проекта именно выставлено 64k ROM. Спасибо за ответы!
Konst_777
Цитата(slog @ Sep 24 2008, 13:28) *
А как прочитать содержимое подключенной к 68013 I2С EEPROM?
Чтобы сохранить в виде файла.

Ответы надо искать в документе "\Cypress\USB\doc\General\CyConsole.pdf".
Или посмотреть, как это сделать, запустив "Save_EEPROM_demo.htm" из архива "Save_EEPROM_demo.rar" smile.gif
slog
Цитата(Konst_777 @ Sep 26 2008, 01:08) *
Ответы надо искать в документе "\Cypress\USB\doc\General\CyConsole.pdf".
Или посмотреть, как это сделать, запустив "Save_EEPROM_demo.htm" из архива "Save_EEPROM_demo.rar" smile.gif

Ну ты блин даёшь... (с) a14.gif
В документе я ни слова не нашел о том как считать, там только про то как записать. А может я читать не умею. Ну вообщем все получилось, посмотрел и сделал так же как в твоём архиве.
Еще раз a14.gif
И beer.gif
vlsiz
Уважаемые господа! Есть вопрос:

EZ-USB FX2 (микросхема CY7C68013A-56PVXC)
Режим использования – SLAVE FIFO, ядро микропроцессора не используется.
Ширина шины данных – 16 разрядов.
Используемые конечные точки – EP2 на вывод (BULK), EP6 – на ввод (BULK).
Режим использования флагов – фиксированный, флаг А соответствует EP2 и
программируется как «пустой», флаг С соответствует EP6 и
программируется как «полный».
Режим обмена данными – синхронный или асинхронный.
Мастер реализован на ПЛИС.
После загрузки HEX настроечного файла контроллер обнаруживается в Виндосе и в CyConsole под новым именем и с новыми параметрами.


П р о б л е м а :

Нет реакции флага А на вывод в EP2 – остается всегда «пустым» (при выводе из CyConsole и из приложения). Проверка производилась тщательно, Схема включения также проверялась неоднократно.

Что можно предпринять?


Если кто нибудь найдет время ответить: Vlsiz@mail.ru
alexkok
Цитата(vlsiz @ Oct 3 2008, 07:43) *
Что можно предпринять?

Сигнал SLCS# к земле подключён?
vlsiz
Да, такой вариант тоже был испробован, безуспешно. Пытался также флагом "Пусто" для EP2 OUT сделать флаги B и C и в фиксированном и в индексном использовании, все равно нет реакции флага на вывод в EP2.
alexkok
Цитата(vlsiz @ Oct 3 2008, 10:20) *
Да, такой вариант тоже был испробован, безуспешно. Пытался также флагом "Пусто" для EP2 OUT сделать флаги B и C и в фиксированном и в индексном использовании, все равно нет реакции флага на вывод в EP2.

Что значит "был испробован"?
Он в слэйв моде всегда должен сидеть на земле.
vlsiz
Вообще-то высокий уровень SLCS# переводит шину в 3-е состояние и игнорирует сигналы SLOE, SLRD, SLWR и PKTEND. Про его влияние на флаги в фиксированном режиме в 9 главе EZ-USB FX2
Manual Technical Reference ничего не говорится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.