|
|
  |
USB, EZ-USB FX2 |
|
|
|
Jun 23 2005, 18:20
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 1-03-05
Из: г.Ростов-на-Дону
Пользователь №: 2 988

|
Цитата(Trashy @ Jun 23 2005, 08:09) Цитата(gammanoid @ Jun 22 2005, 22:54) You can force FX2 to stay in full speed mode via bit7 of configuration byte 0 in the serial EEPROM. У меня он просто не конектился с этим битом... Странно у меня получалось затормозить FX2 на high-speed host'е, Windows при этом ругалась на медленное устройство. Может что-то не там прописано? Бит 7 в конфиг. слове насколько я помню надо прописывать в батнике для генерации .IIC-файла с помощью hex2bix. Вообще- то надо быть очень осторожным с процедурой TD_Init(). Малейшая задержка - устройство не опознано.
|
|
|
|
|
Aug 9 2005, 14:24
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Добрый день господа! помогите не проходите мимо, уже неделю бьюсь .. Есть 013а в 100 ногом корпусе и фпга, стоят на эвалюшн борде(т.е. ошибок монтажа быть не должно, собирал не я, да и обычным паяльником 0403 паять не сахар  ). сайпрес определяеться, примеры из дев.тулса работают (те что не требуют внешних устройств), но вот обмен с фпга в режиме слейв фифо нет. Сделал в фпга внутренний bulkloop (2 фифо и выход одного, нагружен на вход другого), сделал модель контроллера со временными задержками, а в железе не выходит каменный цветок Точнее в балке пишет все 64 байта (усб 1.1), а читает только 2 байта. да и не те что были записанны (смотрю EZ монитором, режим bulkloop). в качестве реф.дезайна под сайпрес использовал сампл FX2 Slave FIFO, посмотрите на функцию инициализации все ли я делаю правильно (режим Avto in/out, bulk, EP4 out, EP8 in) Код CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation IFCONFIG = (1<<IFCLKSRC) | (0<<s3048MHZ) | (1<<IFCLKOE) | (0<<ASYNC) | (1<<IFCFG1) | (1<<IFCFG0); // IFCLKSRC=1 , FIFOs executes on internal clk source // IFCLKOE=0 , drive IFCLK pin signal at 30MHz // IFCLKPOL=0 , Don't invert IFCLK pin signal from internal clk // ASYNC=0 , master samples synchronous // GSTATE=0 , Don't drive GPIF states out on PORTE[2:0], debug WF // IFCFG[1:0]=11, FX2 in slave FIFO mode
SYNCDELAY; REVCTL = (1<<DYN_OUT) | (1<<ENH_PKT); // EP4 is DIR=OUT, TYPE=BULK, SIZE=512, BUF= as is 2x SYNCDELAY; EP4CFG = (1<<VALID) | (0<<DIR) | (1<<TYPE1) | (0 << TYPE0); // EP8 is DIR=IN, TYPE=BULK, SIZE=512, BUF= as is 2x SYNCDELAY; EP8CFG = (1<<VALID) | (1<<DIR) | (1<<TYPE1) | (0 << TYPE0); // EP2, EP6 off SYNCDELAY; EP2CFG = (0<<VALID) | (0<<DIR) | (1<<TYPE1) | (0 << TYPE0); SYNCDELAY; EP6CFG = (0<<VALID) | (1<<DIR) | (1<<TYPE1) | (0 << TYPE0); // reset fifo 4 times for (i = 0; i < 4; i++) { SYNCDELAY; FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; FIFORESET = 0x02; // reset, FIFO 2 SYNCDELAY; // FIFORESET = 0x04; // reset, FIFO 4 SYNCDELAY; // FIFORESET = 0x06; // reset, FIFO 6 SYNCDELAY; // FIFORESET = 0x08; // reset, FIFO 8 SYNCDELAY; // FIFORESET = 0x00; // deactivate NAK-ALL } SYNCDELAY; PINFLAGSAB = 0xD9; // FLAGA - fixed EP4EF, FLAGB - fixed EP4FF // FLAGC - fixed EP8FF, FLAGD - n.u. SYNCDELAY; PINFLAGSCD = 0x0F; SYNCDELAY; PORTACFG = (0<<FLAGD) | (0<<SLCS); // FLAGD, set alt. func. of PA7 pin SYNCDELAY; FIFOPINPOLAR = 0x00; // all signals active low // use auto out mode SYNCDELAY; EP4FIFOCFG = 0x00; // AUTOOUT=0, WORDWIDE=1 // EP4 fifo is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=1 SYNCDELAY; EP4FIFOCFG = (0<<INFM1) | (0<<OEP1) | (1<<AUTOOUT) | (0<<AUTOIN) | (0<<ZEROLENIN) | (0<<WORDWIDE); // 8 bit
// use auto in mode SYNCDELAY; EP8FIFOCFG = 0x00;
// AUTOIN=1, ZEROLENIN=1, WORDWIDE=0 SYNCDELAY; EP8FIFOCFG = (0<<INFM1) | (0<<OEP1) | (0<<AUTOOUT) | (1<<AUTOIN) | (1<<ZEROLENIN) | (0<<WORDWIDE); SYNCDELAY; EP8AUTOINLENH = 0x02; // Auto-commit 512-byte packets SYNCDELAY; EP8AUTOINLENL = 0x00; Все ли правильно в данном коде ? Если да, то может быть есть другие варианты почему происходит так ? Заранее спасибо за ответ.
--------------------
|
|
|
|
|
Aug 12 2005, 01:44
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049

