|
|
  |
USB, EZ-USB FX2 |
|
|
|
Nov 16 2010, 22:38
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Konst_777 @ Nov 16 2010, 21:40)  Да, в этом случае PKTEND можно не использовать. Важно, чтобы этот сигнал не висел в воздухе и не был в активном состоянии (может быть и "0" и "1" в зависимости от установок регистра FIFOPINPOLAR). не висит, контроллер туда сразу 1 выдает и FIFOPINPOLAR весь себе в нулях (см.ниже). Это дело самым первым проверил Цитата(Konst_777 @ Nov 16 2010, 21:40)  Datasheet для FX2LP. Datasheet для FX2 не смог найти на сайте Cypress. Полагаю, что временные диаграммы одинаковы для FX2 и FX2LP. Но проверять лень. Поэтому выкладываю datasheet для FX2: извиняюсь, неточно написал. Действительно, FX2LP. Но, к сожалению, суть дела не меняет... даташит, конечно, уже изучался ранее. Есть все-таки надежда, что сам железячный интерфейс работает корректно, потому как ранее на том же месте SX2 нормально съедала дескриптор и компом распознавалась Чую, что грабли уже близко... но никак не доберусь.. TD_Init() весь написал заново на всякий случай, прямо по шагам от TRM: Код void TD_Init(void) // Called once at startup { /* OLD */ BREAKPT &= ~bmBPEN; // to see BKPT LED go out TGE Rwuen = TRUE; // Enable remote-wakeup
/* my code */
CPUCS = 0x10; // 48 MHz
SYNCDELAY; PINFLAGSAB = 0xF0; // FLAGA - indexed, FLAGB - EP8FF SYNCDELAY; PINFLAGSCD = 0x08; // FLAGC - EP2EF, FLAGD - indexed SYNCDELAY;
FIFOPINPOLAR = 0x00;
SYNCDELAY; // PORTACFG = 0x40; // FLAGD is /CHIPSELECT
//////////// STEP 1 TRM
SYNCDELAY; // IFCONFIG = 0xC8; // for async
//////////// STEP 2 TRM
SYNCDELAY; // IFCONFIG |= 0x03; // enable slave FIFO
//////////// STEP 3 TRM
SYNCDELAY; // REVCTL=0x03;
//////////// STEP 4 TRM
// EP2 512 BULK OUT 2x SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA2; // BUF[1:0]=10 for 2x buffering // EP6 512 BULK IN 2x SYNCDELAY; // EP8CFG = 0xE2; // BUF[1:0]=10 for 2x buffering // EP4 and EP6 are not used in this implementation... SYNCDELAY; // EP4CFG = 0x20; // clear valid bit SYNCDELAY; // EP6CFG = 0x60; // clear valid bit
//////////// STEP 5 TRM
SYNCDELAY; FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x02; // reset, FIFO 2 SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x04; // reset, FIFO 4 SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x06; // reset, FIFO 6 SYNCDELAY; // FIFORESET = 0x08; // reset, FIFO 8
SYNCDELAY; // OUTPKTEND = 0x82; SYNCDELAY; // OUTPKTEND = 0x82;
SYNCDELAY; // EP2FIFOCFG = 0x15; // AUTOOUT=1, WORDWIDE=1 SYNCDELAY; // EP8FIFOCFG = 0x0D; // AUTOIN=1, WORDWIDE=1
SYNCDELAY; EP8AUTOINLENH = 0x02; SYNCDELAY; EP8AUTOINLENL = 0x00;
SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x00; // deactivate NAK-ALL
} Посадил девайс на супрессовский драйвер. То же самое - отправляется 512 байт, возвращается 2, т.е. дело точно не в драйвере  (сам девайс тупо получает пакет 512 байт, модифицирует первые 4 байта и отсылает пакет назад)
|
|
|
|
|
Jun 29 2011, 10:22
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Подниму еще раз тему. Итак, имеется: Slave FIFO, асинхронный интерфейс, шина данных 16 бит, /RD соединен с /OE и идет на /OE контроллера, /WR с /WR Контрольные точки - 0x02 IN, 0x06 OUT, bulk, 512, четверная буферизация. Анализируются флаги FLAGB, FLAGC, которые настроены как FLAGB: EP2FF, FLAGC: EP6EF После передачи с хоста данных, FLAGC падает (очередь не пустая). Начинается чтение... но FLAGC более не поднимается. Осциллограммы все в порядке, выборка кристалла, чтение, адрес FIFO - всы выставляется корректно. Длительность /CS - 100ns, /RD - 80ns Не понимаю, куда копать. FLAGD настроен как SLCS Вот моя инициализация: Код void TD_Init(void) // Called once at startup {
PORTACFG = 0x40;
REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1 SYNCDELAY; CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation IFCONFIG = 0xCB; // Configures FX2LP in Slave FIFO mode SYNCDELAY; EP2CFG = 0xE0; // EP2IN, bulk, size 512, 4x buffered SYNCDELAY; EP6CFG = 0xA0; // EP6OUT, bulk, size 512, 4x buffered SYNCDELAY;
FIFORESET = 0x80; // set NAKALL bit to NAK all transfers from host SYNCDELAY; FIFORESET = 0x02; // reset EP2 FIFO SYNCDELAY; FIFORESET = 0x06; // reset EP6 FIFO SYNCDELAY; FIFORESET = 0x00; // clear NAKALL bit to resume normal operation SYNCDELAY;
OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump” SYNCDELAY; OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump” SYNCDELAY; OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump” SYNCDELAY; OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump” SYNCDELAY;
EP6FIFOCFG = 0x00; // AUTOOUT=0 SYNCDELAY; EP6FIFOCFG = 0x11; // AUTOOUT=1 SYNCDELAY; EP2FIFOCFG = 0x09; // AUTOIN=1 SYNCDELAY; PINFLAGSAB = 0xC0; // FLAGA - indexed, FLAGB - EP2FF SYNCDELAY; PINFLAGSCD = 0x0A; // FLAGC - EP6EF, FLAGD - indexed SYNCDELAY;
EP6AUTOINLENH = 0x02; SYNCDELAY; EP6AUTOINLENL = 0x00; SYNCDELAY;
}
|
|
|
|
|
Jun 30 2011, 07:38
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 16-01-08
Пользователь №: 34 137

