From: Hapary on
Dear All,

I'm currently working on a CDC device. The device is identified as a
virtual serial port in windows and is using usbser.sys, moreover the
device is identified as Full-Speed.

When my device sends data to PC via its dedicated endpoint, I can reach
a throughput around 300kbps, however when PC sends data to my device,
the throughput is extremely low (around 10kbps). Both endpoints have
similar characteristics, and the endpoint size is defined as 64 bytes.
But I've seen that only one byte is transfered with every DATA OUT
packet (instead of maximum size of 64). Is this a problem with
usbser.sys ? Is there any setting that I have to change in windows ? Is
there any replacement for usbser.sys that doesn't have this problem ?

I've looked around my FW/HW and they seem to be ok, so what am I
missing ?

Thanks a milion,

From: chris.aseltine on
Hapary wrote:

> When my device sends data to PC via its dedicated endpoint, I can reach
> a throughput around 300kbps, however when PC sends data to my device,
> the throughput is extremely low (around 10kbps). Both endpoints have
> similar characteristics, and the endpoint size is defined as 64 bytes.
> But I've seen that only one byte is transfered with every DATA OUT
> packet (instead of maximum size of 64).

Is that kilobits per second or kilobytes per second? How are you
calling WriteFile() on the port? How are your endpoints configured on
the device?

Have you taken a USB log on the wire to see if the device is, say,
excessively NAKing the packets?

From: Vetzak on

Most people and companies write their own CDC driver(s). To me,
usbser.sys is not documented enough to rely on. Last time I tried to
deploy this driver, I had to disassemble it in order to clear out some
of my questions. So I promptly started writing my own CDC driver set
and it rocks.


Hapary schreef:

> Dear All,
>
> I'm currently working on a CDC device. The device is identified as a
> virtual serial port in windows and is using usbser.sys, moreover the
> device is identified as Full-Speed.
>
> When my device sends data to PC via its dedicated endpoint, I can reach
> a throughput around 300kbps, however when PC sends data to my device,
> the throughput is extremely low (around 10kbps). Both endpoints have
> similar characteristics, and the endpoint size is defined as 64 bytes.
> But I've seen that only one byte is transfered with every DATA OUT
> packet (instead of maximum size of 64). Is this a problem with
> usbser.sys ? Is there any setting that I have to change in windows ? Is
> there any replacement for usbser.sys that doesn't have this problem ?
>
> I've looked around my FW/HW and they seem to be ok, so what am I
> missing ?
>
> Thanks a milion,

From: Hapary on

Hi,

Thank you for your replies. The speeds are in kilo bits per seconds. I
was using hyperterminal's SendTextFile to measure the speed, but I'll
try to use WriteFile directly, are there any suggestions for the
parameters to use with CreateFile/WriteFile with usb ?

The endpoints that I use for sending and receiving data are configured
based on a standard CDC device i.e. Bulk type. The endpoint's maximum
size is 64. And there is no other USB device attached to the same host
on the PC side (to make sure that the bandwidth is not used with some
other device).

About NAKs, I'm really looking for something to help me find out about
them, unfortunately, the USB controller that I'm using sends ACKs/NAKs
transparently and I can't see them, I also don't have any USB data
logger hardware to investigate the protocol. Is there any way that I
can find out about NAKs in windows system ?

About writing my own driver, I'm trying to avoid that as much as
possible, as I'm not familiar with driver developement in windows and
also I'm afraid that I have to implement one driver for each version of
windows (not sure about that though).

Regards,
Behzad

chris.aseltine(a)gmail.com wrote:
> Hapary wrote:
>
> > When my device sends data to PC via its dedicated endpoint, I can reach
> > a throughput around 300kbps, however when PC sends data to my device,
> > the throughput is extremely low (around 10kbps). Both endpoints have
> > similar characteristics, and the endpoint size is defined as 64 bytes.
> > But I've seen that only one byte is transfered with every DATA OUT
> > packet (instead of maximum size of 64).
>
> Is that kilobits per second or kilobytes per second? How are you
> calling WriteFile() on the port? How are your endpoints configured on
> the device?
>
> Have you taken a USB log on the wire to see if the device is, say,
> excessively NAKing the packets?

From: Vetzak on

Hello

My driver set runs on Win2K, WinXP and WinVista. Except for usb
selective suspend, everything runs fine & identical on all three
systems.

If you want higher throughput you must send multiple read IRPs down to
the USB subsystem, so the host controller can constantly read data of
the device. That's another reason why you should build your own driver.

If you want to monitor usb activity, try google for "usb monitor".
There's some software available that traces at the software level
(between your USB driver and the USB subsystem). For real USB tracing,
buy a USB tracer machine.


Hapary schreef:

> Hi,
>
> Thank you for your replies. The speeds are in kilo bits per seconds. I
> was using hyperterminal's SendTextFile to measure the speed, but I'll
> try to use WriteFile directly, are there any suggestions for the
> parameters to use with CreateFile/WriteFile with usb ?
>
> The endpoints that I use for sending and receiving data are configured
> based on a standard CDC device i.e. Bulk type. The endpoint's maximum
> size is 64. And there is no other USB device attached to the same host
> on the PC side (to make sure that the bandwidth is not used with some
> other device).
>
> About NAKs, I'm really looking for something to help me find out about
> them, unfortunately, the USB controller that I'm using sends ACKs/NAKs
> transparently and I can't see them, I also don't have any USB data
> logger hardware to investigate the protocol. Is there any way that I
> can find out about NAKs in windows system ?
>
> About writing my own driver, I'm trying to avoid that as much as
> possible, as I'm not familiar with driver developement in windows and
> also I'm afraid that I have to implement one driver for each version of
> windows (not sure about that though).
>
> Regards,
> Behzad
>
> chris.aseltine(a)gmail.com wrote:
> > Hapary wrote:
> >
> > > When my device sends data to PC via its dedicated endpoint, I can reach
> > > a throughput around 300kbps, however when PC sends data to my device,
> > > the throughput is extremely low (around 10kbps). Both endpoints have
> > > similar characteristics, and the endpoint size is defined as 64 bytes.
> > > But I've seen that only one byte is transfered with every DATA OUT
> > > packet (instead of maximum size of 64).
> >
> > Is that kilobits per second or kilobytes per second? How are you
> > calling WriteFile() on the port? How are your endpoints configured on
> > the device?
> >
> > Have you taken a USB log on the wire to see if the device is, say,
> > excessively NAKing the packets?