Jump to content

    

Использование EEPROM для CY7C68013A (FX2LP)

Скажите пожалуйста, насколько трудно сделать Firmware Loader для CY768013A? В AN041 (EZ Loader Custom USB Firmware Loader Driver) приводится описание «как сделать». Вопрос в том – насколько это реально сложно для человека, ранее с DDK дело не имевшим (время, сложность)?

 

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

 

Что спецы посоветуют?

Просьба не писать «это делается за 1 день левой ногой», если имеется в виду, что «за 1 день» напишет спец по драйверам для винды :rolleyes: ;

Какие еще доки посоветуете почитать по этому вопросу.

Share this post


Link to post
Share on other sites
Скажите пожалуйста, насколько трудно сделать 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 и перезапустить контроллер.

 

..., то может лучше поставить EEPROM и предусмотреть механизм ее программирования извне, а уже потом (в дальнейшем, после решения основных задач) заниматься лоадером.

Штатным средством программирования EEPROM является утилита CyConsole.exe.

Возможно, полезной для Вас будет тема Проблема с cy7c68013a этого форума.

Share this post


Link to post
Share on other sites

1

По-моему, Вас ввела в заблуждение дата ревизии AN041 (July 9, 2004).

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

 

Но...

 

с 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: Средний уровень (разбор и "склейка" пакектов, ну в общем, какая-то предобработка) должен писать я и я планировал делать это на С++. Вообще, мы хотели в перспективе QT использовать и для среднего уровня и для GUI.

В то же время, я прекрасно понимаю, что если Cypress сделал и активно двыигает новое решение под .NET, то со старым его решением, тем более под FX2LP могут быть проблемы + это скорее всего уже Cypress'ом не поддерживается в должной мере.

 

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

 

2

Штатным средством программирования EEPROM является утилита CyConsole.exe.

Возможно, полезной для Вас будет тема Проблема с cy7c68013a этого форума.

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

В принципе, мы можем вывести технологический разъем для прошивки EEPROM с компутера. Как Вы считаете, стоит ли зарезервировать такую возможность "на крайний случай"?

 

3

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

 

P.S.

Очень большое Вам спасибо за развернутый и крайне полезный ответ!

Share this post


Link to post
Share on other sites
1

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

...

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

Если, разница в предложениях на рынке труда для программистов Delphi и для программистов .NET не является достаточной мотивацией для вашего программиста верхнего уровня, то

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

 

2

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

В принципе, мы можем вывести технологический разъем для прошивки EEPROM с компутера. Как Вы считаете, стоит ли зарезервировать такую возможность "на крайний случай"?

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

 

3

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

Нужно выдавать Reset на FX2LP, пока не стабилизируется тактовая частота, подаваемая на FX2LP. Все требования изложены в "cy7c68013a_8.pdf", "EZ-USB_TRM.pdf" и "fx2_to_fx2lp.pdf".

Share this post


Link to post
Share on other sites
В этом случае "настольной книгой" для Вас является "Cypress CyUsb.sys Programmer`s Reference"(\Cypress\USB\help\cyusb.chm). Думаю для Вас полезным будет Archive.rar из темы прием данных из АЦП в ПК по USB.

 

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

 

 

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

а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?

б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?

Share this post


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

а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?

б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?

 

Да там совсем не обязательно все делать именно на NET, делайте на Delphi. API он и в Африке API. Ваша задача достучаться

до CyUSB dll-ки. А на каком языке Вы это сделаете не важно.

Что касается джампера, утилита CyUSB Console позволяет затереть и перепрошить EEPROM без переподключений

джампера, проверено. EzUSB не позволяет это делать, а CyUSB позволяет. А раз CyUSB может, значит и Вы сможете.

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

памятью, а заливать софт в Cypress из основной программы на PC, это наиболее простой путь.

Правда при каждом запуске она будет переподключать устройство, к этому надо быть готовым, то есть будет

звук ту-дум переподключения устройства, что не есть хорошо. Тут надо по моему ориентироваться на то,

как часто будет смена софта. Если раз в год, это одно, тогда можно вообще делать это внешним конфигуратором.

