app
AI Flow: Reverse Engineering
Public Made by Adomby adom
Photos of a PCB to a tagged KiCad copy: parts placed, copper and nets with their evidence, a schematic, a measured confidence score, bench tests and a video of the run.
main
Caleb
Add the page README, the run and process video sub-pages, and captions
64663a4
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
1
00:00:01,952 --> 00:00:05,849
It starts with four photos of a motor driver board, and one request.
2
00:00:05,869 --> 00:00:10,135
Find the parts, the functional blocks, the pours and the routing.
3
00:00:10,155 --> 00:00:11,794
Copy everything you can see.
4
00:00:11,814 --> 00:00:15,780
Then work out what you can't, pick a layer count, and say how sure you are.
5
00:00:16,361 --> 00:00:21,041
The first attempt reused the existing AI Flow program, and Caleb called that
6
00:00:21,061 --> 00:00:21,288
out.
7
00:00:21,308 --> 00:00:25,908
So this became its own Rust program, with its own copper reader and its own
8
00:00:25,928 --> 00:00:26,339
router.
9
00:00:26,359 --> 00:00:29,894
The program does the measuring. The AI does the naming.
10
00:00:29,914 --> 00:00:33,128
Eleven steps, and each one records what it produced.
11
00:00:33,690 --> 00:00:35,968
Two photos of the top, two of the bottom.
12
00:00:35,988 --> 00:00:39,805
The program finds the board edge in each one and straightens it.
13
00:00:39,825 --> 00:00:44,512
Then it turns the bottom over to line up with the top. 38 holes agree, 2
14
00:00:44,532 --> 00:00:44,904
don't.
15
00:00:45,482 --> 00:00:51,031
Scale comes from the board itself. The header rows have known pitches, 2 mm
16
00:00:51,051 --> 00:00:51,923
and 2.54 mm.
17
00:00:51,943 --> 00:00:55,113
That gives 46.6 pixels per millimeter.
18
00:00:55,133 --> 00:00:59,787
The driver chip's 6 mm body settles which pitch standard the rows are.
19
00:01:00,360 --> 00:01:02,841
Then the parts, 137 of them.
20
00:01:02,861 --> 00:01:06,374
103 are placed by their own pads on the photo.
21
00:01:06,394 --> 00:01:12,507
Markings get read where they're legible, like this TI DRV8323S.
22
00:01:12,527 --> 00:01:16,699
Where they aren't, the program says so. 91 parts still need a test.
23
00:01:17,284 --> 00:01:20,918
Silkscreen and circuit role sort them into 11 blocks.
24
00:01:20,938 --> 00:01:26,152
Power entry, the three-phase power stage, bridge sensing, the logic supply.
25
00:01:26,172 --> 00:01:31,719
The gate driver, the microcontroller, CAN, AUX, the fan, motor temperature and
26
00:01:31,739 --> 00:01:33,074
the mounting holes.
27
00:01:33,658 --> 00:01:38,749
Then came the real miss. The first copy had 58 pours, all on the bottom, and
28
00:01:38,769 --> 00:01:40,026
not a single track.
29
00:01:40,046 --> 00:01:44,773
Caleb looked at it and said fill and via recognition was completely lacking.
30
00:01:44,793 --> 00:01:45,676
That was correct.
31
00:01:46,249 --> 00:01:50,301
So the reader was rewritten. Under solder mask, copper looks a little lighter
32
00:01:50,321 --> 00:01:53,209
than bare laminate, compared with its own neighborhood.
33
00:01:53,229 --> 00:01:56,060
Thin dark lines mark the gaps between copper.
34
00:01:56,080 --> 00:02:02,294
Follow those gaps and the board falls apart into islands. 1,444 of them.
35
00:02:02,314 --> 00:02:07,370
That became 116 pours and 314 tracks, on both faces.
36
00:02:07,949 --> 00:02:13,882
Vias are next. 2,681 candidates, and 1,028 kept.
37
00:02:13,902 --> 00:02:18,031
They're tented on the top, so only 45 show on both faces.
38
00:02:18,051 --> 00:02:22,994
Zoom in and the misses show. Up to a third land on something pale, mostly
39
00:02:23,014 --> 00:02:24,965
silkscreen letters and lines.
40
00:02:24,985 --> 00:02:29,825
And the 3 read as leading only inward look like ordinary domes in a stitching
41
00:02:29,845 --> 00:02:32,477
field. So that's no proof of inner layers.
42
00:02:33,050 --> 00:02:37,964
All of that goes straight into a KiCad board, as photographed, before anything
43
00:02:37,984 --> 00:02:38,659
is guessed.
44
00:02:38,679 --> 00:02:41,979
Here's the copy laid over the top photo, and over the bottom.
45
00:02:42,550 --> 00:02:48,074
Now for what nobody can see. Datasheets and the circuit fill in the rest of
46
00:02:48,094 --> 00:02:51,252
the nets. 77 nets, 249 connections to make.
47
00:02:51,272 --> 00:02:56,221
99 pins disagree with the copper they seem to touch. Those get reported, not
48
00:02:56,241 --> 00:02:57,136
quietly fixed.
49
00:02:57,726 --> 00:03:02,040
Then the router. It's written for this job, and it uses every inner layer.
50
00:03:02,060 --> 00:03:06,974
When photographed pours were hard walls, 235 connections stayed open.
51
00:03:06,994 --> 00:03:11,990
Real vias pass through pours, so seen copper became expensive to cross instead
52
00:03:12,010 --> 00:03:12,826
of forbidden.
53
00:03:12,846 --> 00:03:17,587
17 recorded runs later, 6 and 8 layers are down to about 30.
54
00:03:18,157 --> 00:03:21,244
The layer count comes from how hard that is.
55
00:03:21,264 --> 00:03:27,699
4 layers: 54 open, and 327 mm cut through copper the photos show.
56
00:03:27,719 --> 00:03:30,646
6 layers: 34 open, 24 mm.
57
00:03:30,666 --> 00:03:37,037
8 layers: 29 open, 30 mm. That's no real gain, since runs vary by about a
58
00:03:37,057 --> 00:03:37,737
quarter.
59
00:03:37,757 --> 00:03:42,411
So the proposal is 6. It's a measure of difficulty. Nobody has seen inside
60
00:03:42,431 --> 00:03:43,105
this board.
61
00:03:43,693 --> 00:03:48,776
The rules were set from the start: KiCad's defaults, 0.2 mm track and
62
00:03:48,796 --> 00:03:49,516
clearance.
63
00:03:49,536 --> 00:03:53,723
Most of what's left open is fan-out at the two QFN chips.
64
00:03:53,743 --> 00:04:00,570
The same copy at JLC-style rules, 0.127 mm, leaves just 2 open at 6 layers.
65
00:04:00,590 --> 00:04:05,024
So that's mostly a rules limit. That run has no valid design rule check yet.
66
00:04:05,592 --> 00:04:10,631
Then it reviews itself, in a loop. 4 passes, and the last one changes nothing.
67
00:04:10,651 --> 00:04:15,930
Blocks and placement come out high. Identity, values, copper, vias and layers,
68
00:04:15,950 --> 00:04:16,406
medium.
69
00:04:16,426 --> 00:04:18,593
Connectivity is low, and it says why.
70
00:04:18,613 --> 00:04:23,647
Everything still unknown gets a test. 119 of them.
71
00:04:24,218 --> 00:04:25,731
So this is not a finished board.
72
00:04:25,751 --> 00:04:31,262
34 connections stay open. KiCad counts 76 missing, because some seen copper
73
00:04:31,282 --> 00:04:33,105
isn't joined in the copy.
74
00:04:33,125 --> 00:04:37,466
The rails at the upper left of the bottom are largely missing, and signal
75
00:04:37,486 --> 00:04:39,139
bundles mostly read as gaps.
76
00:04:39,159 --> 00:04:43,115
And the inner copper is one way to connect it, not what's actually inside.
77
00:04:43,682 --> 00:04:48,729
Every stage is saved in the flow window. 110 recorded steps you can replay.
78
00:04:49,308 --> 00:04:54,732
From the first prompt to the report took about 6.5 hours of AI time, with idle
79
00:04:54,752 --> 00:04:56,756
gaps over 15 minutes cut out.
80
00:04:56,776 --> 00:05:05,483
914,981 output tokens, and 272 million cache reads, across 463 model calls.
81
00:05:05,503 --> 00:05:10,357
Next up: real measurements on this board, and a second board, before any of it
82
00:05:10,377 --> 00:05:11,107
goes public.