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

Осталось только понять, от чего это зависит ;) От драйвера?

...

Остается вопрос : это все - свойства драйвера VCP ? особенностей реализации CP2102 ?

Или еще что-то? (Про причину - недостаток знаний у разработчика - я уже и сам догадался ;))

 

В основном, это зависит действительно от драйвера. Когда в драйвер поступает запрос на чтение/запись, он разбивается на URB, соответствующие IN или OUT пакету. В хосте из них собирается расписание(schedule) (в UHCI - пофреймово, в OHCI - глобально).

UHCI гораздо более распространен (все контроллеры от Intel и VIA), поэтому, целесообразно исходить, что используется именно он.

Что получается: Если запрос целиком помещается в буфер драйвера, он отправляется подряд, и все его URB укладываются в один фрейм. Теоретически, запросы на чтение не должны мешать запросам на запись, т.к. они относятся к разным эндпойнтам, и запросто могут умещаться в тот же фрейм (что и наблюдается на мелких пакетах).

 

Дальше - мои предположения (т.к. сам я с CP2102 не работал, и, тем более, в драйвере с дизассемблером не копался). Если в протоколе используются какие-то команды для flow control - они запросто могут идти не как bulk, а как interrupt. В этом случае, каждый запрос состояния/передача команды займет один фрейм. Если в драйвере буфер малого размера - с него может статься укладывать содержимое буфера и ждать начала следующего фрейма. В общем, вариантов много.

 

В USB Complete, в четырнадцатой главе, рассказываться про оптимизацию обмена с FT232. Там проблемы тоже есть, но другие.

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


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

Уважаемые господа!

Начинаю с FX2 и просто фигею от количества нагороженных возможностей. Применить их хочется в первой же плате и по полной. посему вопрос:

Появился резонный вопрос: а какой режим использования оного девайса позволит достигать максимальной скорости передачи (реальной)(планируется использовать один+пару эндпойнтов - отдельно для команд(interrupt) и 2 для данных(bulk)):

host->FIFO->Slave-FIFO-interface->Cyclone (3 EP)

или

host->FIFO->Master-GPIF-interface->Cyclone (3 EP)

или

host->FIFO->CPU->Master-gpif (управление)

host->FIFO->Master-gpif (2EP данные)

 

последний вариант кажется наиболее трезвым. есть ли какие-нибудь подводные камушки, может кто подсказать?

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

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


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

Гость MALLOY2

У меня никаких подводных камней небыло, только следует обратить внимание на ножку TEST.

 

Что касается скорости, тест был такой FX 2 точки работают при максимальном буфере в FIFO режиме на другом конце FPGA делала кольцо, скорость получилась ~24 метра это комп данные тупо проверял на правельность, в реальном устройстве когда был реализован протокол обмена скорость упала до 11 ментров на моем PC (Celeron 2000 512M ) на азлоне 2600 1 гектар памяти скорость составила 16 метров, также был проведен тест с кольцом внутри FX скорость составила 1 метр.

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


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

Помогите, плз. Столкнулся с железячной проблемой, не понимаю, где косяк.

Имею: EZ-USB NX2LP-Flex (CY7C68033) - корпус QFN56.

У ножек питания кондеры на 0,1мкФ

Кварц 24МГЦ с кондерами на 22пФ

Кнопка, замыкающая на землю ножку #RESET, которая сама по себе подтянута к 3,3В через 100кОм.

SCL и SDA подтянуты через 1К и 10К на 3,3В.

По идее, заводиться и определяться она должна по такому же алгоритму, что и FX2LP.

При подаче питания кварц запускается и на D+ появляется 3,3В. Если воткнуть железяку в комп, находится неизвестное устройство, дрова установить не может. Лезу в реестр - там появляется VID0000&PID0000. Кнопка с ресетом никакого результата не дает - смотрю по осциллографу, при ресете d+ уходит вниз, при отпускании кнопки опять на 3,3В. Причем временная диаграмма ресета, требуемого стандартом USB, не отрабатывается. То есть просто происходят скачки уровней.

Вопрос: что может быть не так?

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


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

Помогите, плз. Столкнулся с железячной проблемой, не понимаю, где косяк.

При подаче питания кварц запускается и на D+ появляется 3,3В. Если воткнуть железяку в комп, находится неизвестное устройство, дрова установить не может. Лезу в реестр - там появляется VID0000&PID0000. Кнопка с ресетом никакого результата не дает - смотрю по осциллографу, при ресете d+ уходит вниз, при отпускании кнопки опять на 3,3В. Причем временная диаграмма ресета, требуемого стандартом USB, не отрабатывается. То есть просто происходят скачки уровней.

