Repository navigation
feat: i2c-sensor-node - proper qualification package (SYN-268) - #384
Closed
rodneyosodo wants to merge 6 commits into
Closed
rodneyosodo wants to merge 6 commits into
rodneyosodo wants to merge 6 commits into
Conversation
#39's second test case is an I2C/SPI sensor board with a regulator, decoupling, pull-ups and an external connector. It gets its own pull request rather than sharing one with four other boards, so the board can be reviewed on its own evidence. A two-layer field sensor node: JST-fed 5 V into an AMS1117-3.3, an STM32G030 reading a BME680 and a 24LC256 over one I2C bus with one pair of 4.7 kOhm pull-ups, and a 4-pin JST break-out for the host UART with clamps on both lines. 19 components, 10 nets, 78.85 x 43.50 mm. Protection order is the point of the front end: F1 polyfuse first, then D1 SS14 series Schottky, so a fault current meets a part that resets and a reversed supply meets a blocking diode. Measured on this tree, not carried over: 10 of 10 nets closed, nothing open, 403.6 mm of copper over 131 segments and 11 vias, no track under the 0.127 mm floor, no via under the 0.3 mm drill or 0.13 mm ring, no via inside a pad, and `kicad-cli pcb drc` reports zero errors with one advisory dangling-track warning. The routing verdict is `routed` and the package validates as fabrication-ready. The nine `annular_width` errors this board reported on 16 October were #216 -- the net classes Synth wrote into the project asked for a 0.6 mm via over a 0.4 mm drill, a 0.10 mm ring against the 0.13 mm the same file stated. Nothing about the board changed; `main` stopped contradicting itself. What is left is in the README's Limitations, and it is honest about the four floating `U4` straps on the 24LC256 and the eleven layer changes with no ground return via within 1.53 mm. Carved out of the five-board bundle in #196.
A board carrying a programmable MCU with no way to program it, and an I2C
sensor module that exposed no I2C. 19 components to 37.
The defect first: U4's A0, A1, A2 and WP were all floating. Four CMOS inputs
with no DC path, which leaves the EEPROM's address and its write-protect state
undefined -- the device might answer anywhere or nowhere. All four to ground:
address 0x50, write enabled. That is four E-SYNTH-CONNECT-008 findings gone.
Then what makes it usable:
- J3, a 1x20 header, with the pinout written into the source and the README.
Power, both bus lines, SWD, NRST and ten spare GPIOs. SDA and SCL are the
same bus the on-board devices sit on with the pull-ups already fitted, so
a host can drive the sensor directly and hold the MCU in reset through pin
9. That is what makes this a module as well as a node.
- SWD on pins 7 and 8. The board had no programming access at all; PA13 and
PA14 went nowhere.
- Two rails declared with `power`, so V5_IN and V3V3 are named and checkable.
- D4 clamps the input behind the fuse. A field node's supply arrives on a
cable, which is where surges come from, and the polyfuse limits what the
clamp has to conduct.
- C2 is 10 uF rather than 1 uF. The AMS1117 wants that much on its output to
be stable, and E-SYNTH-POWER-006 was right to say so.
- C7, C8 and C9 bypass the regulator input and both external connectors.
One E-SYNTH-POWER-001 and three E-SYNTH-POWER-004 findings cleared.
- D5 and R4 1k say the 3V3 rail is up, which is the first question when a
node is dark.
- Five test points -- both rails, both bus lines, and a ground reference --
four corner mounting holes and two fiducials.
- J1 on the left edge, J2 on the right and J3 along the bottom. Not
cosmetic: without the edge hints the board spread out and the router left
V3V3 open, with C3.1 reaching 4 of its 20 pads.
`synth validate` reports zero errors.
Measured on this tree:
23 of 23 nets closed, none open
1191.7 mm over 273 segments and 65 vias
kicad-cli pcb drc: 0 errors, 0 unconnected, 2 warnings
routing verdict: routed, fabrication-ready
Measured with `--place-route-iterate`, and that matters. Of the five candidate
placements, four route cleanly and one does not, and the default path takes
the first -- which happens to be the one that cuts the ground pour into two
islands with no via between them. Every net is connected there too; what is
broken is a region of the pour, which the routing report has no way to say.
Filed as #279, and the README warns that a reviewer re-running without the
flag gets a refused package.
The README is also honest that J3 is 3V3 CMOS and unprotected, that a 5 V host
needs a level shifter of its own, and that thirteen of the package's pins are
not brought out. W-SYNTH-THERMAL-001's 107 C is the AMS1117's rated maximum rather
than this board's 510 mW -- #274.
Replaces the hand-edited source with what an agent produced from the prompt in agent-run/prompt.md, driving synth mcp with only Read, Write and Edit beside it. The board is now a USB-C powered and programmed module with a GPIO header, a UART break-out, ESD protection on every exposed line and four indicators.
The README reports what was measured on the exported files and what is open, and compares three exports from the source by hash. agent-run holds the prompt, every tool call, and the design notes, pin map and power budget the agent wrote.
rodneyosodo
force-pushed
the
SYN-268-i2c-sensor-node-proper
branch
from
October 29, 2026 20:44
76cf9e7 to
c0cc72d
Compare
Contributor
Author
|
Superseded by #386 which adds proper qualification package, exported KiCad files, and images. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
A design, placement and routing contribution for the SYN-268 qualification board. It is not a qualification result, and
qualification.jsonkeepsqualified: false.What does this do?
Adds
qualification/class-a/i2c-sensor-node/: a USB-C programmed STM32G030 module an agent produced from one prompt, with its logged run. Exported KiCad files, images, and qualification package following PR #376 convention.Parts: STM32G030F6P6 (MCU), BME680 (environmental sensor), 24LC256 (EEPROM), AMS1117-3.3 (LDO), CH340C (USB-UART bridge), polyfuse, Schottky diode, and a USB-C receptacle.
Files
All in
qualification/class-a/i2c-sensor-node/:i2c_sensor_node.synth: the board sourcei2c_sensor_node.placement.layout.toml: board millimetresREADME.md: BOM and measurementskicad/: the routed.kicad_pcb, schematic, symbol library, project, DRC rules and BOMimages/: schematic, PCB top/bottom rendersSHA256SUMS: hashes of the committed artifactsqualification.json: qualification gate statusValidation
synth_validate: 0 errors, 66 warningspolyfuse_500ma->polyfuse(unknown part)Pictures
Closes #268