0
votes

We are developing a WinCE 6.0 USB Driver for a Ethernet networking device. Device has 1 control, 1 Interrupt (IN) and 4 Bulk endpoints (3 OUT and 1 IN). Basic functionality is working fine with driver.

But when we run heavy traffic (with iperf) for sometime, we see an issue of not receiving any data from target from BULK IN endpoint. At this point host is still able to send data through Bulk OUT endpoint.

We have a USB analyzer to check the transactions between host and device. We have found from the capture that, when we hit this condition, host has stopped sending out IN token frames on Bulk IN endpoint, to read data. Though it continues to be able to push data through Bulk OUT pipe and get a successful ACK from device.

Just before we hit the condition, we see normal behavior of either IN token frame with NAK (when device has no data to send to host) or IN token with valid data.

  1. This shows that the device firmware is still responsive. What could cause the HCD to stop sending IN token frames?
  2. How to recover from such partial failure?

Any suggestions on how to debug this further?

Thanks in advance

Thanks

Jeff Facemire

1

1 Answers

0
votes

We have figured out the issue.

During initialization buffers are provided to HCD driver for receiving on BULK IN endpoint. When we run heavy traffic, we hit a condition, where all the buffers submitted to HCD are returned back to driver, but not given back HCD. Since there are no buffers to receive data for that Pipe, HCD driver is not sending any IN Token transfer frames.