usb2 iscochronous transfer

Hans Petter Selasky hselasky at c2i.net
Thu Mar 23 07:47:26 UTC 2006


On Thursday 23 March 2006 01:55, Peter B wrote:
> >> >Maybe you want to try out the new USB API when designing the driver.
> >> > Don't forget that high-speed isoc have 8 frames per millisecond!
>
> http://en.wikipedia.org/wiki/USB
>   "In addition to this some operating systems take a conservative approach
>    to scheduling transactions and limit the number of transfers per frame.
>    Reducing the maximum transfers from say the theoretical 13 per frame
>    to 10 or 9."
>
> Does this apply?

The limit is 128 transactions per transfer. For full-speed USB that means 128 
frames. For high-speed USB that means 128*8 frames. I recommend that you use 
two transfers of 50 frames for full speed and 50*8 for high speed.

> >> >PS: My USB driver in SVN is now also compiling and working on NetBSD
> >> > 3.X.
>
> Where can I find instructions for this?

There are not so many instructions available, so here is a quick one:

1)
Compile a NetBSD kernel without USB

2)
svn --username anonsvn --password anonsvn checkout svn://svn.turbocat.net/i4b

3)
Uncomment "WITH_USB=" in "i4b/trunk/i4b/module/Makefile"

4)
Read "i4b/trunk/i4b/Makefile" and follow the instructions for how to install 
on NetBSD.

>
> >if that works better during the transition phase. But the patches are not
> >ready yet. Really it is just to follow the Makefile.
>
> Anything in particular that makes them "not ready" in you opinion?

Lack of time to make the patches.

>
> >> How is uaudio and umass working with this driver?
> >
> >uaudio and umass works fine, but they need to be rewritten, hence they are
> >still under the compatibility layer of my driver, and can sleep when they
> >should not sleep.
>
> I tested the new usb driver with:
>   FreeBSD 6.0-RELEASE #0: Tue Mar 21 15:17:11 UTC 2006
>   CPU: Pentium Pro (199.74-MHz 686-class CPU)  (yes a slave machine for i/o
> :) real memory  = 83881984 (79 MB)
>
>   http://www.pcidatabase.com/vendor_details.php?id=648
>   ehci0 at pci0:6:2: class=0x0c0320 card=0x31041106 chip=0x31041106
>                   rev=0x63 hdr=0x00
>   4xUsb 2xFw
>   uaudio0: Creative Technology SB Live! 24-bit External, rev 1.10/1.00,
> addr 2
>
> uaudio plays without any audioable distortion over the toslink interface.
> However syslog is full of:
>   usbd_transfer_done: short transfer actlen(3528) < len (3600)
>
> What's the cause .. ?
>   /usr/src/sys/dev/usb2/_usb_transfer.c
>     usbd_transfer_done()
>       error==FALSE                         (why set?)
>       xfer->actlen < xfer->length
>       xfer->flags & USBD_SHORT_XFER_OK == FALSE

The cause is probably in "uaudio.c", that it feeds too much data to the uaudio 
device. Really the error should be ignored for read transfers, so it maybe 
lacks a USBD_SHORT_XFER_OK. Someone at "multimedia at freebsd.org" might be able 
to answer.

Could you try plugging the device into a high speed USB HUB connected to a 
high speed USB port? See if the messages change.

--HPS


More information about the freebsd-hackers mailing list