|
USB интерфейс с помощью CY7C68013A. |
|
|
|
Aug 25 2015, 10:17
|

Участник

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484

|
У меня стоит задача организовать обмен данными через USB между компьютером и ПЛИС spartan3e. Была выбрана USB board CY7C68013A на чипе Cypress. С ПЛИС передаются данные с 16 битного датчика , обратно команда на выбор режима обработки (В ПЛИС будет реализовано несколько алгоритмов обрабтки входного сигнала, но данные после обработки останутся также 16 битными). Возникли следующие вопросы: 1) что лучше (легче) использовать для моей задачи SlaveFIFO или GPIF? 2)как устанавливать регистры в нужное состояние? Например, FIFOPINPOLAR и IFCONFIG.x. 3) на сайте Cypress есть множество примеров (напримерhttp://www.cypress.com/documentation/application-notes/an61345-designing-ez-usb-fx2lp-slave-fifo-interface) - как ими пользоваться, чтобы не изобретать велосипед? что и где в них смотреть? Как заливать готовые примеры в чип? Какую прошивку чипа использовать? USB board
Сообщение отредактировал aleshanoff - Aug 25 2015, 10:15
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 25 2015, 11:23
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(aleshanoff @ Aug 25 2015, 13:17)  Возникли следующие вопросы: 1) что лучше (легче) использовать для моей задачи SlaveFIFO или GPIF? 2)как устанавливать регистры в нужное состояние? Например, FIFOPINPOLAR и IFCONFIG.x. 3) на сайте Cypress есть множество примеров (напримерhttp://www.cypress.com/documentation/application-notes/an61345-designing-ez-usb-fx2lp-slave-fifo-interface) - как ими пользоваться, чтобы не изобретать велосипед? что и где в них смотреть? Как заливать готовые примеры в чип? Какую прошивку чипа использовать? 1) За GPIF не скажу, а вот со SlaveFIFO работать приходилось. Вполне себе удобный интерфейс с 16-разрядной шиной. Тем более у Вас как раз 16 бит нужно передавать. 2) Для установки регистров контроллера нужно писать прошивку. У Сайпрессов где-то была заготовка, туда свои установки регистров прописываете. Но перед этим нужно хорошо разобраться с контроллером, что и как настраивать. Там свои тонкости. Я всех нюансов сейчас уже не помню, но тогда пришлось довольно долго изучать сам контроллер, прежде чем что-то написать. У меня при включении один раз конфигурировался USB, и далее ПЛИС связывалась с компьютером уже без вмешательства CPU. 3) Сначала хорошо изучить документацию. В сети некоторые главы есть на русском. Прошивка в чип заливается через фирменную утилитку CyConsole. А вообще контроллер сам умеет прошиваться через внешнюю EEPROM при включении питания. Прошивка в EEPROM заливается опять таки, через CyConsole.
|
|
|
|
|
Aug 25 2015, 11:48
|

Участник

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484

|
Цитата(dima32rus @ Aug 25 2015, 15:23)  3) Сначала хорошо изучить документацию. В сети некоторые главы есть на русском. Прошивка в чип заливается через фирменную утилитку CyConsole. А вообще контроллер сам умеет прошиваться через внешнюю EEPROM при включении питания. Прошивка в EEPROM заливается опять таки, через CyConsole. Изучил, прочитал на русском, полистал на английском. С прошивкой контроллера тоже все ясно. Не ясно со структурой примеров. В примерах куча файлов - какой зачеми куда его вставлять - непонятно, Цитата(dima32rus @ Aug 25 2015, 15:23)  2) Для установки регистров контроллера нужно писать прошивку. У Сайпрессов где-то была заготовка, туда свои установки регистров прописываете. Но перед этим нужно хорошо разобраться с контроллером, что и как настраивать. Там свои тонкости. Я всех нюансов сейчас уже не помню, но тогда пришлось довольно долго изучать сам контроллер, прежде чем что-то написать. У меня при включении один раз конфигурировался USB, и далее ПЛИС связывалась с компьютером уже без вмешательства CPU. Не могли бы вы подробнее рассказать о том, как писать прошивку? Где посмотреть заготовку?
|
|
|
|
|
Aug 25 2015, 12:45
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(aleshanoff @ Aug 25 2015, 14:48)  В примерах куча файлов - какой зачеми куда его вставлять - непонятно Тот шаблон, который использовал я, содержал в себе две функции TD_Init и TD_Poll. Первая вызывается один раз при включении контроллера. Там у меня прописывалась инициализация. Вторая находитя в теле цикла while(TRUE) и потому вызывается постоянно - здесь идет обработка пользовательских задач. Вот пример моей функции инициализации: Код void TD_Init(void) // Called once at startup { REVCTL = 0x01; SYNCDELAY;
// set the CPU clock to 48MHz CPUCS = 0x10; SYNCDELAY; // set the slave FIFO interface to 30MHz IFCONFIG = 0xA3; SYNCDELAY;
// Registers which require a synchronization delay, see section 15.14 // FIFORESET FIFOPINPOLAR // INPKTEND OUTPKTEND // EPxBCH:L REVCTL // GPIFTCB3 GPIFTCB2 // GPIFTCB1 GPIFTCB0 // EPxFIFOPFH:L EPxAUTOINLENH:L // EPxFIFOCFG EPxGPIFFLGSEL // PINFLAGSxx EPxFIFOIRQ // EPxFIFOIE GPIFIRQ // GPIFIE GPIFADRH:L // UDMACRCH:L EPxGPIFTRIG // GPIFTRIG // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well... // ...these have been replaced by GPIFTC[B3:B0] registers
// default: all endpoints have their VALID bit set // default: TYPE1 = 1 and TYPE0 = 0 --> BULK // default: EP2 and EP4 DIR bits are 0 (OUT direction) // default: EP6 and EP8 DIR bits are 1 (IN direction) // default: EP2, EP4, EP6, and EP8 are double buffered
// we are just using the default values, yes this is not necessary... EP1OUTCFG = 0xA0; //1010 0000, active, BULK, 1x64 bytes SYNCDELAY; EP1INCFG = 0xA0; //1010 0000, active, BULK, 1x64 bytes SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xE0; // 1110 0000, active, IN, BULK, 4x512 bytes SYNCDELAY; EP4CFG = 0x00; //not active SYNCDELAY;
EP6CFG = 0xA2; // 1010 0010, active, OUT, BULK, 2x512 bytes SYNCDELAY; // EP8CFG = 0x00; //not active // SYNCDELAY; EP8CFG = 0xA0; // 1010 0000, active, OUT, BULK, 2x512 bytes SYNCDELAY; FIFORESET = 0x80; SYNCDELAY; FIFORESET = 0x02; SYNCDELAY; FIFORESET = 0x04; SYNCDELAY; FIFORESET = 0x06; SYNCDELAY; FIFORESET = 0x08; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; EP2FIFOCFG = 0x00; SYNCDELAY; EP4FIFOCFG = 0x00; SYNCDELAY; EP6FIFOCFG = 0x00; SYNCDELAY; EP8FIFOCFG = 0x00; SYNCDELAY;
EP2FIFOCFG = 0x0C; // 0000 1100, AUTOIN SYNCDELAY; EP6FIFOCFG = 0x10; // 0001 0000, AUTOOUT SYNCDELAY; EP8FIFOCFG = 0x00; // 0000 0000 SYNCDELAY;
PINFLAGSAB = 0x8A; //FLAGA - EP6 EMPTY, FLAGB - EP2 EMPTY SYNCDELAY; PINFLAGSCD = 0xAC; //FLAGC - EP2 FULL, FLAGD - EP6 EMPTY SYNCDELAY; // INPKTEND = 0x00; // SYNCDELAY; // OUTPKTEND = 0x00; // SYNCDELAY; FIFOPINPOLAR = 0x00; // Activ LOW SYNCDELAY;
EP2AUTOINLENH = 0x02; EP2AUTOINLENL = 0x00;
PORTACFG = 0x80; // FLAGD SYNCDELAY;
REVCTL = 0x00; SYNCDELAY; OEA |= 0x01; PA0 = 1; //CLEAR = 0; } Шаблон должен быть на сайте Cypress. aleshanoff, посмотрите здесь AN61345 - Designing With EZ-USB® FX2LP™ Slave FIFO Interface. Это должно быть как раз то, что нужно. С этой аппликухи я делал свой проект. Там и документация и шаблоны имеются. Она, правда, поновее чем та, которую скачивал я. Но смысл тот же.
|
|
|
|
|
Aug 25 2015, 18:25
|

