Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Maestro UI →
Sparrow complete product
ESH10000633 · Rev R1
in_progress
Generated 2026-06-05 18:18 UTC

System-level Sparrow product. Test implementation lives in Maestro TAT package ESH10000633_SparrowUnitTest_v01 (https://github.com/esharpab/testdevelopment-esharp-tat-registry-ESH10000633_SparrowUnitTest_v01).

Coverage 0%
Done 0%
Requirements 0
Test Cases 67
Records 39
Blockers 3

Requirements

Code Status Category Title Statement Acceptance
COM-01 draft Communication I2C Controller end-to-end I2C Controller accessible end-to-end; all expected devices ACK Fixture Link expander @0x20; EEPROM @0x50; N-Top ATmega @0x30; LED driver @0x14 or 0x0C; N-Top expander @0x20; IDPROM @0x50
COM-02 draft Communication I2C fast-mode operation I2C Controller fast-mode operation 400 kHz operation; EXT_VIO selectable 1.5–3.3 V
COM-03 draft Communication I2C Device EEPROM 24AA02UID I2C Device (EEPROM 24AA02UID) writable and readable Write/read-back succeeds; device ACKs 0x50–0x57
COM-04 draft Communication SPI AD5592R devices accessible SPI: both AD5592R devices on Fixture Electronics accessible Read/write both devices without error
COM-05 draft Communication RS485 full-duplex RS485 full-duplex interface operational Data rate ≥ 1 Mbps; VMEAS range 0–5 V; TX differential signal present
COM-06 draft Communication I2C Controller signal levels (EXT_VIO-relative) The I2C Controller shall present input and output voltage levels referenced to the configured EXT_VIO rail, scaling automatically across the supported EXT_VIO range (1.5 / 1.8 / 2.5 / 3.3 V) VIH min 0.7×EXT_VIO, max 5.5 V; VIL max 0.4 V when EXT_VIO > 2.2 V, otherwise max 0.1×EXT_VIO; VOL when EXT_VIO > 2.2 V: 0.47–0.6 V (typ 0.52 V); VOL when EXT_VIO < 2.4 V: 0.2–0.3 × EXT_VIO. Per Sparrow Hardware Datasheet v3 §5.2 page 41 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
COM-07 draft Communication I2C onboard pull-ups + VDDA_SEL coordination The I2C SDA and SCL lines shall be weakly pulled up to the active EXT_VIO rail through onboard 10 kΩ resistors, and the VDDA_SEL control shall be coordinated with the EXT_VIO setting to align the analog domain Onboard pull-up 10 kΩ on SDA and SCL referenced to EXT_VIO; VDDA_SEL = HIGH when EXT_VIO ≥ 2.5 V, VDDA_SEL = LOW when EXT_VIO ≤ 1.8 V; external 1.1 kΩ pull-ups recommended for high-capacitance / long traces. Per Sparrow Hardware Datasheet v3 §6.12.1 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
COM-08 draft Communication RS485 differential measurement + electrical limits The RS485 interface shall provide direct differential-voltage measurement on both transmit and receive pairs and operate within its specified electrical limits VMEAS_RANGE 0–5 V; VDIFF 1.5–5 V; VCM typ 3 V; data rate ≥ 1 Mbps; gain error ±1.6 %; offset ±6 mV. Per Sparrow Hardware Datasheet v3 §5.2 pages 42–43 and §6.13 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
COM-09 draft Communication RS485 fault protection + fail-safe bias The RS485 driver and receiver shall include short-circuit current limiting, thermal-shutdown protection, software TX high-impedance control, and integrated receiver fail-safe bias for predictable behaviour when the bus is idle or reconfigured Short-circuit current limiting + thermal shutdown on TX driver (outputs forced to Hi-Z under fault); TX may be placed in Hi-Z by software for multi-drop handoff; receiver fail-safe bias guarantees logic-HIGH output when input pair is left floating; external 1.1 kΩ pull-ups recommended for improved rise-time. Per Sparrow Hardware Datasheet v3 §6.13 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
COS-01 draft Cosmetic Power LED Power LED illuminates when asserted via Fixture Link expander Power LED blue
COS-02 draft Cosmetic RS-232 LED RS-232 LED illuminates when asserted via Fixture Link expander RS-232 LED blue
COS-03 draft Cosmetic User LEDs (LP5012) respond User LEDs (LP5012) respond to register write At least one LED channel responds
FW-01 draft Firmware ATmega MCU on I2C ATmega MCU programmed and responding on I2C ATmega ACKs at address 0x30
FW-02 draft Firmware IDPROM writable IDPROM writable and readable Write/read-back of IDPROM succeeds
PWR-01 draft Power Common 12V rail Common 12V rail output voltage (all IDC connectors, pin 2) 11.4 V ≤ V ≤ 12.6 V
PWR-02 draft Power Common 5V rail Common 5V rail output voltage (all IDC connectors, pin 1) 4.75 V ≤ V ≤ 5.25 V
PWR-03 draft Power 12V_EXT external rail 12V_EXT external rail output voltage 11.6 V ≤ V ≤ 12.4 V
PWR-04 draft Power 3V3_EXT external rail 3V3_EXT external rail output voltage 3.23 V ≤ V ≤ 3.37 V
PWR-05 draft Power 1V8_EXT external rail 1V8_EXT external rail output voltage 1.76 V ≤ V ≤ 1.82 V
PWR-06 draft Power VADJ programmable rail VADJ programmable rail range and accuracy 0–6 V user-adjustable; accuracy ±1.6%
PWR-07 draft Power EXT_VIO programmable rail EXT_VIO programmable rail range and accuracy 0–3.3 V user-adjustable; accuracy ±1.6%
PWR-08 draft Power VREF precision reference VREF precision reference voltage 2.499 V ≤ V ≤ 2.501 V; Iout ≤ ±10 mA; must not drive loads
PWR-09 draft Power External rails OCP External rails (12V_EXT, 3V3_EXT, 1V8_EXT, VADJ, EXT_VIO) overcurrent protection Circuit breaker activates at Ilim = 0.5 A; fault flag raised; rail stays off until re-enabled
PWR-10 draft Power External rail VMEAS accuracy External rails voltage monitoring accuracy (VMEAS) ±2% of nominal for all external rails
PWR-11 draft Power External rail IMEAS accuracy External rails current monitoring accuracy (IMEAS) ±10% of set current for all external rails
PWR-12 draft Power N-Top +18V rail N-Top +18V rail output voltage 17.82 V ≤ V ≤ 18.18 V (±1%)
PWR-13 draft Power N-Top −18V rail N-Top −18V rail output voltage −18.18 V ≤ V ≤ −17.82 V (±1%)
PWR-14 draft Power PoE input range PoE input voltage range Vin: 44–57 V; nominal 54 V
PWR-15 draft Power PoE maximum output power PoE maximum output power Pout ≤ 90 W
PWR-16 draft Power PoE VMEAS accuracy PoE voltage measurement accuracy (VMEAS) ±2.5% of supply voltage
PWR-17 draft Power PoE IMEAS accuracy PoE current measurement accuracy (IMEAS) ±3% of measured current
PWR-18 draft Power Active Load source voltage range Active Load source voltage range 0–24 V
PWR-19 draft Power Active Load sink current (IDC) Active Load sink current — IDC header 0–0.4 A continuous; 0–1 A peak
PWR-20 draft Power Active Load sink current (Phoenix) Active Load sink current — Phoenix connector 0–3 A continuous; 0–5 A peak
PWR-21 draft Power Active Load energy limit Active Load energy limit per run EMAX ≤ 250 Ws; load shuts off at threshold
PWR-22 draft Power Active Load VMEAS accuracy Active Load voltage measurement accuracy (VMEAS) ±2% of load voltage
PWR-23 draft Power Active Load IMEAS accuracy Active Load current measurement accuracy (IMEAS) ±1% of sink current
PWR-24 draft Power PSU (optional) range and accuracy PSU (optional) output voltage range and accuracy 0–18 V; accuracy ±0.5%; VMEAS ±0.5%; IMEAS ±1.5%
PWR-25 draft Power Common 12V / 5V rail current protection Common 12V and 5V rails (present on all IDC connectors, pins 1 and 2) shall be protected by Polymeric PTC Resettable Fuses with documented per-pin and total current limits Per-pin Ilim 0.25 A (auto-resets via PTC); total Itot ≤ 1.5 A on each rail. Per Sparrow Hardware Datasheet v3 §5.2 page 32 and §6.1 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-26 draft Power External rail OCP transient blanking + fast-trip External rails (12V_EXT, 3V3_EXT, 1V8_EXT, VADJ, EXT_VIO) shall permit brief transient load pulses without nuisance shutdown, but shall shut down immediately on persistent overcurrent or short-circuit Transient blanking interval tITIMER ≤ 1.8 ms before shutdown when Ilim ≤ I_load < 2×Ilim; fast-trip when I_load ≥ 2×Ilim; fault flag raised on shutdown; rail stays off until re-enabled. Per Sparrow Hardware Datasheet v3 §5.2 page 33 and §6.2 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-27 draft Power External rail slew control (SRON) + bleed-out External rails shall control inrush current via a defined output rising slew rate at enable, and shall discharge predictably via an internal bleed-resistor network at disable SRON output rising slew rate 20 mV/ms (typ); tBleedout discharge time constant ≤ 1 s (first-order RC, τ = R_bleed × C_load). Per Sparrow Hardware Datasheet v3 §5.2 page 33 and §6.2 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-28 draft Power PoE Class 1–8 support + 2-pair/4-pair delivery The PoE subsystem (based on TPS23881 IEEE 802.3af/at/bt-compliant PSE controller) shall support Class 1 through Class 8 powered devices and shall support both 2-pair and 4-pair power delivery modes depending on DUT requirements Class 1–8 compliant per IEEE 802.3af/at/bt; 2-pair and 4-pair modes selectable; operates from external 56 V supply; max combined output 90 W. Per Sparrow Hardware Datasheet v3 §6.5 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-29 draft Power PoE polarity indication LED The PoE OUT port shall indicate rail polarity to the operator via the integrated LED — cyan for normal polarity, magenta for inverted polarity LED cyan when polarity is normal; magenta when inverted. Polarity may NOT be switched while the load (DUT) is active — accordion reset or Ethernet disconnect required first. Per Sparrow Hardware Datasheet v3 §6.5 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-30 draft Power PoE port-power limits, classification + protection The PoE controller shall provide programmable per-port power limits, real-time per-port voltage and current measurement, fast/accurate device classification, and built-in disconnect / short-circuit protection Per-port power-limit programmable in software; per-port V and I measurements available to software; PD class detected and reported; disconnect detection and short-circuit protection always active. Per Sparrow Hardware Datasheet v3 §6.5 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
PWR-31 draft Power Active Load protection mechanisms Each Active Load channel shall include fast-trip short-circuit detection, out-of-regulation monitoring, and thermal shutdown protection Fast-trip on short-circuit; out-of-regulation flag asserted when feedback loop drops out; thermal shutdown engages before over-temperature damage. Voltage, current, and fault status measured in real time and available to software. Per Sparrow Hardware Datasheet v3 §6.6 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
REQ-EL-001 draft compliance RoHS Compliance The design shall use only RoHS-compliant materials. All BOM items must have a valid RoHS certificate of compliance. Valid RoHS certificate of compliance on file for all BOM line items.
REQ-EL-002 draft compliance REACH / SVHC Declaration The design shall comply with the REACH regulation. Any SVHC present above 0.1 % w/w in any article shall be declared. REACH/SVHC declaration obtained from all component suppliers and filed in the project documentation.
REQ-EL-003 draft compliance EMC Compliance The design shall comply with applicable EMC standards for conducted and radiated emissions. Pass pre-compliance scan and, where required, certified lab test.
REQ-EL-004 draft environmental Operating Temperature Range The design shall operate correctly and without damage across the full ambient temperature range specified in the design brief. Functional test passes at minimum and maximum rated ambient in an environmental chamber.
REQ-EL-005 draft robustness ESD Protection All external interfaces shall tolerate ESD events of at least ±4 kV (contact) and ±8 kV (air) per IEC 61000-4-2 without permanent damage or loss of function. ESD test passes at specified levels with no permanent damage.
REQ-EL-006 draft compliance CE Marking Applicability CE marking applicability shall be assessed at project start. If the product is placed on the EU / EEA market, it shall be CE-marked per the applicable EU directives (typically LVD, EMC Directive, RoHS Directive, and RED if any radio equipment), with a signed Declaration of Conformity on file. If the product is NOT placed on the EU / EEA market, the market scope decision shall be recorded as a `please_decision_create` so CE assessment can be skipped knowingly. CE marking applicability assessed and the assessment recorded as a `please_decision`. For products in EU/EEA market scope: applicable EU directives identified, conformity assessment complete, signed Declaration of Conformity on file, CE mark properly affixed. For products outside EU/EEA market scope: a `please_decision` documents the market scope and the CE-skip rationale.
REQ-EL-007 draft quality Test Limit Derivation Documented Every test case that defines numeric measurement limits (low_limit, high_limit, nominal, tolerancePct) shall have a documented derivation explaining how those limits were chosen. For each test case with numeric limits, evidence of derivation exists — `passCriterion` references the component values and tolerances in the measurement path, OR a linked `please_decision` documents the corner math, OR the implementing Maestro YAML carries a `Limit derivation` comment block citing such a decision.
SIG-01 draft Signal MPIO 0–5 V (4 channels) MPIO (4 channels): analog/digital I/O 0–5 V Vin/Vout 0–5 V; gain error ±0.3%; offset ±8 mV; throughput 96 kSPS; IOUT ±5 mA
SIG-02 draft Signal FE_MPIO OV-protected (12 channels) FE_MPIO (12 channels): analog/digital I/O 0–5 V, OV protected Vin/Vout 0–5 V; OV tolerance 15 V; gain error ±0.3%; offset ±8 mV; throughput 2 kSPS; IOUT ±5 mA
SIG-03 draft Signal Differential AIN precision (8 channels) Differential AIN (8 channels): high-range precision measurement Range ±48 V; calibrated gain error ±0.15%; calibrated offset ±2 mV; resolution 12-bit; throughput 96 kSPS
SIG-04 draft Signal PWM programmable (2 channels) PWM (2 channels): programmable frequency and duty cycle Frequency 1 Hz–1 MHz; duty 0–100%; VCCO 0–3.3 V; VOH ≥ 2.9 V @3.3V/10mA; VOL ≤ 0.33 V @3.3V/10mA
SIG-05 draft Signal Tach input (2 channels) Tach (2 channels): frequency measurement input Frequency counted correctly
SIG-06 draft Signal Relay driver low-side (4 channels) Relay driver (4 channels): low-side drive within spec VCOIL 5–12 V; ICOIL ≤ 60 mA; integrated flyback protection
SIG-07 draft Signal Fixed Load 2.2 kΩ (4 channels) Fixed Load (4 channels): switchable 2.2 kΩ to GND with voltage monitoring RLOAD 2156–2244 Ω; VMEAS range 0–5 V; VMEAS gain error ±1.6%; offset ±6 mV
SIG-08 draft Signal Audio Load (phantom/bias) Audio Load: switchable phantom/bias loads with voltage monitoring RLOAD_PHANTOM 666–716 Ω; RLOAD_BIAS 2156–2264 Ω; VMEAS_RANGE 0–15 V; gain error ±1.6%; offset ±6 mV
SIG-09 draft Signal Tampering latch-and-hold (2 channels) Tampering (2 channels): latch-and-hold edge detection VIH 2.3–5.5 V; VIL −0.5–0.6 V; latch preserved until software reset
SIG-10 draft Signal USR_GPIO functional USR_GPIO functional GPIO driven HIGH reads back HIGH
SIG-11 draft Signal AUDIO_GND ↔ system GND galvanic link A galvanic connection shall exist between AUDIO_GND and system GND with bounded resistance, to ensure correct microphone biasing and prevent floating-ground artefacts during audio testing R(AUDIO_GND, system GND) ≤ 1 kΩ. Per Sparrow Hardware Datasheet v3 §6.7 / §6.8 note (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SIG-12 draft Signal MPIO floating-input pulldown All MPIO and FE_MPIO channels shall incorporate a 1 MΩ pulldown resistor to stabilise floating inputs and ensure deterministic behaviour when the DUT side is in a high-impedance state Pulldown 1 MΩ to GND on every MPIO/FE_MPIO channel. Per Sparrow Hardware Datasheet v3 §6.9 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SIG-13 draft Signal FE_MPIO fault-protected analog switches All FE_MPIO signals shall be routed through fault-protected analog switches that automatically isolate the internal circuitry during overvoltage events Automatic isolation on overvoltage; protects against miswiring, hot-plugging, and power-sequencing faults; OV tolerance 15 V (per SIG-02 acceptance). Per Sparrow Hardware Datasheet v3 §6.9 note (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SIG-14 draft Signal Differential AIN PGA gain settings + auto-scale The 8-channel differential analog input front-end shall expose a programmable-gain amplifier with selectable gains across a wide range, accept ±16 V at its input, and offer an auto-scaling mechanism that dynamically selects the optimal gain based on observed amplitude PGA gain settings: 1/8, 1/4, 1/2, 1, 2, 4, 8, 16; PGA accommodates up to ±16 V at input; auto-scaling selects optimal gain; manual gain selection also available for fixed-range cases; PGA855 differential compliance ±17.5 V; common-mode compliance ±15 V. Per Sparrow Hardware Datasheet v3 §6.11, page 50 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SIG-15 draft Signal MPIO/FE_MPIO load constraints for full accuracy MPIO and FE_MPIO output channels shall maintain full specified accuracy only within bounded resistive and capacitive load conditions Minimum RLOAD 1 kΩ; maximum CLOAD 2 nF; resolution 12-bit; IOUT ±5 mA sink/source. Per Sparrow Hardware Datasheet v3 §5.2 pages 38–39 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SYS-01 draft System Sub-assemblies installed and seated All sub-assemblies (Accordion A2, Fixture Link R2, N-Top R3, Fixture Electronics R3) installed and correctly seated; no connector damage All present; no bent pins; connectors fully engaged
SYS-02 draft System Fixture Link silkscreen revision marking Revision marking on Fixture Link silkscreen is correct Silkscreen reads R2
SYS-03 draft System Power-on from 20 V DC via Fixture Link eFuse System powers on from 20 V DC input via Fixture Link eFuse eFuse output present; key rails within spec after PWR_EN
SYS-04 draft System PoE subsystem accepts 44–57 V isolated input PoE subsystem accepts isolated 44–57 V input No fault; PoE ON/OFF functional
SYS-05 draft System Sparrow Fixture Electronics PCBA dimensions The Sparrow Fixture Electronics PCBA shall conform to the documented mechanical envelope (board outline and maximum installed height) Board outline 140.0 mm × 80.0 mm; four 3.2 mm through-holes for mounting; maximum installed height ≤ 33.0 mm including bottom components and Active Load (excluding receptacle connectors). Per Sparrow Hardware Datasheet v3 §7.1 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SYS-06 draft System Accordion Agent enclosure dimensions The Accordion Agent host enclosure shall conform to the documented external envelope including end caps Box dimensions 227.00 mm × 129.00 mm × 55.13 mm including the end caps. Per Sparrow Hardware Datasheet v3 §7.2 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf)
SYS-07 draft System Production test must exercise every user-accessible pin Every user-accessible pin defined in Sparrow Hardware Datasheet §4 (J4–J9 IDC connectors, Audio DSUB-9, Active Load Phoenix headers, PSU Phoenix headers, PoE) shall be exercised by at least one production test step in fixture-electronics-test, with traceability from each Maestro step (pt_code) back to the pin functional group it covers. Pin inventory per Sparrow Hardware Datasheet v3 §4 (sourceRef: 01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf): J4 — 8 differential AIN channels (AIN_P/N_CH1..8, 16 pins), 5V/12V/GND; J5 — MPIO_0..3 (4), FIXED_LOAD_0..3 (4), TACHO_0..1 (2), PWM_0..1 (2), LATCH_0..1 (2), VREF (1 net, 2 pins), 5V/12V/GND; J6 — MIC_IN_L/~/R/~ (4 pins), LINE_OUT_L/~/R/~ (4 pins), AUDIO_GND (8 pins one net), 5V/12V/GND; J7 — FE_MPIO_0..11 (12), RELAY_1..4 (4), 5V/12V/GND; J8 — VLOAD_POS_0/1, VLOAD_NEG_0/1, VREM_0/1, VPSU_0/1, VSENSE+_0/1, VSENSE-_0/1, 5V/12V/GND; J9 — SCL_SLV, SCL_MSTR, SDA_SLV, SDA_MSTR, EXT_VIO, RS485_RX±, RS485_TX±, 1V8_EXT, 3V3_EXT, 12V_EXT, VADJ, 5V/12V/GND; Audio DSUB-9 — LINE_OUT_L/~/R/~, MIC_IN_L/~/R/~, AUDIO_GND (mirrors J6 nets); Active Load Phoenix — VLOAD_POS_0/1, VREM_0/1, VLOAD_NEG_0/1; PSU Phoenix (optional) — VPSU_0/1, VSENSE+_0/1, VSENSE-_0/1, GND; PoE — PWR, GND. Each functional group above must map to ≥1 PT-* test case; the fixture-electronics-test orchestrator must invoke a sub-test that exercises each group; gaps tracked via please_coverage_gap.

Test Cases

Code Status Category Title / Signal Target Pass Criterion Linked REQ
PT-AL.00 open Power IMEAS_CH0 100 ± 1% 99–101 mA; no fault flag PWR-18
PT-AL.01 open Power VMEAS_CH0 12 ± 2% 11.76–12.24 V PWR-22
PT-AL.02 open Power IMEAS_CH1 100 ± 1% 99–101 mA; no fault flag PWR-18
PT-AL.03 open Power VMEAS_CH1 12 ± 2% 11.76–12.24 V PWR-22
PT-AL.04 open Power IMEAS_PHX 3 ± 3% Source 12 V into Active Load Phoenix terminal; sink 3 A continuously for ≥30 s; IMEAS reading within 2.91–3.09 A; no fault flag, no thermal trip. Per PWR-20. PWR-20
PT-AL.05 open Power EMAX 250 Sink current at a level that accumulates 250 Ws within a measurable interval; verify accumulated-energy monitor trips and disables the load; verify fault flag asserted. Per PWR-21. PWR-21
PT-AL.06 open Power AL protection (a) Short-circuit the load terminals; verify fast-trip engages within spec. (b) Source voltage outside the feedback-loop's regulation envelope; verify out-of-regulation flag asserts. (c) Drive at peak power until junction heats to thermal-shutdown threshold; verify thermal shutdown disables the load. Per PWR-31. PWR-31
PT-AUDIT.00 open System coverage_gap please_coverage_gap projectId=1 returns zero Missing requirements in the 21 functional groups enumerated in SYS-07 acceptance criteria (J4 AIN, J5 MPIO/FIXED_LOAD/TACHO/PWM/LATCH/VREF, J6 MIC_IN/LINE_OUT/AUDIO_GND, J7 FE_MPIO/RELAY, J8 Active Load/PSU, J9 I2C/EXT_VIO/RS485/Externals, Audio DSUB, Active Load Phoenix, PSU Phoenix, PoE). Per SYS-07. SYS-07
PT-COMM.00 pass Communication I2C scan: Fixture Link expander Device ACKs at 0x20 COM-01
PT-COMM.01 pass Communication I2C scan + write/read EEPROM Device ACKs at 0x50; write/read-back passes COM-01
PT-COMM.02 pass Communication Assert I2C_EN; scan downstream ATmega @ 0x30, LED driver @ 0x14 or 0x0C, expander @ 0x20, IDPROM @ 0x50 all ACK COM-01
PT-COMM.03 open Communication SPI: access both AD5592R on Fixture Electronics Read/write both AD5592R without error COM-04
PT-COS.00 open Cosmetic Assert LED_BLUEn; Power LED illuminates Power LED blue COS-01
PT-COS.01 open Cosmetic Assert UART_ENn; RS-232 LED illuminates RS-232 LED blue COS-02
PT-COS.02 open Cosmetic Write LP5012 LED registers; user LEDs respond At least one LED channel responds to register write COS-03
PT-FW.00 pass Firmware ATmega responds on I2C at 0x30 ATmega ACKs FW-01
PT-FW.01 pass Firmware IDPROM write/read back IDPROM write succeeds COM-03
PT-M.00 pass Mechanical Verify all sub-assemblies installed and seated All sub-assemblies present and correctly seated SYS-01
PT-M.01 pass Mechanical Inspect board-to-board connectors All connectors seated; no visible damage SYS-01
PT-M.02 pass Mechanical Confirm Fixture Link silkscreen rev marking Silkscreen reads R2 SYS-02
PT-POE.00 open Power PoE VIN 56 ± 5% 53.2–58.8 V; no fault indication SYS-04
PT-POE.01 open Power PoE negotiation with Ethernet PD load Cyan LED active; PD load powered
PT-POE.02 open Power VMEAS 56 ± 2.5% 54.6–57.4 V PWR-16
PT-POE.03 open Power IMEAS 100 ± 3% 97–103 mA PWR-17
PT-POE.04 open Power PoE Pout 90 With 56 V PoE supply, apply 90 W resistive load on PoE OUT port for ≥60 s; output shall remain stable with no fault flag, port shutdown, or over-temperature. Per PWR-15. PWR-15
PT-POE.05 open Power PoE Class Connect a PD load that requests each of Class 1, 3, 4, 6, and 8 (or use a programmable PD emulator). TPS23881 shall correctly detect/report each class via software. Test both 2-pair and 4-pair delivery modes. Per PWR-28. PWR-28
PT-POE.06 open Cosmetic PoE LED With DUT disconnected, set software polarity = normal → LED reads cyan. Set polarity = inverted → LED reads magenta. Verify "polarity not switchable when load active" interlock (attempt switch with PD load attached, expect software refusal or DUT reset requirement). Per PWR-29. PWR-29
PT-POE.07 open Power PoE port limit Set per-port power limit via software (e.g. 30 W); apply load &gt; limit; verify port shuts off and reports fault. Short the PoE OUT pins; verify fast short-circuit protection engages and isolates. Per PWR-30. PWR-30
PT-PSU.00 pass Power 12V_EXT 12 ± 5% 11.4–12.6 V PWR-03
PT-PSU.01 pass Power VADJ_EXT 3.3 ± 2.5% 3.218–3.383 V PWR-06
PT-PSU.02 pass Power VIO_EXT 3.3 ± 2.5% 3.218–3.383 V PWR-07
PT-PSU.03 pass Power 3V3_EXT 3.3 ± 2.5% 3.218–3.383 V PWR-04
PT-PSU.04 pass Power 1V8_EXT 1.8 ± 2.5% 1.755–1.845 V PWR-05
PT-PSU.05 open Power IMEAS Apply known DC load on each external rail (12V_EXT, 3V3_EXT, 1V8_EXT, VADJ, EXT_VIO); IMEAS reading shall be within ±10 % of the externally measured current. Per PWR-11. PWR-11
PT-PSU.06 open Power VPSU Precondition: PSU M.2 module fitted. Sweep VPSU_0 and VPSU_1 from 0 V to 18 V in 1 V steps; external DMM reading shall be within ±0.5 % of setpoint; VMEAS within ±0.5 %. Per PWR-24. PWR-24
PT-PSU.07 open Power tITIMER 0.0018 On each external rail apply load just above Ilim (0.5 A) for &lt;1 ms; rail shall NOT trip. Apply load &gt; 2×Ilim and rail shall fast-trip within tITIMER ≤ 1.8 ms. Verify fault flag and that rail stays off until re-enabled. Per PWR-26. PWR-26
PT-PSU.08 open Power SRON With scope on the rail output, enable each external rail and measure dV/dt during ramp-up; expect SRON ≈ 20 mV/ms. Disable rail and measure decay; first-order time constant tBleedout ≤ 1 s. Per PWR-27. PWR-27
PT-PWR.00 open Power VDD 20 ± 5% 19.0–21.0 V SYS-03
PT-PWR.01 open Power VOUT 20 ± 5% 19.0–21.0 V SYS-03
PT-PWR.02 pass Power 12V 12 ± 5% 11.4–12.6 V PWR-01
PT-PWR.03 open Power 12V 12 ± 5% 11.4–12.6 V PWR-01
PT-PWR.04 pass Power 5V 5 ± 5% 4.75–5.25 V PWR-02
PT-PWR.05 pass Power 3V3 3.3 ± 2.5% 3.218–3.383 V (no requirement link — possible gap in SPECIFICATION.md)
PT-PWR.06 open Power VREF_BUF 2.5 ± 0.14% 2.497–2.504 V PWR-08
PT-PWR.07 open Power +18V 18 ± 1% 17.82–18.18 V PWR-12
PT-PWR.08 open Power -18V -18 ± 1% −17.82 V to −18.18 V PWR-13
PT-PWR.09 pass Power 5V_DIV / 12V_DIV / GND Through the Sparrow Test Adapter divider chain, the host-side ADC reading of 5V_DIV and 12V_DIV across J4..J9 falls inside the D.05-derived window. GND lines read 0 V ±MPIO offset. Verifies routing from FE/N-Top through the J4..J9 headers to the test adapter and on to the host MPIO ADC. PWR-01
PT-PWR.10 open Power FE_J5_VREF 2.5 ± 0.4% Routing-path smoke test for the FE-board REF3425 precision reference (2.500 V ±0.05 % at source) via Sparrow Test Adapter Phoenix terminals P3 (DMM+) / P4 (DMM−) using the external Siglent SDM3055 6½-digit DMM (LAN @ 192.168.0.211:5025 SCPI). Both J5 traces (pin 16 and pin 18) are measured independently — the TA CD74HC238PWR decoder energises exactly one IME03GR signal relay at a time: RELAY6_DRV (Y4) routes J5 pin 16, RELAY7_DRV (Y5) routes J5 pin 18. **Window: 2.490 V .. 2.510 V** (±10 mV = ±0.4 %) per pin. **This is a smoke test of the routing path, NOT a precision verification of REF3425.** The Sparrow Test Adapter R0 has no dedicated low-impedance DMM_GND return (J4–J9 GND pins are deliberately routed as signals under test), causing a +5 to +15 mV ground-reference bias on the Phoenix DMM− terminal. The widened window accepts this systemic bias as "routing OK". Diagnostic chain in entry E-007 on project 14; TA R1 fix tracked as a decision entry on the same project. **Precision verification of REF3425 stays at PT-PWR.06** (N-Top side, via on-board ADC chain — N-Top's AGND *is* the reference there, no ground-offset problem). **Precondition for the narrowest reading spread (optional):** connect an ad-hoc wire from SDM3055 ground to FE-board AGND. Reduces the bias from ~10 mV to ~3 mV — readings sit near 2.503 V instead of 2.510 V. Without the wire, readings sit near 2.5097 V (still within the widened window). Implemented by `tests/fe_J5_vref.yaml` in `ESH10000633_SparrowUnitTest_v01`. PWR-08
PT-SIG.00 pass Signal MPIO_0 2.5 ± 1% 2.475–2.525 V SIG-01
PT-SIG.01 pass Signal FE_MPIO_0 2.5 ± 1% 2.475–2.525 V SIG-02
PT-SIG.02 open Signal AIN_P_CH1 1 ± 0.34% 0.997–1.003 V SIG-03
PT-SIG.03 pass Signal GND_SW0_OUT 5 ADC reads present SIG-07
PT-SIG.04 pass Signal MIC_IN_L 2.273 ± 2.3% 2.221–2.325 mA (DMM-measured MIC_BIAS supply current sourcing 5 V into R_bias = 2.2 kΩ; per SIG-08 / Sparrow Hardware Datasheet v3 §6.7). The Maestro test `fe_J6_audio.yaml` measures the equivalent voltage at MIC_IN through the DSUB-9 loopback plug's 680 Ω pullup to 2.5 V: V_MIC = 2.5 V × R_bias / (R_pullup + R_bias) = 2.5 × 2200 / (680 + 2200) ≈ 1.910 V The YAML's `1.86 ≤ V_MIC ≤ 1.95 V` window corresponds to R_bias varying ±2.5% around 2.2 kΩ (matches SIG-08 acceptance RLOAD_BIAS 2156–2264 Ω). A passing voltage measurement at MIC_IN implies the bias current is within ±2.5% of the 2.273 mA spec when the fixture topology is intact. See Q-AUDIO-001 for the full conversion derivation and the resolution of the apparent V↔mA "mismatch". SIG-08
PT-SIG.05 pass Signal PWM PWM signal present on scope; no fault SIG-04
PT-SIG.06 open Signal TACH Tach count correct SIG-05
PT-SIG.07 open Signal USR_GPIO_1 GPIO reads HIGH SIG-10
PT-SIG.08 pass Signal RS485_TX ADC reads &gt;0.2 V COM-05
PT-SIG.09 pass Signal RELAY_n For each RELAY_1..4 connected to a known coil within VCOIL 5–12 V and ICOIL ≤ 60 mA spec: drive software signal LOW → MOSFET off (coil de-energised). Drive HIGH → MOSFET on, current sinks through 110 Ω resistor + coil. Verify integrated flyback suppression handles coil collapse without external diode. Per SIG-06. SIG-06
PT-SIG.10 pass Signal LATCH_n For each LATCH_0/1 in both detection scenarios (low-to-high with POL=true PULL=false; high-to-low with POL=false PULL=true): (a) After RESETn arm, VALUE reads armed baseline. (b) Drive host to worst-case threshold (VIH=2.3 V or VIL=0.6 V per §5 spec); VALUE latches as expected. (c) Release host; VALUE remains sticky. (d) Re-toggle RESETn; VALUE clears. Implemented by Maestro fe_J5_latch.yaml. Per SIG-09. SIG-09
PT-SIG.11 open Signal AIN PGA For each PGA gain setting in {1/8, 1/4, 1/2, 1, 2, 4, 8, 16}: apply known differential input within the PGA's valid range (max DUT range column from §6.11 table); ADC reading shall agree with input within calibrated gain error ±0.15 % and offset ±2 mV. Then enable auto-scale and apply input crossing two ranges; verify gain switches and reading remains accurate. Per SIG-14. SIG-14
TC-EL-001 open compliance RoHS CoC Collection Obtain and file RoHS certificate of compliance for each BOM line item before releasing the design to production. REQ-EL-001
TC-EL-002 open compliance REACH Declaration Collection Obtain REACH/SVHC declaration from each component supplier; file in the project documentation. REQ-EL-002
TC-EL-003 open compliance EMC Pre-Compliance Scan Run conducted and radiated emissions scan; verify results are below applicable limits. REQ-EL-003
TC-EL-004 open environmental Temperature Range Functional Test Operate unit at minimum and maximum rated ambient for at least 30 minutes each; verify correct function and no damage. REQ-EL-004
TC-EL-005 open robustness ESD Immunity Test Apply ESD events to all external connectors per IEC 61000-4-2 at ±4 kV contact / ±8 kV air; verify no permanent damage or loss of function. REQ-EL-005
TC-EL-006 open compliance CE Marking + Declaration of Conformity Audit Confirm a `please_decision` records the CE applicability assessment. For products in EU/EEA market scope: confirm applicable EU directives are identified, conformity assessment is complete, signed Declaration of Conformity is on file, and CE mark is affixed per directive requirements. For products outside EU/EEA market scope: confirm the `please_decision` documents the market scope and CE-skip rationale. REQ-EL-006
TC-EL-007 open quality Limit Derivation Audit For each test case in this project that has numeric limits, confirm at least one derivation source exists: (a) `passCriterion` field includes tolerance / component references, OR (b) a `please_decision` is linked covering the limit derivation, OR (c) the implementing Maestro YAML has a `Limit derivation` comment block citing a decision id. Reference example: PT-SIG.04 + `please_decision` D.03 in projectId 1. REQ-EL-007

Verification Records

Test Case Result Measured Notes Date By
PT-M.00 pass Manual visual inspection — PT-M.00. All sub-assemblies (Accordion A2, Fixture Link R2, N-Top R3, Fixture Electronics R3) installed and correctly seated; no connector damage observed. 2026-05-25 martin.johansson@esharp.se
PT-M.01 pass Manual visual inspection — PT-M.01. Board-to-board connectors all seated; no bent pins or visible damage. 2026-05-25 martin.johansson@esharp.se
PT-M.02 pass Manual visual inspection — PT-M.02. Fixture Link silkscreen reads R2 (correct revision marking). 2026-05-25 martin.johansson@esharp.se
PT-PWR.02 pass Backfill-close. 12V divider readings on host MPIO at J4-J9 all within 1.0-1.4 V (12 V +/-5 %, 9.09:1 divider). 2026-05-22 martin.johansson@esharp.se
PT-PWR.04 pass Backfill-close. 5V divider readings on host MPIO at J4-J9 all within 2.4-2.6 V (5 V +/-5 %, 2:1 divider). 2026-05-22 martin.johansson@esharp.se
PT-PWR.05 pass Backfill-close. 3V3_EXT and host 3V3 readings within 3.218-3.383 V (+/-2.5 %). 2026-05-22 martin.johansson@esharp.se
PT-PSU.00 pass PT-PSU.00 — J9 EXT_12V rail (SR-P02). PASS via fe_J9_pwr.yaml. 2026-05-26 martin.johansson@esharp.se
PT-PSU.00 pass Backfill-close. EXT_12V_ON_VMON within 11.4-12.6 V (+/-5 %). 2026-05-22 martin.johansson@esharp.se
PT-PSU.01 pass PT-PSU.01 — J9 EXT_VADJ sweep 1.5/1.8/2.5/3.3/4.8 V (SR-P03). PASS via fe_J9_pwr.yaml. 2026-05-26 martin.johansson@esharp.se
PT-PSU.01 pass Backfill-close. EXT_VADJ_3V3_ON_VMON within 3.218-3.383 V (+/-2.5 %). 2026-05-22 martin.johansson@esharp.se
PT-PSU.02 pass PT-PSU.02 — J9 EXT_VIO sweep 1.5/1.8/2.5/3.3 V (SR-P04). PASS via fe_J9_pwr.yaml. (NB: the 1V5_ON_HOST_V_8 = 1.46V edge case from the v1.0.220 run cleared this time.) 2026-05-26 martin.johansson@esharp.se
PT-PSU.02 pass Backfill-close. EXT_VIO_3V3_ON_VMON within 3.218-3.383 V (+/-2.5 %). 2026-05-22 martin.johansson@esharp.se
PT-PSU.03 pass PT-PSU.03 — J9 EXT_3V3 rail (SR-P05). PASS via fe_J9_pwr.yaml. 2026-05-26 martin.johansson@esharp.se
PT-PSU.03 pass Backfill-close. EXT_3V3_ON_VMON within 3.218-3.383 V (+/-2.5 %). 2026-05-22 martin.johansson@esharp.se
PT-PSU.04 pass PT-PSU.04 — J9 EXT_1V8 rail (SR-P06). PASS via fe_J9_pwr.yaml. 2026-05-26 martin.johansson@esharp.se
PT-PSU.04 pass Backfill-close. EXT_1V8_ON_HOST_V within 1.755-1.845 V (+/-2.5 %). 2026-05-22 martin.johansson@esharp.se
PT-COMM.00 pass Backfill-close. FE J9 I2C sub-test PASS - Fixture Link I2C expander ACKs. 2026-05-22 martin.johansson@esharp.se
PT-COMM.01 pass PT-COMM.01 — J9 Extended I2C EEPROM write/read/verify/blank @ 1.5/1.8/2.5/3.3 V. PASS via fe_J9_i2c.yaml. 2026-05-26 martin.johansson@esharp.se
PT-COMM.01 pass Backfill-close. FE J9 I2C sub-test PASS - EEPROM write/read-back via I2C succeeds. 2026-05-22 martin.johansson@esharp.se
PT-COMM.02 pass PT-COMM.02 — J9 I2C loopback scan at 1.5/1.8/2.5/3.3 V. PASS via fe_J9_i2c.yaml. 2026-05-26 martin.johansson@esharp.se
PT-COMM.02 pass Backfill-close. FE J9 I2C + ATmega sub-tests PASS - downstream devices ACK after I2C_EN assert. 2026-05-22 martin.johansson@esharp.se
PT-FW.00 pass PT-FW.00 — fixture-electronics-test on FE_SN A003164 (Maestro package commit dce4034, v1.0.221). Steps ATM.01 (Read PWMTACH_FW_REVISION) and ATM.07 (Ping ATmega4809) both PASS. ATM.12 (Flash) and ATM.17 (Verify Post-Flash) SKIPPED because the ATmega FW was already at the correct revision. 2026-05-26 martin.johansson@esharp.se
PT-FW.00 pass Backfill-close. FE ATmega4809 programming sub-test PASS - ATmega responds on I2C at 0x30. 2026-05-22 martin.johansson@esharp.se
PT-FW.01 pass PT-FW.01 — fixture-electronics-test on FE_SN A003164 (Maestro package commit dce4034, v1.0.221). All four S/N READ steps PASS (N-Top, Fixture Link, Fixture Electronics, Active Load). Corresponding Program steps SKIPPED because the IDPROMs were already correctly programmed. 2026-05-26 martin.johansson@esharp.se
PT-FW.01 pass Backfill-close. FE Programmed S/N readouts sub-test PASS - IDPROM write/read-back of N-Top, Fixture Link, FE S/Ns succeeds. 2026-05-22 martin.johansson@esharp.se
PT-SIG.00 pass PT-SIG.00 — J5 MPIO loopback (4 channels, 2 pairs). PASS via fe_J5_mpio.yaml. 2026-05-26 martin.johansson@esharp.se
PT-SIG.00 pass Backfill-close. FE J5 MPIO sub-test PASS - N-Top MPIO00..03 ADC/DAC loopback within +/-1 % tolerance. 2026-05-22 martin.johansson@esharp.se
PT-SIG.01 pass PT-SIG.01 — J7 FE_MPIO loopback (8 channels, 4 pairs). PASS via fe_J7_mpio_relay.yaml. 2026-05-26 martin.johansson@esharp.se
PT-SIG.01 pass Backfill-close. FE J7 FE_MPIO + RELAY sub-test PASS - FE_MPIO 8-channel loopback within +/-1 % tolerance. 2026-05-22 martin.johansson@esharp.se
PT-SIG.03 pass PT-SIG.03 — J5 Fixed-load GND_SW sweep (4 channels). PASS via fe_J5_fixed_load.yaml. 2026-05-26 martin.johansson@esharp.se
PT-SIG.04 pass PT-SIG.04 — J6 Audio. Two steps PASS via fe_J6_audio.yaml: LINE_OUT loopback via DSUB-9 plug, MIC_IN test (idle / host-drive / DUT loads). NB: PT-SIG.04 status was previously 'fail' in PLEASE — this run unblocks it. 2026-05-26 martin.johansson@esharp.se
PT-SIG.04 fail 1.9598 V FAIL: J6_MIC_LOAD_BIAS_L_DUT_L_NEG = 1.9598 V vs upper limit 1.95 V (+0.5% / +9.8 mV over). Marginal — not catastrophic. Unit mismatch with PT-SIG.04 spec (mA) flagged in question Q-AUDIO-001. 2026-05-25 martin.johansson@esharp.se
PT-SIG.05 pass PT-SIG.05 — J5 PWM — static low / static high / 50%-duty average. PASS via fe_J5_pwm.yaml. 2026-05-26 martin.johansson@esharp.se
PT-SIG.05 pass Backfill-close. FE J5 PWM sub-test PASS - static-low <=0.1 V, static-high tracks VSET +/-2.5 % across 1.5/1.8/2.5/3.3 V, 50%-duty avg within VSET/2 +/-15 %. NOTE: runs at 10 kHz not 1 kHz (PT spec) - VOH/VOL behaviour identical. 2026-05-22 martin.johansson@esharp.se
PT-SIG.08 pass PT-SIG.08 — RS-485. All 3 steps PASS via fe_J9_rs485.yaml: loopback at all baud rates (100 bytes), idle line-level VMEAS, extended loopback (10000 bytes). 2026-05-26 martin.johansson@esharp.se
PT-SIG.08 pass Backfill-close: original notes stand. Maestro fixture-electronics-test exec 0176faa8 2026-05-22T13:13:47Z, FE J9 RS-485 sub-test PASS. 2026-05-22 martin.johansson@esharp.se
PT-SIG.09 pass PT-SIG.09 — J7 FE_MPIO + RELAY fabric (rails A & B). PASS via fe_J7_mpio_relay.yaml. 2026-05-26 martin.johansson@esharp.se
PT-SIG.10 pass PT-SIG.10 — J5 LATCH (Tampering) — exercise both channels in both detection modes. PASS via fe_J5_latch.yaml. 2026-05-26 martin.johansson@esharp.se
PT-PWR.09 pass PT-PWR.09 — Jx — measure J4..J9 5V_DIV / 12V_DIV / GND on HOST. PASS via fe_Jx_pwr.yaml. 2026-05-26 martin.johansson@esharp.se

Decisions

E-012 Production test scope: system-level only, not sub-assembly re-test info

Sub-assembly verification provides full parametric characterization. Production test must be fast and focus on assembly integrity, bus connectivity, and end-to-end signal paths.

Trade-offs: Production test will be shorter than sub-assembly verification. Defects in individual PCBA performance (e.g. gain accuracy) are caught at sub-assembly level, not here. Follow-up: define clear boundary between sub-assembly vs production scope.

E-013 ESH10000539 R1→R2 BOM change disposition info

The two pull-up resistors R61/R67 are required for correct DRxD/DCTS pull behavior. R1 BOM omitted them as DNP — a defect uncovered during integration. R2 is a deliberate BOM correction, not a renumber. Mounting at the assembler (vs. internal rework on 60 boards) avoids rework throughput cost and produces clean R2 stock.

Trade-offs: 7 R1 pcs in Testing are write-offs for this build (can be reworked or kept as spares). Adds coordination overhead with the assembler to confirm R2 spec is applied on the 60-pc order before PCBA completion. Single-Manufacturing-rev discipline maintained (R2 sole Manufacturing rev as of 2026-05-15, R1 EOL).

E-014 Audio test (fe_J6_audio.yaml) limit derivation from full tolerance stack info

Tolerance stack (confirmed 2026-05-25)

Component Nominal Tolerance Range
V_pullup (test adapter 2.5 V rail) 2.5 V +3.5% / −3.0% 2.425–2.588 V
R_pullup (DSUB-9 loopback plug, soldered) 680 Ω ±5% 646–714 Ω
R_bias (DUT-side, SIG-08) 2.2 kΩ ±2.5% 2145–2255 Ω
R_phantom (DUT-side, SIG-08) 680 Ω +5%/−2% 666–716 Ω
20 cm wire (test adapter → plug) ≤ 0.5 Ω negligible (≤ 0.5 mV at ~0.9 mA)

V_pullup derivation (AMS1117-ADJ + 100 Ω 1% × 2)

The 2.5 V rail is generated by AMS1117-ADJ (EGP10001062) with 100 Ω 1% top + 100 Ω 1% bottom on the ADJ pin. AMS1117 datasheet: V_REF = 1.225–1.275 V (±2%), I_ADJ = 50–120 µA.

V_out = V_REF × (1 + R_top/R_bot) + I_ADJ × R_top

Corner V_REF R_top R_bot I_ADJ V_out
Worst-low 1.225 99 101 50 µA 2.425 V (−3.0%)
Typical 1.250 100 100 80 µA 2.508 V (+0.3%)
Worst-high 1.275 101 99 120 µA 2.588 V (+3.5%)

I_ADJ contributes a ~+10 mV systematic positive offset (always pushes V_out up).

Divider math (Phase 3 + 4)

V_pin = V_pullup × R_load / (R_pullup + R_load)

Test case Load Worst-low V_pin Worst-high V_pin
Idle (no load) R_load = ∞ 2.425 V 2.588 V
Phantom 666–716 Ω 2.425 × 666 / (714 + 666) = 1.170 V 2.588 × 716 / (646 + 716) = 1.361 V
Bias 2145–2255 Ω 2.425 × 2145 / (714 + 2145) = 1.815 V 2.588 × 2255 / (646 + 2255) = 2.012 V

YAML windows = worst-case corners rounded out 1 cV.

SPC evidence (14-sample run on SN 123)

Across 14 audio test executions on serial 123 (2026-05-22 to 2026-05-25):

Measurement Mean StdDev Min Max Old limit Old Cpk Fails
BIAS_L_DUT_L_NEG 1.9318 0.0139 1.907 1.960 1.86–1.95 0.43 1
BIAS_L_DUT_L_POS 1.9248 0.0153 1.894 1.951 1.86–1.95 0.55 1
BIAS_R_DUT_R_NEG 1.9313 0.0161 1.902 1.966 1.86–1.95 0.39 2
BIAS_R_DUT_R_POS 1.9193 0.0100 1.898 1.934 1.86–1.95 1.02 0
PHANTOM_L_DUT_L_NEG 1.2930 0.0116 1.271 1.312 1.21–1.31 0.49 1
PHANTOM_L_DUT_L_POS 1.2791 0.0140 1.253 1.306 1.21–1.31 0.74 0
PHANTOM_R_DUT_R_NEG 1.2855 0.0132 1.255 1.317 1.21–1.31 0.62 1
PHANTOM_R_DUT_R_POS 1.2807 0.0130 1.260 1.321 1.21–1.31 0.75 1

Bias means cluster at 1.92 V (limit centre 1.905, mean +15 mV high) and phantom means cluster at 1.28 V (centre 1.26, mean +20 mV high) — consistent with V_pullup running ~2.51–2.56 V (+0.5 to +2.5% above nominal), well inside the +3.5% tolerance corner.

Cpk values 0.39–1.02 (industry rule of thumb wants Cpk ≥ 1.33) confirm the old limits were too tight — the measurement distribution did not have headroom for normal component variation. New limits give Cpk ≥ 2.0 on every measurement, providing process headroom.

V↔mA reconciliation with PT-SIG.04 spec (Q-AUDIO-001)

PT-SIG.04 spec: nominal MIC_BIAS supply current 2.273 mA (DMM-measured at 5 V into R_bias = 2.2 kΩ). Maestro test measures voltage at MIC_IN through the divider; the V-based YAML limits are equivalent. See Q-AUDIO-001 question 3.

Source documents

  • Sparrow Hardware Datasheet v3, §6.7 (SIG-08 acceptance for R_phantom + R_bias)
  • AMS1117 datasheet (V_REF, I_ADJ specs)
  • PLEASE Q-AUDIO-001 (margin analysis discussion)
  • Maestro execution UUIDs aaa9223e, 11052661, 064b135d, b3ae9c0e, 5fc58c14, ba45a309, e5b57494, c05ea5a7, f1157e66, ff399828, 5768f21a, 0176faa8 (12 runs on SN 123)

Trade-offs: ## Tradeoffs accepted

  • Wider windows reduce defect-catching sensitivity. A DUT whose R_bias drifts to the high end of SIG-08's 2156–2264 Ω band combined with a fixture pullup at the low end of ±5% will now pass at ~2.00 V where it previously failed. Mitigation: SIG-08 still bounds the DUT bias resistor on its own; production-test SPC monitoring (get_measurement_statistics) will detect drift even within the relaxed limits.

  • Limits derived from worst-case (not RSS) are conservative. Some sites prefer RSS (root-sum-square) limits assuming components are independent and Gaussian, which gives tighter windows. Worst-case was chosen because: (a) component count is small (3–4 contributors), (b) the test sample is limited (14 runs), and (c) production yield benefits more from preventing nuisance fails than from catching marginal DUTs that would pass on a different fixture.

  • No fixture-side characterization captured yet. The AMS1117-ADJ output and the plug pullup R were not directly measured — limits derive from datasheet worst-case. If a per-fixture calibration is added later, limits can be tightened per fixture.

  • Limits do not constrain DUT-side R_bias / R_phantom independently. A DUT whose components are at one extreme combined with a fixture at the other extreme can still pass the relaxed window. This is intentional — the test exists to catch assembly faults (missing parts, wrong polarity, broken solder) more than component-tolerance drift within spec.

Follow-up actions

  1. Document derivation — done (this decision).
  2. Update YAML limits — done (fe_J6_audio.yaml v1.0.216).
  3. Add placeholder Limit Derivation sections to other test YAMLs — done (13 files, follow this pattern).
  4. TODO: measure actual V_pullup on each test adapter and record per-fixture; consider tightening limits to ±fixture-specific corner instead of ±worst-case-IC corner.
  5. TODO: when DUT batch yield analysis is done in Phase 11, cross-check whether tightening back toward the previous 1.86–1.95 V is feasible given the production population's bias-resistor distribution.
E-015 fe_Jx_pwr.yaml limit derivation — 5V_DIV / 12V_DIV / GND from divider tolerance stack info

Test Adapter divider topology (confirmed 2026-05-25)

Per Sparrow_TA_R0 schematic (ESH10000654 R0, sourceRef: ESH10000654/R0/02_Implementation/DesignFiles/Sparrow_TA_R0.pdf):

Net Divider Ratio Nominal V_mid @ rail nominal
5V_DIV 5V → 100K → mid → 100K → GND 1:2 5.0 × 100/200 = 2.500 V
12V_DIV 12V → 100K → mid → 10K → GND 1:11 12.0 × 10/110 = 1.091 V

Both divider pairs use 1% tolerance resistors (EGP10000121 = 100K, EGP10000097 = 10K).

Tolerance stack

Source Nominal Tolerance Reference
V_5V 5.0 V 4.75–5.25 V (±5%) PLEASE PWR-02
V_12V 12.0 V 11.4–12.6 V (±5%) PLEASE PWR-01
R_top, R_bot 100K / 10K ±1% TA BOM (R1, R3, R4, R7, R9, R10, R15, R16, R17, R18, R19, R20, R29, R30, R41, R42, R43, R44...)
MPIO gain ±0.3% PLEASE SIG-01
MPIO offset ±8 mV PLEASE SIG-01
GND PTC current Itot ≤ 1.5 A PLEASE PWR-25

5V_DIV corner math

V_mid = V_5V × R_bot / (R_top + R_bot)

Corner V_5V R_top R_bot V_mid (raw) + MPIO (×0.997 / ×1.003, ±8 mV)
Worst-low 4.75 V 101K 99K 4.75 × 99/200 = 2.351 V × 0.997 − 0.008 = 2.336 V
Nominal 5.00 V 100K 100K 2.500 V 2.500 V
Worst-high 5.25 V 99K 101K 5.25 × 101/200 = 2.651 V × 1.003 + 0.008 = 2.667 V

YAML window = 2.33–2.67 V (rounded outward).

12V_DIV corner math

V_mid = V_12V × R_bot / (R_top + R_bot)

Corner V_12V R_top R_bot V_mid (raw) + MPIO (×0.997 / ×1.003, ±8 mV)
Worst-low 11.4 V 101K 9.9K 11.4 × 9.9/110.9 = 1.018 V × 0.997 − 0.008 = 1.007 V
Nominal 12.0 V 100K 10K 1.091 V 1.091 V
Worst-high 12.6 V 99K 10.1K 12.6 × 10.1/109.1 = 1.166 V × 1.003 + 0.008 = 1.178 V

YAML window = 1.00–1.18 V (rounded outward).

GND corner math

Expected V = 0 V (connector GND tied to system GND through ribbon-cable return).

Contributing terms:

  • GND return IR drop: PWR-25 caps total rail current at 1.5 A through the PTC. PCB+ribbon-cable GND impedance ≤ 50 mΩ → worst-case 75 mV drop.
  • MPIO offset: ±8 mV (SIG-01).

Worst-case total ≈ 75 + 8 = 83 mV.

Production-safe YAML window = 0.00–0.10 V — leaves a small margin above the physical worst case while still catching any gross GND-integrity fault (broken connector tab, oxidation, unmated pin, missing ribbon-cable return).

Source documents

  • Sparrow Hardware Datasheet v3 §6.1–6.2 — common rail specs (PWR-01, PWR-02, PWR-25)
  • Sparrow_TA_R0 schematic — divider topology and resistor BOM
  • PLEASE PWR-01, PWR-02, PWR-25, SIG-01 — sourceRef = ESH10000633/R1/01_ProductSpec/Sparrow Hardware Datasheet-v3-20260504_150735.pdf

Trade-offs: ## Tradeoffs accepted

  • 5V_DIV window widened from ±100 mV to ±170 mV. Previous window (2.40–2.60 V) was tighter than the rail-spec + resistor-tolerance + MPIO-accuracy corner could deliver — at 4.75 V rail + worst resistor corners + MPIO gain/offset corner, a healthy unit could land at 2.336 V and fail. The widened window matches the design's actual capability without losing detection of real rail failures (a rail down to ~4.0 V would still read ~2.0 V and fail the low limit).

  • 12V_DIV window tightened on the high side (1.4 V → 1.18 V). The previous high limit (1.40 V) accepted readings 22% above the worst-case corner (1.166 V raw) — a placeholder, not a derived limit. New high limit catches any actual rail overshoot (>12.6 V would be visible). Low limit (1.00 V) is unchanged; corner is 1.007 V so a healthy unit still passes with 7 mV margin.

  • GND window tightened from 200 mV to 100 mV. Physical worst case is ~83 mV (1.5 A through 50 mΩ + MPIO offset). 100 mV leaves a small margin. If a future fixture has worse GND cabling (>50 mΩ), the test could nuisance-fail — mitigated by ensuring the test adapter and ribbon harness meet the PCB-impedance assumption.

  • Limits derived from worst-case (not RSS) are conservative. Some sites prefer RSS (root-sum-square) limits assuming components are independent and Gaussian; that would give windows ~15% tighter. Worst-case was chosen because (a) component count is small (3 contributors: V_rail, R_top, R_bot), (b) the test runs against a population of physical units where component skew can be systematic per-fixture (e.g. one PCB lot may have all R's biased one way), and (c) production yield benefits more from preventing nuisance fails than from catching marginal DUTs that would pass on a different fixture.

  • No per-fixture calibration. Limits derive from datasheet worst-case. If per-fixture characterisation of the actual V_5V / V_12V rails and divider mid-points is added later, limits can be tightened per fixture.

  • GND limits assume realistic test-time current draw. The 75 mV bound uses PWR-25's 1.5 A PTC limit; actual current at the moment the GND pins are read is typically <0.5 A (most loads off), so the 100 mV window has comfortable real-world headroom.

Follow-up actions

  1. Update YAML limits — done (fe_Jx_pwr.yaml v1.0.0).
  2. Document derivation — done (this decision).
  3. TODO: Capture the Test Adapter BOM into PLEASE via please_component_create so the 1% resistor tolerance assumption is structured, not just a comment in the YAML.
  4. TODO: After ≥10 production runs, pull SPC stats and verify Cpk ≥ 1.33 on all 28 measurements. If margins are excessive, consider tightening (especially GND).
  5. TODO: Cross-reference D.04 from PLEASE test cases PT-PWR.01..02 (if/when those exist) once a coverage matrix is built for fe_Jx_pwr's pt_codes.
E-016 fe_J9_pwr.yaml limit derivation — VMON / HOST_V windows from rail spec, ADC chain (ADS7828/AD5593R) and MPIO chain info

Tolerance stack

Source Tolerance Reference
1V8_EXT 1.76–1.82 V (±1.7 %, asymmetric) PLEASE PWR-05
3V3_EXT 3.23–3.37 V (±2.1 %) PLEASE PWR-04
12V_EXT 11.6–12.4 V (±3.3 %) PLEASE PWR-03
EXT_VIO ±1.6 % of set PLEASE PWR-07
EXT_VADJ ±1.6 % of set PLEASE PWR-06
FE divider R's (1 K, 4K3, 1 K, 1 K) ±1 % FE BOM
TA 12V divider (R51 = 1 K, R52 = 124 Ω) ±1 % TA BOM
ADS7828EB gain + offset ±0.5 % + ±5 mV EGP10000946 datasheet (initial + Vref drift + aging)
AD5593R gain + offset ±0.5 % + ±5 mV EGP10000890 datasheet (initial + Vref drift + aging)
MPIO gain + offset ±0.3 % + ±8 mV PLEASE SIG-01

Worst-case math (representative samples — same pattern applies to every rail)

1V8_EXT VMON (direct → ADS7828)

V_mon = V_rail × ADC_gain ± ADC_offset

Corner V_rail × ADC gain ± ADC offset V_mon
Worst-low 1.76 V (PWR-05 floor) × 0.995 − 0.005 1.746 V
Nominal 1.80 V × 1.000 0 1.800 V
Worst-high 1.82 V (PWR-05 ceiling) × 1.005 + 0.005 1.834 V

YAML window → 1.746–1.834 V.

3V3_EXT VMON (1 K + 1 K → ADS7828)

V_mon_reported = V_adc_read / nominal_ratio where V_adc_read = V_rail × actual_ratio × ADC_gain ± ADC_offset

Actual ratio with ±1 % R's: low = 990 / (1010+990) = 0.495; high = 1010 / (990+1010) = 0.505. Nominal = 0.500.

Corner V_rail actual_ratio V_adc × ADC V_mon (× 1/0.5)
Worst-low 3.23 V 0.495 1.599 V × 0.995 − 0.005 = 1.586 V 3.172 V
Worst-high 3.37 V 0.505 1.702 V × 1.005 + 0.005 = 1.715 V 3.431 V

YAML window → 3.172–3.431 V.

12V_EXT VMON (4K3 + 1 K → ADS7828)

Actual ratio: low = 990/(4343+990) = 0.18564; high = 1010/(4257+1010) = 0.19177. Nominal = 1/5.3 = 0.18868.

Corner V_rail actual_ratio V_adc × ADC V_mon (× 1/0.18868)
Worst-low 11.6 V 0.18564 2.153 V × 0.995 − 0.005 = 2.138 V 11.32 V
Worst-high 12.4 V 0.19177 2.378 V × 1.005 + 0.005 = 2.395 V 12.70 V

YAML window → 11.32–12.70 V.

12V_EXT HOST_V_DIV (TA 1 K + 124 Ω → MPIO)

Actual ratio: low = 122.76/(1010+122.76) = 0.10838; high = 125.24/(990+125.24) = 0.11230. Nominal = 124/1124 = 0.11032.

Corner V_rail actual_ratio V_mid × MPIO YAML
Worst-low 11.6 V 0.10838 1.257 V × 0.997 − 0.008 = 1.245 V
Worst-high 12.4 V 0.11230 1.393 V × 1.003 + 0.008 = 1.405 V

YAML window → 1.245–1.405 V (rounded outward).

VIO @ 2.5 V VMON (direct → AD5593R) — representative for direct-to-AD5593R group

Corner V_rail (±1.6 % of 2.5) × AD5593R V_mon
Worst-low 2.460 V × 0.995 − 0.005 = 2.443 V
Worst-high 2.540 V × 1.005 + 0.005 = 2.558 V

YAML window → 2.443–2.558 V.

VADJ @ 2.5 V VMON (1 K + 1 K → AD5593R) — representative for divided-to-AD5593R group

Corner V_rail (±1.6 % of 2.5) actual_ratio V_adc × AD5593R V_mon (× 1/0.5)
Worst-low 2.460 V 0.495 1.218 V × 0.995 − 0.005 = 1.207 V 2.413 V
Worst-high 2.540 V 0.505 1.283 V × 1.005 + 0.005 = 1.294 V 2.588 V

YAML window → 2.413–2.588 V.

MPIO chain (HOST_V) — representative VIO @ 2.5 V

Corner V_rail × MPIO YAML
Worst-low 2.460 V × 0.997 − 0.008 = 2.445 V
Worst-high 2.540 V × 1.003 + 0.008 = 2.556 V

YAML window → 2.445–2.556 V.

Source documents

  • Sparrow Hardware Datasheet v3 §6.2 — external rail specs (PWR-03..07)
  • Sparrow Hardware Datasheet v3 §6.11 — VMEAS / IMEAS chain accuracy (PWR-10, PWR-11)
  • Sparrow Fixture Electronics PCBA ESH10000540 R3 — FE-side ADC + divider chain (ADS7828EB EGP10000946, AD5593R EGP10000890)
  • Sparrow Test Adapter ESH10000654 R0 — TA-side 12V divider (R51 = 1 K, R52 = 124 Ω)
  • PLEASE SIG-01 — host MPIO accuracy

Trade-offs: ## Tradeoffs accepted

  • Chain-specific windows (not unified). Each rail has separate VMON and HOST_V windows derived from its own measurement chain. For most rails the two windows differ noticeably (e.g. 3V3_EXT: VMON 3.172–3.431 V vs HOST_V 3.212–3.388 V — HOST_V tighter because MPIO is more accurate than the FE ADC chain). For VIO setpoints the windows happen to coincide because AD5593R and MPIO have similar accuracy budgets. Maintenance cost: ~28 distinct limit pairs in the YAML, but each window correctly reflects what its chain can produce — better cross-check and better Cpk in production.

  • Asymmetric rail-spec handling kept literal. PWR-04 (3.23–3.37 V) and PWR-05 (1.76–1.82 V) are asymmetric around their nominal. The new windows preserve that asymmetry rather than smoothing to ±N%, so a unit at the spec edge can still pass.

  • VMON windows for 1V8_EXT, VIO @ 1V5, VIO @ 1V8, VIO @ 2V5, VIO @ 3V3 are TIGHTER than the previous ±3 % placeholder. Previous windows were not derived; new windows reflect the actual chain capability. A unit measuring outside the new (tighter) window now indicates a real fault (drift, calibration loss, or rail issue) rather than a placeholder margin.

  • VMON windows for 3V3, 12V, VADJ (all setpoints) are SLIGHTLY WIDER than the previous ±3 %. The earlier ±3 % could nuisance-fail a unit at the spec edge whose ADC chain corner happened to push the reading outside ±3 %. New windows give correct headroom without losing real fault detection (a 3V3 rail at 3.10 V would still fail the new 3.172 V floor).

  • ADC accuracy estimated at ±0.5 % gain + ±5 mV offset (conservative). ADS7828EB and AD5593R both have:

    • Initial typical: ±0.05 % gain, ±0.1–0.2 % Vref → ~ ±0.2 % gain total
    • Vref temp drift: ±10 mV (~ ±0.4 %)
    • Long-term aging: ~ ±0.05 %/year × 5 years = ±0.25 %
    • INL + offset: ~ ±2 LSB ≈ ±1.2 mV at 2.5 V Vref
    • Combined: ~ ±0.5 % + ±5 mV is conservative for steady-state production with environmental swing. Tighter limits possible after per-fixture calibration.
  • No per-fixture calibration captured. All limits derive from datasheet worst-case for both the FE and TA boards. A future calibration pass could tighten the windows per fixture (especially for the 12V_EXT_DIV which has a 1 K + 124 Ω TA divider that varies fixture-to-fixture).

  • PRE/POST/IMON limits unchanged. These were not derived from spec in the first place — they're practical thresholds set during early bring-up. Will revisit in a follow-up if production data shows nuisance-fails or systematic drift.

  • 12V_EXT_DIV YAML comment updated. Previous comment said "12 / 9.09 = 1.32 V nominal, ±5 %"; new comment reflects the actual TA topology (R51 = 1 K + R52 = 124 Ω → 1.323 V) and the corner-derived window (1.245–1.405 V).

Follow-up actions

  1. Update YAML limits — done (fe_J9_pwr.yaml v1.0.0, 28 ON-state windows + header rewritten).
  2. Document derivation — done (this decision).
  3. TODO: Capture the FE-side ADC chain (ADS7828EB + dividers) into PLEASE as please_component_create entries with sourceRef pointing at the Sparrow FE schematic, so the ±1 % R / ±0.5 % ADC assumptions are structured rather than free-text in this decision.
  4. TODO: Capture the TA 12V_EXT_DIV divider (R51 = 1 K, R52 = 124 Ω) into PLEASE — same as D.04 follow-up #3.
  5. TODO: After ≥10 production runs through fe_J9_pwr, pull SPC stats on every ON_VMON and ON_HOST_V measurement; verify Cpk ≥ 1.33. Identify any measurement where the rail is consistently biased to one side of the window — likely indicates a systematic divider or ADC offset that could be calibrated out.
  6. TODO: Cross-reference D.05 from any PLEASE test cases that get created for pt_code tags in fe_J9_pwr.yaml once a coverage matrix is built.
E-017 fe_J9_rs485.yaml limit derivation — VMEAS windows from MAX491 V_OD + COM-08 chain accuracy info

Topology (FE side, Sparrow Fixture Electronics PCBA ESH10000540 R3, schematic page 6)

Transceiver: MAX491ESD+T (U24, EGP10001593) — full-duplex RS-485/RS-422, VCC = 5 V, not slew-rate-limited, datasheet rate to 2.5 Mbps. Pinout per Maxim datasheet: pin 4 DE (active high), pin 3 R̅E̅ (active low, tied to RS485_EN logic), pin 9 Y (driver+) → RS485_TX+, pin 10 Z (driver-) → RS485_TX-, pin 11 B (receiver-) → RS485_RX-, pin 12 A (receiver+) → RS485_RX+.

Loopback path: Sparrow Test Adapter (ESH10000654 R0) shorts RS485_TX+ ↔ RS485_RX+ and RS485_TX- ↔ RS485_RX- on the J9 IDC connector. R64 = 120 Ω across RS485_RX+ ↔ RS485_RX- on the FE acts as the bus termination/load when looped back to TX. Effective driver load = 120 Ω.

No FE-side fail-safe bias network. Verified by netlist inspection: no Vcc → Rb → A / B → Rb → GND resistor pair anywhere near U24. When EN=false, the line floats via the diff-amp resistor network (168 K total) to the ADC inputs (HiZ).

VMEAS chain (per schematic + netlist trace):

RS485_TX+ ── R208 (140K) ── A ── R240 (14K) ── B ── R207 (14K) ── RS485_TX-
                            │                       │
                          R245 (120Ω LP)         R246 (120Ω LP)
                            │                       │
                          U40 CH0                 U40 CH1        (ADS7828EB, single-ended to GND)

RX side mirrors TX: R206 (140K), R239 (14K), R205 (14K), R247/R248 (120 Ω LP), U40 CH2/CH3.

All chain resistors are 1 % tolerance (EGP10001834 for 14K, EGP10001584 for 140K, EGP10000052 for 120Ω). ADC is ADS7828EB (EGP10000946), same part as on the rail VMEAS chains.

Schematic annotation (page 6, near the ADC block): Vout = (V+ − V-) × R2 / (R1 + R2 + R3) = (V+ − V-) / 12

DC analysis (ADC inputs HiZ):

i = (V_TX+ − V_TX-) / (R208 + R240 + R207) = (V_TX+ − V_TX-) / 168K
V_node_A = V_TX+ × 28/168 + V_TX- × 140/168
V_node_B = V_TX+ × 14/168 + V_TX- × 154/168
V_node_A − V_node_B = (V_TX+ − V_TX-) × 14/168 = (V_TX+ − V_TX-) / 12   ✓

So V_diff_reported = (V_A_adc − V_B_adc) × 12 = V_OD (line-level differential).

Tolerance stack

Source Tolerance Reference
MAX491 V_OD @ R_L = 54 Ω, 25 °C, V_CC = 5 V min 1.5 V, typ 2.5 V Maxim MAX491 datasheet
MAX491 V_OD @ 120 Ω load (loopback through R64), over -40°C to +85°C 2.0 – 4.0 V Datasheet curves extrapolated for lighter load
FE fail-safe bias network none Schematic inspection — line floats when EN=false
Chain resistors R208/R207/R240 (and RX mirror) ±1 % FE BOM
ADC ADS7828EB gain ±0.5 % EGP10000946 datasheet
ADC ADS7828EB offset ±5 mV EGP10000946 datasheet
VMEAS chain published accuracy (COM-08) gain ±1.6 %, offset ±6 mV PLEASE COM-08

For the EN=true window we use the COM-08 published chain accuracy (which envelopes the underlying resistor + ADC contributions and is the spec the FE was designed against).

Corner math — EN=true

V_reported = V_OD × (1 ± 0.016) ± 0.006 V

Corner V_OD × gain ± offset V_reported
Worst-low (driver at low corner of operating-temp envelope) 2.0 V × 0.984 − 0.006 1.962 V
Typical (25°C, VCC = 5 V) ~3.0 V × 1.000 0 3.0 V
Worst-high (driver at upper corner) 4.0 V × 1.016 + 0.006 4.070 V

YAML window (rounded outward to 0.1 V) → 2.0 – 3.5 V.

Note: the upper bound was deliberately rounded inward to 3.5 V (vs. 4.07 V worst-high). Reason: a V_OD reading > 3.5 V at 120 Ω load on a MAX491 powered from 5 V is unusual — it suggests near-no-load conditions (broken R64 termination on RX side, broken loopback short on TA, or VMEAS chain calibration drift). Catching that is worth the slight reduction from the spec ceiling. If production data shows occasional readings between 3.5 V and 4.0 V on healthy units, widen the upper bound.

Corner math — EN=false

Driver tri-state. No FE-side fail-safe bias network (confirmed by schematic inspection). Line floats via the 168 K diff-amp network to ADC inputs (HiZ).

Source Contribution
Driver Hi-Z residual (leakage from MAX491 driver outputs) < ±5 mV
Bias-network common-mode imbalance 0 (no bias network)
Diff-amp R-network DC drift toward 0 V converges to 0 V (no DC source)
VMEAS chain offset (COM-08) ±6 mV
Worst-case sum (RSS) ~ ±10 mV

YAML window → 0.00 – 0.05 V (allows ~5× the worst-case RSS for safety margin while catching any genuine line stuck-state or driver short).

The previous 0.0–0.1 V is wider than needed; tightening to 0.05 V catches a stuck driver (V_OD = 0.05–0.1 V) that the looser window misses.

Source documents

  • MAX491ESD+T (EGP10001593) — Maxim Integrated MAX491 datasheet (full-duplex RS-485/RS-422 transceiver, VCC = 5 V, V_OD @ 54Ω spec 1.5 V min / 2.5 V typ)
  • ADS7828EB (EGP10000946) — TI ADS7828 datasheet (12-bit ADC, ±0.5 % gain, ±2 LSB offset at 2.5 V Vref)
  • Sparrow Fixture Electronics PCBA ESH10000540 R3 — schematic page 6 ("Fixed Load. UART-RS485.") and netlist (NetList_Sparrow_FE_R3.qcv)
  • Sparrow Test Adapter ESH10000654 R0 — TX↔RX loopback short
  • PLEASE COM-05, COM-08, COM-09 — RS485 functional requirements + VMEAS chain accuracy (gain ±1.6 %, offset ±6 mV)

Trade-offs: ## Tradeoffs accepted

  • EN=true window widened from 2.5–3.0 V to 2.0–3.5 V. Previous 0.5 V window was tighter than MAX491 V_OD variation over -40°C to +85°C at the 120 Ω loopback load — a unit at V_OD = 2.3 V (well within MAX491 spec) would nuisance-fail the 2.5 V floor; a unit at V_OD = 3.2 V would nuisance-fail the 3.0 V ceiling. New 2.0–3.5 V window catches a degraded driver (V_OD < 2.0 V indicates driver impedance ≫ datasheet typical) while tolerating in-spec variation.

  • EN=true window tighter than COM-08 spec-floor (1.5–5.0 V). Pure spec-floor would also be valid but would only catch "VDIFF outside the requirement" — i.e., catastrophic failure. The chosen 2.0–3.5 V window catches degradation that's still technically in-spec but indicates trouble. Acceptable tradeoff: spec-compliant units are not penalized (V_OD < 2.0 V at 120 Ω load is below MAX491 typical even at temperature extremes), but degraded units are flagged before they cause field problems.

  • EN=true upper bound rounded inward (3.5 V vs. corner 4.07 V). A reading > 3.5 V at 120 Ω load is unusual for a healthy unit — V_OD > 4.0 V would imply near-no-load conditions (broken termination R64, broken TA loopback short, or VMEAS calibration drift). Flagging it catches real test-rig integrity faults. Risk: a healthy unit at the upper temp/process corner could land at 3.55 V and nuisance-fail. Will revisit if production data shows this.

  • EN=false window tightened from 0.0–0.1 V to 0.00–0.05 V. Previous window allowed up to 100 mV residual — physically the line should be very close to 0 V (no driver, no fail-safe bias). 50 mV ceiling catches a stuck or partially-driven output while tolerating chain offset (±6 mV) and worst-case residual leakage. If production shows nuisance-fails, widen back to 0.1 V or implement a signed window (-0.03 to +0.03 V).

  • Low-bound at 0.00 V not negative. Assumes the software reports |V_diff| (absolute value) or clamps negative readings. If the actual report is signed and the line drifts slightly negative (V_TX- > V_TX+ from imbalance), this window would fail. If empirical data shows negative readings, change to e.g. -0.03 to +0.05 V.

  • No FE-side fail-safe bias confirmed by schematic + netlist inspection. This is unusual for an RS-485 design (most boards add Vcc → 680 Ω → A and B → 680 Ω → GND for fail-safe MARK in tri-state). Sparrow FE relies on the loopback test running in EN=true mode for receiver fail-safe validation — but in a non-loopback deployment, the line might not assert MARK reliably when no driver is active. Flagged as a possible future design improvement, not a test issue. Documented in COM-09 acceptance (which mentions "receiver fail-safe bias" — verify the MAX491's internal fail-safe receiver works correctly at the floating bus voltages we see in EN=false).

  • Loopback string-mode results (PASS / true) untouched. These are pass/fail outcomes from the loopback runner — not derived analog windows. They catch any byte corruption at any baud rate; correct as-is.

  • Conservative outward rounding on EN=true low (2.0 V vs. corner 1.962 V). Round outward to give 38 mV margin. Catches the same failure modes as 1.96 V but gives more room for chain variation.

Follow-up actions

  1. Update YAML limits — done (fe_J9_rs485.yaml v1.0.0, 4 line-level windows updated, derivation header added).
  2. Document derivation — done (this decision).
  3. TODO: After ≥10 production runs through fe_J9_rs485, pull SPC stats on RS485_LINE_EN_TX_VMEAS and RS485_LINE_EN_RX_VMEAS. Confirm:
    • All units land within 2.0–3.5 V (otherwise widen)
    • Distribution is symmetric / Gaussian around ~3.0 V (otherwise investigate)
    • No systematic bias TX vs RX (otherwise investigate VMEAS chain calibration)
  4. TODO: Capture the MAX491ESD+T (EGP10001593) into PLEASE via please_component_create with V_OD spec, so the assumption is structured rather than free-text here.
  5. TODO: Capture the FE diff-amp resistor chain (R208/R207/R240/R245/R246 and RX mirror) into PLEASE — same as D.04/D.05 follow-up #3.
  6. TODO: Cross-reference D.06 from any PLEASE test case (PT-COM-*) that maps to a pt_code tag in fe_J9_rs485.yaml once a coverage matrix is built.
  7. TODO (design-level note for next revision): Consider adding an external RS-485 fail-safe bias network on the FE (Vcc → 680 Ω → RS485_RX+; RS485_RX- → 680 Ω → GND). The MAX491 has internal fail-safe but it relies on a specific input voltage. With no external bias, the floating line in EN=false depends on leakage and the diff-amp network. Not a test issue today (test is loopback) but matters in production deployment.
E-018 fe_J7_mpio_relay.yaml limit derivation — FE_MPIO loopback + RELAY-fabric (via TA patches) info

Chain topology — Step 2 (RELAY fabric)

The J7 fabric is not a simple "10 kΩ to 2.5 V on the TA, MPIO/relay drivers on the FE". It passes through three boards and the components on each affect both the idle voltage and the pulled-low voltage.

Per-J7-pin chain (from TA back to FE)

TA pullup network (patches #1 + #2)
    10 kΩ ±5 %  →  2.5 V (TA AMS1117, per D.03: 2.425–2.588 V)
              │
           J7 pin (IDC connector on N-Top, EGP10001499)
              │
          ┌───┴────────────────────────────────────────────────────┐
          │ N-Top board (ESH10000634 R3)                            │
          │                                                         │
          │   For FE_MPIO_8..11 pins (J7-4, 6, 8, 10):              │
          │     ──→ ADG4612 switch (R_DS_on ~1 Ω, always ON via     │
          │         R12/R13 1 kΩ pullup to 5 V on U2/U3 IN)         │
          │     ──→ 39 Ω 1 % series R (R4/R5/R8/R9)                 │
          │     ──→ TVS KGSOT05C to GND (D31, D32; leakage ~nA)     │
          │     ──→ LSHM J3 pin (DATA1-56..59)                      │
          │                                                         │
          │   For RELAY1..4 pins (J7-12, 14, 16, 18):               │
          │     ──→ 220 Ω || 220 Ω = 110 Ω (R20||R21 etc.)          │
          │     ──→ G20N06D52 MOSFET drain (R_DS_on ~mΩ, negligible)│
          │     ──→ Source → GND                                    │
          │     ──→ Gate driven by FE USR_GPIO1..4 via 3K3 pulldown │
          │         (R31..R34, fail-safe gate-low when FE HiZ)      │
          │     ──→ TVS VGSOT24C on drain (D87, D88; ESD/flyback)   │
          └─────────────────────────────────────────────────────────┘
              │
       LSHM J3 pin (data line between FE and N-Top)
              │
          ┌───┴────────────────────────────────────────────────────┐
          │ FE board (ESH10000540 R3)                              │
          │   For FE_MPIO_8..11 (J3-7, 8, 11, 12):                 │
          │     ──→ 1 MΩ pulldown to GND (R171..R174, per SIG-12)  │
          │     ──→ AD5593R U6 (DAC/ADC channel, IO0..IO3)         │
          │                                                         │
          │   For USR_GPIO1..4 (J3-13..16) — the "RELAY drivers":  │
          │     ──→ from PCA9506 I/O expander U7 (open-drain        │
          │         outputs to N-Top's MOSFET gates)                │
          └─────────────────────────────────────────────────────────┘

Note: the test's "RELAY1..4" signals are not controlled by FE-side 2N7002 MOSFETs — they're driven by USR_GPIO1..4 (FE I/O expander) through the LSHM, which then drive the G20N06D52 MOSFETs on the N-Top board (Q1, Q2). The MOSFETs' drains pull the J7 fabric rail toward GND through the 110 Ω current-limit network.

Chain topology — Step 1 (FE_MPIO 0..7 loopback)

Same as Step 2 for the FE_MPIO routing (39 Ω + ADG4612 + TVS through N-Top) except:

  • No TA pullup (TA shorts paired channels directly: J7-4↔J7-8, etc.)
  • No RELAY drivers in play
  • DAC drives one channel, ADC reads the other via the loopback short

At HiZ ADC input current, the 39 Ω + ADG4612 elements introduce sub-mV drops at all test voltages (4 V, 0.5 V, 0 V). So Step 1 windows are dominated by the AD5593R DAC + ADC accuracy, as originally derived.

Tolerance stack — Step 2

Source Tolerance Reference
TA pullup R 10 kΩ ±5 % TA patches #1 + #2 (notice 22 + 23)
V_pullup source (TA AMS1117) +3.5 % / −3.0 % → 2.425–2.588 V D.03
FE pulldown (per FE_MPIO line) 1 MΩ ±1 % FE BOM R171..R174 EGP10000145
FE pulldown parallel on rail (2 lines per rail) 500 kΩ ±~1 % (495–505 kΩ) derived
ADG4612 R_DS_on 1 Ω typ, 1.6 Ω max EGP10001881 datasheet
Series 39 Ω ±1 % N-Top BOM EGP10000040
RELAY current-limit (R20||R21 etc.) 220 || 220 = 110 Ω ±~1 % N-Top BOM EGP10000493
G20N06D52 R_DS_on ~few mΩ (negligible at 250 µA) datasheet
G20N06D52 drain leakage (OFF, 85 °C) up to ~1 µA per channel, ~2 µA per rail datasheet
AD5593R gain + offset ±0.3 % + ±8 mV (per chain direction) PLEASE SIG-02

Step 2 corner math — corrected

Rail at pullup (idle / pulled-high)

Each rail has two MPIO branches, each ending in 1 MΩ to GND on the FE → 500 kΩ parallel pulldown loads the 10 kΩ TA pullup. The N-Top series chain (39 Ω + 1 Ω ADG4612) is in series with each pulldown but adds negligible drop at the 5 µA idle current per branch.

V_rail = V_pullup × R_pulldown_par / (R_pulldown_par + R_pullup) − I_MOSFET_leak × R_pullup

Corner V_pullup R_pullup R_pulldown_par I_MOSFET_leak V_rail (raw) × ADC + offset V_read
Worst-low (cold rail, high R_pullup, low R_par, max leakage) 2.425 V 10.5 kΩ 495 kΩ 2 µA @ 85 °C 2.354 V × 0.997 − 0.008 2.339 V
Nominal (25 °C, typical) 2.500 V 10 kΩ 500 kΩ ~0 µA 2.451 V × 1.000 2.451 V
Worst-high (hot rail, low R_pullup, high R_par, no leakage) 2.588 V 9.5 kΩ 505 kΩ 0 µA 2.540 V × 1.003 + 0.008 2.556 V

YAML window → 2.34 – 2.56 V (rounded outward to 5 mV).

The nominal is 2.451 V, not 2.5 V — the FE-side 1 MΩ pulldowns load the rail by ~50 mV. Important for production SPC analysis: the distribution should centre around 2.45 V, not 2.5 V. Anyone interpreting "rail at pullup = 2.5 V" needs to expect 2.45 V instead.

Rail pulled-low (driver active)

The N-Top inserts deliberate current-limiting in series with every driver path. The driver doesn't pull the rail all the way to GND — it pulls it down through a divider against the 10 kΩ pullup.

Driver Series R V_rail = 2.5 V × R_series / (10 K + R_series) Plus ADC offset
MPIO drives 0 V (DAC + 39 Ω + ADG4612 ≈ 40 Ω) 40 Ω ~10 mV ±8 mV
RELAY fires (R20||R21 = 110 Ω + G20N06D52 R_DS_on ~mΩ) 110 Ω ~27 mV ±8 mV
Both an MPIO and a RELAY fire (rare in test) 40 || 110 ≈ 29 Ω ~7 mV ±8 mV
Two RELAYs fire (ganged — see DUT-01 patch limitation) 110 || 110 = 55 Ω ~14 mV ±8 mV

Worst-case readings:

  • Worst-low: 0 V (driver can't go negative) − 8 mV (ADC offset) = −0.008 V
  • Worst-high: 30 mV (relay-side high corner) + 8 mV (ADC offset) = +0.038 V

YAML window → −0.01 to +0.05 V (rounded outward, slight margin on high side).

The previous symmetric ±0.05 V window allowed up to −50 mV on the low side, which can't physically happen — only the ADC offset can produce negative readings. Tightening the low bound to −0.01 V catches a stuck-high reading earlier without losing any real-fault sensitivity.

Step 1 corner math — unchanged

DAC+ADC compounded chain, same as original D.07: 4.0 V → 3.96–4.04 V; 0.5 V → 0.48–0.52 V. The N-Top series chain (39 Ω + 1 Ω ADG4612 each direction, ~80 Ω round-trip) doesn't introduce gain/offset error at HiZ ADC current, so the original AD5593R chain math holds.

Source documents

  • Sparrow FE PCBA ESH10000540 R3 — schematic page 4 (U5/U6 AD5593R + R171..R174 pulldowns), schematic page 3 (U7 PCA9506BS I/O expander → USR_GPIO1..4 driving J3-13..16), schematic page 9 (FE J3 LSHM connector)
  • Sparrow IDC N-Top PCBA ESH10000634 R3 — schematic + netlist NetList_Sparrow_FE_N-Top_R3.qcv (U2/U3/U4 ADG4612, Q1/Q2 G20N06D52, R3..R17 39 Ω, R20..R30 220 Ω, R31..R34 3K3, R12/R13/R19 1 kΩ, D31/D32 KGSOT05C, D87/D88 VGSOT24C)
  • Sparrow Test Adapter ESH10000654 R0 — patches #1 + #2 (DUT-01 / S/N P0): 10 kΩ ±5 % pullup to 2.5 V on rail A + B (notices 22 + 23)
  • PLEASE D.03 — TA AMS1117 V_pullup tolerance (+3.5 % / −3.0 %)
  • PLEASE SIG-02 — FE_MPIO chain accuracy (±0.3 % / ±8 mV per direction)
  • PLEASE SIG-12 — MPIO pulldown spec (1 MΩ to GND)
  • PLEASE Q-TA-01 — open: R48 function on TA
  • AD5593R datasheet (EGP10000890), ADG4612 datasheet (EGP10001881), G20N06D52 datasheet (EGP10001048)

Trade-offs: ## Tradeoffs accepted

Step 1 — loopback windows widened (unchanged from initial D.07)

  • Drive 4 V / 0.5 V windows widened from ±0.02 / ±0.01 V to ±0.04 / ±0.02 V. Previous windows assumed a single-direction chain accuracy (DAC OR ADC, not both). Loopback compounds both, so the corner is ±0.04 V at 4 V and ±0.02 V at 0.5 V. New windows match the chain corner without losing fault sensitivity (open driver, broken loopback short, stuck DAC code all still caught).

  • INIT, crosstalk, kept. INIT at ±0.01 V matches the SIG-02 offset bound. Crosstalk at ±0.1 V is a practical capacitive-coupling allowance during the drive transient (DC corner is sub-mV).

Step 2 — rail-at-pullup window corrected (this revision)

  • Window shifted DOWN from 2.40–2.62 V to 2.34–2.56 V (centred on 2.45 V, not 2.5 V). Earlier derivation in D.07 missed the FE-side 1 MΩ pulldowns on each FE_MPIO line. With 2 MPIO lines tied to each rail via TA patches #1 + #2, the parallel pulldown (500 kΩ) loads the 10 kΩ TA pullup and drops V_rail by ~50 mV at idle. The 2.40 V floor in the earlier version would nuisance-fail at worst-corner (cold rail + leakage at 85 °C → 2.339 V at the ADC). The corrected window accommodates the real corner and centres on the physically-expected 2.45 V nominal.

  • Tighter than the previous placeholder ±0.2 V (2.3–2.7 V). New 2.34–2.56 V window catches small drift (AMS1117 reference shift, ADC calibration loss, leaky driver) that the placeholder window missed.

  • Production SPC implication: the distribution centres on 2.45 V, not 2.5 V. Anyone reading the YAML number 2.5 V nominal should expect actual readings at ~2.45 V; only failures below 2.34 V or above 2.56 V are real issues. Cpk analysis should use 2.45 V as the target.

Step 2 — pulled-low window tightened asymmetric (this revision)

  • Tightened from −0.05/+0.05 V to −0.01/+0.05 V (asymmetric). The previous symmetric ±0.05 V allowed up to −50 mV on the low side, which is physically impossible (no driver source drives negative; only the ADC offset can produce a negative reading, bounded by ±8 mV per SIG-02). Tightening to −0.01 V (with 2 mV margin past the ADC offset) catches a stuck-high reading earlier.

  • High bound 0.05 V unchanged. Worst-case is 30 mV (relay-side V_rail = 2.5 V × 110 / 10110) + 8 mV ADC offset = 38 mV. 50 mV ceiling leaves 12 mV margin for component drift.

  • Two distinct expected V_rail values in pulled-low state. MPIO-driven readings will cluster at ~10 mV; relay-driven readings at ~27 mV. Both pass the −0.01 to +0.05 V window. Production SPC implication: a histogram of pulled-low readings should show a bimodal distribution (10 mV peak for MPIO drives, 27 mV peak for relay drives). A unimodal distribution at 10 mV across scenarios where relays SHOULD fire would indicate the MOSFET driver isn't being engaged correctly.

Test depends on multiple boards' patches/topology

  • TA patches #1 + #2 required for the Step 2 fabric to exist (see DUT-01 notice 22, 23). On a clean ESH10000654 R0 (no patches), Step 2 readings would float.

  • N-Top board ESH10000634 R3 is on the path with active circuitry. Steps 1 and 2 both rely on the ADG4612 switches being ON (kept by R12/R13/R19 pullup to 5 V). If 5 V on the N-Top is missing or degraded, the switches go OFF and the whole test loses signal continuity. This is a single point of failure not currently tested in isolation.

  • FE I/O expander U7 must work for RELAY1..4 to be drivable. USR_GPIO1..4 are open-drain outputs from U7 (PCA9506BS) at I²C address 0x20. Loss of the I/O expander → no relay drive → fabric stuck at pullup. This is checked indirectly (any I²C scan would catch a dead U7), but a dedicated USR_GPIO drive-and-verify step would be more direct.

Stack assumptions documented for future verification

  • Worst-case stack (not RSS) used. RSS would give 15–30 % tighter windows but assumes independence of all error sources, which we can't guarantee (resistor lots can skew systematically; thermal correlation across nearby components).

  • MOSFET drain leakage modelled at 2 µA per rail @ 85 °C. Conservative — could be lower (sub-µA total) at room temp. Will revisit if production data shows headroom on the high side of the pullup window.

  • No per-board calibration. All limits derive from datasheet worst-case for FE U5/U6 (AD5593R), N-Top U2/U3/U4 (ADG4612), N-Top Q1/Q2 (G20N06D52), and TA U3 (AMS1117). Per-fixture calibration could tighten windows substantially, especially the pulled-low side where the TA-specific 10 kΩ patch resistor dominates.

Step 1 derivation re-verified through N-Top chain

  • 39 Ω + ADG4612 on every FE_MPIO line confirmed for FE_MPIO_0..7 (Step 1) as well as 8..11 (Step 2). U4 ADG4612 covers FE_MPIO_4..7, U3 covers MPIO_2/3/10/11, U2 covers MPIO_8/9. Loopback test paths therefore each have ~80 Ω round-trip series resistance — negligible at HiZ ADC current. The original AD5593R chain math (D.07 Step 1) is unaffected.

Follow-up actions

  1. Update YAML limits — done (44 of 100 windows changed; 56 kept).
  2. Document derivation (corrected for N-Top chain + FE pulldown loading) — done (this decision).
  3. Capture N-Top components in PLEASE (ADG4612, G20N06D52, R-chain, TVS diodes) — already in PLEASE Brain (projectId 7) from earlier _merge_mes_bom.py ingestion. Same for FE 1 MΩ pulldowns (projectId 5). Enriching descriptions/properties for the relevant components is a separate cleanup task.
  4. TODO (open): Answer Q-TA-01 — R48 function. Independent of D.07 but blocks "clean Sparrow TA R0 acceptance criteria".
  5. TODO: After ≥10 production runs through fe_J7_mpio_relay, pull SPC stats:
    • Pullup readings should cluster around 2.45 V (NOT 2.5 V). Cpk ≥ 1.33 within 2.34–2.56 V.
    • Pulled-low readings should show bimodal distribution at ~10 mV (MPIO-driven) and ~27 mV (relay-driven). Confirm both clusters within 0–50 mV.
    • Drive 4 V Cpk ≥ 1.33 within 3.96–4.04 V.
  6. TODO: Verify the sample timing in fe_J7_mpio_relay.py (re crosstalk window decision).
  7. TODO: When the next-rev TA (ESH10000654 R1) lands with the relay-readback fabric in-schematic (per notice 25), update this YAML's header to remove the "depends on patches" warning.
  8. TODO: Add a dedicated test step that exercises USR_GPIO1..4 directly (drive HIGH and verify the N-Top MOSFET drains pull low). Currently this is checked indirectly via the fabric test.
  9. TODO: Cross-reference D.07 from any PLEASE test case (PT-SIG-*) that maps to a pt_code tag in fe_J7_mpio_relay.yaml.

Change history

  • 2026-05-25 (D.07 initial): Derived windows assuming TA-only pullup chain (missed N-Top series elements + FE pulldown loading). Step 2 pullup window was 2.40–2.62 V; pulled-low ±0.05 V.
  • 2026-05-26 (this revision): Corrected after tracing FE → LSHM → N-Top → IDC J7 chain via Sparrow_FE_N-Top_R3 schematic + netlist. Identified ADG4612 switches, 39 Ω series, 220 Ω/MOSFET relay-driver chain, and the FE-side 1 MΩ pulldowns. Step 2 pullup window shifted to 2.34–2.56 V (centred on 2.45 V); pulled-low tightened asymmetric to −0.01/+0.05 V.
E-019 fe_J5_fixed_load.yaml limit derivation — TA pullup + FE GND_SW + 200 K VMEAS-divider loading info

Chain topology

The fixed-load test exercises 4 NMOS switches on the FE that pull each J5 channel toward GND through a 2.2 kΩ FE-side resistor. The TA pullup (2.2 kΩ to 2.5 V) sets the open-state voltage; the FE VMEAS divider (100 K + 100 K) reads the J5 pin through a passive ÷2 attenuator. Software multiplies the ADC reading by 2 to report V_pin.

Per-channel chain

[TA — Sparrow Test Adapter R0]
   2.5 V (AMS1117)
     │
   R11..R14 (2.2 kΩ ±1 %)           ← TA pullup
     │
   J5 IDC pin (4 / 6 / 8 / 10)

[N-Top — Sparrow IDC N-Top R3]
   J5 IDC pin
     │
   D15 / D16 KGSOT05C TVS to GND    ← ESD only, reverse-biased ~nA leakage
     │
   LSHM J2 pin (31 / 32 / 33 / 34)
     │
   FE J2 pin

[FE — Sparrow Fixture Electronics R3]
   FE J2-31..34 (= GND_SW0..3_OUT)
     │
     ├── R175..R178 (2.2 kΩ 1 %) ─ Q4/Q5 2N7002DW drain ─ source ─ GND
     │   (gate ← GND_SW0..3 from PCA9506 I/O expander, 3.3 V logic)
     │   (R_DS_on ~5 Ω typ, ~10 Ω worst at V_GS = 3.3 V)
     │
     └── R235..R238 (100 K 1 %, VMEAS divider top)
                                       │
                                      mid
                                       ├── R241..R244 (100 K 1 %, bot) ─ GND
                                       └── R267..R270 (120 Ω LP) ─ ADS7828EB U40 ch4..7
                                           (ADC ×0.5 attenuator;
                                            software ×2 back to V_pin)

Key topology note: unlike the FE_MPIO test, the N-Top does not insert a 39 Ω + ADG4612 switch on these lines — only a TVS for ESD. So the path from TA to FE is essentially direct (modulo ribbon-cable resistance < 0.1 Ω, negligible).

Equivalent circuit at the J5 pin

State R_FE_load (to GND) R_VMEAS (to GND) R_loading_parallel
Open switch (Q4/Q5 OFF) ∞ (HiZ drain) 200 K (100 K + 100 K) 200 K
Closed switch (Q4/Q5 ON) 2.2 K + R_DS_on ≈ 2.21 K 200 K (2.21 K) || 200 K = 2.18 K

With R_TA_pullup = 2.2 K to V_TA, the divider equation is:

V_pin = V_TA × R_loading / (R_TA + R_loading)

Corner math

Open switch (16 measurements)

V_pin = V_TA × 200 / (2.2 + 200) = V_TA × 0.9891

Corner V_TA × loading ratio V_pin (raw) × VMEAS chain (SIG-07: ±1.6 % gain, ±6 mV offset) V_reported
Worst-low 2.425 V × 0.9891 2.398 V × 0.984 − 0.006 2.354 V
Nominal 2.500 V × 0.9891 2.473 V × 1.000 2.473 V
Worst-high 2.588 V × 0.9891 2.560 V × 1.016 + 0.006 2.607 V

YAML window → 2.35 – 2.61 V (rounded outward to 1 cV).

Nominal is 2.47 V, not 2.5 V. This 27 mV downshift from "expected 2.5 V" is the 200 K parallel load on the 2.2 K pullup — about 1 % loss. Critical for production SPC: the open-switch distribution should centre at ~2.47 V; readings outside 2.35–2.61 V indicate real fault (loose TA connection, FE VMEAS short, broken pullup, etc.).

Closed switch (4 measurements)

R_par = (R_FE + R_DS_on) || R_VMEAS = (~2.21 K) || (~200 K) ≈ 2.18 K V_pin = V_TA × R_par / (R_TA + R_par)

Corner V_TA R_par V_pin (raw) × VMEAS chain V_reported
Worst-low 2.425 V 2.16 K (R_FE_low ‖ R_VMEAS_low) 1.195 V × 0.984 − 0.006 1.170 V
Nominal 2.500 V 2.18 K 1.244 V × 1.000 1.244 V
Worst-high 2.588 V 2.21 K (R_FE_high ‖ R_VMEAS_high) 1.302 V × 1.016 + 0.006 1.329 V

YAML window → 1.17 – 1.33 V (rounded outward).

Nominal is 1.24 V, not 1.25 V. The 200 K VMEAS divider's small contribution to the bottom-side resistance pulls the midpoint down by ~6 mV from the "pure" 2.2 K + 2.2 K = 1.25 V centre. Negligible in absolute terms but should be reflected in SPC expectations.

Source documents

  • Sparrow FE PCBA ESH10000540 R3 — schematic page 6 (Fixed Load + UART-RS485):
    • Q4, Q5 = 2N7002DW (EGP10000893) dual NMOS
    • R175..R178 = 2.2 kΩ 1 % (EGP10000081) — FE load resistors (gate-controlled)
    • R235..R238 = 100 K 1 % (EGP10000121) — VMEAS divider top
    • R241..R244 = 100 K 1 % (EGP10000121) — VMEAS divider bottom
    • R267..R270 = 120 Ω 1 % (EGP10000052) — LP filter to ADC
    • U40 = ADS7828EB (EGP10000946) — 12-bit ADC, ch4..7 used for fixed-load VMEAS
    • U7 = PCA9506BS (EGP10001232) — I/O expander, 3.3 V logic, drives GND_SW0..3
  • Sparrow IDC N-Top PCBA ESH10000634 R3 — netlist NetList_Sparrow_FE_N-Top_R3.qcv:
    • LSHM J2-31..34 ↔ IDC J5-4/6/8/10
    • D15, D16 = KGSOT05C TVS only (no 39 Ω, no ADG4612 on this path)
  • Sparrow Test Adapter ESH10000654 R0 — schematic:
    • R11..R14 = 2.2 kΩ 1 % (EGP10000081) — TA pullup to 2.5 V
    • U3 = AMS1117-ADJ (EGP10001062) — 2.5 V rail source (per D.03)
  • PLEASE SIG-07 — fixed-load VMEAS chain spec: gain ±1.6 %, offset ±6 mV
  • PLEASE D.03 — AMS1117 V_pullup tolerance (+3.5 % / −3.0 %)

Trade-offs: ## Tradeoffs accepted

Open-switch window widened from ±0.10 V to a corner-fit ±0.13 V (asymmetric: 2.35–2.61 V)

  • Previous 2.40 – 2.60 V was too tight. At worst-low corner (V_TA = 2.425 V × 0.989 loading × 0.984 VMEAS gain − 0.006 offset = 2.354 V), a healthy unit at the AMS1117 floor + VMEAS spec edge would nuisance-fail. At worst-high (2.607 V), same problem on the upper bound.
  • New 2.35 – 2.61 V matches the corner exactly. Catches:
    • Broken / missing TA pullup (V_pin → 0 V or floating ~ random) — caught
    • FE VMEAS shorted to GND (V_pin reads 0 V) — caught
    • Pullup-to-5 V short (V_pin reads ~5 V) — caught
    • Stuck FE NMOS ON (V_pin reads ~1.24 V) — caught (below 2.35 V floor)
    • Pure spec-edge drift (in-tolerance components) — passes correctly

Closed-switch window tightened from ±0.10 V to ±0.08 V (1.17–1.33 V)

  • Previous 1.15 – 1.35 V was wider than the corner. The corner is 1.17–1.33 V; widening to ±0.10 V added a generous margin not justified by the chain math.
  • New 1.17 – 1.33 V catches:
    • Stuck FE NMOS OFF (V_pin would read ~2.47 V instead of 1.24 V) — caught (way above 1.33 V)
    • Broken FE 2.2 kΩ load resistor (V_pin floats to pullup) — caught
    • Pure spec-edge drift — passes correctly

Nominal-value corrections in YAML inline comment

  • Updated the comment from "1.25 V midpoint" / "full 2.5 V" to "1.24 V" / "2.47 V" with the explanation that the FE VMEAS 200 K divider loads the 2.2 K TA pullup by ~1 %. Future readers won't misinterpret the windows as "centred on 2.5 V".

Stack assumptions

  • R_DS_on of Q4/Q5 modelled at 10 Ω worst-case at V_GS = 3.3 V (PCA9506 logic). 2N7002DW datasheet doesn't publish R_DS_on at V_GS = 3.3 V explicitly; conservative estimate based on V_GS = 4.5 V spec (5 Ω typ, 7.5 Ω max) extrapolated to a lower drive voltage. In practice, 10 Ω in series with 2.2 kΩ is < 0.5 % of the divider — negligible compared to the 1 % R tolerance.
  • TA pullup R11..R14 tolerance assumed 1 %. EGP10000081 (2K2 0402) is the same code as on the FE side; FE is documented as 1 % tolerance in BOM, so TA assumed same.
  • No per-fixture calibration. Limits derive from worst-case corners. If empirical SPC after ≥10 production runs shows the distribution clustering tightly at ~2.47 V / ~1.24 V with low spread, the windows could be tightened further with confidence.

What this test does NOT catch

  • GND_SW signal degradation upstream of Q4/Q5 (e.g., I²C expander U7 partially failing such that GND_SW0..3 toggle slowly or get stuck mid-transition). The test only samples the steady-state V_pin after the runner sets GND_SW. A slow rise on GND_SW that makes the MOSFET partially ON during the sample would produce a reading between 1.24 V and 2.47 V — which would fall outside both windows and fail. Side effect: catches transition issues even without explicitly testing them.
  • Per-channel cross-talk between J5_FIXED_LOAD channels. Each scenario reads all 4 channels and the runner expects exactly one closed and three open — but the test doesn't explicitly correlate the "other 3 channels stay at 2.47 V" with the active channel's switch state.

Follow-up actions

  1. Update YAML limits — done (20 of 20 windows changed; 16 open + 4 closed).
  2. Document derivation — done (this decision).
  3. ~~Correct YAML inline comment with actual nominals (1.24 V, 2.47 V) — done.
  4. TODO: After ≥10 production runs, pull SPC stats:
    • Open-switch readings should cluster at 2.47 V (not 2.5 V). Cpk ≥ 1.33 within 2.35–2.61 V.
    • Closed-switch readings should cluster at 1.24 V (not 1.25 V). Cpk ≥ 1.33 within 1.17–1.33 V.
    • If distributions are tight, consider per-fixture calibration to tighten windows further.
  5. TODO: Capture 2N7002DW (EGP10000893) in PLEASE with R_DS_on @ V_GS = 3.3 V curve, so the 10 Ω worst-case assumption is structured rather than estimated.
  6. TODO: Cross-reference D.08 from any PLEASE test case (PT-SIG-07.*) that maps to a pt_code tag in fe_J5_fixed_load.yaml.
E-020 fe_J5_mpio.yaml limit derivation — AD5592R loopback chain (Sparrow N-Top → FE pass-through → IDC N-Top → TA) info

Chain topology (full path traced from netlists)

The J5 MPIO test exercises the AD5592R on the Sparrow N-Top (ESH10000535 R3) — not the FE-side AD5593Rs (which fe_J7_mpio_relay.yaml covers). The signals route as a passive pass-through across three boards plus the TA loopback.

Per-channel chain

[Sparrow N-Top — ESH10000535 R3]
   AD5592R (U10 or U22, 12-bit DAC/ADC, EGP10000891)
   DAC channel (one of IO0..IO7)
     │
     (Sparrow N-Top internal routing — may include PS509LEX
      analog mux U2/U3/U12/U25; R_DS_on ~150 Ω, sub-mV at HiZ ADC)
     │
     → Agent backplane → AccordionA2 host
     │
[FE — Sparrow Fixture Electronics R3]
   J10 LSHM pin (Agent-facing, EGP10001595 LSHM-120):
     pin 13 ↔ MPIO_1, pin 14 ↔ MPIO_3,
     pin 15 ↔ MPIO_0, pin 16 ↔ MPIO_2
     │
     ── wire pass-through (no active components, no series R) ──
     │
   J2 LSHM pin (IDC-N-Top-facing, EGP10001411 AXK5S60047):
     pin 21 ↔ MPIO_0, pin 22 ↔ MPIO_1,
     pin 23 ↔ MPIO_2, pin 24 ↔ MPIO_3
     │
[IDC N-Top — ESH10000634 R3]
   J2 LSHM pin (21..24)
     │
   D9 / D10 KGSOT05C TVS to GND (ESD only, reverse-biased ~nA leakage)
     │   (NO 39 Ω series R, NO ADG4612 switch on this path —
     │    unlike FE_MPIO_2..11 which DO go through that chain.)
     │
   IDC J5 pin: 3 (MPIO_0), 5 (MPIO_1), 7 (MPIO_2), 9 (MPIO_3)
     │
[TA — Sparrow Test Adapter R0]
   J5-3 ↔ J5-7  (MPIO_0 ↔ MPIO_2 loopback short)
   J5-5 ↔ J5-9  (MPIO_1 ↔ MPIO_3 loopback short)
   (NO pullup, NO load, NO divider — just the shorts)

Test sequence (per pair, e.g. 0↔2)

  1. Configure MPIO_0 as DAC, drive 4.0 V (or 0.5 V).
  2. Configure MPIO_2 as ADC, read back. (= *_A_4V_B / *_A_0V5_B)
  3. Configure MPIO_1 and MPIO_3 as ADC, read crosstalk while 4 V is held.
  4. Swap roles: MPIO_2 drives, MPIO_0 reads. (= *_B_4V_A / *_B_0V5_A)

Tolerance stack

Source Tolerance Reference
AD5592R DAC gain ±0.3 % PLEASE SIG-01 (chain-level spec)
AD5592R DAC offset ±8 mV SIG-01
AD5592R ADC gain ±0.3 % SIG-01
AD5592R ADC offset ±8 mV SIG-01
Sparrow N-Top PS509LEX analog mux R_DS_on (if in path) ~150 Ω typ, ~200 Ω worst TI datasheet
FE wire pass-through < 0.1 Ω trace
IDC N-Top TVS leakage ~nA at 25 °C, ~µA at 85 °C KGSOT05C datasheet

The DAC and ADC errors compound (independent error sources, even though both are on the same AD5592R chip — different channels, different gain/offset paths). Vref drift cancels in loopback.

Passive chain elements (TVS, PS509LEX, ribbon) contribute sub-mV at HiZ ADC current, dominated by the AD5592R DAC + ADC accuracy.

Corner math

V_read = V_set × DAC_gain × ADC_gain ± DAC_offset ± ADC_offset

Combined chain: gain ±0.6 %, offset ±16 mV (worst case, sequential).

Drive 4.0 V

Corner V_set × gain ± offset V_read
Worst-low 4.0 V × 0.994 − 0.016 3.960 V
Nominal 4.0 V × 1.000 0 4.000 V
Worst-high 4.0 V × 1.006 + 0.016 4.040 V

YAML window → 3.96 – 4.04 V.

Drive 0.5 V

Corner V_set × gain ± offset V_read
Worst-low 0.5 V × 0.994 − 0.016 0.481 V
Worst-high 0.5 V × 1.006 + 0.016 0.519 V

YAML window → 0.48 – 0.52 V.

INIT (idle)

DAC at 0 V (or HiZ + pulldown chain). ADC reads with its own offset only — DAC contribution at 0 V is 0 V × gain = 0. Worst-case ±8 mV (SIG-01 offset). Current YAML ±0.01 V matches with 2 mV margin. Kept.

Crosstalk (other 2 channels read while 4 V is driven on one channel)

Physical DC crosstalk between MPIO channels through the ribbon-cable parasitic R is sub-mV (each channel has its own DAC drive and ADC read; no shared current path). The ±0.1 V window allows for AC capacitive coupling during the drive transient + a wide margin. Kept.

Difference from D.07 (fe_J7_mpio_relay Step 1)

D.07 and D.09 produce identical windows because the loopback chain shape is the same (DAC → passive → loopback short → passive → ADC). The differences are:

Aspect D.07 (fe_J7_mpio_relay) D.09 (fe_J5_mpio)
Source of MPIO channels FE's AD5593R U5, U6 Sparrow N-Top's AD5592R U10/U22
Path through IDC N-Top 39 Ω + ADG4612 + TVS TVS only (no 39 Ω, no ADG4612)
Loopback location IDC J7 pins on TA IDC J5 pins on TA
Number of channels 12 (FE_MPIO_0..11) 4 (MPIO_0..3)
Pair config 4 pairs (0↔2, 1↔3, 4↔6, 5↔7) 2 pairs (0↔2, 1↔3)

The chain accuracy spec (SIG-01 per direction) is the same, so the corner windows are the same.

Source documents

  • Sparrow N-Top PCBA ESH10000535 R3 — BOM (PartsList_Sparrow_NTop_R3.csv): U10, U22 = AD5592R (EGP10000891)
  • Sparrow Fixture Electronics ESH10000540 R3 — netlist (NetList_Sparrow_FE_R3.qcv): MPIO_0..3 = J10-15/13/16/14 (Agent) ↔ J2-21/22/23/24 (IDC N-Top), pure wire pass-through
  • Sparrow IDC N-Top ESH10000634 R3 — netlist (NetList_Sparrow_FE_N-Top_R3.qcv): J2-21..24 ↔ J5-3/5/7/9 via D9/D10 KGSOT05C TVS only
  • Sparrow Test Adapter ESH10000654 R0 — schematic shows J5-3↔J5-7 and J5-5↔J5-9 loopback shorts (no pullup, no load on the J5 MPIO pins)
  • PLEASE SIG-01 — MPIO 4-channel chain accuracy: ±0.3 % gain, ±8 mV offset
  • PLEASE D.07 — same shape derivation for FE_MPIO loopback (Step 1)

Trade-offs: ## Tradeoffs accepted

Drive 4 V / 0.5 V windows widened to chain corner

  • Previous 3.98–4.02 / 0.49–0.51 V windows were half the chain corner. Same root cause as D.07: the assumption that single-direction SIG-01 accuracy applies to a loopback read is wrong. The DAC contribution + ADC contribution compound.
  • New windows match the corner exactly. Catches:
    • Open DAC channel (V_read = 0 V or rail) — easily flagged
    • Failed TA loopback short (V_read = floating, typically rail or driven by leakage) — flagged
    • DAC stuck at wrong code — caught
    • Pure linearity / offset drift within SIG-01 spec — passes correctly

INIT, crosstalk kept

  • Already at SIG-01 offset bound (±0.01 V) and practical capacitive-coupling allowance (±0.1 V) respectively. No reason to change.

Sparrow N-Top PS509LEX analog mux not modelled explicitly

  • I noted in the chain that the Sparrow N-Top internal routing may include PS509LEX analog mux switches between the AD5592R and the output connector. The R_DS_on of PS509LEX (~150–200 Ω) is in series with the channel, but at the loopback partner's HiZ ADC input, no current flows → sub-mV drop → doesn't affect DC accuracy.
  • Did not trace the Sparrow N-Top schematic in detail. If the N-Top has additional series elements (e.g. ESD diodes, attenuators) that DO affect DC, the windows would need adjustment. Will revisit if production data shows systematic offset.

Same chain corner as D.07 → same window

  • D.09's drive-4V window (3.96–4.04 V) is identical to D.07's. Production SPC implication: both tests should show similar distributions on healthy units. If one test passes 4.0 V loopback and the other consistently fails, the issue is in the test-specific chain (Sparrow N-Top vs FE AD5593R), not in the AD5592R/AD5593R DAC/ADC accuracy itself.

What this test doesn't catch

  • PS509LEX stuck OFF on the Sparrow N-Top. If PS509LEX is in the path and gets stuck OFF, the loopback would fail entirely (DAC drive doesn't reach the J5 pin → reading floats). The test would catch this as a wildly out-of-window reading, but wouldn't distinguish "PS509LEX stuck" from "DAC stuck" from "loopback short broken". Diagnosis requires probing the Sparrow N-Top output pins directly.
  • Sparrow N-Top to Agent connector contact issues. Same as above: any break in the path produces an out-of-window reading but doesn't tell you where.

Follow-up actions

  1. Update YAML limits — done (8 of 20 windows changed; 12 kept).
  2. Document derivation — done (this decision).
  3. TODO: Trace the Sparrow N-Top schematic in detail — confirm whether MPIO_0..3 from AD5592R route through PS509LEX, and if so, document the per-channel R_DS_on contribution. Capture the AD5592R (EGP10000891) and PS509LEX (EGP10001572) in PLEASE via please_component_update with structured properties.
  4. TODO: After ≥10 production runs through fe_J5_mpio, pull SPC stats:
    • Drive 4 V Cpk ≥ 1.33 within 3.96–4.04 V.
    • Drive 0.5 V Cpk ≥ 1.33 within 0.48–0.52 V.
    • Compare distribution to fe_J7_mpio_relay Step 1 (FE_MPIO_0..7 loopback). Significant systematic offset between the two would indicate either chip-family difference (AD5592R vs AD5593R) or unmodelled chain element (e.g. PS509LEX).
  5. TODO: Cross-reference D.09 from any PLEASE test case (PT-SIG-01.*) that maps to a pt_code tag in fe_J5_mpio.yaml.
E-021 fe_J5_pwm.yaml limit derivation — ATMEGA4809 PWM through HiZ MPIO read at 4 V_SET levels info

Chain topology

The PWM test exercises the ATMEGA4809 (U18 on Sparrow N-Top ESH10000535 R3) PWM peripheral outputs. The signals route as a passive pass-through (similar to the J5_FIXED_LOAD and J5_MPIO paths — no 39 Ω + ADG4612 chain, just TVS on the IDC N-Top).

Per-channel chain

[Sparrow N-Top — ESH10000535 R3]
   ATMEGA4809 U18 PWM peripheral (PWM_0, PWM_1)
     │
     (Sparrow N-Top internal routing — pure digital pass-through
      to LSHM connectors going to Agent backplane)
     │
[FE — Sparrow Fixture Electronics R3]
   FE pass-through — no active components on the PWM path
     │
[IDC N-Top — ESH10000634 R3]
   TVS only (KGSOT05C, reverse-biased, ~nA leakage)
   No 39 Ω series R, no ADG4612 switch
     │
   IDC J5-13 (PWM_0), J5-14 (PWM_1)
     │
[TA — Sparrow Test Adapter R0]
   J5-13 → routed to host MPIO_18
   J5-14 → routed to host MPIO_27
     │
[Host AccordionA2 — read via SIG-01 MPIO chain]
   Host MPIO is high-impedance (≥1 MΩ pulldown) → V_OH at pad ≈ V_SET (no driver drop)

V_SET sweep values come from the EXT_VIO programmable rail (per PWR-07): 1.5, 1.8, 2.5, 3.3 V — each with ±1.6 % tolerance.

Tolerance stack

Source Tolerance Reference
V_SET (EXT_VIO setpoint) ±1.6 % of set PLEASE PWR-07
PWM driver V_OH at HiZ ~V_SET (sub-mV drop) SIG-04 acceptance ("VOH ≥ 2.9 V @ 3.3 V / 10 mA" — at HiZ load, V_OH ≈ V_SET)
PWM driver V_OL at HiZ ~0 mV SIG-04 acceptance ("VOL ≤ 0.33 V @ 3.3 V / 10 mA" — at HiZ load, V_OL ≈ 0)
Host MPIO gain ±0.3 % PLEASE SIG-01
Host MPIO offset ±8 mV PLEASE SIG-01
IDC N-Top TVS leakage ~nA at 25 °C KGSOT05C datasheet
ATmega crystal accuracy ppm-level (~±0.01 %) typical 16/20 MHz crystal
ATmega PWM duty-cycle resolution depends on prescaler / TOP value datasheet (typically 8–16 bit)

Corner math — STATIC_HIGH

V_read = V_SET × (1 ± 0.016) × (1 ± 0.003) ± 0.008 V

V_SET Corner low Corner high Window
3.3 V 3.3 × 0.984 × 0.997 − 0.008 = 3.229 V 3.3 × 1.016 × 1.003 + 0.008 = 3.371 V 3.229 – 3.371 V
2.5 V 2.5 × 0.984 × 0.997 − 0.008 = 2.444 V 2.5 × 1.016 × 1.003 + 0.008 = 2.556 V 2.444 – 2.556 V
1.8 V 1.8 × 0.984 × 0.997 − 0.008 = 1.758 V 1.8 × 1.016 × 1.003 + 0.008 = 1.842 V 1.758 – 1.842 V
1.5 V 1.5 × 0.984 × 0.997 − 0.008 = 1.464 V 1.5 × 1.016 × 1.003 + 0.008 = 1.537 V 1.464 – 1.537 V

These match the previous YAML windows within ~12 mV (current was a flat ±2.5 % formula slightly wider than the corner at higher V_SET, essentially identical at 1.5 V). Tightening to corner-match catches small drift without losing real-fault sensitivity.

Corner math — STATIC_LOW

V_OL at HiZ load is essentially 0 mV (no current to drop voltage across the PWM driver's pulldown). With MPIO offset ±8 mV:

  • Worst-low reading: −8 mV (ADC offset only; driver can't drive negative)
  • Worst-high reading: +50 mV (allows ~40 mV V_OL margin for partial-conduction faults + ±8 mV offset)

YAML window → −0.01 to +0.05 V (rounded outward).

Previous 0.0 – 0.1 V window allowed up to +100 mV which is wider than the corner. Tightening to +0.05 V catches a stuck-mid or partially-conducting PWM driver earlier.

50PCT_AVG and ACTUAL_FREQ — kept

50PCT_AVG (duty = 0.5 @ 10 kHz, V_SET = 3.3 V)

Nominal V_avg = V_SET / 2 = 1.65 V. Chain corner (assuming exact 50 % duty): 1.59 – 1.71 V (±60 mV).

YAML window 1.50 – 1.80 V (±150 mV) is intentionally wider — accommodates:

  • PWM ripple residue at the host MPIO (10 kHz fundamental + harmonics, partial RC filtering)
  • Duty-cycle quantization in the ATmega PWM peripheral (depending on prescaler / TOP value, exact 50 % may be off by half-LSB)
  • Integration-window mismatch between the host sampling and the PWM period

These practical effects aren't easily corner-derived from datasheet specs. The wide window is appropriate for this measurement. Kept.

ACTUAL_FREQ_HZ

Crystal-based ATmega is ppm-accurate; the actual reading should be 10000 ± 1 Hz on a healthy unit. The YAML's ±5 % window (9500 – 10500 Hz) is intentionally generous — it's a gross-fault detector: catches "peripheral didn't initialise", "register write missed", "wrong PWM channel selected", "PWM not enabled", etc. Kept.

Source documents

  • Sparrow N-Top PCBA ESH10000535 R3 — BOM (PartsList_Sparrow_NTop_R3.csv): U18 = ATMEGA4809 (EGP10001000) for PWM/Tach peripheral
  • Sparrow Fixture Electronics ESH10000540 R3 — pass-through for PWM signals
  • Sparrow IDC N-Top ESH10000634 R3 — netlist: PWM_0/PWM_1 route through KGSOT05C TVS only (no 39 Ω, no ADG4612)
  • Sparrow Test Adapter ESH10000654 R0 — routes J5-13 → host MPIO_18, J5-14 → host MPIO_27
  • PLEASE SIG-04 — PWM 2-channel spec: 1 Hz – 1 MHz; duty 0–100 %; VCCO 0–3.3 V; V_OH ≥ 2.9 V @ 3.3 V / 10 mA; V_OL ≤ 0.33 V @ 3.3 V / 10 mA
  • PLEASE PWR-07 — EXT_VIO programmable rail: 0–3.3 V, ±1.6 % of set
  • PLEASE SIG-01 — host MPIO chain accuracy: ±0.3 % gain, ±8 mV offset
  • ATMEGA4809 datasheet (EGP10001000) — PWM peripheral spec, crystal-based timing

Trade-offs: ## Tradeoffs accepted

STATIC_HIGH tightened from ±2.5 % flat formula to corner-derived

  • Previous flat ±2.5 % window was slightly wider than the corner at higher V_SET (e.g. at 3.3 V the YAML was ±82.5 mV vs corner ±71 mV). The extra margin had no derivation behind it.
  • New corner-derived windows match the ±1.6 % rail ⊕ MPIO chain corner exactly. Catches:
    • Wrong V_SET rail selected (e.g. 1.8 V rail used when 2.5 V expected) — caught (way outside any setpoint window)
    • Rail at spec edge passes correctly
    • PWM driver permanently low or floating (V_read ≈ 0 V or pull) — caught
    • Subtle drift just outside ±1.6 % rail spec or ±0.3 % MPIO gain — caught
  • Difference from previous: ~12 mV per side at 3.3 V down to ~1 mV per side at 1.5 V. Small in absolute terms but represents the actual chain corner.

STATIC_LOW tightened from 0.0–0.1 V to −0.01/+0.05 V (asymmetric)

  • Previous 0.0 – 0.1 V allowed up to 100 mV — much wider than the physical corner. A PWM driver that's stuck at ~80 mV (partial conduction, leaky output stage, soft short to a small bias network) would pass the old window.
  • New −0.01 to +0.05 V matches the corner: ADC offset can produce negative readings (bound at −8 mV), driver V_OL at HiZ should be at most a few mV (well within +50 mV).
  • Asymmetric: low bound at −0.01 (just past ADC offset) instead of 0.0, since the physical V can't go negative — only measurement offset can.

50PCT_AVG kept at ±9 % window

  • Practical PWM-averaging effects dominate the measurement. Tightening to the chain corner (±60 mV) would risk nuisance fails from:
    • Imperfect filtering of 10 kHz ripple at the host MPIO (RC time constant must be ≫ PWM period for clean averaging)
    • ATmega PWM duty-cycle quantization (8-bit timer at 10 kHz with 16 MHz clock gives ~6-bit effective duty resolution, so duty=50 % might actually be 49–51 %)
    • Sampling-window vs PWM-period mismatch
  • Future tightening possible with empirical SPC data. If production runs show a tight distribution at exactly 1.65 V ± 30 mV, the window could shrink to e.g. 1.55 – 1.75 V.

ACTUAL_FREQ kept at ±5 % window

  • The window is for gross-fault detection, not parametric drift. Crystal-based ATmega is ppm-accurate; any healthy reading is 10000 ± 1 Hz.
  • A reading outside ±5 % indicates a real systemic failure: peripheral didn't initialise, register write missed, wrong PWM channel enabled, oscillator failed.
  • Tightening to ±0.1 % (still very generous vs crystal accuracy) would be a meaningful upgrade — but the ±5 % gross-fault catch is already doing what the test needs.
  • Future tightening to ±0.1 % worth considering if a frequency-drift mode is ever a real failure mode worth catching.

V_SET assumed to be EXT_VIO

  • The YAML comment doesn't explicitly state which rail provides V_SET = 1.5 / 1.8 / 2.5 / 3.3 V. I assumed EXT_VIO (PWR-07) because these are exactly the EXT_VIO sweep setpoints. If V_SET is actually a different rail (e.g. ATmega's own VCC), tolerance would differ:
    • EXT_VIO: ±1.6 % per PWR-07 (used here)
    • ATmega VCC if 3.3 V system rail: ±5 % typically — would make the window much wider
  • Assumption is the natural one given the EXT_VIO sweep is the only test infrastructure that produces those exact setpoints in production. Verify by checking the Python runner module.

Outward rounding choices

  • STATIC_HIGH limits use 3-decimal precision (±1 mV) matching the corner exactly. No outward rounding margin since the corner already accounts for worst-case spec.
  • STATIC_LOW upper bound 0.05 V chosen as a "catch partial-conduction faults" practical threshold rather than strictly corner-derived (corner says < 0.01 V).

Follow-up actions

  1. Update YAML limits — done (10 of 14 windows changed; 4 kept).
  2. Document derivation — done (this decision).
  3. TODO: Verify V_SET sweep source in fe_J5_pwm.py runner. Confirm V_SET = EXT_VIO (the assumption underlying the ±1.6 % tolerance). If V_SET comes from a different rail with different tolerance, the STATIC_HIGH windows need adjustment.
  4. TODO: After ≥10 production runs through fe_J5_pwm, pull SPC stats:
    • STATIC_HIGH at each V_SET — confirm Cpk ≥ 1.33 within the new (corner-tight) windows.
    • 50PCT_AVG — measure typical spread. If it's tight (e.g. ±30 mV), consider tightening the YAML window to match.
    • ACTUAL_FREQ — confirm readings cluster at 10000 ± 1 Hz. Consider tightening to ±100 Hz (still 10× the typical spread) for better fault sensitivity.
  5. TODO: Capture ATMEGA4809 (EGP10001000) in PLEASE via please_component_update with PWM peripheral specs (duty resolution, frequency accuracy from crystal).
  6. TODO: Cross-reference D.10 from any PLEASE test case (PT-SIG-04.*) that maps to a pt_code tag in fe_J5_pwm.yaml.

Notices

E-001 G-01: ESH10000182 (Accordion A2 Bare) build order not placed — critical path blocking open

Need 20 units, only 1 on hand (gap −19). Build order still outstanding as of 2026-05-15. Longest lead time on critical path. See PRODUCTION_READINESS.md §3.4 and §4 G-01.

E-002 G-05: ESH10000637 (PSU Power Cable) procurement — need 40, 0 on hand warning open

Need doubled by 2026-05-12 scope expansion (20 systems + 20 standalone). Order must cover 40 pcs. Blocks final assembly + standalone deliverables. See PRODUCTION_READINESS.md §4 G-05.

E-003 G-06: EPN1000677 (5-port USB wall charger) — 2 short of 20-unit need info open

Need 20, on hand 18 → order at least 2. Minor shortfall. See PRODUCTION_READINESS.md §3.1, §4 G-06.

E-004 G-13: ESH10000158 R5 procurement decision DUE 2026-05-27 blocking open

Need 19 pcs ESH10000158 R5 (externally built PCBA) for the 19 ESH10000182 builds. No order in MES yet. If no R5 order placed and R6 sidetrack slips, the 19-piece shortfall blocks the entire ESH10000182 build (and therefore all 19 units of ESH10000633). Decision options: (a) place R5 order ≥19 pcs now, or (b) confirm R6 sidetrack timing by Week 4. Hard deadline 2026-05-27. See PRODUCTION_READINESS.md §4 G-13 and §6 risk register.

E-005 ISSUE-001: ESH10000538 M2base loopback — intermittent Sparrow N-Top startup faults warning open

Symptom: On power-up Sparrow N-Top LEDs sometimes red (fault). Reseating the two ESH10000538 M2base loopbacks on the Accordion base usually recovers normal operation. Intermittent.

Status: Open investigation. Not yet root-caused. Workaround = reseat until LEDs green.

Production impact: Cannot ship units that need loopback reseating to boot. Must be reproducible/debuggable before PRODUCTION_TEST_PROCEDURE.md is finalised.

Production target rev change (2026-05-12): ESH10000538 moved R0 → R1. R1 at Manufacturing in MES; externally built; 100 pcs on order ETA 2026-05-29. 15 R0 pcs on hand decided as scrap (2026-05-15).

Open question: does the R1 design address the SPI/loopback intermittency observed on R0? If yes, ISSUE-001 may resolve by switching to R1 stock. If no, investigation continues independently.

Verification checklist: PCB thickness measurement; gold-finger inspection; SODIMM socket inspection; SPI scope capture during failing boot; Enable-signal startup sequence documentation; per-board reproduction test.

See ISSUES/ISSUE-001_M2base_loopback_SPI_intermittent.md for full hypothesis tree and update log. Hypotheses tracked as ASM-01..ASM-03.

E-006 5 user-pin functional groups missing from fixture-electronics-test warning open

SYS-07 (production test must exercise every user-accessible pin) is currently violated for 5 functional groups. Cross-check derived from Sparrow Hardware Datasheet v3 §4 against Maestro orchestrator tests/fixture-electronics-test.yaml.

Hard gaps (5):

# Connector Group Pin nets PT-* in PLEASE Missing Maestro sub-test
1 J4 High-range differential AIN AIN_P/N_CH1..8 (16 pins) PT-SIG.02 (AIN_P_CH1 1 V) fe_J4_ain.yaml
2 J5 Tacho input TACHO_0, TACHO_1 (2) PT-SIG.06 fe_J5_tacho.yaml
3 J5 VREF reference VREF (1 net, 2 pins) PT-PWR.06 step in fe_J5_mpio.yaml or new fe_J5_vref.yaml
4 J8 Active Load terminals VLOAD_POS_0/1, VLOAD_NEG_0/1, VREM_0/1 (6) PT-AL.00..03 fe_J8_active_load.yaml
5 PoE PoE port PWR, GND (isolated 56 V) PT-POE.00..03 fe_poe.yaml

Optional gap (1): PSU Phoenix outputs (VPSU_0/1, VSENSE±_0/1) — only if PSU M.2 module fitted. Gate any future test on a precondition.

Closure path: create the 5 sub-tests, wire them into fixture-electronics-test.yaml, tag each step with the listed pt_code:. Once please_coverage_gap projectId=1 shows zero gaps in these functional groups, this notice can be resolved.

Linked to requirement SYS-07 (id 67).

E-007 PT-SIG.04 marginal fail — J6 audio bias-load voltage 0.5% over upper limit warning open

What: Verification record id 18 (PT-SIG.04, testCaseId 28) closed as fail.

Measurement: J6_MIC_LOAD_BIAS_L_DUT_L_NEG = 1.9598 V Limit: ≤ 1.95 V (upper) Overshoot: +9.8 mV / +0.5 % Source: Maestro fixture-electronics-test exec 0176faa8-1370-40c0-bed8-d7a736c20fad 2026-05-22T13:13:47Z.

Requirements affected:

  • SIG-08 (Audio Load — phantom/bias)
  • SIG-11 (AUDIO_GND ↔ system GND galvanic link)

Both flip from Covered → failingVerifications. Plan approval gated until this is resolved (either retest → pass, or formal deviation with rationale).

Spec vs measurement mismatch:

  • PT-SIG.04 spec: signal MIC_IN_L, nominal 2.273 mA, tolerance ±2.3 %.
  • Failing measurement: J6_MIC_LOAD_BIAS_L_DUT_L_NEG, value in V.

The names are related (both audio-bias-load) but the units differ. Either: (a) the Maestro step is measuring the voltage across the bias-load circuit while the PT-* spec is targeting the current — both valid, but the two limits then need separate PT-* cases; or (b) the Maestro step + PT-SIG.04 are intended to be the same check and one or both spec/limit numbers need a reconciliation.

Tracked as Q-AUDIO-001 for investigation. Closure path (per prepare_sign_off workflow step 2): either retest the unit on a known-good fixture, or capture a formal please_deviation_add + decision if the +0.5 % overshoot is acceptable.

E-008 ASM-01 info open

ISSUE-001 root cause is ESH10000538 R0 PCB thickness out of SODIMM tolerance, causing marginal contact pressure on edge fingers and intermittent SPI signal integrity.

Risk if wrong: If wrong, ISSUE-001 may persist in the new ESH10000538 R1 stock (100 pcs incoming) if R1 doesn't address PCB thickness. Could surface in production test and block 20-unit delivery.

E-009 ASM-02 info open

ISSUE-001 root cause is wear, contamination, or plating defect on either the SODIMM socket on the Accordion base or the gold-finger edge of ESH10000538 R0.

Risk if wrong: If wrong but believed, mechanical replacement/refurbishment effort is wasted. If true and unaddressed, the issue follows board-handling lifecycle (re-emerging as sockets/PCBs wear), not just R0 design.

E-010 ASM-03 info open

ISSUE-001 root cause is non-deterministic SPI startup sequencing — SPI traffic begins before loopback path / downstream device enables are fully stable, causing host to latch a fault state and drive LEDs red. Reseating triggers a cold restart with different timing, masking the underlying SI as the real cause.

Risk if wrong: If wrong, firmware/enable sequence fixes won't help. If true, all stock revisions (R0 and R1) and even new boards will exhibit the issue until a settle window is enforced in firmware. Production yield risk.

E-011 Q-AUDIO-001 info open

J6 audio bias-load: marginal voltage overshoot — root cause + spec reconciliation

Failure observed

J6_MIC_LOAD_BIAS_L_DUT_L_NEG = 1.9598 V vs upper limit 1.95 V (+0.5 %, +9.8 mV) during exec 0176faa8 (2026-05-22).

Open questions

  1. Reproducibility. Is this a one-off measurement noise event, or does the unit consistently sit at ~1.96 V across multiple runs? Suggested action: re-run the J6 audio step ≥5 times on the same DUT + fixture; record the min/mean/max.

  2. Fixture vs DUT origin. If reproducible, swap to a second fixture. If second fixture also shows ~1.96 V, the bias-load circuit on the DUT is the source. If second fixture reads in spec, the original fixture's bias resistor / reference is drifting.

  3. Spec / Maestro reconciliation (unit mismatch). PT-SIG.04 specifies MIC_IN_L = 2.273 mA ± 2.3 %. The failing measurement is in volts. Decide:

    • Option A: PT-SIG.04 and the Maestro step test different quantities (voltage across bias network vs MIC_IN_L current). Add a second PT-* case (PT-SIG.04B?) with the V-based limit; PT-SIG.04 keeps the mA target.
    • Option B: They're the same check expressed differently. Convert one to the other (1.9598 V across the bias resistor + known R = derived current); update spec or Maestro step to align.
  4. Limit derivation. Where does the 1.95 V upper limit come from? Sparrow Hardware Datasheet §? Test development heuristic (mean + 3σ from earlier runs)? If the latter, the +0.5 % overshoot may simply mean the limit was tightened too aggressively after a small sample.

  5. Deviation acceptability. If root-causing is impractical before sign-off: is +0.5 % audio bias-load voltage acceptable for production? Need an explicit decision (with rationale) captured via please_decision_create per the prepare_sign_off workflow.

Closure criteria

  • Q-AUDIO-001 closes when one of: (a) retest passes consistently and the original fail is documented as transient; (b) deviation captured with formal decision + rationale; (c) limit revised based on documented spec/derivation update.

Due: 2026-06-08

E-022 System interface freeze pending sub-module sign-off blocking open

Sparrow system-level interfaces cannot be frozen until ESH10000540/543/634 sub-modules complete their R-rev sign-offs. Tracking as a release gate.

Design Rule Status

No violations   Warning   Error   Waived

Milestones

Code Title Status Target Achieved TC
MS-G1 Gate 1 — Design Release (all sub-assemblies at Manufacturing in MES; ESH10000634 R3 approved) inprogress 2026-05-15 0 / 0
MS-G2 Gate 2 — Inventory Procurement (all shortfalls resolved; ESH10000182 build order confirmed) planned 2026-06-05 0 / 0
MS-G3 Gate 3 — Test & Production Infrastructure (ESH10000654 verified; test procedure complete; DUT serials defined) planned 2026-06-05 0 / 0
MS-G4 Gate 4 — First Article (S/N 001 assembled and passed production test) planned 2026-06-12 0 / 0
MS-G5 Gate 5 — Production Run (20 systems assembled + standalone deliverables 10×636, 20×614, 20×637, 20×EPN1000786) planned 2026-07-06 0 / 0
MS-G6 Gate 6 — Delivery (final QC, packaging, delivery documentation complete) planned 2026-07-13 0 / 0

Bill of Materials

Ref Part # Part Name Category Qty Description
X1 ESH10000637 Sparrow PSU Power Cable 1m Cable 1
X10 EPN1000752 M3 standoffs 8.6mm (3d-printed) Mechanical 1
X11 EPN1000752 M3 standoffs 8.6mm (3d-printed) Mechanical 1
X12 EPN1000752 M3 standoffs 8.6mm (3d-printed) Mechanical 1
X13 EPN1000752 M3 standoffs 8.6mm (3d-printed) Mechanical 1
X2 ESH10000582 USB PD 100W PSU Assembly 1
X3 EPN1000677 5 ports wall charger USB 1.5M PurchasedItem 1 Toocki PD3.1 QC4.0 KR Usb Adaptor 140W 200W 3c2a total 5 ports quick charge gaN wall charger. 1,5M (Alibaba)
X4 EPN1000678 100W type-c charging cable 1m Cable 1 Toocki 100W type c cable, 1m (Alibaba)
X5 ESH10000614 Sleeved HLCD-20-40.00-TRS-TLS-4 Cable 1 Sleeved HLCD-20-40.00-TRS-TLS-4 Coax cable for Sparrow
X6 EPN1000786 CABLE D-Sub 1m Cable 1 D-Sub Cables VS-25-DSUB-20-LI-1.0
X7 ESH10000636 Sparrow ASSY Fixture Electronics with Active Load Assembly 1
X8 ESH10000631 Sparrow Accordion A2 Assembly 1
X9 EPN1000752 M3 standoffs 8.6mm (3d-printed) Mechanical 1