Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование EEPROM для CY7C68013A (FX2LP)
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
mikeT
Скажите пожалуйста, насколько трудно сделать Firmware Loader для CY768013A? В AN041 (EZ Loader Custom USB Firmware Loader Driver) приводится описание «как сделать». Вопрос в том – насколько это реально сложно для человека, ранее с DDK дело не имевшим (время, сложность)?

Вопрос связан вот с чем: по работе необходимо решить ряд проблем, которые более важны чем «как сделать загрузку FX2LP с хоста», поэтому если эта вещь (написание собственного Loader) достаточна сложна (или несложна, но требует времени), то может лучше поставить EEPROM и предусмотреть механизм ее программирования извне, а уже потом (в дальнейшем, после решения основных задач) заниматься лоадером.

Что спецы посоветуют?
Просьба не писать «это делается за 1 день левой ногой», если имеется в виду, что «за 1 день» напишет спец по драйверам для винды rolleyes.gif ;
Какие еще доки посоветуете почитать по этому вопросу.
ClockworkOrange
>> Какие еще доки посоветуете почитать по этому вопросу.

http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf
Konst_777
Цитата(mikeT @ Apr 9 2009, 16:20) *
Скажите пожалуйста, насколько трудно сделать Firmware Loader для CY768013A? В AN041 (EZ Loader Custom USB Firmware Loader Driver) приводится описание «как сделать». Вопрос в том – насколько это реально сложно для человека, ранее с DDK дело не имевшим (время, сложность)?
...

По-моему, Вас ввела в заблуждение дата ревизии AN041 (July 9, 2004). На самом деле в этой AN описываются подходы Cypress до 1999 года ("...Windows 98...", "...Windows 98 DDK...", "...Microsoft® Visual C++ 5.0/6.0..."). Конечно сбивают с толку ссылки типа "... Microsoft Visual C++ .NET...". Вообщем, какой то бред, если знать, что с 2005 года существует SuiteUSB.NET 2.0. В его состав входят драйвер общего назначения CyUsb.sys и библиотека классов Microsoft .NET 2.0 CyUSB.dll (интерфейс к CyUsb.sys для .NET приложений). Ознакомившись с "Cypress CyUSB.NET DLL Programmer`s reference" (файл \SuiteUSB.NET\CyUsb.NET.chm) Вы легко обнаружите класс CyFX2Device, с помощью которого Ваше .NET приложение может запрограммировать EEPROM или загрузить программу в память контроллера FX2LP и перезапустить контроллер.

Цитата(mikeT @ Apr 9 2009, 16:20) *
..., то может лучше поставить EEPROM и предусмотреть механизм ее программирования извне, а уже потом (в дальнейшем, после решения основных задач) заниматься лоадером.

Штатным средством программирования EEPROM является утилита CyConsole.exe.
Возможно, полезной для Вас будет тема Проблема с cy7c68013a этого форума.
mikeT
1
Цитата(Konst_777 @ Apr 11 2009, 02:22) *
По-моему, Вас ввела в заблуждение дата ревизии AN041 (July 9, 2004).

Да. Это я что-то затупил - не посмотрел на дату

Но...

Цитата(Konst_777 @ Apr 11 2009, 02:22) *
с 2005 года существует SuiteUSB.NET 2.0. В его состав входят драйвер общего назначения CyUsb.sys и библиотека классов Microsoft .NET 2.0 CyUSB.dll (интерфейс к CyUsb.sys для .NET приложений). Ознакомившись с "Cypress CyUSB.NET DLL Programmer`s reference" (файл \SuiteUSB.NET\CyUsb.NET.chm) Вы легко обнаружите класс CyFX2Device, с помощью которого Ваше .NET приложение может запрограммировать EEPROM или загрузить программу в память контроллера FX2LP и перезапустить контроллер.

Про новый подход с использованием .NET я знаю. Но нам крайне не хотелось бы использовать .NET только потому что "Cypress так сделал". Верхний уровень (GUI и т.п.) у нас пишет человек который плотно работает на Delphi (не дотнетовском) и врядли мы его сагитируем на .NET перейти rolleyes.gif Средний уровень (разбор и "склейка" пакектов, ну в общем, какая-то предобработка) должен писать я и я планировал делать это на С++. Вообще, мы хотели в перспективе QT использовать и для среднего уровня и для GUI.
В то же время, я прекрасно понимаю, что если Cypress сделал и активно двыигает новое решение под .NET, то со старым его решением, тем более под FX2LP могут быть проблемы + это скорее всего уже Cypress'ом не поддерживается в должной мере.

