Перейти к содержанию
    

Помогите c Cypress CY7C68013

Привет.

Начал разбиратся с сайпресом, столкнулся с проблемой, конфигурирую EP2 как ISOC IN AUTOIN=1. Выбираю нулевой адресс fifo. С ПЛИС дергаю лапкой SLWR и/или PKEND. Тактовую ПЛИС беру IFCLK = 48МГц.

Наблюдается следющее:

Если дергать лапкой SLWR, сигнал FULL = 0, тоже просходит если дернут PKEND 4 раза (по числу буфферов) ,EMPTY ведет себя адекватно после первого клока записи или окончания пакета EMPTY = 0.

 

Инитил так, больше ничего не делал:

 

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;

 

Конечная точка сконфигурировал так:

;; 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сама тоже разбираюсь с этим МК, режим 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;

}

 

Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста.

 

Может, вы посылаете чанк размером, меньше чем оговоренный в конфиге? Скажем, если оговорены чанки по 64 байта, а вы послали меньше, то это будет признаком окончания сессии.

 

Вообще же чип работает ОК, но с докой, помнится, у нас тоже были какие-то похожие на ваши непонятки. В свое время помучались, методом проб и ошибок подобрали нужный режим, зашили в софт и давным-давно забыли, в чем была заморочка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сама тоже разбираюсь с этим МК, режим slave fifo. Но autoin у меня работает. Очень помогла статья: http://www.efo.ru/doc/Cypress/Cypress.pl?2524

 

Я разобрался с проблемой. Статья действительно помогла :) Дело было в том, что если поднят флаг FULL, то необходимо запрещать запись в fifo, со стороны мастера. В противном случае КТ перестает работать.

 

Если не делать autoout, то данные 2 раза отправляются (в силу того, что буферизация двойная), а потом затыкаются. При этом флаг empty на выходе МК не меняется, следовательно ПЛИС и не забирает с него данные.

 

Было каким-то похожим образом, вечером посмотрю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мария.

Не понятно, зачем дважды конфигурировать fifo на EP2, но это ни чего не меняет. А вот где EP6AUTOINLENх. Может по этому не взводит флаги.

А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мария.

А вот где EP6AUTOINLENх. Может по этому не взводит флаги.

А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС.

Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.

А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

 

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok :a14: )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.

А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

 

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok :a14: )

 

Мария, или alexok - не поделитесь кодом инициализации? Беда 1 в 1 как Мария описала - если автоаут - не передаются данные, иначе передаются, пока буффер не заполнится. Не могу понять, все по доке и по примеру из ссылки - не работает.

 

Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.

А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

 

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok :a14: )

 

ну вроде немного разобрался, если кому интересно на будущее:

 

После ресета 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;

 

после этого вроде работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мария, или alexok - не поделитесь кодом инициализации? Беда 1 в 1 как Мария описала - если автоаут - не передаются данные, иначе передаются, пока буффер не заполнится. Не могу понять, все по доке и по примеру из ссылки - не работает.

 

ну вроде немного разобрался, если кому интересно на будущее:

 

после этого вроде работает.

Если ещё нужно, то вот моя конфигурация.EPs_config.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если ещё нужно, то вот моя конфигурация.EPs_config.txt

 

Спасибо!!!

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

Допустим делаю конфигурцию EP2 AutoOut и EP4 AutoIn. Все по 512 байт, bulk. Slave FIFO. Async.

Если я ставлю буферизацию EP2=2x - все работает.

Если я ставлю буферизацию EP2=4x, то EP2 работает, а вот EP4 игнорирует входные данные,

но на PKTEND все же реагирует, но присылает пустой пакет.

Причем даже если отключить EP2 (EP2CFG=0) - то все равно EP4 ведет себя так же.

Если же буферизация EP2=2x - то все работает ОК.

 

Кто-нибудь сталкивался с таким, ли может в даташите где прописано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!!!

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

Допустим делаю конфигурцию EP2 AutoOut и EP4 AutoIn. Все по 512 байт, bulk. Slave FIFO. Async.

Если я ставлю буферизацию EP2=2x - все работает.

Если я ставлю буферизацию EP2=4x, то EP2 работает, а вот EP4 игнорирует входные данные,

но на PKTEND все же реагирует, но присылает пустой пакет.

Причем даже если отключить EP2 (EP2CFG=0) - то все равно EP4 ведет себя так же.

Если же буферизация EP2=2x - то все работает ОК.

 

Кто-нибудь сталкивался с таким, ли может в даташите где прописано?

В TRM на фиг. 1-17 приведены возможные конфигурации ендпойнтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В TRM на фиг. 1-17 приведены возможные конфигурации ендпойнтов.

А слона то я и не приметил :)

Спасибо!

Теперь все стало на свои места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот еще вопрос возник, мож кто сталкивался:

Есть EP4, AUTOIN=1

На каком то этапе (ну какая-либо исключительная ситуация, хост не принимает данные), нужно очистить данные, находящиеся в FIFO.

Пробовал так:

1. Переводим в AUTOIN=0

2. Делаем FIFORESET

3. Делаем EP4BCH:L=0

4. делаем INPKTEND=0x84 два раза

 

Не работает, уж по всякому пробовал.

Максимум, чего добился, приходят вместо полных пакеты нулевой длины. Но как было в буфере 2 пакета, так и остается. И флаг FULL не сбрасывается.

 

Мож кто делал подобное?

Изменено пользователем alevnew

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема с установкой драйверов под Windows7.

 

Скачал новый пакет разработчика с новыми драйверами: http://www.cypress.com/?rID=34870

Подправил, как описано в мануале, VID и PID.

Собственно проблема в том, что нет цифровой подписи у драйвера. От сюда не могу поставить драйвер для CY7C68013A. Система сначала говорит, что устанавливаемый драйвер не имеет сертификата, все равно продолжить? Жму да. После установки выдает сообщение, прикрепленное к посту.

 

Пробовал делать и такой маневр:

Для отключения проверки цифровой подписи при установке драйверов я использую:
gpedit.msc=>Конфигурация_пользователя=>Администрат ивные_шаблоны=>Система=>Установка_драйвера=>Цифров ая_подпись_драйверов_устройств=>Включен=>> Пропустить .

Результат тот же.

 

Так же отключал UAC при помощи утилиты UAC off.

 

Что еще можно сделать? Возможно ли сделать цифровую подпись своими силами?

post-29246-1268768218_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема с установкой драйверов под 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот еще вопрос возник, мож кто сталкивался:

Есть EP4, AUTOIN=1

На каком то этапе (ну какая-либо исключительная ситуация, хост не принимает данные), нужно очистить данные, находящиеся в FIFO.

Пробовал так:

1. Переводим в AUTOIN=0

2. Делаем FIFORESET

3. Делаем EP4BCH:L=0

4. делаем INPKTEND=0x84 два раза

 

Не работает, уж по всякому пробовал.

Максимум, чего добился, приходят вместо полных пакеты нулевой длины. Но как было в буфере 2 пакета, так и остается. И флаг FULL не сбрасывается.

 

Мож кто делал подобное?

 

Возникла аналогичная проблема: поднял в кипарисе CY7C68013A прерывание по которому нужно очистить FIFO EP2 IN и ничего не очищается, хотя светоидиот по прерыванию мигает.

 

Может за год уже кто-нибудь решил эту проблему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...