Полная версия этой страницы:
Проблема с cy7c68013a
День добрый,
Пытаемся адаптировать оный микрух под передачу данных с PC в режиме bulk. Пошли простейшим путем - взяли плату Digilent USB2, вывели ifclk наружу, сделали прошивку для работы в режиме slave FIFO (внешний клок, 8-разрядная шина, автоматическая передача данных с USB на шину в обход фирмвари, работаем только с EP2). Для управления этим делом привесили ПЛИС (генерирует клоки, управляющие сигналы и забирает данные).
Собственно проблема: наблюдаем зависание cy7c68013a в процессе передачи. Количество передаваемых пакетов варьируется от пары-тройки до сотен тысяч, потом - зависание. Судя по флагам, буфер FIFO при этом пустой.
Передачу организуем мелкой тестовой самописной софтинкой, использующей CyAPI из DVK. Передача производится блоками по 512 байт, проблема наблюдается вне зависимости от задержки между передачей отдельных блоков.
Спасибо!
Serg_Sm
Aug 6 2008, 05:48
У вас скорее всего проблемы в прошивке ПЛИС. Проверяйте соответствие временных задержек.
У меня подобное наблюдалось, когда я делал управление локальной шиной PLX9054 (PCI мост). Стояла не очень быстрая плисина и при небольшом изменение проекта PCI-плата работала то с зависаниями, то они вдруг исчезали (в симуляции все было отлично). Избавился от этого только после внесения в проект контроля задержек.
Спасибо!
Да, проблема была в ПЛИС, теперь у нас новая беда

Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать?
Копать в сторону отказа от Slave FIFO и написания GPIF интерфейса.
p.s. Проверьте корректность работы флагов пустого и полного FIFO.
Флаги работают корректно. В чем преимущество GPIF (в данном случае)?
Спасибо!
Konst_777
Aug 18 2008, 17:28
Цитата(Kaamos @ Aug 6 2008, 10:42)

Спасибо!
Да, проблема была в ПЛИС, теперь у нас новая беда

Пока ПЛИС забирает данные - все нормально. Как только она приостанавливает передачу - FIFO в EZ-USB, видимо, заполняются, после чего плата перестает принимать данные от ПК. Причем не начинает их принимать даже тогда, когда ПЛИС пытается начать заново вытягивать данные. Не подскажете, в какую сторону копать?
А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ?
Kaamos
Aug 19 2008, 09:56
Цитата
А как Вы управляете потоком данных ПЭВМ --> FIFO в EZ-USB? То есть, как организована передача в ПЭВМ готовности/неготовности FIFO в EZ-USB принимать данные от ПЭВМ?
Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?
Konst_777
Aug 19 2008, 19:20
Цитата(Kaamos @ Aug 19 2008, 12:56)

