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