В связи с этим у меня такой вопрос конкретного чайника (под винду я писал только сверхпростые консольки и такие вещи как .NET для меня известны на уровне статей из журнала "мурзилка" rolleyes.gif ): могу ли я использовать все "вкусности" от решения предлагаемого Cypress под .NET, но использовать не .NET а, например "обычный" С++?

2
Цитата(Konst_777 @ Apr 11 2009, 02:22) *
Штатным средством программирования EEPROM является утилита CyConsole.exe.
Возможно, полезной для Вас будет тема Проблема с cy7c68013a этого форума.

Спасибо большое за очень за ссылку. Прочитал на два раза, но вот такой вопрос есть (там он затронут слегка): микруха EEPROM у нас впаивается "намертво" и джамперов никаких не будет (такие требования, будь моя воля - поставил бы EEPROM в панельке и все, а потом, когда все отлажено, убрал-бы ее вообще насовсем), что там в ней лежит - хз. Не будет ли проблем с этим (старт FX2LP с подключенной EEPROM с мусором внутри)? Или обязательно нужно что-то осмысленное туда записать?
В принципе, мы можем вывести технологический разъем для прошивки EEPROM с компутера. Как Вы считаете, стоит ли зарезервировать такую возможность "на крайний случай"?

3
Мы планируем, что клок на FX2LP будет приходить с ПЛИС, то есть пока ПЛИС не стартует, FX2LP будет "мертвая". не будет ли тут каких-нибудь проблем, связанных с USB (сам протокол), т.к. питание подано, а тактовой частоты еще нет?

P.S.
Очень большое Вам спасибо за развернутый и крайне полезный ответ!
Konst_777
Цитата(mikeT @ Apr 11 2009, 06:33) *
1
Про новый подход с использованием .NET я знаю. Но нам крайне не хотелось бы использовать .NET только потому что "Cypress так сделал". Верхний уровень (GUI и т.п.) у нас пишет человек который плотно работает на Delphi (не дотнетовском) и врядли мы его сагитируем на .NET перейти rolleyes.gif Средний уровень (разбор и "склейка" пакектов, ну в общем, какая-то предобработка) должен писать я и я планировал делать это на С++. Вообще, мы хотели в перспективе QT использовать и для среднего уровня и для GUI.
...
В связи с этим у меня такой вопрос конкретного чайника (под винду я писал только сверхпростые консольки и такие вещи как .NET для меня известны на уровне статей из журнала "мурзилка" rolleyes.gif ): могу ли я использовать все "вкусности" от решения предлагаемого Cypress под .NET, но использовать не .NET а, например "обычный" С++?

Если, разница в предложениях на рынке труда для программистов Delphi и для программистов .NET не является достаточной мотивацией для вашего программиста верхнего уровня, то
вам придется использовать связку приложения на Delphi ( (GUI и т.п.)) с .dll (задачи среднего уровня и общение с CyUSB.sys). В этом случае "настольной книгой" для Вас является "Cypress CyUsb.sys Programmer`s Reference"(\Cypress\USB\help\cyusb.chm). Думаю для Вас полезным будет Archive.rar из темы прием данных из АЦП в ПК по USB.

Цитата(mikeT @ Apr 11 2009, 06:33) *
2
Спасибо большое за очень за ссылку. Прочитал на два раза, но вот такой вопрос есть (там он затронут слегка): микруха EEPROM у нас впаивается "намертво" и джамперов никаких не будет (такие требования, будь моя воля - поставил бы EEPROM в панельке и все, а потом, когда все отлажено, убрал-бы ее вообще насовсем), что там в ней лежит - хз. Не будет ли проблем с этим (старт FX2LP с подключенной EEPROM с мусором внутри)? Или обязательно нужно что-то осмысленное туда записать?
В принципе, мы можем вывести технологический разъем для прошивки EEPROM с компутера. Как Вы считаете, стоит ли зарезервировать такую возможность "на крайний случай"?

Если будете ставить EEPROM, из которой будет загружаться FX2LP, то обязательно нужно поставить джампер (см. EEPROM.gif из темы Проблема с cy7c68013a). Иначе, если во время программирования EEPROM произойдет сбой, то придется отпаивать и поднимать ножку у EEPROM. То же самое будет, если записанная программа содержит ошибки и Windows перестает видеть FX2LP.