А если раз в месяц, тогда наверное, лучше делать без EEPROM.

Edited by lepert

Share this post


Link to post
Share on other sites
Да там совсем не обязательно все делать именно на NET, делайте на Delphi. API он и в Африке API. Ваша задача достучаться

до CyUSB dll-ки. А на каком языке Вы это сделаете не важно.

...

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

 

...

Что касается джампера, утилита 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"? Пожалуйста, расскажите как это сделать?

 

...

а) если у нас будет разъем для программирования EEPROM извне, то это ведь снимает необходимость установки джампера?

Мне не понятно, почему Вас так пугает присутствие двухконтактного разъема - для установки джампера, вместо трехконтактного - для обеспечения возможности запрограммировать EEPROM через интерфейс I2C с помощью внешнего устройства? Причем, этот трехконтактный должен иметь ключ, чтобы правильно подключать внешнее устройство. И даже в этом случае, все еще есть возможность что-нибудь спалить, при подключении внешнего устройства и отсутствии общего заземления.

б) что Вы порекомендуете - может вообще тогда не ставить EEPROM?

Мой ответ на этот вопрос уже изложен в теме прием данных из АЦП в ПК по USB. То есть, я считаю, что нужно иметь возможность задать желаемый VID, PID, и Serial Number.

EEPROM_Trouble.zip

Share this post


Link to post
Share on other sites
Мне не понятно, почему Вас так пугает присутствие двухконтактного разъема...

 

Давайте, я ниже изложу так как я Вас понял (и вообще саму идею), а Вы поправите если я неправ?

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: Тем более, что проблема с программированием и "отключением" EEPROM снимиается.

 

Спасибо.

Share this post


Link to post
Share on other sites
Давайте, я ниже изложу так как я Вас понял (и вообще саму идею), а Вы поправите если я неправ?

...

так?

Вы все совершенно правильно поняли. Джампер устанавливается для отключения EEPROM. В рабочем режиме джампер снят.

Share this post


Link to post
Share on other sites
Вы все совершенно правильно поняли. Джампер устанавливается для отключения EEPROM. В рабочем режиме джампер снят.

 

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

 

Суть вопроса:

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

а) скорость меня итнтересует от 25 МБ в секунду и выше

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

 

Заранее благодарен.

Share this post


Link to post
Share on other sites
Суть вопроса:

Можно ли на "голой" 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 МБ в секунду.

Share this post


Link to post
Share on other sites
...Можно получить режим генератора с медленно изменяющимися данными. CPU контроллера имеет возможность доступа к данным Endpoint, как к ОЗУ. CPU контроллера должно отслеживать момент завершения выдачи FX2LP данных HOSTу модифицировать один байт в In Endpoint и запускать следующую пересылку данных "FX2LP->HOST". Тут можно побороться за скорость обмена около 25 МБ в секунду.

 

Спасибо большое. Будем думать :rolleyes:

Share this post


Link to post
Share on other sites

Помогите разобратся ! У меня на плате CY768013A-128, АТмега-64,ПЛИСИна,АЦП.CY768013A-128 используется в режиме GPIF.Прошивка CY768013A-128 нормально заливается Сайпросовской консолью и работает.Но я хочу грузить прошивку из АТмега-64, при включении питания ,дальше Атмега по своему плану.Делаю файл *.iic с помощью утилиты hex2bix,заношу его в АТмегу,при повторном включении питания шиш, прошивка не работает ,подхватываются стандартный для CY768013A-128 VID и PID!Просто VID и PID с АТмеги грузятся без проблем.Подскажите что может быть? Я понимаю, что вариантов много но все-таки!?

Тему внимательно прчитал, при формировании *.iic делал все как советовали! :help:

Share this post


Link to post
Share on other sites
Помогите разобратся ! .....

Тему внимательно прчитал, при формировании *.iic делал все как советовали! :help:

 

Вы прошивку от CY грузите по I2C из ATmega64. я так понимаю прошивка для CY должна быть внутри флешки также сохранена, как и прошивка для ATmega64...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this