Opó?nienie w transmisji USB

Mar 20, 2015 35 Replies

Dnia 2015-04-01, o godz. 07:42:28 snipped-for-privacy@gmail.com napisał(a):

Na wstępie witam całą grupę !

Nie prawda, że libftdi nie wspiera FT2232H:

formatting link
Od dłuższego czasu używam FT2232H (tryb asynchroniczny) + libftdi. W pierwszej wersji korzystałem z binding'ów do python'a, teraz mam już wszystko przepisane na natywne C. System operacyjny: Linux. Tryb synchroniczny FIFO jest również wspierany przez libftdi dla FT2232H, w źródłach masz nawet przykład:

formatting link
Wydajność z tego co piszą ludzie (nie robiłem porównania osobiście) jest trochę gorsza niż binarne d2xx ale w zamian masz:

- dostęp do całego kodu źródłowego: kernel + libusb + libftdi

- bezproblemowe i stabilne działanie na mips/arm - to akurat dla mnie warunek konieczny

Korzystając z dołączonych przykładów, ogarnięcie w python'ku libftdi + FT2232H to jeden dłuższy wieczór.

Jeżeli chodzi o samo opóźnienie to nic takiego nie zauważyłem. Wiadomo działamy w userspace więc coś tam może się przytkać i zbuforować, ale to raczej dziesiątki-max setki ms, przy mocno obciążonym systemie. W takim układzie zadziała handshake sprzętowy po stronie ftdi - nie dasz rady do niego pisać. Sprawdzone w praktyce, ale tj pisałem w trybie asynchronicznym.

W dniu czwartek, 2 kwietnia 2015 02:38:07 UTC+2 użytkownik Michał Semeniuk napisał:

Witaj !!

Ano być moxe masz rację. Ja "zabazowałem" na tym co znalażłem (link w poprzednim moim wpisie)

Zrób, jak coś sensownego wyjdzie, to się dogadamy w sprawach finansowych.

Jak to sprawdzałeś ?

W dniu środa, 1 kwietnia 2015 15:46:50 UTC+2 użytkownik J.F. napisał:

No w końcu mnie zrozumiałeś!! Zdarza się, że czasami zbyt "zawile" opisuję problemy. Zacznijmy od dokumentacji:

1) datasheet:

formatting link

Ot, takie pierdulamenty jak to pospawać, jakie tryby są możliwe, etc..

2) D2XX Programmer's Guide:

formatting link
Na stronie 18 masz opisaną funkcję FT_READ. Ano z niej korzystam !!

3) No i dokumentacja trybu jakiego używam:

formatting link
====================

No i rva jego mać, zaczynam mieć tego dosyć!! Zbyt długo się w tym ciapram. Na ChipScopie(XILINX) wszystko zapindala jak se Stachu zaplanował..

Wracając do głównego wątka.. Pytanie do WSZYSTKICH, aktywnych w tym wątku:

Jaka inna kostka? Może jakiś Cypress?

W dniu czwartek, 2 kwietnia 2015 23:29:07 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

A jak masz ustawione Timeouty ? i co ważniejsze parametry USB funkcja FT_SetUSBParameters.... Moze zerknij tutaj:

formatting link

2m

W dniu piątek, 3 kwietnia 2015 01:23:59 UTC+2 użytkownik 2m napisał:

Timeouty są ustawione na maxa. Na 256ms. Dlaczego na aż tyle? Moje badziewie robi akwizycję przez 60ms. Dopóki nie zakończy, to pomimo wysłanego sygnału TXE# ze strony FT2232H, sygnał WR# jest w stanie '1'. I to działa! Bo gdyby nie działało, to cała synchronizacja poszła by się paść.

Znam to!! Nie chodzi mi o prędkość transmisji, bo owa jest zarąbista. Nie mierzyłem precyzyjnie, ale z całą pewnością >30MB/s. Ale nie w tym rzecz!!

Przeczytaj główny wątek jeszcze raz, dyskusję z Kolegami, bo nie chce mi się po raz setny tłumaczyć w czym problem.

Czytałem. Czy i na jaką wartość masz ustawiony parametr dwInTransferSize w funkcji FT_SetUSBParameters ?

