|
Помогите c Cypress CY7C68013, Изохронная IN точка и FIFO. |
|
|
|
Jan 28 2009, 19:26
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-02-08
Пользователь №: 35 238

|
Привет. Начал разбиратся с сайпресом, столкнулся с проблемой, конфигурирую EP2 как ISOC IN AUTOIN=1. Выбираю нулевой адресс fifo. С ПЛИС дергаю лапкой SLWR и/или PKEND. Тактовую ПЛИС беру IFCLK = 48МГц. Наблюдается следющее: Если дергать лапкой SLWR, сигнал FULL = 0, тоже просходит если дернут PKEND 4 раза (по числу буфферов) ,EMPTY ведет себя адекватно после первого клока записи или окончания пакета EMPTY = 0. Инитил так, больше ничего не делал: CODE REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1 SYNCDELAY;
CPUCS = 0x12; SYNCDELAY;
IFCONFIG = 0xE3; SYNCDELAY;
EP2CFG = 0xD0; // EP2 is DIR=IN, TYPE=ISO SYNCDELAY;
FIFORESET = 0x82; // Reset the FIFO SYNCDELAY; FIFORESET = 0x82; // Reset the FIFO SYNCDELAY; FIFORESET = 0x82; // Reset the FIFO SYNCDELAY; FIFORESET = 0x82; // Reset the FIFO SYNCDELAY;
EP2FIFOCFG = 0x0C; // EP2 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0 SYNCDELAY; EP2AUTOINLENH = 0x02; // Auto-commit 512-byte packets SYNCDELAY; EP2AUTOINLENL = 0x00; SYNCDELAY;
PINFLAGSAB = 0x00; SYNCDELAY;
PINFLAGSCD = 0x00; SYNCDELAY;
Конечная точка сконфигурировал так: CODE ;; Endpoint Descriptor db DSCR_ENDPNT_LEN ;; Descriptor length db DSCR_ENDPNT ;; Descriptor type db 82H ;; Endpoint number, and direction db ET_ISO ;; Endpoint type db 00H ;; Maximun packet size (LSB) db 02H ;; Max packect size (MSB) db 01H ;; Polling interval Не могу понять, почему он не отсылает пакеты. И достаточно ли USB Console что бы проконтролировать, она мне не зависимо состояния буффера говорит: Isoc IN failed.
Сообщение отредактировал skyspark - Jan 28 2009, 19:27
|
|
|
|
|
Feb 4 2009, 21:46
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424

|
Я сама тоже разбираюсь с этим МК, режим slave fifo. Но autoin у меня работает. Очень помогла статья: http://www.efo.ru/doc/Cypress/Cypress.pl?2524Зато не работает autoout. Чтобы не плодить много похожих тем, опубликую свой вопрос здесь. Сейчас пытаюсь сделать просто закольцовку данных в режиме slave fifo. Мастером служит ПЛИС. Интерфейс асинхронный, autoin, autoout. Данные должны передаваться с компа в 6кт, затем в ПЛИС, затем из ПЛИС в 2кт и в комп. Проблема в том, что при выставлении режима autoout при попытке послать данные из CyConsole в 6 кт, передача не проходит, CyConsole выдает следующее: Bulk OUT Transfer Bulk OUT failed Если не делать autoout, то данные 2 раза отправляются (в силу того, что буферизация двойная), а потом затыкаются. При этом флаг empty на выходе МК не меняется, следовательно ПЛИС и не забирает с него данные. Если делать только in передачу (из ПЛИС в МК и комп), то все нормально работает. Для out передачи меняла кт, меняла ногу для флага, но никаких изменений после этого не последовало. Вот код инициализации slave fifo: void TD_Init (void) { REVCTL = 0x03; // MUST set REVCTL.0 and REVCTL.1 to 1 SYNCDELAY; CPUCS = 0x10; // set 48MHz clk for CPU SYNCDELAY; // this defines the external interface to be the following: // use slave FIFO interface pins driven async by external master // enable slave fifo mode IFCONFIG = 0xcb; SYNCDELAY; // sets EP2 valid for IN's // and defines the endpoint for 512 byte packets, 2x buffered EP2CFG = 0xe2; SYNCDELAY; // sets EP6 valid for OUT's // and defines the endpoint for 512 byte packets, 2x buffered EP6CFG = 0xa2; SYNCDELAY; FIFORESET = 0x80; // reset all FIFOs SYNCDELAY; FIFORESET = 0x02; //reset FIFO EP2 SYNCDELAY; FIFORESET = 0x04; //reset FIFO EP4 SYNCDELAY; FIFORESET = 0x06; //reset FIFO EP6 SYNCDELAY; FIFORESET = 0x08; //reset FIFO EP8 SYNCDELAY; FIFORESET = 0x00; //return to normal operation SYNCDELAY; EP2FIFOCFG = 0x04; SYNCDELAY; // this lets the FX2 auto commit IN packets, gives // ability to send zero length packets, // and sets the slave FIFO data interface to 8-bits EP2FIFOCFG = 0x0c; SYNCDELAY; // this lets the FX2 auto receive out packets, gives no // ability to send zero length packets, // and sets the slave FIFO data interface to 8-bits */ EP6FIFOCFG = 0x10; SYNCDELAY; // defines FLAGB as full for 2ep // FLAGA as empty for 6ep PINFLAGSAB = 0xca; SYNCDELAY; // FLAGC as empty flag for 2ep // won't generally need FLAGD (default) PINFLAGSCD = 0x04; PORTACFG = 0x40; // used PA7/FLAGD/SLCS as a SLCS FIFOPINPOLAR = 0x00; // set all slave FIFO interface pins as active low SYNCDELAY; //set max in paket to 512 bytes EP2AUTOINLENH = 0x02; SYNCDELAY; EP2AUTOINLENL = 0x00; SYNCDELAY; OUTPKTEND = 0x86; // arm first buffer by writing OUTPKTEND w/skip=1 SYNCDELAY; OUTPKTEND = 0x86; // arm second buffer by writing OUTPKTEND w/skip=1 SYNCDELAY; } Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста.
|
|
|
|
|
Feb 6 2009, 11:26
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Мария Е @ Feb 5 2009, 08:16)  Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста. Может, вы посылаете чанк размером, меньше чем оговоренный в конфиге? Скажем, если оговорены чанки по 64 байта, а вы послали меньше, то это будет признаком окончания сессии. Вообще же чип работает ОК, но с докой, помнится, у нас тоже были какие-то похожие на ваши непонятки. В свое время помучались, методом проб и ошибок подобрали нужный режим, зашили в софт и давным-давно забыли, в чем была заморочка.
|
|
|
|
|
Feb 6 2009, 14:26
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-02-08
Пользователь №: 35 238

