A PCB-layout-only remix of 1BitSquared/Black Sphere Technologies' excellent Black Magic Probe v2.1. Designed to replace the fingerprint reader in the palm rest on some Thinkpads, because when have you _not_ needed an ARM debugger with a built-in UART port? Runs stock firmware and grabs USB from the fingerprint reader's FFC connector (well... +5VDC from the touchpad). Not tested on anything other than my X220 (but it seems to work!). Cable harnesses get stuffed in the o'l ExpressCard slot for storage.
Hardware is CC-BY-SA, as with the original. See the GitHub repo (linked below images) for KiCad files.
As the title says, soldering the tiny XSON8-packaged level shifters was a real pain in the ass. I didn't make a stencil for TP-BMP but I did stretch the footprint out a bit, so I tried hand-soldering them but to no avail. You can probably see why:
[above: image of the bottom of the level shifter in XSON8 form, sitting on a standard 0.1" spaced board for scale.. Note that this is really an LGA, so unlike a QFN the pads don't actually extend to the side of the package. Not hand-soldering friendly.]
I probably should have gotten a stencil and started over with a fresh board, since I have a few extra. Instead, I bodged on a bit of solder paste and hit the components with a hot air gun. This didn't work at first, so I touched 'em up with an iron, tested the board, desoldered two of them, cleaned up the joints, etc .. repeat for a lot longer than I should have spent on this project. But finally...
[above: screenshot of using ARM gdb to detect, attach, program, and detach a #NeuroBytes Interneuron board. Yay!]
(above: getting rid of the thumbprint reader/metal shield and replacing them with a cardboard template. Yes it kind of looks like a backwards Utah.)
Putting everything in KiCad suggested that the shape and size above would work given the connector location constraint and the component footprints. This design is quite a bit larger than the original Mini and has components on both sides; this made PCB layout quite a bit easier than the Black Sphere design:
[above: a KiCad screenshot of the 4-layer board (sig-gnd-vcc-sig) with one middle layer track, which probably isn't ideal.]
After reflowing the QFN STM32 and soldering the rest of the board together (other than the level shifters which are backordered, ugh), a fit check suggested that the hole spacing needs a tiny bit of adjustment but works well enough for v0.1:
[above: TP-BMP installed in the X220's palm rest. Note missing level shifters. Also the cutout for the fingerprint sensor had to be widened a bit to clear the 10-pin JST header.]
I forgot to take pictures of the firmware loading process; in the image above, one can see the test pads below the STM32 that were used for this process. A Discovery Board was used (well, its ST-LINK, at least) along with st-link to load the stock BMP firmware and bootloader binaries. After re-installation, the board enumerated (!!!), so now it's time to drill LED holes, finish the wiring harness, and solder on the level shifters (when they arrive).
When I started this project, I had an inkling that the fingerprint reader spoke USB. To verify this, I popped the board out of my computer and tacked on a few test wires:
[above: 10x loupe photo of the fingerprint reader PCB showing a few test wires]
I labelled the wires according to position on the FFC header, snaked them through the fingerprint reader cutout, and reassembled the computer so I could 'scope 'em:
[above: testing potential USB traces, prior to getting over my fear of disassembling my laptop without disconnecting power/battery]
This didn't tell me much, beyond suggesting that the fingerprint reader didn't require +5VDC. Most of the wires seemed to be +3.3VDC or ground, but a few appeared to have some interesting signals on them. I decided to butcher the fingerprint board and make an FFC header breakout so I could convince myself everything worked:
[above: another 10x loupe shot confirming that breakout boards are for suckers]
[above: always looking for an excuse to carve FR4...]
Eventually, I bodged together a breakout and located the two USB data pins. I tested everything using a hacked-apart ST-LINK from an STM32F0 Discovery Board to program a #NeuroBytes Interneuron:
[above: an Interneuron connected via st-util (hence the green light on the Discovery board half). The +3.3VDC supply voltage didn't cause any issues for the ST-LINK, but it did mean that the Interneuron's LED was quite dim.]
So... if you want a free 3.3VDC USB port instead of your Thinkpad's fingerprint reader, here's the pinout: [above: FFC USB pinout, if the cable has conductors exposed on the top and enters from the left.]