My new reverse engineering workflow for PCBs.

Chances are, you might be inclined to take stuff apart just to see how things are built. If that's the case, possibly you've heard of the YouTuber Bigclive, known for his many neat teardowns of cheap ebay electronics and taking the viewer through his workflow of reverse engineering the electronics inside, which usually means printing out clear photos of both sides of the PCB (with one side mirrored), doodling on said images with coloured sharpies, then hand-drawing a schematic on a notepad (or sometimes CAD). A useful skill that I'd like to work on.

Now, here comes today's story. I came across this board featuring a tiny OLED, which seems like a very interesting candidate for a CR2032 coin cell powered project. In fact, I didn't believe my multimeter readings until I've unplugged the i2c data wires to rule out the possibility that the display was being backfed through them.

Tiny OLED displaying a still from a test animation at full brightness, with most pixels fully turned on

Depending on usage scenario, I've observed the power draw to vary between around 2-7mA (from just a bit of static white text on a black background to a fast updating mostly-white animation), and additionally the low voltage performance was impressive, so I've decided to use the same known-working circuit in my project... however, there's a bit of a problem with that. The schematic supplied by the manufacturer doesn't match what's on the board! Well, what a great opportunity to practice reverse engineering it is, and while doing so try a new tool and find a workflow that works for me.

optional intermediate step - print out photos and annotate components on paper

First I took photos of the board and since I was going full force with this, started by desoldering all the components and measuring them individually. Writing on paper is naturally decently ergonomic, but black on black wasn't a good choice of color palette, as adding text obscured the traces. Computer drawing programs have spoiled me with ability to separate things into different layers and undo moves, which isn't a thing with paper irl, so around this point I chose to clean the desk and move to the computer seat.

inputting values into kicad

In hindsight, what I should have done at this point is to load photos into GIMP, mirror one of the PCB layers and align them together, then take advantage of as many layers as I'd want. For some boards it could make sense to put each individual trace/net into its own layer.

Same board in GIMP

GIMP is sweet but using an image editor feels like a workaround and what I feel has the potential for becoming the real tool for the job might be KiCAD's PCBnew once it gets extra features for reverse engineering. Instead of placing schematic symbols over a photo background imagine doing the same with component footprints then drawing traces and vias right where they belong, ideally even with visible photo layer automatically switching as you'd drop a via while drawing a trace. Then assign symbols to footprints and drop a ratsnest of symbols into eeschema... Anyway, until then, GIMP is fine too.

De facto final sheet with an earlier conclusion

In summary, I've found a workflow that works for me and could be scaled to bigger boards. Also, I'm excited with image backgrounds in KiCAD and would love to see more features useful in PCB reverse engineering brought into it.

Bonus decap

Since this display happens to be much dimmer at full brightness than the other SSD1306 displays I've seen, I wonder if maybe it uses a different controller with the same interface and decided to put it under a microscope to see if I'd find any identifiable markings to indicate its model. Well, nope, but the layout of gold bumps and location of alignment markings seem to match the ssd1306 datasheet.

possibly the SSD1306 controller die