|
|
  |
USB, EZ-USB FX2 |
|
|
|
Aug 10 2008, 12:31
|
Группа: Новичок
Сообщений: 7
Регистрация: 30-08-07
Пользователь №: 30 159

|
Цитата(DR.FAUST @ Aug 10 2008, 15:04)  Сегодня испробовал все 4 точки в булк режиме две на вход две на выход, получил суммарную скорость около 34 мегабайт в секунду, такое чувство что на одну конечную точку виндовс ограничивает количество запросов в секунду. Такое возможно? Выложил схемку, прошивку, софт (возможна проблема при запуске, после прошивки через cyConsole необходимо выбрать первую альтернативную конфигурацию) Нашел причину заниженной скорости, надо было указать SetXferSize (размер пакета, передаваемого драйвером CyUsb к хост драйверу). Получил такие параметры (все скорости как в так и из устройства получаются почти одинаковые): 1 точка - 28 МБ\сек, 2 точки на чтение - 35 МБ\сек, все 4 точки - 40 МБ\сек. Дальше возможно ограничивает драйвер, попробую на досуге свой драйвер, хотя и 28 мегабайт уже совсем неплохо. Надеюсь что с перечислением разберусь, если что буду спрашивать  Кстате спасибо за ответы.
Сообщение отредактировал DR.FAUST - Aug 10 2008, 12:32
|
|
|
|
|
Aug 15 2008, 10:05
|
Группа: Новичок
Сообщений: 7
Регистрация: 30-08-07
Пользователь №: 30 159

|
Да действительно ресет у меня сейчас подается мгновенно, это будет исправлено, просто у меня на плате конденсатор от ресета соединен с землей на втором слое через разьем а разьем еще не установлен. Но ведь процессор стартует, и работает нормально, как ресет может влиять на перечисление?
|
|
|
|
|
Aug 15 2008, 10:33
|

Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276

|
Цитата(DR.FAUST @ Aug 15 2008, 14:05)  Да действительно ресет у меня сейчас подается мгновенно, это будет исправлено, просто у меня на плате конденсатор от ресета соединен с землей на втором слое через разьем а разьем еще не установлен. Но ведь процессор стартует, и работает нормально, как ресет может влиять на перечисление? Добрый день. Ресет влияет на правильный запуск всех частей микросхемы CY7C68013. В частности на SIE (ядро USB). Ядро 8051 при этом не зависит о запуска SIE.
--------------------
Удачи.
|
|
|
|
|
Aug 15 2008, 12:31
|
Группа: Новичок
Сообщений: 7
Регистрация: 30-08-07
Пользователь №: 30 159

|
Тоесть при неправильном запуске Sie может работать но не совсм корректно? У меня данные передаются, а вот перечисление глючит. Скоро куплю разьем тогда точно проверю, спасибо что подсказали.
|
|
|
|
|
Aug 15 2008, 17:50
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(DR.FAUST @ Aug 15 2008, 13:05)  ... Но ведь процессор стартует, и работает нормально, как ресет может влиять на перечисление? FX2LP состоит из двух устройств, имеющих доступ к SIE (USB): - The Default USB Device - цифрового автомата;
- улучшенного (расширенного) контроллера 8051.
The Default USB Device управляет SIE пока управление не переходит к 8051. Если не обеспечен нормальный аппаратный сброс 8051 после включения питания, то управление SIE никогда не перейдет к 8051, так как сам 8051 не будет нормально функционировать. Как следствие - не будет работать перечисление, предусмотренное Вашей программой. Нельзя надеяться на нормальную работу FX2LP, если не выполнять требования, изложенные в Datasheet и EZ-USB® Technical Reference Manual.
|
|
|
|
|
Aug 16 2008, 12:08
|
Группа: Новичок
Сообщений: 7
Регистрация: 30-08-07
Пользователь №: 30 159