2m

W dniu piątek, 3 kwietnia 2015 04:41:16 UTC+2 użytkownik 2m napisał:

16K

W dniu piątek, 3 kwietnia 2015 13:10:24 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

Moim zdaniem powinieneś pomanipulować tą wartością uwzględniając to, że dane są przesyłane w 64bajtowych pakietach (endpoint size) i w każdym pakiecie USB 2 bajty są zarezerwowane przez FTDI. Czyli dwInTransferSize powinien być: A) wielokrotnością 64 B) jego wartość powinna uwzględniać TwojDane + wspomniane 2 bajty na pakiet. Wtedy będzie to transakcja. Host Controller Driver robi sheduling USB optymalizowny na transakcje. (UHCI OHCI EHCI każdy z nich stosuje różne algorytmy). Twój przypadek pasuje mi do sytuacji kiedy TwojeDane nie mieszczą się w jednej transakcji i stąd powstaje opóźnienie. Daj znać jeśli trafiłem.

2m

W dniu 2015-04-02 o 23:29, snipped-for-privacy@gmail.com pisze:

Wtrącę swoje 3 grosze, mam kupiony analizator stanów logicznych Saleae i też się nie wyrabia, teoretycznie powinien samplować 24M a ja w porywach osiągam 500k, jak poczytałem to podobno wina sterowników usb które w jakiś sposób się gryzą i zabagnionego windowsa, tyle że ja nie mam zabagnionego a mimo to się nie wyrabia, więc wychodzi kicha, może postawię czystego XP i spróbuję znowu. Więc zastanów się zanim sięgniesz po cypressa bo może się okazać że ma tak samo złe drivery usb jak reszta.

W dniu piątek, 3 kwietnia 2015 16:21:10 UTC+2 użytkownik 2m napisał:

Nawet nie podchodzę do Twoich sugestii, bo są bezsensowne. To o czym piszesz ma wpływ na całkowitą prędkość transmisji, a nie na buforowanie "w stylu FIFO"

W dniu piątek, 3 kwietnia 2015 18:12:17 UTC+2 użytkownik janusz_k napisał:

Kompletne bzdety wypisują. Częstotliwość samplowania nie ma nic do prędkości transmisji. Sranie w banie!! Wywal ten analizator na śmietnik.

W dniu 2015-04-03 o 18:31, snipped-for-privacy@gmail.com pisze:

Dziekuję za opinię ale pozwolisz że sam zadecyduję co z nim zrobię.

W dniu 2015-04-03 o 18:31, snipped-for-privacy@gmail.com pisze:

Akurat, Janusz ma rację. W Salae częstotliwość samplowania wpływa na transmisję. Każda próbka danych to słowo zapisywane do Fifo Cypressa. Teoretycznie maksymalna częstotliwość samplowania to 30 lub 48MHz, pod warunkiem że fifo będzie odpowiednio szybko opróżniane przez Hosta.

MiSter

W dniu 2015-04-04 o 10:40, MiSter pisze:

Dziękuję ;)

W dniu sobota, 4 kwietnia 2015 10:41:24 UTC+2 użytkownik MiSter napisał:

Jeżeli faktycznie tak jest, to znaczy że konstrukcja jest do bani bo jest uzależniona od prędkości opróżniania fifo przez hosta. A tutaj faktycznie każdy zabagniony OS może mieć wpływ na częstość samplowania. Mało tego, może się kompletnie rozjechać synchronizacja i..., dziękuję za taki przyrząd diagnostyczny. Gdybym w swoim badziewiu każdą pojedyńczą próbkę pchał bezpośrednio na fifo kontrolera, na bank miałbym to samo co Janusz. A rozwiązanie jest banalnie proste. Dane pchamy na jakąś pamięć z częstotliwością samplingu, jak się zapełni to na spokojnie odczytujemy ją z byle jaką prędkością. Może być nawet 1 bajt/dobę :))

Dnia Sat, 4 Apr 2015 14:56:29 -0700 (PDT), snipped-for-privacy@gmail.com

A potem narzekasz, ze gdzies Ci sie dane spozniaja :-P

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required