|
Косяк номер рас: Цитата(des00 @ Aug 9 2005, 17:24) SYNCDELAY; EP8AUTOINLENH = 0x02; // Auto-commit 512-byte packets SYNCDELAY; EP8AUTOINLENL = 0x00; У тебя труба 64 байтная. То есть, с такой записью AUTOIN пахать не может. Делай так: Код mov PacketSizeLow,#0x00 mov PacketSizeHigh,#0x02 mov dptr,#USBCS ; bit7 - Mode jf PLL (480/12) movx a,@dptr ANL a,#10000000b JNZ PLL480 ; branch if HCM != 0
mov PacketSizeLow,#0x40 mov PacketSizeHigh,#0x00 PLL480: _nop WriteX #EP8AUTOINLENH,PacketSizeHigh; _nop WriteX #EP8AUTOINLENL,PacketSizeLow;
|
|
|
|
|
Aug 12 2005, 04:10
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Trashy @ Aug 11 2005, 20:53) Ещё ПИН-полярности нужно включать до включения режима FIFO!!! Иначе могут произойти неприятности. Так же очень вредный регистр REVCTL = (1<<DYN_OUT) | (1<<ENH_PKT); Если один раз не правильно им воспользоваться, то бывают ситуации, когда даже ресет не помогает вывести ядро из ступора. Кстати у меня он по нулям. Ну и ещё вопрос: Кто у тебя трубы переключает? И переключает ли? Спасибо за ответы, сегодня проверю (пока усб отложил, другим занимался). насчет размеров буферов, как я понял после того как камень будет прошит, происзоди перенумерация, а дальше в коде есть следующее (dispatcher взял из примера ) Код BOOL DR_SetConfiguration( void ) { // Called when a Set Configuration command is received if( EZUSB_HIGHSPEED( ) ) { // ...FX2 in high speed mode SYNCDELAY; EP8AUTOINLENH = 0x02; // set core AUTO commit len = 512 bytes SYNCDELAY; EP8AUTOINLENL = 0x00; } else { // ...FX2 in full speed mode SYNCDELAY; EP8AUTOINLENH = 0x00; // set core AUTO commit len = 64 bytes SYNCDELAY; EP8AUTOINLENL = 0x40; } Configuration = SETUPDAT[ 2 ]; return( TRUE ); // Handled by user code } поэтому я и посчитал что можно проинитить буфер любым кодом. насчет переключения труб, я написал в внешнего мастера для фпга, на ВХДЛе, при записи/чтении он выставляет адрес фифо за 1 такт до любых транзакция (как по доке) . Насчет стороны ПК, то CyConsole/EZmonitor переключает же пайпы, или там тоже есть косяки ?
--------------------
|
|
|
|
|
Aug 12 2005, 04:33
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049

|
Цитата(des00 @ Aug 12 2005, 07:10) Спасибо за ответы, сегодня проверю (пока усб отложил, другим занимался). насчет размеров буферов, как я понял после того как камень будет прошит, происзоди перенумерация, а дальше в коде есть следующее (dispatcher взял из примера ) Если у тебя USB1.1 ни какая ренумерация не поможет. Ты вообще, прогой пайпы видишь? GetPipeInfo чё говорит? Код Get PipeInfo Interface Size 136 Pipe: 0 Type: BLK Endpoint: 1 OUT MaxPktSize: 0x200 Pipe: 1 Type: BLK Endpoint: 1 IN MaxPktSize: 0x200 Pipe: 2 Type: BLK Endpoint: 2 OUT MaxPktSize: 0x200 Pipe: 3 Type: BLK Endpoint: 4 OUT MaxPktSize: 0x200 Pipe: 4 Type: BLK Endpoint: 6 IN MaxPktSize: 0x200 Pipe: 5 Type: BLK Endpoint: 8 IN MaxPktSize: 0x200 или такую: Код Get PipeInfo Interface Size 136
Pipe: 0 Type: BLK Endpoint: 1 OUT MaxPktSize: 0x40 Pipe: 1 Type: BLK Endpoint: 1 IN MaxPktSize: 0x40 Pipe: 2 Type: BLK Endpoint: 2 OUT MaxPktSize: 0x40 Pipe: 3 Type: BLK Endpoint: 4 OUT MaxPktSize: 0x40 Pipe: 4 Type: BLK Endpoint: 6 IN MaxPktSize: 0x40 Pipe: 5 Type: BLK Endpoint: 8 IN MaxPktSize: 0x40 Цитата(des00 @ Aug 12 2005, 07:10) поэтому я и посчитал что можно проинитить буфер любым кодом. насчет переключения труб, я написал в внешнего мастера для фпга, на ВХДЛе, при записи/чтении он выставляет адрес фифо за 1 такт до любых транзакция (как по доке) . Насчет стороны ПК, то CyConsole/EZmonitor переключает же пайпы, или там тоже есть косяки ? Ыгы... Буквально месяц назад дла нашего измерителя КСВН точно такую же шнягу сотворил... Тока она вся на асме. А Циклон в графике. Кароче! Принцип отладки: 1. Циклоном нюхаешь состояние влага EF8, if(true) адрес пайпы, начинаешь заливать в супрес инфу, до появления флага FF8. EF8 - должен быть false. Для уверенности дёрни PACKETEND. Увидил все флаги тестером. if true, then Next 2.Запускаешь чтение приложением(предварительно сделав SetInterface).
|
|
|
|
|
Aug 12 2005, 04:44
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Trashy @ Aug 11 2005, 23:33) 1. Циклоном нюхаешь состояние влага EF8, if(true) адрес пайпы, начинаешь заливать в супрес инфу, до появления флага FF8. EF8 - должен быть false. Для уверенности дёрни PACKETEND. Увидил все флаги тестером. if true, then Next 2.Запускаешь чтение приложением(предварительно сделав SetInterface). в том то и дело что делаю один в один аналогично, только на виртексе 4, но ...... CyConsole у меня выводит вот что Type: BLK Endpoint: 4 OUT MaxPktSize: 0x40 Type: BLK Endpoint: 8 IN MaxPktSize: 0x40 т.к. другие ендпоинты не инитил. Сегодня еще раз проверю все, благо опять желание появилось УСБ добить Вы не против если я к вам мылом обращусь, если что не так пойдет ?
--------------------
|
|
|
|
|
Aug 12 2005, 11:55
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Блин что то тут не так Цитата 1. Циклоном нюхаешь состояние влага EF8, if(true) адрес пайпы, начинаешь заливать в супрес инфу, до появления флага FF8. EF8 - должен быть false. все работает аналогично, смотрю флаги по осцилу все ок. Цитата Запускаешь чтение приложением(предварительно сделав SetInterface) Запускаю монитор, прошиваю смотрю что выдает дивайс конфигурация девайса Цитата Device Descriptor: bLength: 18 bDescriptorType: 1 bcdUSB: 512 bDeviceClass: 0x0 bDeviceSubClass: 0x0 bDeviceProtocol: 0x0 bMaxPacketSize0: 0x40 idVendor: 0x547 idProduct: 0x1002 bcdDevice: 0x0 iManufacturer: 0x1 iProduct: 0x2 iSerialNumber: 0x0 bNumConfigurations: 0x1 ********************************* Config Descriptor: bLength: 0x9 bDescriptorType: 2 wTotalLength: 32 (0x20) bNumInterfaces: 1 bConfigurationValue: 1 iConfiguration: 0 bmAttributes: 0x20 MaxPower: 50 ********************************* Interface Descriptor: -------------------------------- bLength: 0x9 bDescriptorType: 4 bInterfaceNumber: 0 bAlternateSetting: 0 bNumEndpoints: 2 bInterfaceClass: 255 (0xff) bInterfaceSubClass: 0 (0x0) bInterfaceProtocol: 0 (0x0) iInterface: 0 ********************************* Endpoint Descriptor 0 -------------------------------- bLength: 0x7 bDescriptorType: 5 bEndpointAddress: 0x4 bmAttributes: 0x2 wMaxPacketSize: 64 bInterval: 0 ********************************* Endpoint Descriptor 1 -------------------------------- bLength: 0x7 bDescriptorType: 5 bEndpointAddress: 0x88 bmAttributes: 0x2 wMaxPacketSize: 64 bInterval: 0 ********************************* Get PipeInfo Interface Size 56 Pipe: 0 Type: BLK Endpoint: 4 OUT MaxPktSize: 0x40 Pipe: 1 Type: BLK Endpoint: 8 IN MaxPktSize: 0x40 пишу в фифо 2*64 байта (вижу по осцилу) фпгой Выбираю в in bulk 64 байта длинна, прочиать консоль ловит только Read IOCTL passed 0000 04 10 Read IOCTL passed 0000 29 C5 Read IOCTL passed 0000 04 10 Read IOCTL passed 0000 29 C5 Глупый вопрос а что такое SetInterface, я пробывал с ним и без него все едино
--------------------
|
|
|
|
|
Aug 13 2005, 15:12
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Господа спасибо всем за участие, проблема разрешилась. Я не знаю почему, но на моем чипе EP8 со своим фифо не работатет. для выяснения этого я подал на вход чипа (на шину данных) фиксированный код, стрбами рулила фпга, пакеты шли, но с полоной ахинеей. когда сделал EP6 все стало нормально. При этом EP8 в режиме не slave fifo работала(пример bulk loop из dev tools). Почему так не знаю, erata на этот чип я не нашел. Уфф ну и мозги потрепал мне этот чип
--------------------
|
|
|
|
|
Sep 20 2005, 21:20
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 4-10-04
Из: Москва
Пользователь №: 789

