Read from bulk end point
Hans Petter Selasky
hselasky at c2i.net
Mon Jun 27 09:21:34 UTC 2011
On Monday 27 June 2011 10:43:03 Luca Pizzamiglio wrote:
> Hi USB list,
>
> I've a little problem, but I'm not able to find a solution...
> I've a generic custom USB device with several end points.
> One of them (a bulk one) is read periodically (polled, 64 byte) every
> second. There was some time inconsistencies, so I checked the USB
> traffic with a sniffer, and I discovered that transactions are compacted
> at the start of the loop in a block of 64 read (64 byte * 64 msg = 4096
> byte). In other words, on the bus the first read is followed immediately
> by the next 63 read.
>
> I guess that this is a pre-fetch optimization for BULK end points. How
> can I disable this optimization for this end point? How can I come back
> to a more "real-time" behavior? I tried to play with open() flags
> (O_NONBLOCK, O_DIRECT) without luck.
>
> Using FreeBSD 7 with HPS stack, this behavior didn't happen. Every read
> consists in 1 read on the bus and everything is fine.
>
> Thanks in advance!
>
> Luca
There is an IOCTL to set the RX and TX buffer sizes. Please use that. See
dev/usb/usb_ioctl.h. The default is more than one full packet.
--HPS
More information about the freebsd-usb
mailing list