Участник

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484

|
Цитата(dima32rus @ Aug 25 2015, 16:45)  посмотрите здесь AN61345 - Designing With EZ-USB® FX2LP™ Slave FIFO Interface. Это должно быть как раз то, что нужно. С этой аппликухи я делал свой проект. Там и документация и шаблоны имеются. Она, правда, поновее чем та, которую скачивал я. Но смысл тот же. Да, как раз этот пример я и хотел взять за основу. для ПЛИС режим Loopback подойдет. Уже прошил чип из папки FX2LP firmware файлами slave.hex и slave.iic. Определился как Cypress FX2LP StreamerExample Device. Просмотрел файл fw.c , но так и не понял, как его изменить. А если и разберусь, то что делать дальше? Подскажите, пожалуйста, только шапками не закидывайте. Сейчас читаю описание к проекту, но труднова-то идет -всю жизнь немецкий учил.
Сообщение отредактировал aleshanoff - Aug 25 2015, 20:42
|
|
|
|
|
Aug 25 2015, 23:16
|

Участник

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484

|
После 5 часового чтения форумов, даташитов и прочего. Решил остановиться на режиме GPIF, чтобы не загружать ПЛИС. За основу хочу взять следующий пример в Auto mode как master. Там есть файл gpif.c . Подскажите, пожалуйста, как его модифицировать, чтобы все заработало?
|
|
|
|
|
Aug 26 2015, 02:23
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(aleshanoff @ Aug 26 2015, 04:16)  Решил остановиться на режиме GPIF, чтобы не загружать ПЛИС. Ну так ПЛИС и существует для того, чтобы ее загружали...  Теперь по существу из своего опыта: С CY7C68013A все замечательно работает, быстро передаются данные. Но! Проблема в драйверах. Если раньше можно было обойтись самописными драйверами, то теперь неподписанный драйвер не установишь в Win 7 и старше. Даже для виртуального COM порта в Win 8 inf файл должен быть подписан. Если для собственного использования проверку подписи еще можно отключить, то для продажи устройств на сторону такой способ не годится. Ну и для коммеческого использования, по хорошему, также нужен свой PID. Поэтому, намучавшись с драйверами, для себя я решил использовать для связи по USB чипы FTDI. К ним поставляется драйвер. А Cypress - для "стандартных" устройств, для которых в Windows не требуются драйвера.
|
|
|
|
|
Aug 26 2015, 04:14
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(aleshanoff @ Aug 25 2015, 21:25)  Просмотрел файл fw.c , но так и не понял, как его изменить. А если и разберусь, то что делать дальше? В файле fw.c помимо прочих объявлены две функции, с которыми Вам придется работать. Код void TD_Init(void); void TD_Poll(void); Определения функций находятся в файле slave.c TD_Init вызывается однократно и служит для начальной пользовательской инициализации контроллера, т.е. для настройки периферии. В ней нужно прописывать значения в регистры. Выше я привел пример того, как это делается у меня. TD_Poll вызывается постоянно и служит как бы менеджером пользовательских задач. Хотя никто Вам не запрещает написать свои собственные функции. Как у Вас с языком С? Пишете код инициализации контроллера, в зависимости от того, что хотите получить. Тут мало просто просмотреть доки. Нужно вникнуть. Я в свое время потратил несколько месяцев на изучение всего этого дела. В самом USB тоже хорошо бы разобраться. Если что, могу подкинуть литературку  Цитата(aleshanoff @ Aug 25 2015, 21:25)  Сейчас читаю описание к проекту, но труднова-то идет -всю жизнь немецкий учил. Мне мой немецкий тоже доставляет неудобства. Но со временем технические тексты стали читаться более менее. Произношение, конечно, немецкое. Одно "енабле" и "дисабле" чего только стоит))))) Цитата(aleshanoff @ Aug 26 2015, 02:16)  После 5 часового чтения форумов, даташитов и прочего. Решил остановиться на режиме GPIF, чтобы не загружать ПЛИС. За основу хочу взять следующий пример в Auto mode как master. Там есть файл gpif.c . Подскажите, пожалуйста, как его модифицировать, чтобы все заработало? Вот здесь подсказать ничего не могу. Сам использовал slaveFIFO.
Сообщение отредактировал dima32rus - Aug 26 2015, 04:18
|
|
|
|
|
Aug 26 2015, 06:22
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(andreichk @ Aug 26 2015, 10:41)  там и драйвер для любой винды лехко собирается То, что драйвер легко собирается, не значит, что его не нужно подписывать
Сообщение отредактировал alevnew - Aug 26 2015, 06:22
|
|
|
|
|
Aug 26 2015, 08:15
|

Участник

Группа: Участник
Сообщений: 68
Регистрация: 2-05-15
Из: Смоленск
Пользователь №: 86 484

|
Цитата(dima32rus @ Aug 26 2015, 08:14)  В файле fw.c помимо прочих объявлены две функции, с которыми Вам придется работать.
Как у Вас с языком С? Пишете код инициализации контроллера, в зависимости от того, что хотите получить. Тут мало просто просмотреть доки. с Языком С еще хуже чем с английским))) но если Родина прикажет - выучим и разберемся)))
|
|
|
|
|
Aug 26 2015, 10:52
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(aleshanoff @ Aug 26 2015, 13:38)  И совсем тупой вопрос. файл.c - это Си или С++? Си. Исходники С++ обычно имеют расширение .срр.
|
|
|
|
|
Aug 26 2015, 14:16
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(andreichk @ Aug 26 2015, 12:05)  ну дык и подпишите, там есть утилитка специально для этого. хоть своим именем его обзовите http://sourceforge.net/projects/libusb-win32/ качаем отсюда Да, действительно генерит inf и подписывает своими подписью-сертификатом и устанавливает этот сертификат в систему. А при установке этого сертификата в Win 8 проблемы не возникают?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|