Вопрос: что может быть не так?

М.б. это поможет?

an064.pdf

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


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

Помогите, плз. Столкнулся с железячной проблемой, не понимаю, где косяк.

........

Вопрос: что может быть не так?

М.б. это поможет?

Посмотрел, что там написано. Возник вопрос: а что, у этих мукрух такая чувствительность по питанию? что прямо вот там-то надо ставить 0,01мкФ, там-то 0,001мкФ. Если у меня вместо этого 0,1мкФ стоит, может ли это влиять на отсутствие нужной реакции пул-ап резистора?

Ведь, еще раз повторюсь, при ручном ресете МК с помощью кнопочки тоже ничего хорошего не происходит.

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


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

Подскажите, пожалуйста, как организовать поток, который всегда готов к приему данных (CY7C68013a, CyAPI, endpoint типа bulk)?

В контроллер загружен пример bulkloop.

Пишу такое:

void __fastcall TThreadRX::ThreadActivity()

{

char inBuf[16384];

long length;

if(!Form1->USBDevice->BulkInEndPt)

{

Form1->USBThreadRX->Terminate();

}

while(true)

{

if (Terminated)

{

Form1->RXwait->Checked = false;

return;

}

Form1->USBDevice->EndPoints[3]->XferData(inBuf,length);

Sleep(10);

Form1->Info->Cells[2][8] = length;

}

}

 

не работает ...., точнее вижу всегда ноль принятых байт.

 

Есть такая кнопка, через которую передаю данные в контроллер и хочу их назад получить через поток (см. выше):

void __fastcall TForm1::TXonlyClick(TObject *Sender)

{

OVERLAPPED outOvLap/*, inOvLap*/;

if(USBDevice->EndPointCount() > 1){

outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT");

char buffer[128];

for(int i = 0;i < sizeof(buffer);i++)

buffer = i + 10;

LONG length = 10;

UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length, &outOvLap);

 

USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);

 

USBDevice->BulkOutEndPt->FinishDataXfer(buffer, length, &outOvLap,outContext);

 

CloseHandle(outOvLap.hEvent);

}

}

Периодически жму на кнопку, а поток не ловит данные.

Если одновренно отправить и принять

UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length, &outOvLap);

UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);

то данные приходять.

Объясните, как правильно ждать данные ?

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


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

Здравствуйте, уважаемые господа. Отладил программку для fx2, используя сайпрессовские заготовки. Загружал EZ_USB CP, все работает нормально, автоматически конфигурится как HighSpeed. Уже написал верхний уровень для компа. Думал, что все путем. Но с при загрузке этой же программы с флешки конфигурится и работает как FullSpeed. Прерывание ISR_Highspeed не генерится. Что за хрень? Как еще можно грузить прошивку?

 

Программирую шлеху так:

1. EZ_USB CP fx2 со снятыми перемычками гружу Vend_Ax

2. Ставлю перемычки

3. Комманда А9, 2 байта, out FF FF

4. Перемыкаюсь

5. EZ_USB CP, eeprom (hex2bix -I -F 0xc2 -P 34323 -V 1204 -C 0 FX2_T1255.hex)

6. Перемыкаюсь, матерюсь...

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


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

Здравствуйте, уважаемые господа. Отладил программку для fx2, используя сайпрессовские заготовки. Загружал EZ_USB CP, все работает нормально, автоматически конфигурится как HighSpeed. Уже написал верхний уровень для компа. Думал, что все путем. Но с при загрузке этой же программы с флешки конфигурится и работает как FullSpeed. Прерывание ISR_Highspeed не генерится. Что за хрень? Как еще можно грузить прошивку?

 

Программирую шлеху так:

1. EZ_USB CP fx2 со снятыми перемычками гружу Vend_Ax

2. Ставлю перемычки

3. Комманда А9, 2 байта, out FF FF

4. Перемыкаюсь

5. EZ_USB CP, eeprom (hex2bix -I -F 0xc2 -P pid -V vid -C 0 FX2_T1255.hex)

6. Перемыкаюсь, матерюсь...

 

