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

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

 

Разбираюсь с 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();
}

 

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

post-67084-1449125003_thumb.png

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

 

И вдогонку еще один вопрос:

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

post-67084-1449125143_thumb.png

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

 

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

 

Спасибо!

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

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


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

Насколько я понял на данный момент: делать только TD_Init() - недостаточно.

Нужно уметь отдавать дескрипторы, и крутить цикл с опросом TD_Poll().

В моем случае TD_Poll() может быть пустым, т.к. использую режим Auto.

 

Все верно?

 

Так, я взял код из AN61345.

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

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

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


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

Енумерация прошла успешно: в проекте не хватало файлов USBJmpTb.

Видно два моих ендпоинта: EP2OUT и EP6IN. Копаю дальше.

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


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

Нашел досадную ошибку в коде ПЛИС, исправил - и заработал код из примера Cypress без изменений: чтение из EP6 IN дает правильные данные.

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


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

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

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

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

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

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

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

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

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

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