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).
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 > 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 <1 ms; rail shall NOT trip. Apply load > 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 >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
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.
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).
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
Document derivation— done (this decision).Update YAML limits— done (fe_J6_audio.yamlv1.0.216).Add placeholder Limit Derivation sections to other test YAMLs— done (13 files, follow this pattern).- 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.
- 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.
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
Update YAML limits— done (fe_Jx_pwr.yamlv1.0.0).Document derivation— done (this decision).- TODO: Capture the Test Adapter BOM into PLEASE via
please_component_createso the 1% resistor tolerance assumption is structured, not just a comment in the YAML. - 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).
- 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.
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
Update YAML limits— done (fe_J9_pwr.yamlv1.0.0, 28 ON-state windows + header rewritten).Document derivation— done (this decision).- TODO: Capture the FE-side ADC chain (ADS7828EB + dividers) into PLEASE as
please_component_createentries withsourceRefpointing at the Sparrow FE schematic, so the ±1 % R / ±0.5 % ADC assumptions are structured rather than free-text in this decision. - TODO: Capture the TA 12V_EXT_DIV divider (R51 = 1 K, R52 = 124 Ω) into PLEASE — same as D.04 follow-up #3.
- 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. - TODO: Cross-reference D.05 from any PLEASE test cases that get created for
pt_codetags infe_J9_pwr.yamlonce a coverage matrix is built.
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 Ω → AandB → 680 Ω → GNDfor 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
Update YAML limits— done (fe_J9_rs485.yamlv1.0.0, 4 line-level windows updated, derivation header added).Document derivation— done (this decision).- TODO: After ≥10 production runs through
fe_J9_rs485, pull SPC stats onRS485_LINE_EN_TX_VMEASandRS485_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)
- TODO: Capture the MAX491ESD+T (EGP10001593) into PLEASE via
please_component_createwith V_OD spec, so the assumption is structured rather than free-text here. - 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.
- TODO: Cross-reference D.06 from any PLEASE test case (PT-COM-*) that maps to a
pt_codetag infe_J9_rs485.yamlonce a coverage matrix is built. - 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.
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 nominalshould 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
Update YAML limits— done (44 of 100 windows changed; 56 kept).Document derivation (corrected for N-Top chain + FE pulldown loading)— done (this decision).Capture N-Top components in PLEASE (ADG4612, G20N06D52, R-chain, TVS diodes)— already in PLEASE Brain (projectId 7) from earlier_merge_mes_bom.pyingestion. Same for FE 1 MΩ pulldowns (projectId 5). Enriching descriptions/properties for the relevant components is a separate cleanup task.- TODO (open): Answer Q-TA-01 — R48 function. Independent of D.07 but blocks "clean Sparrow TA R0 acceptance criteria".
- 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.
- TODO: Verify the sample timing in
fe_J7_mpio_relay.py(re crosstalk window decision). - 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.
- 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.
- TODO: Cross-reference D.07 from any PLEASE test case (PT-SIG-*) that maps to a
pt_codetag infe_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.
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
Update YAML limits— done (20 of 20 windows changed; 16 open + 4 closed).Document derivation— done (this decision).- ~~Correct YAML inline comment with actual nominals (1.24 V, 2.47 V) — done.
- 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.
- 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.
- TODO: Cross-reference D.08 from any PLEASE test case (PT-SIG-07.*) that maps to a
pt_codetag infe_J5_fixed_load.yaml.
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)
- Configure MPIO_0 as DAC, drive 4.0 V (or 0.5 V).
- Configure MPIO_2 as ADC, read back. (=
*_A_4V_B/*_A_0V5_B) - Configure MPIO_1 and MPIO_3 as ADC, read crosstalk while 4 V is held.
- 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
Update YAML limits— done (8 of 20 windows changed; 12 kept).Document derivation— done (this decision).- 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_updatewith structured properties. - 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_relayStep 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).
- TODO: Cross-reference D.09 from any PLEASE test case (PT-SIG-01.*) that maps to a
pt_codetag infe_J5_mpio.yaml.
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
Update YAML limits— done (10 of 14 windows changed; 4 kept).Document derivation— done (this decision).- TODO: Verify V_SET sweep source in
fe_J5_pwm.pyrunner. 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. - 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.
- TODO: Capture ATMEGA4809 (EGP10001000) in PLEASE via
please_component_updatewith PWM peripheral specs (duty resolution, frequency accuracy from crystal). - TODO: Cross-reference D.10 from any PLEASE test case (PT-SIG-04.*) that maps to a
pt_codetag infe_J5_pwm.yaml.
Notices
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.
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.
Need 20, on hand 18 → order at least 2. Minor shortfall. See PRODUCTION_READINESS.md §3.1, §4 G-06.
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.
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.
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).
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, nominal2.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.
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.
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.
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.
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
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.
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.
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.
- 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 (
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.
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_createper theprepare_sign_offworkflow.
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
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 |