Hello everyone,
I recently encountered a problem using a USB-CAN adapter device in VMWare Workstation. This device allows communication over a CAN network, through a USB interface. The problem arises intermittently; outgoing transmissions will suddenly cease to function, while incoming traffic is still recieved. At this point the connection must be manually restarted.
In coordinating with the manufacturer, we have been able to determine that the problem only occurs in VMWare, and the problem is caused when we send a Zero-Length packet over USB:
- Our USB transmits have a 64-byte boundary.
- When a transmit ends right on the 64-byte boundary (i.e. the total size is 64, 128, 192, etc) we also add a zero-length packet, to signal the end of the transmission.
Once the zero-length packet is sent, no further transmissions will reach the USB device. We still receive traffic from the device, however. We analyzed our own internal logs and captured USB traffic using an intermediate device to determine that the transmit is sent from the driver level, but never reaches the physical USB wire. We inspected the VMWare USB trace, and no transmits appear in the trace after the Zero-Length Packet is sent.
Additionally, we were able to successfully sent the test packets from my Host machine with the same drivers installed, while the client VM running on the same machine exhibited the failure.
This problem does not appear in native Windows machines. We believe this is a bug in the VMWare Workstation USB stack. Is this a known issue? Has anyone encountered this before of found a workaround?
Some additional details about my machine:
Host: Windows 8 x64
VMWare Workstation v10.0.1, build-1379776
VM Client: Windows 7 x64
Hardware compatibility: Workstation 6.5-7.X (but the problem does not appear to go away, when compatibility is changed to Workstation 10)
USB Controller: USB 2.0
Thanks for any help or information you can provide.