My hardest debugging session just ended today

November 28th, 2013

The hardest debug situation of my life just ended. Celebrate!

I was trying to make a USB audio adapter to work on an embedded device running OpenWRT, but Linux wasn’t recognizing the USB device. The device turned on, but wasn’t getting mapped to /dev. So I think, ok, I probably forgot the modules. I Installed the modules. Still no luck. Maybe I chose the wrong modules? I started trying different permutations of modules (with each try taking half an hour to recompile), looking into forums, has anybody experienced this? Nop, still not working. Wait, maybe it’s that hack I patched into the kernel to enable SPI via GPIO, ok, so I reverted the changes I made, reflashed the firmware, still no luck. Wtf? Maybe I messed up something else, so I installed other permutations of modules, try modprobe instead of insmod, still no luck. All right, I decided to start over, I reflashed the stock firmware, but USB was still not working. I tried to mount a USB drive instead of the audio adapter, nop, even USB storage didn’t work. When all software seems to fail, you have to start questioning whether your hardware is working as it should. I purchased a different USB audio adapter which I know works with OpenWRT, I waited for it in the mail, plugged it in, still no luck. Argh! All right, I dig deeper and make the assumption that this is a hardware fault, I took the tester out, schematics for the board, started probing the USB data inputs… ground check, Vcc check, USB+ check, USB- check, board is properly connected to the USB input. As I looked closer at the board in desperation, I noticed a funny looking junction… aha! USB+ and USB- shorted together. That might to do! So I take my soldering iron and disconnect the juncture. Success!

Moral of the story: when all else fails, do not assume your hardware works. The board is a Carambola2 manufactured by 8devices. You think they would test their stuff before shipping to customers. Mm.