Reversing USB protocols

I’m resumed working out the behaviour of the Dediprog EM100Pro, an SPI flash emulator. It comes with a Windows driver and application to control it, and I worked on an Open Source tool for Linux in the past.

Now I’m back at it and working on the more advanced features the tool supports: It’s able to log traffic on the SPI bus and to provide a simple bidirectional serial channel (they call it "HyperTerminal"), and it would be nice to have that work on Linux, too.

So I’m running Windows in a virtual machine again and logging whatever happens on USB to figure out how program and device are communicating with each other.

Unfortunately it doesn’t work with KVM’s USB emulation, so I had to get things up in VirtualBox again (since I remember that this worked last time). It looks like the EM100Pro isn’t particularily happy about being queried for its device properties twice (that is, USB device descriptors containing the device ID and names and so on). VirtualBox hooks USB earlier, intercepting those queries, instead of just sending them again – or something like that.