реклама на сайте
подробности

 
 
> FX2LP, CY7C68013A, BULK IN transfer failed with Error Code:997
ilkz
сообщение Dec 3 2015, 06:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Коллеги, добрый день.

Разбираюсь с CY7C68013A в режиме Slave FIFO. Данные принимает-передает ПЛИСка.
AN61345 курил, вроде все более-менее понятно.

Обмен данными провожу в USB Control Center.

BULK OUT в EP2 OUT работает нормально - т.е., с компа в ПЛИСку данные прилетают - я это вижу в SignalTap.
ПЛИСка в ответ отсылает те же данные: выставляет FIFOADDR=2 и записывает принятые данные в чип. Если теперь я выбираю BULK IN EP 0x86 и нажимаю Transfer Data In, то получаю ошибку: BULK IN transfer failed with Error Code:997.

Чип настроен конфигом из AN61345. Код:
Код
#include "fx2.h"
#include "fx2regs.h"
#include "fx2sdly.h"

void TD_Init( void )
{
    CPUCS = 0x12; // CLKSPD[1:0]=10, for 48MHz operation, output CLKOUT

    PINFLAGSAB = 0x08;            // FLAGA - EP2EF
    SYNCDELAY;
    PINFLAGSCD = 0xE0;            // FLAGD - EP6FF
    SYNCDELAY;
    PORTACFG |= 0x80;
    SYNCDELAY;
    IFCONFIG = 0xE3; //Internal clock, 48 MHz, Slave FIFO interface
    SYNCDELAY;

    EP2CFG = 0xA0;                //out 512 bytes, 4x, bulk
    SYNCDELAY;                    
    EP6CFG = 0xE0;                // in 512 bytes, 4x, bulk
    SYNCDELAY;              

    SYNCDELAY;
    FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions
    SYNCDELAY;                    // see TRM section 15.14
    FIFORESET = 0x02;             // reset, FIFO 2
    SYNCDELAY;                    //
    FIFORESET = 0x06;             // reset, FIFO 6
    SYNCDELAY;                    //
    FIFORESET = 0x00;             // deactivate NAK-ALL


    SYNCDELAY;                    //
    EP2FIFOCFG = 0x00;            // AUTOOUT=0, WORDWIDE=1

    SYNCDELAY;                    //
    EP2FIFOCFG = 0x11;            // AUTOOUT=1, WORDWIDE=1

    SYNCDELAY;                    //
    EP6FIFOCFG = 0x0D;            // AUTOIN=1, ZEROLENIN=1, WORDWIDE=1

    SYNCDELAY;

    OEA|=0x02; //Declare PA.1 as output
    SYNCDELAY;
    IOA|=0x02; //output 1 on PA.1
    SYNCDELAY;

    OEC|=0x01; //PC.0 as output (SYNC signal)
    SYNCDELAY;
    IOC|=0x00; //output 0 on PC.0...SYNC signal is LOW
    SYNCDELAY;
    OEC&=0xFD; //PC.1 as input (Clock changing signal)
    SYNCDELAY;
}

void main(void)
{
     TD_Init();
}


Также привожу снапшот времянки ПЛИС:
Прикрепленное изображение

Здесь меня смущает что не дергается FLAG_D.

И вдогонку еще один вопрос:
Судя по коду конфига, после загрузки прошивки в чип, я должен видеть там только 2 ендпоинта: EP2 OUT и EP6 IN. Однако, их там на самом деле больше:
Прикрепленное изображение

Такое ощущение, что прошивка либо не заливается (заливаю через Ppogram FX2->RAM, и он пишет что Programming succeded), либо я что-то не так делаю.

Выручайте - уж очень хочется запустить обмен...

Спасибо!

Сообщение отредактировал ilkz - Dec 3 2015, 06:49
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ilkz
сообщение Dec 3 2015, 09:09
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Насколько я понял на данный момент: делать только TD_Init() - недостаточно.
Нужно уметь отдавать дескрипторы, и крутить цикл с опросом TD_Poll().
В моем случае TD_Poll() может быть пустым, т.к. использую режим Auto.

Все верно?

Так, я взял код из AN61345.
Вот сейчас, например, он виснет на EZUSB_Discon(TRUE) - девайс перестает распознаваться системой.

Сообщение отредактировал ilkz - Dec 3 2015, 09:35
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 05:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016