|
Цитата(Мария Е @ Feb 5 2009, 00:46)  Я сама тоже разбираюсь с этим МК, режим slave fifo. Но autoin у меня работает. Очень помогла статья: http://www.efo.ru/doc/Cypress/Cypress.pl?2524Я разобрался с проблемой. Статья действительно помогла  Дело было в том, что если поднят флаг FULL, то необходимо запрещать запись в fifo, со стороны мастера. В противном случае КТ перестает работать. Цитата(Мария Е @ Feb 5 2009, 00:46)  Если не делать autoout, то данные 2 раза отправляются (в силу того, что буферизация двойная), а потом затыкаются. При этом флаг empty на выходе МК не меняется, следовательно ПЛИС и не забирает с него данные. Было каким-то похожим образом, вечером посмотрю.
|
|
|
|
|
Feb 7 2009, 22:47
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 20-02-08
Пользователь №: 35 238

|
Мария. Не понятно, зачем дважды конфигурировать fifo на EP2, но это ни чего не меняет. А вот где EP6AUTOINLENх. Может по этому не взводит флаги. А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС.
|
|
|
|
|
Feb 15 2009, 20:12
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424

|
Цитата(skyspark @ Feb 8 2009, 01:47)  Мария. А вот где EP6AUTOINLENх. Может по этому не взводит флаги. А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС. Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую. А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет) Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok  )
|
|
|
|
|
Mar 4 2009, 13:49
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(Мария Е @ Feb 16 2009, 01:12)  Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую. А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет) Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok  ) Мария, или alexok - не поделитесь кодом инициализации? Беда 1 в 1 как Мария описала - если автоаут - не передаются данные, иначе передаются, пока буффер не заполнится. Не могу понять, все по доке и по примеру из ссылки - не работает. Цитата(Мария Е @ Feb 16 2009, 01:12)  Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую. А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет) Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok  ) ну вроде немного разобрался, если кому интересно на будущее: После ресета EP2CS = 0x28 (То есть фифо FULL и 4 пакета в буфере, интересно зачем?) Чтобы это убрать нужно (я использую EP2): EP2FIFOCFG = 0x01; //выключить автоаут, хотя по умолчанию он и не стоит SYNCDELAY; //потом очищаем "имеющиеся" 4 пакета в FIFO OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; //и вот теперь уже включить автоаут EP2FIFOCFG = 0x11; SYNCDELAY; после этого вроде работает.
|
|
|
|
|
Mar 5 2009, 11:20
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(alexkok @ Mar 5 2009, 10:24)  Если ещё нужно, то вот моя конфигурация.
EPs_config.txt ( 2.25 килобайт )
Кол-во скачиваний: 789Спасибо!!! Все вроде заработало, но в процессе обнаружился такой глюк (или может так и должно быть?): Допустим делаю конфигурцию EP2 AutoOut и EP4 AutoIn. Все по 512 байт, bulk. Slave FIFO. Async. Если я ставлю буферизацию EP2=2x - все работает. Если я ставлю буферизацию EP2=4x, то EP2 работает, а вот EP4 игнорирует входные данные, но на PKTEND все же реагирует, но присылает пустой пакет. Причем даже если отключить EP2 (EP2CFG=0) - то все равно EP4 ведет себя так же. Если же буферизация EP2=2x - то все работает ОК. Кто-нибудь сталкивался с таким, ли может в даташите где прописано?
|
|
|
|
|
Mar 6 2009, 10:10
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
Цитата(alexkok @ Mar 5 2009, 22:46)  В TRM на фиг. 1-17 приведены возможные конфигурации ендпойнтов. А слона то я и не приметил  Спасибо! Теперь все стало на свои места.
|
|
|
|
|
Mar 6 2009, 14:21
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

