Thanks for the quick reply.

The device can transmit more than 64 bytes.
Each packet is broken into 64 bytes fragments while transmitted.

At normal operation, the device generated data every 4-5ms, while the
host usually polls every 1ms.
The issue occurs when there is one delayed poll from the host, which is
100ms after its last poll. In this case the data is generated faster
than the host polls, but this is not normal behavior. We cannot work
with 100msec rates. It's too slow.
I also assume that there is some sort of TXFifo in the USB to overcome
such a situation.

There is nothing wrong in sending to packets in the same frame, except
it's not supposed to be this way, and eventually the concatenation
causes packets to get lost.
If I will be able to overcome the concatenation issue, and force each
packet to be transmitted in its own frame, data won't be lost.
I tried to busy wait on the transmit status register, to verify that the
previous packet was already sent, but it didn't help. In the FW code I
can only trigger the poll by setting the POLL_DEMAND bit in the control
register. 
If the poll doesn't arrive, the data will still accumulate.

Any ideas?

Thanks,
Gadi




On Wed, 5 Dec 2007, Gadi Tunes wrote:

> Hi,
> 
> My device is connected to the host by 3 IN endpoints (USB 1.1).
> Two of them are interrupt HID eps and the third is bulk.
> I have an issue with packets being concatenated while sent from the 
> device to the host, if the polling from the host isn't quick enough.
> For instance, in my bulk ep, I can transfer 64 bytes in each frame. I 
> usually send 16 byte packages.
> If the polling was delayed from some reason, the 4 packets will be 
> transferred to the host the next time it polls, and 64 bytes will be 
> transferred.
> If there were more than 4 packets concatenated, the rest will be lost,

> as only 64 bytes can be passed in a frame

Why can't the device transmit more than 64 bytes in a frame?

> (but if I had a packet larger
> than 64 bytes in will be fragmented into 64-bytes fragments and all 
> the data will pass).
> I had this issue also with the interrupt HID eps. I was supposed to 
> send
> 8 bytes reports, and the EP could have transferred 16 bytes, so 
> sometimes I had concatenations. The reports which arrived to the host 
> were illegal (incompatible with the report descriptor, awaiting 8-byte
> reports) and I got resets on the USB line. As a workaround I enlarged 
> the reports into 10 bytes, which prevented the possibility of 
> concatenation (the ep could not transfer 20 bytes), but with the bulk 
> ep I can't do that as anything is allowed on the bulk ep, and the 
> maximum package size is much bigger and I don't want to overload the
USB line.

What you're saying isn't entirely clear.  It sounds like you are
submitting data to the firmware faster than the host will accept it, and
as a result some of your data is getting lost.  Is that right?

> My questions are:
> How do prevent this concatenation? I want each packet to be sent in 
> its own frame.

Why do you want each packet sent in its own frame?  What's wrong with
sending two packets in the same frame?

If you really want to prevent the device from sending more than one
packet per frame, you shouldn't submit them so fast.  After submitting a
packet, wait until the packet has been sent to the host and a frame
boundary has occurred before submitting the next packet.

> What is causing this issue?

You are.

> Should I config something in the FW related to the USB and DMA 
> registers?

It's pretty hard to answer that without knowing anything about the
device's USB and DMA registers.

> Is this a "babble" condition?

No.  "Babble" means the device transmitted more data than the host
expected.

> Can I force the host to poll every time I have data?

No.  The host polls when it wants to; you can't affect it.

> It polls every 1ms
> anyway on the interrupt eps. I use a Poll Demand trigger every time I 
> have data available for the DMA to transfer to the USB TxFifo, but 
> these concatenations still happen.

Alan Stern


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Linux-usb-users@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-users

Reply via email to