We were having problems with high-speed isochronous transfers as well, however,
with the latest MS drivers, we’ve gotten it to work (almost) perfectly.
First of all, you need to make sure you’re using the MS drivers. Neither the
Adaptec nor the OrangeMicro drivers worked for us.
Secondly, we’ve found that you cannot pass down to USBD more than 8 URBs
simulatenously, because if you do, the 9th, 17th, … come back wrong.
You say that you are periodically passing USBD your URBs. Does this mean you’re
allocating new URBs every time and free them in your completion routine or do
you recycle them? Because with ther former, you may end up having more than 8
URBs pending with USBD, which doesn’t seem to work. With the latter, you can
make sure that there are never more than 8 URBs outstanding.
Also, we piggyback exactly one URB per IRP, and we don’t use the URB.link field.
Are you using high-bandwidth high-speed isochronous transfers? If so, you must
set the packet size for the isochronous pipe to n * 1024, n being the number of
packets per microframe. USBD apparently interprets high-bandwidth transfers
as being larger in size.
Hope this helps a little,
Burk.
Dietmar Jagonak wrote:
Hi,
I’m working on a WDM function driver for some special piece of audio
hardware connected via USB to the PC. For reasons of latency, performance
and planned regularity we decided to use isochronous transfer. While it
just starts to work fine with fullspeed on USB 1, we were stuck with a
strange behaviour on the highspeed USB 2 bus. When starting our streaming
process (in kernelmode allocating and configuring IRP, URB, MDL an then
IoCallDriver, on a periodic basis) only the first 2, 3, 4 or 5 IRP’s will
reach our device. After this usbd.sys seems to ignore everything I send
down the driver stack. My completion routine finds both status values set
to SUCCESS (=0x00000000) but in fact the busdriver has done nothing at
all. By monitoring the device’s hardware ports, no further transfer could
be observed. This behaves identical on Win2000 and WinXP.
Any idea, what may be going wrong here ?
When looking around I found a message, published on a support forum from
Cypress, which states that Microsoft has not fully developed (and so does
not support) isochronous transfers with USB 2 (highspeed).
Could this really be true ? (I can’t believe …)
-Dietmar Jagonak
You are currently subscribed to ntdev as: xxxxx@stg.com
To unsubscribe send a blank email to xxxxx@lists.osr.com