Цитата(mikeT @ Apr 11 2009, 06:33) *
3
Мы планируем, что клок на FX2LP будет приходить с ПЛИС, то есть пока ПЛИС не стартует, FX2LP будет "мертвая". не будет ли тут каких-нибудь проблем, связанных с USB (сам протокол), т.к. питание подано, а тактовой частоты еще нет?

Нужно выдавать Reset на FX2LP, пока не стабилизируется тактовая частота, подаваемая на FX2LP. Все требования изложены в "cy7c68013a_8.pdf", "EZ-USB_TRM.pdf" и "fx2_to_fx2lp.pdf".
mikeT
Цитата(Konst_777 @ Apr 12 2009, 16:54) *
В этом случае "настольной книгой" для Вас является "Cypress CyUsb.sys Programmer`s Reference"(\Cypress\USB\help\cyusb.chm). Думаю для Вас полезным будет Archive.rar из темы прием данных из АЦП в ПК по USB.


Спасибо. Как я понял, рекомендованный Вами док - это "старый" подход для работы с USB (HOST), а "новый" - это .NET?


Цитата(Konst_777 @ Apr 12 2009, 16:54) *
Если будете ставить EEPROM, из которой будет загружаться FX2LP, то обязательно нужно поставить джампер (см.[url="http://electronix.ru/forum/index.php?

а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?
б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?
lepert
Цитата(mikeT @ Apr 12 2009, 14:27) *
Спасибо. Как я понял, рекомендованный Вами док - это "старый" подход для работы с USB (HOST), а "новый" - это .NET?
а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?
б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?


Да там совсем не обязательно все делать именно на NET, делайте на Delphi. API он и в Африке API. Ваша задача достучаться
до CyUSB dll-ки. А на каком языке Вы это сделаете не важно.
Что касается джампера, утилита CyUSB Console позволяет затереть и перепрошить EEPROM без переподключений
джампера, проверено. EzUSB не позволяет это делать, а CyUSB позволяет. А раз CyUSB может, значит и Вы сможете.
Другое дело, если Вы работаете в связке с программой хоста, может действительно, не морочить голову с внешней
памятью, а заливать софт в Cypress из основной программы на PC, это наиболее простой путь.
Правда при каждом запуске она будет переподключать устройство, к этому надо быть готовым, то есть будет
звук ту-дум переподключения устройства, что не есть хорошо. Тут надо по моему ориентироваться на то,
как часто будет смена софта. Если раз в год, это одно, тогда можно вообще делать это внешним конфигуратором.
А если раз в месяц, тогда наверное, лучше делать без EEPROM.
Konst_777
Цитата(lepert @ Apr 12 2009, 14:42) *
Да там совсем не обязательно все делать именно на NET, делайте на Delphi. API он и в Африке API. Ваша задача достучаться
до CyUSB dll-ки. А на каком языке Вы это сделаете не важно.
...

Пожалуйста, напишите, где можно почитать о том, как в приложении на Delphi (native 32bit) наследовать классы .NET сборок?

Цитата(lepert @ Apr 12 2009, 14:42) *
...
Что касается джампера, утилита CyUSB Console позволяет затереть и перепрошить EEPROM без переподключений
джампера
, проверено. EzUSB не позволяет это делать, а CyUSB позволяет. А раз CyUSB может, значит и Вы сможете.
...

Простой пример для FX2LP:
Код
//-------------------------------------------------------------------------------------
//   Файл:          main.c
//   Назначение:    Данное приложение отключает контроллер FX2LP от шины USB,
//            что делает невозможным перепрограммирование EEPROM с
//            помощью CyConsole.exe, если не предусмотрено отключение EEPROM
//            до подачи питания на FX2LP и подключение EEPROM после подачи
//            питания на FX2LP
//-------------------------------------------------------------------------------------

// We use fx2regs.h for register address allocation by using "#define ALLOCATE_EXTERN"
#define ALLOCATE_EXTERN

#include <fx2.h>
#include <fx2regs.h>

void main(void)
{
      // disconnect from USB
    USBCS |= bmDISCON;

    // Main Loop
    while(TRUE)
    {
    }
}

Проект приложен в "EEPROM_Trouble.zip".
Сможете Вы с помощью CyConsole.exe "затереть и перепрошить EEPROM без переподключений джампера" после загрузки в EEPROM "EEPROM_Trouble.iic"? Пожалуйста, расскажите как это сделать?

Цитата(mikeT @ Apr 12 2009, 14:27) *
...
а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?

Мне не понятно, почему Вас так пугает присутствие двухконтактного разъема - для установки джампера, вместо трехконтактного - для обеспечения возможности запрограммировать EEPROM через интерфейс I2C с помощью внешнего устройства? Причем, этот трехконтактный должен иметь ключ, чтобы правильно подключать внешнее устройство. И даже в этом случае, все еще есть возможность что-нибудь спалить, при подключении внешнего устройства и отсутствии общего заземления.
Цитата(mikeT @ Apr 12 2009, 14:27) *
б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?

Мой ответ на этот вопрос уже изложен в теме прием данных из АЦП в ПК по USB. То есть, я считаю, что нужно иметь возможность задать желаемый VID, PID, и Serial Number.
mikeT
Цитата(Konst_777 @ Apr 12 2009, 21:28) *
Мне не понятно, почему Вас так пугает присутствие двухконтактного разъема...


Давайте, я ниже изложу так как я Вас понял (и вообще саму идею), а Вы поправите если я неправ?
1. На Вашей схеме (пример с джампером) стоит EEPROM с 16-битной адресацией. В рабочем режиме пин A0 должен быть == "1".
То есть в рабочем режиме джампер снят (мне это именно и нужно, т.к. наличие джампера в рабочем режиме крайне нежелательно из-за условий эксплуатации изделия)
2. Вы ставите А0 в "0" (хоть джампером, хоть пинцетом, лишь бы закоротка была) перед подачей питания, подаете питание (А0 по прежнему == "0"), FX2LP (EEPROM Boot Loader) проверяет "какой тип EEPROM стоит - small/large?", используя для этого данные с шины [A2:A0] (важен именно разряд A0). FX2LP считает, что "установлена small EEPROM (А0 == "0")", пытается "подружиться" с EEPROM, но жестоко обламывается (ACK он в ответ не получает). После чего FX2LP считает, что "No EEPROM detected" и стартует без нее.
3. Убираем джампер. EEPROM теперь доступна и мы можем ее программировать и т.п.

так?

по поводу того нужна или не нужна EEPROM - почитал Ваши сообщения, понял, что нужно поставить обязательно rolleyes.gif Тем более, что проблема с программированием и "отключением" EEPROM снимиается.

Спасибо.
Konst_777
Цитата(mikeT @ Apr 13 2009, 07:53) *
Давайте, я ниже изложу так как я Вас понял (и вообще саму идею), а Вы поправите если я неправ?
...
так?

Вы все совершенно правильно поняли. Джампер устанавливается для отключения EEPROM. В рабочем режиме джампер снят.
mikeT
Цитата(Konst_777 @ Apr 13 2009, 13:45) *
Вы все совершенно правильно поняли. Джампер устанавливается для отключения EEPROM. В рабочем режиме джампер снят.


Я тогда наберусь наглости и спрошу еще вот по этой теме луп-бэк на FX2LP, т.к. вижу по Вашим ответом, что Вы фундаментально разобрались с USB и, возможно, ответ у Вас потребует не более 5 секунд rolleyes.gif

Суть вопроса:
Можно ли на "голой" FX2LP (ну как на ките стоит) организовать либо луп-бэк (хост->FX2LP->хост), либо режим "FX2LP->HOST", причем:
а) скорость меня итнтересует от 25 МБ в секунду и выше
б) если используется режим генератора данных ("FX2LP->HOST"), то чтобы была возможность генерировать какие-то переменные данные, а не константу.