Сегодня увидел, что при инициализации с флешки сильно подсаживается питание. Это, косвенно,и является причиной. Так, как устойство Buspowered, выставлял в дескрипторах соответственно ток. У меня где-то 200мА(100 единиц). Заметил, что если выставить дескрипторы на 150 единиц, то и при загрузке программы с usb переинициализация на FullSpeed не происходит. Ну а если грузить с флеши то и подавно. Может кто поделится советом?

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


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

Знатоки CY7C68013А отзовитесь !

 

Имеется: CY7C68013А, CyUsb.sys, CyApi.lib, ep8in, bulk 512 byte, High Speed

Проблема: При передаче длинной последовательности 0xff ( больше 120 байт ) пакет не принимается.

 

len = 512;

if(!ep8in->XferData(p, len )) ShowMessage(s.sprintf("ep8 - read error %d", len);

 

Кто-нибудь сталкивался с такой проблемой ?

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


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

Знатоки CY7C68013А отзовитесь !

 

Имеется: CY7C68013А, CyUsb.sys, CyApi.lib, ep8in, bulk 512 byte, High Speed

Проблема: При передаче длинной последовательности 0xff ( больше 120 байт ) пакет не принимается.

 

len = 512;

if(!ep8in->XferData(p, len )) ShowMessage(s.sprintf("ep8 - read error %d", len);

 

Кто-нибудь сталкивался с такой проблемой ?

 

- А что сообщает "Cy USB Console" по кнопке "Get Pipes" ?

- что с таймаутом? ( ep8in->TimeOut = 5000;)

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

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


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

Знатоки CY7C68013А отзовитесь !

 

Имеется: CY7C68013А, CyUsb.sys, CyApi.lib, ep8in, bulk 512 byte, High Speed

Проблема: При передаче длинной последовательности 0xff ( больше 120 байт ) пакет не принимается.

 

len = 512;

if(!ep8in->XferData(p, len )) ShowMessage(s.sprintf("ep8 - read error %d", len);

 

Кто-нибудь сталкивался с такой проблемой ?

 

- А что сообщает "Cy USB Console" по кнопке "Get Pipes" ?

- что с таймаутом? ( ep8in->TimeOut = 5000;)

- использую CBuilder + CyApi.lib, консолью не пользуюсь

- timeout - 1000

- дополнение:

 

Cypress посылает хосту 2 пакета, отличающиеся тремя байтами 0x00 00 00

пакет 1 - не принят

пакет 2 - принят

 

Пакет 1 ( длинная 0xff последовательность )

 

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0060 47 01 21 10 86 43 00 6a c6 89 20 1c 74 40 23 10 G.!..C.j.. .t@#.

0070 00 3f 81 e4 00 4c 81 8c 00 42 e2 20 0c a0 01 b5 .?...L...B. ....

0080 78 0f 60 03 43 29 72 7c 45 a1 91 24 e9 b1 10 01 x.`.C)r|E..$....

0090 f9 07 b7 10 a5 ff 00 0f 80 39 fc 54 45 d0 00 e8 .........9.TE...

00a0 05 a2 28 63 31 80 f1 84 ec 71 db 9e 6b 0e 3f 2b ..(c1....q..k.?+

00b0 b3 c0 1f 91 80 59 10 1d 82 d8 9d 98 2d e8 8c 0c .....Y......-...

00c0 5f ff 1e 44 12 01 b9 e2 a2 27 03 64 4e 69 fb 3b _..D.....'.dNi.;

00d0 b2 31 75 fa 07 ff ff a8 1f ff fe 84 62 a0 03 a8 .1u.........b...

00e0 8a f4 31 98 3f 09 01 f6 38 20 d1 27 2a 06 80 01 ..1.?...8 .'*...

00f0 87 00 b3 af 37 37 85 04 f1 54 00 3f 20 72 3f 84 ....77...T.? r?.

0100 93 8f 00 ff 8e 64 8f 83 82 84 29 db ac e3 c5 37 .....d....)....7

0110 1e d4 32 55 43 1f aa 5c 0f ff ff 59 47 40 00 12 ..2UC..\...YG@..

0120 00 00 b0 0d 00 01 c1 00 00 00 05 e0 70 dd 36 30 ............p.60

0130 5a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Z...............

0140 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01d0 ff ff ff ff ff ff ff ff 47 01 21 11 83 81 9c 00 ........G.!.....

01e0 74 3c 05 98 3d 8f cb 1c e3 e0 78 00 18 0e b8 82 t<..=.....x.....

01f0 2a d6 6f 5b ad f7 80 3d e2 c7 e1 c0 11 f1 de 01 *.o[...=........

 

Пакет 2 ( 0xff последовательность разорвана тремя байтами 0x00 )

 

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

0060 47 01 21 10 86 43 00 6a c6 89 20 1c 74 40 23 10 G.!..C.j.. .t@#.

0070 00 3f 81 e4 00 4c 81 8c 00 42 e2 20 0c a0 01 b5 .?...L...B. ....

0080 78 0f 60 03 43 29 72 7c 45 a1 91 24 e9 b1 10 01 x.`.C)r|E..$....

0090 f9 07 b7 10 a5 ff 00 0f 80 39 fc 54 45 d0 00 e8 .........9.TE...

00a0 05 a2 28 63 31 80 f1 84 ec 71 db 9e 6b 0e 3f 2b ..(c1....q..k.?+

00b0 b3 c0 1f 91 80 59 10 1d 82 d8 9d 98 2d e8 8c 0c .....Y......-...

00c0 5f ff 1e 44 12 01 b9 e2 a2 27 03 64 4e 69 fb 3b _..D.....'.dNi.;

00d0 b2 31 75 fa 07 ff ff a8 1f ff fe 84 62 a0 03 a8 .1u.........b...

00e0 8a f4 31 98 3f 09 01 f6 38 20 d1 27 2a 06 80 01 ..1.?...8 .'*...

00f0 87 00 b3 af 37 37 85 04 f1 54 00 3f 20 72 3f 84 ....77...T.? r?.

0100 93 8f 00 ff 8e 64 8f 83 82 84 29 db ac e3 c5 37 .....d....)....7

0110 1e d4 32 55 43 1f aa 5c 0f ff ff 59 47 40 00 12 ..2UC..\...YG@..

0120 00 00 b0 0d 00 01 c1 00 00 00 05 e0 70 dd 36 30 ............p.60

0130 5a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Z...............

0140 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0180 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ................

0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................

01d0 ff ff ff ff ff ff ff ff 47 01 21 11 83 81 9c 00 ........G.!.....

01e0 74 3c 05 98 3d 8f cb 1c e3 e0 78 00 18 0e b8 82 t<..=.....x.....

01f0 2a d6 6f 5b ad f7 80 3d e2 c7 e1 c0 11 f1 de 01 *.o[...=........

 

извините что так криво, не смог в вашем редакторе включить непропорциональный шрифт.

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


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

Добрый день

 

 

Возник трабл. Пока глубоко не копал, но с понедельника прийдется этим заняться.

 

Имеем CY7C68013 FX2

в нем 6EP - IN

1EP - OUT

 

Столкнулся с тем что из 100 штук систем (система это чип плюс комп) несколько подвисают в процессе приема данных.

 

Происходит следующее. При передачи данных в комп поток неперерывной вычитки данных из ezusb.sys (драйверок free от кипресса хрен знает какой даты, но он у них не менялся и не обновлялся давно) иногда по непонтяным причинам тупо останавливается в драйвере. В железке заведен таймер, который контроллирует прерывание USb в случае, если более нескольких сек (4 сек) не происходит вычитки считаем что компа нет и перезагружаемся. Соответственно как только железка это засекает и перезагружается, то драйвер отлипает и вываливается с данными.

 

 

Вопрос.

У кого-нибудь подобное происходило??? Повторюсь, что данный трабл происходит всего на нескольких машинах.

 

С понедельника начну копать свою прошивку на предмет зависона, может конечно и прошивка подвисает, но раньше такого небыло. Проявилось на PC с пнем 4 и двойным ядром. На долбаных целеронах все пашет уже нескольок лет и без проблем. По сему и грешу на связку пень 4 Хрюн 2 и драйвер.

 

ПОМОГИТЕ!!

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


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

Вероятнее всего проблема в драйвере. Запроси поддержку сайпреса на предмет нового драйвера или попробуй CyUSB.sys

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


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

Отведал и я сего счастья... запустил микросхемину с драйвером CYUSB. Прога на дельфи. лазает нопрямую к драйверу.. шлёт пакеты (bulk) нормально, принимает тоже нормально, но при условии, что они есть. Если пакетов на приём нет - вешает винду (XP) так, что никакой диспетчер задач не помогает...

Искал-искал, как этому драйверу сказать, что не надо ждать пакета вечно, но так и не нашёл...

Вопрос: как обойти сию ситуацию?

 

 

вопрос снят.

ответ: ABORT_PIPE.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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