|
Добрый день! есть несколько вопросов по устаревшему CY7C68001. 1. Есть ли возможность сбросить fifo out (та, с которой данные забираются на комп) без сброса всей микросхемы? 2. Есть ли возможность сбросить ту же фифошку с помощью компа? Может какая команда есть? 3. Правильно ли я понимаю, что регистр flush принудительно отправляет данные на комп? 4. Не могли немножко по подробнее рассказать про буферизацию, какую использовать?
Спасибо!
|
|
|
|
|
Jul 13 2011, 08:41
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 6-04-09
Пользователь №: 47 226

|
подскажите где и у кого можно купить отладочные платы cypress для high speed периферии?
|
|
|
|
|
Jul 18 2011, 11:04
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(spindelsinn @ Jul 13 2011, 12:41)  подскажите где и у кого можно купить отладочные платы cypress для high speed периферии? в терре есть такое чудо: http://www.terraelectronica.ru/pdf/DIGILENT/DL-USB2.pdf2 AllПодскажите, пожалуйста, такой момент. Файл IIC, появляющийся после компиляции в кейле, содержит байт-в-байт содержимое EEPROM? Что-то у меня длина, PID/VID не сходятся с документацией. Больше длина интересует, т.к. судя по этому файлу, длина 0х0003, а реальная - 2 с гаком килобайта
|
|
|
|
|
Jul 19 2011, 17:25
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(toweroff @ Jul 18 2011, 14:04)  Подскажите, пожалуйста, такой момент. Файл IIC, появляющийся после компиляции в кейле, содержит байт-в-байт содержимое EEPROM?... Да Цитата(toweroff @ Jul 18 2011, 14:04)  ...Что-то у меня ... длина 0х0003, а реальная - 2 с гаком килобайта Это всего один из множества блоков данных. Первые блоки данных содержат код обработки прерываний. Цитата(toweroff @ Jul 18 2011, 14:04)  ...Что-то у меня ... PID/VID не сходятся с документацией. d:\cypress\usb\bin\hex2bix -i -m 16384 -f 0xC2 -v 0x04B4 -p 0x0081 -c 0x41 -o FX2LP.iic FX2LP.hex Проверьте Вашу командную строку для получения файла *.iic. Точнее, проверьте значения параметра -v (VID) и параметра -p (PID). Если Вы не используете эти параметры, то в файл *.iic будут записаны значения по умолчанию: VID=0x0547, PID=0x2131.
|
|
|
|
|
Jul 19 2011, 17:57
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(toweroff @ Jul 19 2011, 20:31)  ...Я так понял, что эти первые 3 байта - прыжок на загрузчик, который потом и загрузит содержимое EEPROM? Нет, просто сам код всегда сегментирован. Яркий пример - таблица прерываний: Код CSEG AT 0h ; Reset location LJMP Start ; jump to start Program CSEG AT 3h ; External Interrupt 0 (/INT0) RETI CSEG AT 0Bh ; Timer 0 Overflow LJMP Timer0_ISR CSEG AT 13h ; External Interrupt 1 (/INT1) RETI CSEG AT 1Bh ; Timer 1 Overflow RETI и т.д. То есть, между участками кода есть зазоры. Файл *.iic отображает содержимое *.hex файла. Если преобразовать *.hex файл таким образом, чтобы он содержал весь код, начиная с нулевого адреса и заканчивая максимальным адресом памяти программ, то и *.iic файл вместо десятков сегментов будет содержать один.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|