|
Цитата(des00 @ Aug 13 2005, 18:12) Господа спасибо всем за участие, проблема разрешилась. Я не знаю почему, но на моем чипе EP8 со своим фифо не работатет. для выяснения этого я подал на вход чипа (на шину данных) фиксированный код, стрбами рулила фпга, пакеты шли, но с полоной ахинеей. когда сделал EP6 все стало нормально. При этом EP8 в режиме не slave fifo работала(пример bulk loop из dev tools). Почему так не знаю, erata на этот чип я не нашел. Уфф ну и мозги потрепал мне этот чип  только у моего начальника созрели планы использовать все 4 трубы... спасибо что вовремя предупредили. Цитата Вопрос до конца ещё не понят, по сему буду из далека. Может вы поможете сформулировать вопрос. Ситуация: есть устройство с USB контроллером cy7c68013. С драйвером EZUSB.sys. До сих пор не замечал такой особенности, но сегодня ночью обнаружилось: при непрерывной передаче данных, если открыть например страничку с кучей фотографий и начать быстро листать фотографии, то происходит срыв передачи данных. А точнее, не отрабатывается WaveForma. Проблемма в принципе решилась поднятием приоритета до уровня "Высокий". Но непонятка всё равно осталась. Почему произошёл разрыв данных? Ответы типа: "EZUSB - отстой" не принимаются. а ответы "Windows отстой" принимаються?  Я не системный программист, поэтому не могу сказать на все 100% изза чего, но вроде винды ещё никто не называл ОСРВ, да и протокол USB(кроме изохрона) не гарантирует фиксированой полосы пропускания. Сам щас думаю как можно решить эту проблему более щадящим образом чем поднятие приоритета, но тут похоже выбор не велик: либо приоритет гнать, либо буфер большим делать, либо ось менять. Немного не по теме но всёже: Я вот когда делал Capture со своей видиокамеры по FireWire и загрузил другую "жадную" программу то работа пошла смарку.
|
|
|
|
|
Sep 21 2005, 03:56
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049

