Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FX2LP
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
ilkz
Коллеги, добрый день.

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

Все верно?

Так, я взял код из AN61345.
Вот сейчас, например, он виснет на EZUSB_Discon(TRUE) - девайс перестает распознаваться системой.
ilkz
Енумерация прошла успешно: в проекте не хватало файлов USBJmpTb.
Видно два моих ендпоинта: EP2OUT и EP6IN. Копаю дальше.
ilkz
Нашел досадную ошибку в коде ПЛИС, исправил - и заработал код из примера Cypress без изменений: чтение из EP6 IN дает правильные данные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.