|
Полностью согласен что правила надо соблюдать. НО сегодня сделал ресет Резистор 100К конденсатор 100 нФ. Если девайс долго лежит на полке то не хочет потом обнаруживатся виндой, только раза с 4 находится. Если его отключить - подключить в течении 1 минуты, все ок и кнопка ресет пашет вроде нормально. Но когда конденсатор с ресета не был подключен на землю, все работало отлично  . А теперь о перечислении. Отлаживал код BulkLoop выяснил что: В коде fw.c в главном цикле вызивается TD_POOL а за ним, если пришел пакет от компа то и SetupCommand. Но у меня POOL срабатывал а SetupCommand - нет, хотя прерывание Sudav срабатывает. Ради теста, закомментировал код отвечающий за переход в режим сна if (Sleep) { IOB|=0x20; if(TD_Suspend()) { Sleep = FALSE; // Clear the "go to sleep" flag. Do it here to prevent any race condition between wakeup and the next sleep. do { EZUSB_Susp(); // Place processor in idle mode. } while(!Rwuen && EZUSB_EXTWAKEUP()); // above. Must continue to go back into suspend if the host has disabled remote wakeup // *and* the wakeup was caused by the external wakeup pin. // 8051 activity will resume here due to USB bus or Wakeup# pin activity. EZUSB_Resume(); // If source is the Wakeup# pin, signal the host to Resume. TD_Resume(); } И все заработало отлично девайс определился и программа заработала как надо. Что можете сказать по этому поводу? У меня пока нет мыслей почему он засыпает, и собственно чем это мешает? Он не может проснутся или как? Да и Konst_777, я запустил таки вашу прошивку, 27 мб\сек, в ней , насколько я покал нет функций связанных со сном.
Сообщение отредактировал DR.FAUST - Aug 16 2008, 12:17
|
|
|
|
|
Sep 4 2008, 13:28
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-08
Пользователь №: 38 217

|
Добрый вечер! Прошу прояснить следующий момент. Когда настроен режим Slave FIFO и передача идет напрямую с USB в FIFO, то информацию из буферов конечных точек читает и пишет внешный мастер? (ПЛИС) Пришли данные по USB, их автоматом перекинуло в фифо. Как микроконтроллер сможет мастеру сказать, что пришли данные? Посмотрел временные диаграммы и пины, нет такого флага. AUTOIN и AUTOOUT здесь уже не пройдет(
|
|
|
|
|
Sep 4 2008, 17:47
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644

|
Цитата(Artkop @ Sep 4 2008, 16:28)  Добрый вечер! Прошу прояснить следующий момент. Когда настроен режим Slave FIFO и передача идет напрямую с USB в FIFO, то информацию из буферов конечных точек читает и пишет внешный мастер? (ПЛИС) Пришли данные по USB, их автоматом перекинуло в фифо. Как микроконтроллер сможет мастеру сказать, что пришли данные? Посмотрел временные диаграммы и пины, нет такого флага. AUTOIN и AUTOOUT здесь уже не пройдет( В режиме Slave FIFOs выводы контроллера "CTL0 or FLAGA", "CTL1 or FLAGB", "CTL2 or FLAGC", "PA7 or FLAGD or SLCS#" конфигурируются как "FLAGA", "FLAGB", "FLAGC" и, по желанию, "FLAGD". Флаги сообщают о состоянии четырех FIFO контроллера. Причем, не только о состоянии "FIFO пусто" или "FIFO заполнено", но и об заданном уровне заполнения FIFO. Все это неплохо описано в разделе " 9.Slave FIFOs" в EZ-USB® Technical Reference Manual ("EZ-USB_TRM.pdf")
|
|
|
|
|
Sep 5 2008, 05:52
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-08
Пользователь №: 38 217

|
Цитата(Konst_777 @ Sep 4 2008, 21:47)  В режиме Slave FIFOs выводы контроллера "CTL0 or FLAGA", "CTL1 or FLAGB", "CTL2 or FLAGC", "PA7 or FLAGD or SLCS#" конфигурируются как "FLAGA", "FLAGB", "FLAGC" и, по желанию, "FLAGD". Флаги сообщают о состоянии четырех FIFO контроллера. Причем, не только о состоянии "FIFO пусто" или "FIFO заполнено", но и об заданном уровне заполнения FIFO. Все это неплохо описано в разделе "9.Slave FIFOs" в EZ-USB® Technical Reference Manual ("EZ-USB_TRM.pdf") Про этот раздел я и говорю. Там есть временная диаграмма чтения из FIFO мастером и описание. IDLE: When read event occurs, transition to State 1. STATE 1: Point to OUT FIFO, assert FIFOADR[1:0], transition to State 2. STATE 2: Assert SLOE. If FIFO-Empty flag is false (FIFO not empty), transition to State 3 else remain in State 2. STATE 3: Sample data on the bus, increment pointer by asserting SLRD for one IFCLK, de-assert SLOE, transition to State 4. STATE 4: If more data to read, transition to State 2 else transition to IDLE. STATE 1 как начнется? По выставленному флагу FLAGC (FIFO-Empty flag)? В мк приходят данные, он выставляет FIFO-Empty flag (Не пустой). Пусть ПЛИС реагирует на FIFO-Empty flag, выставляет SLOE, SLRD и читает. Так?
|
|
|
|
|
Oct 4 2008, 10:38
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 11-06-08
Пользователь №: 38 217

|
Всем доброго дня! Вот такой вот вопрос: Имеется конечная точка EP2, настроенная в режим Slave FIFO AUTOOUT. void TD_Init(void) { CPUCS = ((CPUCS & bmCLKSPD) | ~bmCLKSPD1) ;
EP1OUTCFG = 0xA0; EP1INCFG = 0xA0; SYNCDELAY;
REVCTL = bmNOAUTOARM && bmSKIPCOMMIT; SYNCDELAY; FIFORESET = 0x80; // reset all FIFOs SYNCDELAY; FIFORESET = 0x02; SYNCDELAY; FIFORESET = 0x00; SYNCDELAY; IFCONFIG = 0x03; // EP2CFG = 0xA2; SYNCDELAY; EP2FIFOCFG = 0x10; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY; OUTPKTEND = 0x82; SYNCDELAY;
// enable dual autopointer feature AUTOPTRSETUP |= 0x01; Rwuen = TRUE; }
Какое состояние регистра EP2CS должно быть при включении питания? Дело в том, что при таком конфигурировании у меня EP2CS = 28 (То есть фифо FULL) Но ведь по включении там должно быть EP2CS = 04. (То есть EMPTY = 1) Или нет? Откуда там данные то возьмутся..
|
|
|
|
|
Nov 5 2008, 21:21
|
Группа: Новичок
Сообщений: 4
Регистрация: 29-09-08
Пользователь №: 40 561

|
Опять вопрос!  С какой максимальной частотой может работать таймер cy7c68013? зафиксирует ли длительность импульса с точностью порядка 5ns? И совсем тупой вопрос: есть ли микросхемы таймеров такой точности, если да, то какие.
|
|
|
|
|
  |
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|