Заранее благодарен.
Konst_777
Цитата(mikeT @ Apr 13 2009, 12:44) *
Суть вопроса:
Можно ли на "голой" FX2LP (ну как на ките стоит) организовать либо луп-бэк (хост->FX2LP->хост), либо режим "FX2LP->HOST", причем:
а) скорость меня итнтересует от 25 МБ в секунду и выше
б) если используется режим генератора данных ("FX2LP->HOST"), то чтобы была возможность генерировать какие-то переменные данные, а не константу.

Я не знаю как организовать луп-бэк (хост->FX2LP->хост) со скоростью обмена от 25 МБ в секунду. CPU контроллера не может выполнять программные пересылки с такой скоростью.
Если для режима генератора данных использовать GPIF (как в Archive.rar), то необходимо изменять данные на ATA Connector с помощью какого-то внешнего устройства, "чтобы была возможность генерировать какие-то переменные данные, а не константу".
Можно получить режим генератора с медленно изменяющимися данными. CPU контроллера имеет возможность доступа к данным Endpoint, как к ОЗУ. CPU контроллера должно отслеживать момент завершения выдачи FX2LP данных HOSTу модифицировать один байт в In Endpoint и запускать следующую пересылку данных "FX2LP->HOST". Тут можно побороться за скорость обмена около 25 МБ в секунду.
mikeT
Цитата(Konst_777 @ Apr 14 2009, 00:37) *
...Можно получить режим генератора с медленно изменяющимися данными. CPU контроллера имеет возможность доступа к данным Endpoint, как к ОЗУ. CPU контроллера должно отслеживать момент завершения выдачи FX2LP данных HOSTу модифицировать один байт в In Endpoint и запускать следующую пересылку данных "FX2LP->HOST". Тут можно побороться за скорость обмена около 25 МБ в секунду.


