Circuit review & bench-test guide
AXS-007 — SHT31 temperature/humidity PMOD module
Document purpose#
This document explains the axs-007-sht31 module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on generate_design.py, generate_pcb.py, README.md, and the layout review artifacts in reports/review/.
This board has never been fabricated or assembled. The schematic is ERC clean (0/0) and the PCB layout is routed and DRC clean (0 electrical, 0 unconnected, 0 parity, one waived lib_footprint_mismatch for J1 silk moved to F.Fab), but no physical board exists and there is no first-article bench result of any kind. Every number in this guide is a design target or a datasheet expectation to verify, not a proven result.
1. What the board does#
AXS-007 is a PMOD Type 6 (extended) I2C peripheral carrying a Sensirion SHT31-DIS-B digital temperature and relative-humidity sensor. The host FPGA or MCU supplies 3.3 V through the PMOD plug and talks I2C at address 0x44 (default) or 0x45 (JP3 restrapped). On-board 4.7 kΩ pull-ups on SCL/SDA can be disconnected by cutting solder jumpers JP1/JP2 when the module is chained behind another module that already provides pull-ups. The sensor's ALERT output and active-low reset are brought to PMOD pins 1 and 2; the I2C bus is repeated on the bottom row (pins 9/10) for daisy-chain experiments.
It contains no regulator, no level shifting, and no protection beyond a 100 Ω series resistor on the sensor-driven ALERT line. It is a 3.3 V-only module; the host defines the rail.
Functional block diagram#
PMOD plug J1 (2x6, right-angle)
6/12: 3V3 ────┬──────────────┬───────────────────┐
│ │ │
C2 1uF C1 100nF R1/R2 4.7k R3 10k
(bulk) (at U1 VDD) (pull-ups) (pull-up)
│ │ │
3: SCL ──────────────────────────────┬── JP2 ┘ │ │
4: SDA ──────────────────────────┬───│── JP1 ─────┘ │
9: SCL (chain) ──────────────────│───┤ │
10: SDA (chain) ──────────────────┤ │ │
v v │
2: ~RESET ──────────────────> U1 SHT31-DIS-B <── RESET_N ─────┘
│ ADDR <── JP3 (1-2 GND = 0x44,
1: ALERT <───── R4 100R ── SHT_ALERT 2-3 3V3 = 0x45)
5/11: GND ── GND pours both layers ── U1 VSS, pin 7 (R), die pad
2. Safety and scope boundaries#
- Voltages are low (3.3 V) and currents are microamps; the main hazards are to the board, not the operator. Standard ESD handling applies — the sensor is rated 4 kV HBM but the exposed PMOD pins connect straight to U1.
- 3.3 V only in this design. The SHT31 itself tolerates 2.15–5.5 V, but the AruviX module rules and the PMOD spec fix the rail at 3.3 V; do not plug into a 5 V host.
- Use a current-limited bench supply (≤50 mA limit is ample) for standalone tests. The whole module should draw microamps at idle.
- The SHT31 is a calibrated hygrometer. Do not touch the sensor opening, do not clean the assembled board with solvents near U1, and follow Sensirion's handling instructions for soldering and storage. Long exposure outside 5–60 °C / 20–80 %RH can temporarily offset the RH reading.
- Do not apply voltage to SDA/SCL/ALERT/~RESET above VDD+0.3 V (absolute maximum per pin), including when the module is unpowered.
- A working I2C conversation is not a calibration claim. Accuracy statements (±0.2 °C, ±2 %RH) are Sensirion's, valid only for an undamaged, correctly reflowed sensor; verify against a reference if accuracy matters.
3. Power and signal sequence#
- The host (or bench supply) applies 3.3 V to pins 6/12 with GND on 5/11. C2 (1 µF) and C1 (100 nF) charge; there is no inrush concern.
- U1 powers up once VDD crosses V_POR (1.8–2.15 V). Sensirion specifies a maximum VDD slew of 20 V/ms — a bench supply or PMOD hot-plug is fine; an extremely fast solid-state switch could in principle violate this.
- After t_PU (0.5 ms typical, 1 ms max), U1 is in idle state and accepts commands. R3 (10 kΩ) holds ~RESET high so an unconfigured FPGA pin cannot float the sensor into reset; U1 also has an internal ~50 kΩ pull-up on nRESET.
- JP3 straps ADDR: default bridge 1-2 ties ADDR to GND → I2C address 0x44; bridge 2-3 instead ties ADDR to 3V3 → 0x45. ADDR must never float.
- SCL/SDA idle high through R1/R2 (4.7 kΩ, via JP1/JP2). The host issues I2C commands; U1 is a slave only.
- On alert conditions (programmable RH/T limits), U1 drives ALERT high; the signal reaches PMOD pin 1 through R4 (100 Ω series, sensor-driven-line miswire-tolerance rule).
4. Interfaces#
| PMOD pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | ALERT | ~RESET | SCL | SDA | GND | 3V3 | NC | NC | SCL | SDA | GND | 3V3 |
Note the 2×6 header zigzag-vs-PMOD-row numbering translation: on the physical J1 header, PMOD pins 1–6 map to odd header pads 1/3/5/7/9/11 and PMOD 7–12 to even pads 2/4/6/8/10/12 (see PMOD_TO_HEADER in the common library and the pcb.connect table in generate_pcb.py). Buzz this out before first power.
| Jumper | Default | Meaning |
|---|---|---|
| JP1 | bridged | SDA pull-up R1 connected; cut when chained behind a module with pull-ups |
| JP2 | bridged | SCL pull-up R2 connected; cut when chained |
| JP3 | 1-2 bridged | ADDR low → I2C 0x44; re-bridge 2-3 for ADDR high → 0x45 |
There are no test points; probe the J1 pins, the jumper pads, and the passive pads directly.
5. Component-by-component review#
5.1 Sensor and connector#
| Ref. | Part | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| U1 | Sensirion SHT31-DIS-B2.5KS, DFN-8 T/RH sensor, ±0.2 °C / ±2 %RH | The entire point of the module: calibrated, linearized 16-bit T and RH over I2C, plus ALERT limit engine and heater | No function at all; an unsoldered SDA/SCL pad means no ACK at any address | Rotated DFN or bridged pins can short 3V3–GND (µA rail makes this obvious); overheated reflow degrades RH accuracy; a floating ADDR pad gives an unstable address |
| J1 | Generic 2×6 right-angle 2.54 mm header (PMOD plug) | Host connection: power, I2C, ALERT, ~RESET; body flush to the board edge per the layout | No host connection | Pin-1 orientation error swaps 3V3/GND onto signal pins — the layout was checked against Digilent PMOD spec 1.2.0 Figure 2, but verify the physical part against a host socket before first mating |
5.2 Decoupling#
| Ref. | Value / part | Purpose | If omitted or wrong |
|---|---|---|---|
| C1 | 100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D) | U1 VDD decoupling, the capacitor Sensirion's application circuit requires "as close to the sensor as possible" | Measurement-burst current (600 µA typ, 1.5 mA max) is served through trace inductance; risk of resets or noisy readings |
| C2 | 1 µF 10 V X7R 0603 (Murata GRM188R71A105KA61D) | Module bulk decoupling at the PMOD plug | More rail bounce on hot-plug and during measurement bursts; module still likely functional — verify, don't assume |
5.3 Pull-ups, series protection, and straps#
| Ref. | Value | Function | If omitted or wrong |
|---|---|---|---|
| R1 | 4.7 kΩ (Yageo RC0603FR-074K7L) | SDA pull-up through JP1; SHT31 SDA is open-drain and requires an external pull-up | Open (or JP1 cut with no host pull-up): SDA floats, bus dead or erratic; too small (<1 kΩ): exceeds the 3 mA V_OL test condition and low levels rise above 0.4 V |
| R2 | 4.7 kΩ | SCL pull-up through JP2; SCL must also be pulled up (the sensor can stretch the clock in 0x2Cxx modes) | Same failure modes as R1, on SCL |
| R3 | 10 kΩ | ~RESET idle pull-up so an unconfigured host FPGA pin cannot float the sensor into reset; parallels U1's internal ~50 kΩ, giving ~8.3 kΩ effective | Sensor may randomly reset while the host pin is tristated; Sensirion allows nRESET floating or tied to VDD via R ≥ 2 kΩ, so 10 kΩ is compliant |
| R4 | 100 Ω | Series protection on the sensor-driven ALERT line (line-wide miswire-tolerance rule): limits current if the host mistakenly drives pin 1 | Open: ALERT never reaches the host (reads floating); shorted: loses miswire protection but works; wrong high value forms an RC with host input capacitance — negligible at these speeds |
| JP1/JP2 | 2-pad solder jumpers, bridged by default | Disconnect the on-board pull-ups when this module is chained behind another that provides them (two sets of 4.7 kΩ in parallel = 2.35 kΩ, still legal but ~1.4 mA sink per line) | Cut when they should be bridged: bus floats standalone; bridged when they should be cut: parallel pull-ups (usually tolerable, verify V_OL) |
| JP3 | 3-pad solder jumper, 1-2 bridged | ADDR strap: 1-2 = GND = 0x44 (default); 2-3 = 3V3 = 0x45. ADDR must not float (datasheet section 3.4) | Neither side bridged: address undefined/unstable; both sides bridged: hard 3V3–GND short — the current-limited supply test in phase B catches this |
Every reference designator on the board is listed above (U1, J1, C1, C2, R1–R4, JP1–JP3). There are no other components.
6. Datasheet summary and design interpretation#
Primary reference: Sensirion SHT3x-DIS datasheet, Version 7, December 2022 (also linked from the SHT31 product page). Check for a newer revision before procurement.
| Datasheet fact | Value | Board-specific interpretation |
|---|---|---|
| Supply range | 2.15–5.5 V; abs max −0.3 to +6 V | 3.3 V sits mid-range; the module (not the sensor) is what forbids 5 V hosts |
| Pin abs max | −0.3 to VDD+0.3 V on SDA/ADDR/ALERT/SCL/nRESET; ±100 mA any pin | Never drive the PMOD signals when the module is unpowered |
| POR / power-up | V_POR 1.8–2.15 V; t_PU 0.5 ms typ, 1 ms max; VDD slew ≤ 20 V/ms | Wait ≥1 ms after power before the first command |
| Supply current | Idle (single-shot) 0.2 µA typ / 2 µA max at 25 °C; measuring 600 µA typ / 1.5 mA max; periodic-mode idle 45 µA typ | Whole-module idle current should be single-digit µA — a sensitive assembly-fault detector |
| I2C | 0–1000 kHz SCL; fast-mode compliant; V_OL ≤ 0.4 V at 3 mA; V_IH ≥ 0.7·VDD; ≤400 pF bus | 4.7 kΩ at 3.3 V sinks ~0.7 mA when low — well inside spec |
| Addresses | 0x44 (ADDR low, default), 0x45 (ADDR high); ADDR must not float; can even be switched dynamically | JP3 implements exactly this strap |
| Single-shot commands | 0x2400/0x240B/0x2416 = high/med/low repeatability, clock stretching disabled; 0x2C06/0x2C0D/0x2C10 = with clock stretching | The HDL exercise targets 0x2400 (no stretching); the sensor NACKs the read header until data is ready |
| Measurement duration | High repeatability 12.5 ms typ, 15 ms max (≥2.4 V) | Poll the read header every ~1 ms or wait 15 ms after 0x2400 |
| Data frame | Temp MSB, Temp LSB, CRC, RH MSB, RH LSB, CRC (6 bytes) | Temperature always first; master may NACK-abort early |
| CRC | CRC-8, polynomial 0x31 (x⁸+x⁵+x⁴+1), init 0xFF, no reflection, final XOR 0x00; CRC(0xBE 0xEF) = 0x92 | Worked examples in section 7 |
| Conversion | T[°C] = −45 + 175·S_T/(2¹⁶−1); RH[%] = 100·S_RH/(2¹⁶−1) | Raw values are unsigned 16-bit, already linearized and compensated |
| Soft reset | Command 0x30A2, t_SR 0.5 ms typ / 1.5 ms max; also general-call 0x00 0x06; interface reset = SCL toggled ≥9× with SDA high | Use 0x30A2 in bring-up to prove write-path integrity |
| Status register | Read with 0xF32D (2 bytes + CRC); bit 15 alert pending, bit 13 heater on, bit 4 reset detected, bit 1 command status, bit 0 write CRC status; clear with 0x3041 | Fresh power-up reads 0x8010 (alert-pending and reset-detected default to '1') |
| nRESET | Active low, ≥1 µs pulse, internal ~50 kΩ pull-up, may float or tie to VDD via R ≥ 2 kΩ | R3 = 10 kΩ complies; a host can still yank it low through the 10 kΩ (it only fights ~0.33 mA) |
| ALERT | Push output, high when alert conditions met, leave floating if unused; self-heating possible at high load current | R4 limits any contention; ALERT idles per the alert engine, not necessarily low — check status bit 15 |
| Accuracy (SHT31) | ±2 %RH typ (0–100 %RH), ±0.2 °C typ (0–90 °C); repeatability (high) 0.08 %RH / 0.04 °C | Only valid for an undamaged sensor; reflow per JEDEC and Sensirion handling instructions |
7. Expected values before bench testing#
None of these have ever been measured on this design — no board exists.
| Quantity | Expected (design/datasheet) | How to measure |
|---|---|---|
| 3V3-to-GND resistance, unpowered | High (≥100 kΩ scale after C2 charges; dominated by U1 leakage) | DMM, both polarities |
| SDA-to-3V3 / SCL-to-3V3 resistance | ≈4.7 kΩ each (JP1/JP2 bridged) | DMM at J1 pins 4/3 to pin 6 |
| ADDR level | 0 V (JP3 1-2) or 3.3 V (JP3 2-3) | DMM at JP3 center pad, powered |
| Idle supply current | ~1–5 µA (sensor idle ≤2 µA + leakage) | µA-range meter in series, standalone supply |
| Current during measurement | ~0.6 mA pulses, ≤1.5 mA, for ≤15 ms | Supply monitor or shunt + scope |
| SCL/SDA idle level | 3.3 V (pulled up) | DMM/scope at J1 pins 3/4 |
| ~RESET idle level | 3.3 V through R3 | DMM at J1 pin 2 |
| I2C scan | ACK at 0x44 only (default strap); at 0x45 only after restrapping JP3 | Bus adapter address scan |
| First data frame | 6 bytes, both CRCs valid, plausible room T/RH | 0x2400 then read after ≥15 ms |
| Status register after power-up | 0x8010 | 0xF32D read |
| SCL V_OL when sensor stretches/ACKs, SDA V_OL | ≤0.4 V | Scope, low segments of waveform |
CRC-8 worked example#
Polynomial 0x31, init 0xFF, MSB-first, no reflection, no final XOR. Over the datasheet example word 0xBE 0xEF the result is 0x92 (datasheet Table 20). For a temperature word of exactly 25.00 °C, S_T = 0x6666:
crc = 0xFF
crc ^= 0x66 -> 0x99
8x: shift left, XOR 0x31 when the bit shifted out was 1 -> 0xF1
crc ^= 0x66 -> 0x97
8x: same rule -> 0x93
So the frame 0x66 0x66 0x93 is self-consistent. Similarly 0x7F 0xFF 0x8F is a valid 50.0 %RH humidity word. Conversions:
- T = −45 + 175 × 26214 / 65535 = 25.00 °C
- RH = 100 × 32767 / 65535 = 50.0 %RH
Use these vectors to check the host-side CRC and conversion code before ever touching hardware.
8. Manual schematic and assembly review checklist#
Layout evidence to inspect (no fabricated board exists; this is the routed design): reports/review/ contains axs-007-layout-review.html (the layout review report), top.svg and bottom.svg (copper/silk plots), and raytraced renders render-top.png/.jpg, render-bottom.png/.jpg, render-iso.png/.jpg. Open the HTML report and both SVGs and verify the points below.
- U1 is placed at the top edge, deliberately away from the connector. Thermal isolation is by distance only — there is no milled slot or copper keepout around the sensor in this revision, and both layers carry full GND pours that thermally couple U1 to the rest of the board. For a breadboard-class module this is acceptable; note it as a known limitation when judging absolute temperature accuracy (self-heating from the host through the pours, and Sensirion's design guide recommends slotting for precision applications).
- Verify J1 pin-1 position against the Digilent PMOD spec 1.2.0 Figure 2 (pin 1 top-right, pins 1–6 upper row) and against a physical host socket; the README flags the host-socket cross-check as still open (ECP5 rev-A review item).
- Buzz the header zigzag mapping: PMOD pin 3 (SCL) = header pad 5, PMOD pin 4 (SDA) = header pad 7, etc., per
generate_pcb.py. - Confirm U1 orientation (DFN pin 1 dot), that pin 7 (R) and the die pad are tied to GND, and that the exposed pad is actually soldered (X-ray or edge inspection on the eventual assembly).
- Confirm JP3 is bridged 1-2 (and only 1-2), JP1/JP2 bridged.
- Measure R1–R4 values on the assembled board before first power if any hand-rework happened.
- Check C1 sits adjacent to U1 VDD (it is at x=104.4 next to the sensor in the layout) and that the GND stitching vias next to U1/C1/C2 exist.
- Silkscreen sanity: front "AXS-007 SHT31 T/RH" and "PIN1" marker; back rev and pin-map legend ("1:AL 2:RS 3:SCL / 4:SDA I2C 0x44").
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, jumper states, equipment, ambient T/RH, and operator for every phase. Two host contexts are covered: standalone (current-limited bench supply, phases B–C) and PMOD host (FPGA/MCU providing 3.3 V, phase D). Do standalone first — it risks only the module.
A. Unpowered inspection and resistance tests#
- Complete the section 8 checklist under magnification.
- DMM 3V3-to-GND at J1 pins 6→5, both polarities: no hard short.
- SDA→3V3 and SCL→3V3: ≈4.7 kΩ each. Cut-test rehearsal: this is also the jumper verification you will repeat whenever JP1/JP2 change state.
- ~RESET→3V3: ≈10 kΩ (R3; the sensor's internal 50 kΩ is not visible unpowered). ALERT→any rail: open (only R4 in series to U1's pin).
- JP3 center→GND: ≈0 Ω (default strap). JP3 center→3V3: open.
B. Standalone first power (current-limited bench supply)#
- Bench supply 3.3 V, current limit 20–50 mA, output off. Wire supply + to J1 PMOD pin 6 (or 12) and − to pin 5 (or 11). Double-check against the zigzag mapping — on the physical header these are pads 11 and 9.
- Power on. Expect no current-limit trip and, on a µA meter, an idle draw of a few µA once C1/C2 are charged. Tens of mA means a short or reversed connection: power off and investigate.
- Verify 3.3 V at U1's C1 pads, SCL/SDA idle at 3.3 V, ~RESET at 3.3 V, ADDR at 0 V.
- Momentarily short ~RESET (J1 pin 2) to GND (≥1 µs is enough) and release; supply current should stay in the µA range afterwards.
C. Standalone I2C bring-up (bus adapter, still on bench supply)#
Use any 3.3 V I2C master (FT232H/Bus Pirate/MCU devboard). Common ground with the bench supply; master pull-ups off first, since the module provides them.
- Pull-up source check: with the adapter attached and idle, SCL/SDA must read 3.3 V. Cut nothing yet. (If this module will later be chained, re-run this step after cutting JP1/JP2: the bus must still idle high — now through the host/other-module pull-ups — and an adapter with its pull-ups disabled must see the lines float, proving the cut is real.)
- Address scan: expect an ACK at 0x44 only. No ACK anywhere: check SDA/SCL swap, U1 soldering. ACK at 0x45: JP3 is strapped high or floating. ACK at both: two devices or a scan artifact — capture the waveform.
- Restrap check (once per design validation, not per board): move JP3 to 2-3, rescan: ACK at 0x45 only. Restore 1-2.
- Soft reset: write command 0x30A2 (bytes: address+W, 0x30, 0xA2, all ACKed). Wait ≥1.5 ms.
- Status register: write 0xF32D, read 3 bytes: expect 0x80 0x10 + valid CRC (0x8010 = alert-pending and reset-detected set after reset). Send clear-status 0x3041, re-read: bits 15/4 now clear.
- First measurement: write 0x2400 (single shot, high repeatability, clock stretching disabled). Because stretching is off, a read header issued too early is NACKed — verify that behavior once, deliberately. After ≥15 ms, read 6 bytes: T MSB, T LSB, CRC, RH MSB, RH LSB, CRC.
- CRC check: run both words through the section 7 CRC-8 (poly 0x31, init 0xFF). Both must match. Convert: T = −45 + 175·S_T/65535, RH = 100·S_RH/65535. Expect ambient within a couple of °C/%RH of a reference thermometer/hygrometer.
- Clock-stretching variant (optional): issue 0x2C06 and confirm the sensor stretches SCL until data is ready — useful later as an HDL corner case.
- Plausibility stimulus: breathe gently near (not on) the sensor: RH rises sharply, T slightly; both recover. This is a function check, not calibration.
- ALERT sanity (optional): program alert limits per Sensirion's alert application note, or at minimum confirm ALERT (J1 pin 1) is driven (not floating) and status bit 15 tracks it.
D. PMOD-host context (FPGA/MCU provides 3.3 V)#
- Verify the host PMOD socket really supplies 3.3 V (measure it) and that the host I/O bank is 3.3 V. Power the host, then plug the module in with host power off if hot-plug policy is unclear.
- With host I/O still unconfigured, measure SCL/SDA/~RESET on the module: all must idle at 3.3 V (R1/R2/R3 doing their job against floating host pins — this is exactly why R3 exists).
- Run the same sequence as phase C from the host (software I2C or the AruviX HDL I2C master when it exists): scan → 0x44 ACK, soft reset, status, 0x2400, CRC-checked conversion.
- If the host provides its own pull-ups (many FPGA boards do not; some MCU pins do), decide the pull-up ownership: for a single module keep JP1/JP2 bridged and host pull-ups off. Measure the SCL/SDA low level: ≤0.4 V.
- Daisy-chain experiment (design intent of pins 9/10): connect a second I2C device or module to the bottom-row bus. Exactly one set of pull-ups should remain; cut JP1/JP2 on the downstream module and re-verify idle levels and V_OL.
- Soak: log one measurement per second for 30+ minutes. Zero CRC failures and zero NACKs expected; log T/RH drift (sensor self-heating at 1 mps, lowest repeatability, is negligible per the datasheet average-current figures; high-rate periodic modes can self-heat).
E. Release-only tests#
Accuracy verification against a calibrated reference (or saturated-salt humidity fixtures), reflow-profile qualification of the sensor, long-term drift, and ESD are out of scope for the first bench pass and must be planned separately before any release claim.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| Supply current-limits at power-on | 3V3-to-GND resistance | Solder bridge (U1 DFN, JP3 double-bridged), reversed supply wiring |
| SCL or SDA does not idle high | Resistance line→3V3; JP1/JP2 state | Jumper cut/never bridged, R1/R2 open, adapter driving the line |
| No ACK at any address | SDA/SCL swap at adapter; U1 pads; ADDR level | Wiring, zigzag-map confusion (header pad vs PMOD pin), U1 unsoldered |
| ACK at 0x45 instead of 0x44 | JP3 strap and center-pad voltage | JP3 bridged 2-3 or floating |
| ACKs but read data all 0xFF / NACK on read | Timing since 0x2400; command bytes | Reading before measurement done (no clock stretching with 0x24xx) |
| CRC failures | Scope SCL/SDA edges, V_OL, rise time | Wrong CRC init/poly in host code first; then bus integrity, pull-up value |
| Nonsense T/RH values | Raw hex vs formulas by hand | Byte order (temp first, MSB first), formula error, decimal-vs-raw confusion |
| Sensor resets sporadically | ~RESET level and glitches; VDD ripple | Host pin driving pin 2 low, R3 open, weak supply, C1 missing |
| ALERT stuck/floating | Voltage both sides of R4 | R4 open, alert engine unconfigured (expected until programmed) |
| Reads fine standalone, fails on host | Host rail voltage, pull-up ownership, V_OL | Host bank not 3.3 V, doubled pull-ups, unconfigured host pins |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| JP1/JP2/JP3 states (photographed) | |
| Host or supply, adapter, equipment + calibration | |
| Ambient T / RH, reference instrument | |
| Unpowered resistance results (A.2–A.5) | |
| Idle current, measuring current | |
| Address-scan result | |
| Status register before/after clear | |
| First frame raw hex + CRC pass/fail | |
| Converted T / RH vs reference | |
| Soak duration, error count, drift | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The circuit is a minimal, coherent implementation of Sensirion's application circuit plus AruviX line rules: mandatory 100 nF at VDD, bulk at the plug, jumpered pull-ups for chain topology, a defensive ~RESET pull-up, a series resistor on the one sensor-driven line, and a proper two-state ADDR strap. The routed PCB is DRC clean and the renders/report in reports/review/ allow a full desk review. The principal risks are unverified first-article behavior (nothing has ever been built), the J1 pin-1/zigzag orientation against a real host socket, DFN/exposed-pad solderability, thermal coupling through the unslotted GND pours limiting absolute temperature accuracy, and pull-up ownership mistakes in chained configurations. The I2C bring-up sequence in section 9 — scan, soft reset 0x30A2, status 0xF32D, measure 0x2400, CRC-8 verify, convert — is deliberately the same sequence the AruviX Verilog I2C master will have to reproduce.