|
Цитата(левша @ Sep 21 2005, 00:20) только у моего начальника созрели планы использовать все 4 трубы... спасибо что вовремя предупредили. Все трубы пашут нормально. Цитата а ответы "Windows отстой" принимаються?  Не принимаются. У меня к Винде претензий нет. Цитата Я не системный программист, поэтому не могу сказать на все 100% изза чего, но вроде винды ещё никто не называл ОСРВ, да и протокол USB(кроме изохрона) не гарантирует фиксированой полосы пропускания. Сам щас думаю как можно решить эту проблему более щадящим образом чем поднятие приоритета, но тут похоже выбор не велик: либо приоритет гнать, либо буфер большим делать, либо ось менять. Немного не по теме но всёже: Я вот когда делал Capture со своей видиокамеры по FireWire и загрузил другую "жадную" программу то работа пошла смарку. Винда(как и Бил Гейтс) тут не причём. Просто Кипарис не душил поток при переполненнии буфера, хотя в ПДФ сказано, что это всё делается автоматически.
|
|
|
|
|
Sep 21 2005, 08:09
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049

|
Цитата(des00 @ Sep 21 2005, 07:14) Вам скрин шоты показать ? Да все они работают нормально, но в режиме slave fifo EP8 на камне что стоит у меня на борде не работает. Причем не работает именно считывание инфы с шины данных.  Это кусок инициализации из моей проги. От сюда видим, что восьмая и четвёртая труба пользуется в режиме авто! Восьмая AUTOIN. Уже 15 приборов продали. nop WriteX #EP2FIFOCFG,#00000000b; nop WriteX #EP4FIFOCFG,#00010000b; nop WriteX #EP6FIFOCFG,#00000000b; nop WriteX #EP8FIFOCFG,#00001000b;
|
|
|
|
|
Sep 21 2005, 08:13
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Trashy @ Sep 21 2005, 03:09) Это кусок инициализации из моей проги. От сюда видим, что восьмая и четвёртая труба пользуется в режиме авто! Восьмая AUTOIN. Уже 15 приборов продали. И хорошо что продали  ) Я же не говорю, что все чипы битые, я erratu не нашел, может быть мне не повезло с кристаллом  )
--------------------
|
|
|
|
|
  |
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0
|
|
|