Repairing the Happy Hacking Keyboard
My trusty old Happy Hacking Keyboard has been working pretty reliably for the last four years. After fixing a botched plastic mold and strategically placing a piece of cardboard in its innards that is. Regarding the typing feel it is still my favorite keyboard that doesn't take a lot of space on a crowded desk and I only switch to a regular-sized Logitech when I'm working with EDA programs where I need functions keys a lot.
So I was pretty disappointed when it stopped working a week ago. Checking the kernel log revealed all sorts of random USB bus errors:
usb 6-1.1: USB disconnect, device number 14 usb 6-1: reset full-speed USB device number 13 using uhci_hcd usb 6-1: device not accepting address 13, error -71 usb 6-1: reset full-speed USB device number 13 using uhci_hcd usb 6-1: device firmware changed hub 6-1:1.0: hub_port_status failed (err = -19) hub 6-1:1.0: hub_port_status failed (err = -19) hub 6-1:1.0: hub_port_status failed (err = -19) hub 6-1:1.0: activate --> -19 usb 6-1: USB disconnect, device number 13 usb 6-1: new full-speed USB device number 15 using uhci_hcd usb 6-1: string descriptor 0 read error: -71 usb 6-1: New USB device found, idVendor=04fe, idProduct=0008 usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 6-1: can't set config #1, error -71 hub 6-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
This looked like something systemic. Either the controller was resetting continuously or there was something wrong with the USB wiring between the controller and the computer.
A new, identical HHKB model goes for more than $110 today so I opened it up to see if there's anything I can do. After checking the cable with an ohm-meter my suspicion fell on the power supply which seems to consist of a 3.3 V LDO regulator and some capacitors. I could see no obvious transients on the power rails when the controller switched on after the keyboard was plugged in. One interesting thing I did see was that if negotiation with USB host fails the controller switches itself off completely, including its quartz oscillator.
Since I had some problems with flaky USB cables before, I removed the original cable and soldered a new cable directly to the circuit board. This fixed the problem! After poking around some more, it turned out that after re-soldering the connector to the PCB the original cable worked as well.
I removed the membrane before poking around the controller board since a hot soldering iron and plastics don't mix well. Re-inserting the soft matrix tails into the (non-ZIF) connectors was somewhat tricky. I resorted to using pliers plus a bit of paper to protect the delicate wires.
I also noticed that silver wires on the keyboard matrix itself seem to be developing a kind of a dark oxide on the outer edges. I don't remember for sure whether they looked like this from the start though. If something is eating away at the wires that definitely puts a kind of a definitive limit to this keyboard's longevity.
In conclusion, just checking with a multimeter doesn't mean there's not a bad solder joint somewhere on a high-speed bus. The wisdom of checking first for bad RoHS soldering on mechanically (and thermally) stressed components confirmed itself again. Also, did you know there are a couple of alternative, open source Happy Hacking Keyboard controllers out there?