|
А вот еще вопрос возник, мож кто сталкивался: Есть EP4, AUTOIN=1 На каком то этапе (ну какая-либо исключительная ситуация, хост не принимает данные), нужно очистить данные, находящиеся в FIFO. Пробовал так: 1. Переводим в AUTOIN=0 2. Делаем FIFORESET 3. Делаем EP4BCH:L=0 4. делаем INPKTEND=0x84 два раза
Не работает, уж по всякому пробовал. Максимум, чего добился, приходят вместо полных пакеты нулевой длины. Но как было в буфере 2 пакета, так и остается. И флаг FULL не сбрасывается.
Мож кто делал подобное?
Сообщение отредактировал alevnew - Mar 6 2009, 14:22
|
|
|
|
|
Mar 16 2010, 19:48
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Проблема с установкой драйверов под Windows7. Скачал новый пакет разработчика с новыми драйверами: http://www.cypress.com/?rID=34870Подправил, как описано в мануале, VID и PID. Собственно проблема в том, что нет цифровой подписи у драйвера. От сюда не могу поставить драйвер для CY7C68013A. Система сначала говорит, что устанавливаемый драйвер не имеет сертификата, все равно продолжить? Жму да. После установки выдает сообщение, прикрепленное к посту. Пробовал делать и такой маневр: Код Для отключения проверки цифровой подписи при установке драйверов я использую: gpedit.msc=>Конфигурация_пользователя=>Администрат ивные_шаблоны=>Система=>Установка_драйвера=>Цифров ая_подпись_драйверов_устройств=>Включен=>> Пропустить . Результат тот же. Так же отключал UAC при помощи утилиты UAC off. Что еще можно сделать? Возможно ли сделать цифровую подпись своими силами?
Эскизы прикрепленных изображений
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Mar 17 2010, 07:37
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(Vitaliy_ARM @ Mar 16 2010, 22:48)  Проблема с установкой драйверов под Windows7. ... Эх, лучше бы Вам задать этот вопрос в теме Проблема CyUSB.sys и 64-х битных Windows. Судя по всему Вы как раз и пытаетесь установить CyUsb.sys под Windows 7 64 bit (x64). Вот пара ссылок в интернете: Windows 7 - Guide to Installing Un-Signed Drivers in Win 7 x64 и Loading Unsigned Drivers in Windows 7 and Vista 64-bit (x64). Ключевые слова для поиска в интернете - названия тем ссылок, а также "Windows 7 Test Mode". Лично у меня, использовать CyUsb.sys под Windows 7 x64 получается только в режиме Test Mode и при выборе во время загрузки Windows по F8 "Disable Driver Signature Enforcement". То есть, только до следующей перезагрузки Windows 7  . Предлагаемая в интернете утилита Driver Signature Enforcement Overrider, по отзывам пользователей, может привести к краху Windows 7. Достаточно экзотическое решение, предложенное в интернете - однократно загрузить компьютер с отключенной проверкой подписи драйверов, а затем вместо перезагрузки переводить компьютер в спящий режим. Правильное решение - подписать драйвер CyUsb.sys или использовать класс устройств USB, поддерживаемый Windows. В XP/SP3, Vista и Win7 добавлена поддержка еще одного класса: USB Video Class. Дальнейшее обсуждение, давайте продолжим в теме Проблема CyUSB.sys и 64-х битных Windows.
|
|
|
|
|
Jun 10 2010, 10:02
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(alevnew @ Mar 6 2009, 18:21)  А вот еще вопрос возник, мож кто сталкивался: Есть EP4, AUTOIN=1 На каком то этапе (ну какая-либо исключительная ситуация, хост не принимает данные), нужно очистить данные, находящиеся в FIFO. Пробовал так: 1. Переводим в AUTOIN=0 2. Делаем FIFORESET 3. Делаем EP4BCH:L=0 4. делаем INPKTEND=0x84 два раза
Не работает, уж по всякому пробовал. Максимум, чего добился, приходят вместо полных пакеты нулевой длины. Но как было в буфере 2 пакета, так и остается. И флаг FULL не сбрасывается.
Мож кто делал подобное? Возникла аналогичная проблема: поднял в кипарисе CY7C68013A прерывание по которому нужно очистить FIFO EP2 IN и ничего не очищается, хотя светоидиот по прерыванию мигает. Может за год уже кто-нибудь решил эту проблему?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|