Very high data rate isochronous USB device ?

Thierry Herbelot <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
Hello,

I'm writing a USB device driver for a high-data rate device, for which I would 
like to use isochronous transfers (I already have working bulk transfers), 
but I can't get the expected (very high) data bandwidth.

The situation today is following :
- the device uses a High-speed USB 2.0 connection
- the device advertises one isochronous Endpoint, with up to 3 packets of 1024 
bytes per micro-frame, which corresponds to the designated target rate of 
around 200 Mbps (the endpoint descriptor has been checked and rechecked, and 
lsusb seems to acknowledge these parameters)
- the PC I use as host has three EHCI USB bridges : one is on the motherboard, 
and comes from Intel (it is a recent ICH6), and two additionnal PCI boards 
use chipsets from VIA and Ali
- I am using a quite recent linux kernel (2.6.18, coming with with OpenSuse 
10.2)
- I have copied the urb and iscochronous packet initialization and the 
completion routines from existing device drivers (one example I followed is 
drivers/media/dvb/b2c2/flexcop-usb.c)
- like in flexcop-usb.c, I have initialized the URBs with many packets 
(urb->number_of_packets is now a parameter of my device driver, and current 
values are 8 or 16)
- like in flexcop-usb.c, I have a big buffer cut in 8 or 16 chunks of 1kbyte, 
with offsets of 1 kbyte, one chunk for each packet of the URB
- like in flexcop-usb.c, the URBs are scheduled as fast as possible 
(urb->interval = 1;)
- I can read some data in isochronous mode, but with a lower data rate than 
the target : I only get one IN token for each micro-frame, instead of the 3 
expected
- I get the same behavior with all thre EHCI controllers (Intel, VIA and Ali)
- I have had a quick look at drivers/usb/host/ehci-sched.c, where the 
scheduling occurs, but I could not determine from iso_stream_init(), for 
example, which parameters I should set to have a higher data rate

Thus the question is : is there any driver in the linux source tree which can 
read more than one 1kbyte packet par micro-frame ? (or, which parameter set 
in flexcop_usb_transfer_init() should I change to attain a higher data 
rate ?)

	Many thanks in advance

	TfH

PS : I *have* had a look at the archives, but I could not find my answer ....
-- 

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.