Спасибо большое. Будем думать rolleyes.gif
Glitko
Помогите разобратся ! У меня на плате CY768013A-128, АТмега-64,ПЛИСИна,АЦП.CY768013A-128 используется в режиме GPIF.Прошивка CY768013A-128 нормально заливается Сайпросовской консолью и работает.Но я хочу грузить прошивку из АТмега-64, при включении питания ,дальше Атмега по своему плану.Делаю файл *.iic с помощью утилиты hex2bix,заношу его в АТмегу,при повторном включении питания шиш, прошивка не работает ,подхватываются стандартный для CY768013A-128 VID и PID!Просто VID и PID с АТмеги грузятся без проблем.Подскажите что может быть? Я понимаю, что вариантов много но все-таки!?
Тему внимательно прчитал, при формировании *.iic делал все как советовали! help.gif
SFx
Цитата(Glitko @ May 8 2009, 01:40) *
Помогите разобратся ! .....
Тему внимательно прчитал, при формировании *.iic делал все как советовали! help.gif


Вы прошивку от CY грузите по I2C из ATmega64. я так понимаю прошивка для CY должна быть внутри флешки также сохранена, как и прошивка для ATmega64...
Konst_777
Цитата(SFx @ May 11 2009, 15:35) *
Вы прошивку от CY грузите по I2C из ATmega64. я так понимаю прошивка для CY должна быть внутри флешки также сохранена, как и прошивка для ATmega64...

Цитата(Glitko @ May 8 2009, 00:35) *
Помогите разобратся ! ...

Уважаемый Glitko опубликовал этот же вопрос в теме cy7c68013 и EEPROM, как очистить. И в той теме обсуждение идет более живо.
puritanin
Товарищи, подскажите пжлста по такой проблеме:
имею c68013, приложение ввода данных пишу на С++ Билдере, с помощью CyAPI.
Прошивка девайса прекрасно зашивается (и работает) через CyConsole, но прошить программно из приложения не получается.

Алгоритм действий:
1. останов процессора (0x00 -> 0xe600)
2. закачка прошивки
3. запуск процессора (0x01 -> 0xe600)

И после этого устройство переходит в Disconnected и все, молчит. Переподключения не происходит.
Отслеживал трейсером пакеты от СуКонсоль и от моей программы - один в один. Только от консоли устройство запускается с новой прошивкой, а от моей проги нет.

Прошивка заливается верно. Проверял чтением памяти.


Что нужно сделать по завершению? Самому пихнуть девайс на ReEnum?
Помогите пжлста, устал от всевозможных переборов...
Konst_777
Цитата(puritanin @ Jul 25 2009, 13:51) *
...
Алгоритм действий:
1. останов процессора (0x00 -> 0xe600)
2. закачка прошивки
3. запуск процессора (0x01 -> 0xe600)
...


Алгоритм действий у Вас правильный. Только константы подгуляли. Правильно так:
1. выдача Reset на процессор (0x01 -> 0xe600)
2. закачка прошивки
3. запуск процессора (0x00 -> 0xe600)
puritanin
Точно, я просто опечатался, в программе все правильно.
Странно тогда. Я так и не смог на Билдере запустить прошивку...

Сейчас сяду за Си-шарп...
Там нашел готовую функцию загрузки в RAM.
kostyx
Здравствуйте! имеется cypress EZ-USB fx2lp,

необходимо подключить EEPROM через i2c

Пока являюсь полным новичком в этой теме.

Также как я понял из TRM с неё плата может загружаться, а также использовать её для общих целей, как это конфигурируемо? Вот мне бы для использования её в общих целях.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.