Прошу прощения за глупый вопрос, но разве это не должно быть реализовано на уровне драйвера (используем стандартный CyUSB и CyAPI)?
На уровне драйвера у Вас есть только одна возможность - задать таймаут для операции передачи данных настолько большим, чтобы неготовность ПЛИС принимать данные не приводила к возникновению таймаута EP2. Поскольку Вы так не делаете, то после возникновения таймаута Вам необходимо перезапустить EP2. Не уверен, что для этого достаточно перезапустить только драйвер (вызвать метод
void CyUSBEndPoint::Abort(void) для EP2). Скорее всего придется перезапускать EP2 в FX2LP (проще всего перезапустить сам FX2LP вызвав
bool CCyUSBDevice::Reset( void) ). Но, при перезапуске EP2 (драйвера и/или FX2LP) будут теряться данные.
Реальное управление потоком данных ПЭВМ --> ПЛИС предусматривает опрос готовности ПЛИС принять определенный объем данных, перед выдачей ПЛИС этого объема данных.
Добрый день!
Kaamos, у меня к Вам вопрос по прошивке для 68013. Как Вы ее разрабатывали? С помощью отладочной платы сайпрес? У меня плата Nexys от того же производителя (digilent). Имею возможность грузить .iic проект в ром, но вот отладку по шагам осуществить похоже невозможно(
Добрый день,
Мы работали не с отладочной платой сайпресс, а адаптировали готовую; по поводу отладочных плат, к сожалению, сказать ничего не могу
Цитата(Artkop @ Sep 1 2008, 16:01)

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

Для отладки по шагам достаточно вывести наружу 0 или 1 UART и подключить к компьютеру. Далее в eeprom заливается программа монитора от сайпресса и из кейла можно грузить и отлаживать свою программу.
У FX2LP в 56-выводном корпусе нет последовательных портов.
Цитата(slog @ Sep 3 2008, 19:06)

У меня вот тоже есть вопрос почти в тему:
Если после включения питания cy7c68013a загрузилась из внешней I2C EEPROM, то после этого можно ли залить в неё прошивку через USB? ...
Можно.
Цитата(Konst_777 @ Sep 3 2008, 20:39)

У FX2LP в 56-выводном корпусе нет последовательных портов.
Тогда облом. Простыми средствами отладку не запустить.
Цитата(Konst_777 @ Sep 3 2008, 20:39)

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

А что для этого делать то надо?
Драйвер её не видит, потому что она уже имеет другой VID-PID.
Я делал так - взял .inf файл драйвера, прописал туда новый pid/vid (который в микросхеме теперь) и драйвер поставился и сайпресовская консоль плату подцепила.
Спасибо за ответы, так и понял, что с отладкой на маленьком мк не получится..
У меня еще проблема - при загрузке .hex проекта в RAM и резета плата не опознается и видится как pid0000/vid0000.. В чем проблема может быть? Вроде как из рам прошивка должна работать?
Serg_Sm
Sep 8 2008, 12:18
В прошивке при инициализации поставьте:
EZUSB_Discon(TRUE); // инициируется переподключение
Никакого ресета не нужно.
Плата стартует автоматом после загрузки hex-файла и переподключается с новыми vid/pid.
Если не работает (pid0000/vid0000) - значит в прошивке ошибка.
Проверьте дескрипторы... И да, почему-то в сайпресовском дефолтном фреймворке EZUSB_Discon() вроде как не вызывается....
Artkop
Sep 10 2008, 04:52
C дескрипторами все ок, та же прошивка, зашитая в ром, работает и определяется как надо. Возможно что то с адресацией не то, я в этом еще не очень разобрался.. И да, посмотрю EZUSB_Discon(), спасибо!
Еще раз подниму тему.
Есть CY7C64713, Это вроде примерно то же что и 68013. Она грузится из подключенной к ней I2C EEPROM. Надо не отключая EEPROM залить в неё новую прошивку через USB. Что-то не получается. В драйвере менял две строчки с VID-PID на те, что контроллер имеет после загрузки. Драйвер не устанавливается, винда говорит что там отсутствуют сведения об оборудовании, консоль контроллер не видит. Если отключить EEPROMку то все работает (с VID-PID по умолчанию). Это вообще возможно, залить прошивку через USB после того как контроллер загрузился из EEPROM ? Нет ли в нем каких-то блокировок на этот случай.
Konst_777
Sep 16 2008, 17:30
Цитата(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 ? Нет ли в нем каких-то блокировок на этот случай.
Ну, у Вас же получилось.

И это стандартный путь для загрузки программы монитора от Cypress для последующей отладки firmware через последовательный порт. Так что, никаких блокировок быть не может.
Проблема может возникнуть лишь в случае, когда в EEPROM записана сбойная программа и Windows перестает видеть устройство USB. Да и то, только если не предусмотрена возможность отключать EEPROM. Например, с помощью установки джампера.
Цитата(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
Sep 17 2008, 20: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" - увидите процесс замены драйвера на моем компьютере.
To
Konst_777Спасибо за помощь, попробую по вашему. Я не хочу перезаписывать существующую прошивку во внешней пзу. Я хочу просто её заменить в ОЗУ контроллера на свою, во время подключения устройства к компу, и то не всегда. Родная прошивка должна остаться не тронутой. "отключить/подключить EEPROM" означает поднимание и обратная припайка ноги SDA EEPROM. Это очень не удобно, я хочу чтобы чтобы эта операция не нужна была.
YES! Заработала консоль с твоим драйвером!
Винда перестала ругаться на отсутствие сведений об оборудовании. Стала устанавливать драйвер. Но тоже получилось не с первого раза. Оказывается она находит два подходящих драйвера, свой HID и Cypress. И по умолчанию ставит свой. Чтобы поставить от Cypress надо его специально выбрать ручками, это не сразу очевидно.
Ну спасибо! У меня это и не получалось.
Теперь будет следующий этап

Хочется сделать так, чтобы при подключении моего устройства драйвер от Cypress автоматически грузил в 68013 мой .hex файл. Я пока до этого не дошел еще. Это ведь возможно сделать?
Konst_777
Sep 18 2008, 18:05
Цитата(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
Sep 24 2008, 07:44
Цитата(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, кстати, у Вас на плате куда подключен?
А как прочитать содержимое подключенной к 68013 I2С EEPROM?
Чтобы сохранить в виде файла.
Artkop
Sep 25 2008, 09:59
АДИКМ, ошибка моя, все прошивается) Пытался прошить кнопочкой small EPPROM, а надо large 64k EPPROM) У меня же в свойствах проекта именно выставлено 64k ROM. Спасибо за ответы!
Konst_777
Sep 25 2008, 21:08
Цитата(slog @ Sep 24 2008, 13:28)

А как прочитать содержимое подключенной к 68013 I2С EEPROM?
Чтобы сохранить в виде файла.
Ответы надо искать в документе "\Cypress\USB\doc\General\
CyConsole.pdf".
Или посмотреть, как это сделать, запустив "Save_EEPROM_demo.htm" из архива "Save_EEPROM_demo.rar"
Цитата(Konst_777 @ Sep 26 2008, 01:08)

Ответы надо искать в документе "\Cypress\USB\doc\General\
CyConsole.pdf".
Или посмотреть, как это сделать, запустив "Save_EEPROM_demo.htm" из архива "Save_EEPROM_demo.rar"

Ну ты блин даёшь... (с)
В документе я ни слова не нашел о том как считать, там только про то как записать. А может я читать не умею. Ну вообщем все получилось, посмотрел и сделал так же как в твоём архиве.
Еще раз

И
Уважаемые господа! Есть вопрос:
EZ-USB FX2 (микросхема CY7C68013A-56PVXC)
Режим использования – SLAVE FIFO, ядро микропроцессора не используется.
Ширина шины данных – 16 разрядов.
Используемые конечные точки – EP2 на вывод (BULK), EP6 – на ввод (BULK).
Режим использования флагов – фиксированный, флаг А соответствует EP2 и
программируется как «пустой», флаг С соответствует EP6 и
программируется как «полный».
Режим обмена данными – синхронный или асинхронный.
Мастер реализован на ПЛИС.
После загрузки HEX настроечного файла контроллер обнаруживается в Виндосе и в CyConsole под новым именем и с новыми параметрами.
П р о б л е м а :
Нет реакции флага А на вывод в EP2 – остается всегда «пустым» (при выводе из CyConsole и из приложения). Проверка производилась тщательно, Схема включения также проверялась неоднократно.
Что можно предпринять?
Если кто нибудь найдет время ответить: Vlsiz@mail.ru
alexkok
Oct 3 2008, 06:52
Цитата(vlsiz @ Oct 3 2008, 07:43)

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

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