From: Hua.watson on
zantetsu says:
========================================================
I created WDM USB driver for Windows 2000 and XP.
Our device has no memory.
So the transfer shouldn't stop.
If the transfer stops, the stop period is limited about 50 micro
seconds.
I could get data from our device under Windows 2000 and XP.

I could not get a part of data under Vista.
I found that
the transfer stops during 125 micro seconds per 512k bytes transfer
under Vista.

What should I do?

Thanks.
==========================================================

I have the same problem ( a time-gap about 3 milisecond after 512k,
each time ) in same situation now. Anyone knows how to solve this
problem ?

Thanks
From: Tim Roberts on
Hua.watson(a)gmail.com wrote:
>
>I created WDM USB driver for Windows 2000 and XP.
>Our device has no memory.
>So the transfer shouldn't stop.
>If the transfer stops, the stop period is limited about 50 micro
>seconds.

Then your design is hopelessly broken. Windows is not a real-time system;
you don't get this kind of guarantee.

>I found that the transfer stops during 125 micro seconds per 512k bytes
>transfer under Vista.

Are you sure you have sufficient requests queued up? If the host
controller gets to the start of a microframe and you don't have a request
queued up, then you'll miss that microframe.

>What should I do?

Have you tried SP1 yet? There were a couple of issues with isochronous
transfers in Vista that are rumored to be fixed in SP1. It would be worth
a try.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.
From: Hua.watson on
On May 12, 7:01 am, Tim Roberts <t...(a)probo.com> wrote:
> Hua.wat...(a)gmail.com wrote:
>
> >I created WDM USB driver for Windows 2000 and XP.
> >Our device has no memory.
> >So the transfer shouldn't stop.
> >If the transfer stops, the stop period is limited about 50 micro
> >seconds.
>
> Then your design is hopelessly broken.  Windows is not a real-time system;
> you don't get this kind of guarantee.
>
Yes, we known this. Anyway, our desgin need not get each frame. We
only want to get most of the frames. Eyes of human do not care loss 1
or 2 frames.
Our solution can work in XP, more than 90% frames can be get
successfully, that is enough. But in Vista, almost none frames can be
get.

> >I found that the transfer stops during 125 micro seconds per 512k bytes
> >transfer under Vista.
>
> Are you sure you have sufficient requests queued up?  If the host
> controller gets to the start of a microframe and you don't have a request
> queued up, then you'll miss that microframe.
Yes, we are sure that sufficient requests queued up. And, thermiss of
microframe happens not between IRPs, But ' INSIDE ' 1 IRP. For
example, the IRP requires 829440 bytes, after read of 512k bytes,
several microframes miss, then continue.
I am not sure whether the lower FiDO of windows itself will ro will
not cut my big IRP to several parts.

>
> >What should I do?
>
> Have you tried SP1 yet?  There were a couple of issues with isochronous
> transfers in Vista that are rumored to be fixed in SP1.  It would be worth
> a try.
There is no difference before and after the update of SP1. We use
VISTA home basic 6.0.6000 and 6.0.6001.

Thanks

> --
> Tim Roberts, t...(a)probo.com
> Providenza & Boekelheide, Inc.

From: Hua.watson on
On 5ÔÂ12ÈÕ, ÉÏÎç10ʱ37·Ö, Hua.wat...(a)gmail.com wrote:
> On May 12, 7:01 am, Tim Roberts <t...(a)probo.com> wrote:> Hua.wat...(a)gmail.com wrote:
>
> > >I created WDM USB driver for Windows 2000 and XP.
> > >Our device has no memory.
> > >So the transfer shouldn't stop.
> > >If the transfer stops, the stop period is limited about 50 micro
> > >seconds.
>
> > Then your design is hopelessly broken. Windows is not a real-time system;
> > you don't get this kind of guarantee.
>
> Yes, we known this. Anyway, our desgin need not get each frame. We
> only want to get most of the frames. Eyes of human do not care loss 1
> or 2 frames.
> Our solution can work in XP, more than 90% frames can be get
> successfully, that is enough. But in Vista, almost none frames can be
> get.
>
> > >I found that the transfer stops during 125 micro seconds per 512k bytes
> > >transfer under Vista.
>
> > Are you sure you have sufficient requests queued up? If the host
> > controller gets to the start of a microframe and you don't have a request
> > queued up, then you'll miss that microframe.
>
> Yes, we are sure that sufficient requests queued up. And, thermiss of
> microframe happens not between IRPs, But ' INSIDE ' 1 IRP. For
> example, the IRP requires 829440 bytes, after read of 512k bytes,
> several microframes miss, then continue.
> I am not sure whether the lower FiDO of windows itself will ro will
> not cut my big IRP to several parts.
>
>
>
> > >What should I do?
>
> > Have you tried SP1 yet? There were a couple of issues with isochronous
> > transfers in Vista that are rumored to be fixed in SP1. It would be worth
> > a try.
>
> There is no difference before and after the update of SP1. We use
> VISTA home basic 6.0.6000 and 6.0.6001.
>
> Thanks
>
> > --
> > Tim Roberts, t...(a)probo.com
> > Providenza & Boekelheide, Inc.

Append: Today, I tried to divide the 800k IRP into several 256k or
512k URBs in my WDM driver, and send them one after another is
complete. But there are still time-gap between URBs. Should I or can I
send more than one URBs to the system PDO ? ( once a URB is finished,
system can immediately ask for data to fill the next URB without call
my FDO WDM driver. In fact, I used to think if I send a big URB of
800k, system USB PDO driver will do this automaticly. )
From: Tim Roberts on
Hua.watson(a)gmail.com wrote:
>
>Append: Today, I tried to divide the 800k IRP into several 256k or
>512k URBs in my WDM driver, and send them one after another is
>complete. But there are still time-gap between URBs. Should I or can I
>send more than one URBs to the system PDO ? ( once a URB is finished,
>system can immediately ask for data to fill the next URB without call
>my FDO WDM driver. In fact, I used to think if I send a big URB of
>800k, system USB PDO driver will do this automaticly. )

To guarantee uninterrupted service, you MUST have multiple URBs queued up
at any given time. By the time one URB is completed, you have already
missed the next microframe, without even considering the turnaround time.

800kB is a lot for a single isochronous URB. For a maximum bandwidth
endpoint, that one URB will span 256 microframes. I'd rather queue up 8
URBs with 100kB each.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.