CDC - stalled bulk IN
- no error recovery on Windows CDC
CDC class driver on PC starts to poll bulk and interrupt IN endpoints, just after enumeration. Usually, these IN transactions are NAKed by the CDC device, unless the device has any data to send. Attached figure (left side) shows screen shot of bus analyzer for this polling IN transactions, taken on Windows.
When an IN transaction is disturbed by noise, host controller (HC) retries it automatically. When the third retry fails, HC notifies an error to the PC class driver. This is applied to NAKed transactions, too. Receiving error notification, decent class driver starts recovery sequence, like pipe reset (Clear_Feature(endpoint)), device reset (bus reset), etc.
However, Windows CDC driver (usbser.sys) does no error recovery. It just stop polling on the bulk IN endpoint on error. Attached figure (right side) shows it clearly. After errors on bulk IN, just polling interrupt INs remain. No other activity for error recovery on the bus. This trace was taken on Windows XP(x86) SP3. Lack of error recovery has been succeeded by Vista, 7 (x86, x64).
This is the major reason why I have often told usbser.sys is not reliable.
post edited by chinzei - 2010/11/25 14:43:08