This is an Arduino Nano (or, to be completely honest, a cheap knockoff of one.) Please excuse the crappy soldering:
This is a Gravitech USBHOST-4NANO:
Based on the naming (and product literature), you’d really think these would work together. You’re supposed to just plug the Nano into the shield, and be on your way:
But if you do this, and then fire up the USB host shield testing sketch… it doesn’t work. What gives?
Well, I spent several days agonizing over this. Eventually I got out my oscilloscope and using the troubleshooting instructions, I mapped out the pins.
Turns out, the pins for SCK, MOSI, and MISO were correct. But the USBHOST-4NANO is expecting SS on pin D8, and the Nano is using pin D10.
Why? To be honest, I haven’t figured that out. The USB Host Shield library specifies that SS should be on pin 10, so that explains why that’s where the signal is. But why was the USBHOST-4NANO built to expect it on pin 8?
I thought perhaps that this was a discrepancy between the USB Host Shield library 1.0 and 2.0, since the USBHOST-4NANO has been around since 2011. But that also appears to place SS on pin 10.
So, this is still a mystery, but at least the thing works now, if I jumper the correct pins. I could probably also patch
USBCore.h to change the SS pin.
Another caveat to remember: the USBHOST-4NANO won’t draw power from the Nano off the 5V pin. It expects a feed of 7-12V off the green terminal block, or the VIN pin if you close that jumper. This is probably so that the USB bus can’t overwhelm the tiny voltage regulator on the Nano. If you really want to pull power from the same source as the Nano, you could solder a wire directly to the large pin of the 5V regulator to bypass the whole thing. If they’re both being fed from a beefier source, this is probably fine.