Matthias:

After re-reading the USB protocol description, it became clear that the
problem you've been having with lost interrupt packets really must be a
data toggle issue.

Here's how it works.  In one of your bus traces you showed the device
sending a DATA1 token with interrupt data that the HCD never received.  
Assume that the toggle settings were mismatched, so the HC was expecting a
DATA0.  What would happen in that case?  The HC would see the DATA1 PID
and assume that the device was resending old data.  So the HC would
respond with an ACK but ignore the data and leave the transaction active.  
Sooner or later it would retry.  But now the device, having gotten the
ACK, would think the host received the interrupt data and thus would clear
its output buffer.  Having no data, it would just send a bunch of NAKs.  
As a result the data would be permanently lost, just as you saw.

It's not clear what might be causing this mismatch between the toggle 
settings.  The fact that the device was sending DATA1 when the host was 
expecting DATA0 indicates that the host's toggle was reset somewhere while 
the device's wasn't.  Is it possible that something in the open or release 
functions in your driver could be doing this?  Other things that affect 
the toggle setting include: set-configuration, set-interface, clear-halt.

Maybe by adding printk statements at appropriate places in the driver you 
can monitor the toggle value and find out where it changes (or fails to 
change).

Alan Stern



-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to