ilkz 0 3 декабря, 2015 Опубликовано 3 декабря, 2015 (изменено) · Жалоба Коллеги, добрый день. Разбираюсь с 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), либо я что-то не так делаю. Выручайте - уж очень хочется запустить обмен... Спасибо! Изменено 3 декабря, 2015 пользователем ilkz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 3 декабря, 2015 Опубликовано 3 декабря, 2015 (изменено) · Жалоба Насколько я понял на данный момент: делать только TD_Init() - недостаточно. Нужно уметь отдавать дескрипторы, и крутить цикл с опросом TD_Poll(). В моем случае TD_Poll() может быть пустым, т.к. использую режим Auto. Все верно? Так, я взял код из AN61345. Вот сейчас, например, он виснет на EZUSB_Discon(TRUE) - девайс перестает распознаваться системой. Изменено 3 декабря, 2015 пользователем ilkz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 3 декабря, 2015 Опубликовано 3 декабря, 2015 · Жалоба Енумерация прошла успешно: в проекте не хватало файлов USBJmpTb. Видно два моих ендпоинта: EP2OUT и EP6IN. Копаю дальше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 4 декабря, 2015 Опубликовано 4 декабря, 2015 · Жалоба Нашел досадную ошибку в коде ПЛИС, исправил - и заработал код из примера Cypress без изменений: чтение из EP6 IN дает правильные данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться