← AXS-027

Circuit review & bench-test guide

AXS-027 — SPH0641LU4H-1 PDM microphone PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-027-pdm-mic PMOD module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py, rev 0.1-schematic), the module README, the shared PMOD conventions in ../../pmod-common/PMOD-SPEC-NOTES.md, and the Knowles SPH0641LU4H-1 datasheet cited in section 6.

This board is a schematic-complete prototype. It has NOT been laid out, fabricated, assembled, or bench-verified. Repository status: schematic generated, ERC clean (0 errors / 0 warnings), netlist reviewed; PCB layout not started. Every frequency, current, and timing figure below is a design target computed from the schematic and the datasheet — evidence to verify on the first article, not proof that a board works.

The catalog named the MP34DT06; the design substitutes the Knowles SPH0641LU4H-1 (same 1-bit PDM class). All numbers in this guide come from the Knowles datasheet, not the ST part.

1. What the board does#

A single bottom-port PDM MEMS microphone. The host drives CLK; the mic answers with a 1-bit pulse-density-modulated stream on DATA, driven during one clock half-cycle and tri-stated during the other (selected by the JP1 SELECT strap), so two oppositely-strapped modules can share one DATA line for stereo. The FPGA lesson (L4) is building the CIC decimator plus droop-compensation FIR that turns the 1-bit stream back into PCM audio.

There is no analog output and no register interface: two wires, one clock domain, everything else is fabric DSP.

Functional block diagram#

                       3V3 ────────┬────────────┐
                                   |            |
                              C1 100nF     U1 SPH0641LU4H-1
                                   |        (PDM MEMS mic,
 PMOD J1                          GND       bottom port)
 pin 3  CLK  ──────────────────────────────> CLOCK
 pin 1  DATA <── R1 100R ── MIC_DATA ─────── DATA (driven on the
                                            |     strapped half-cycle,
 JP1 SELECT strap:                          |     Hi-Z otherwise)
   1-2 GND (default) = drive on CLK-low ──> SELECT
   2-3 3V3           = drive on CLK-high

2. Safety and scope boundaries#

3. Power and signal path#

  1. 3V3 arrives on J1 pins 6/12, GND on 5/11. C1 (100 nF) decouples the mic VDD — the datasheet's recommended bypass, and it must not be a Class 2 dielectric compromise placed far from the part (layout note).
  2. At power-up with no clock the mic idles; DATA is high-impedance. The datasheet allows up to 50 ms power-up time.
  3. The host drives CLK. The clock frequency selects the operating mode (this mic has no register map — frequency IS the mode control): sleep at or below 250 kHz, low-power 351–815 kHz, standard performance 1.024–2.475 MHz, ultrasonic 3.072–4.8 MHz. Frequencies in the gaps (816 kHz–1.023 MHz and 2.476–3.071 MHz) are unspecified — do not park the clock there.
  4. With SELECT strapped to GND (JP1 1-2, default), the mic asserts DATA on the falling CLK edge (valid t_DD = 18–40 ns after the edge) and tri-states after the rising edge (t_DZ = 3–16 ns): it owns the clock-LOW half-cycle. Strapped to VDD it owns the clock-HIGH half-cycle. The host latches mic(low) data on the rising edge.
  5. R1 (100 Ω) is series protection on the mic-driven DATA line, per the sensor-line rule for module-driven pins.
  6. In fabric, a CIC decimator (typically R = 64) followed by a droop-compensation FIR recovers PCM at f_CLK / R.

Why SELECT must never float#

The SELECT pin is internally pulled low but the datasheet explicitly says it "should not be left floating." JP1 bridged 1-2 (GND) is the default; verify the strap is actually bridged at assembly review, because an open strap leaves the pin on a weak internal pull in violation of the datasheet note.

4. Interfaces#

Custom PDM map (neither SPI nor I2C type — PDM is clock out, data in), documented in the README. Pin 1 is the upper-row rightmost pin viewed from the module top with the connector toward you (PMOD-SPEC-NOTES).

PMOD pin123456789101112
NetDATANCCLKNCGND3V3NCNCNCNCGND3V3
Probe point (net)Expected role
CLK (J1 pin 3)Host-driven PDM clock, 3.3 V CMOS
MIC_DATA (U1 side of R1)Raw mic output before series protection
DATA (J1 pin 1)PDM bitstream as the host sees it
SELJP1 common: 0 V default (drive on CLK-low)

No dedicated test points exist yet — the PCB is not laid out. Probing is at J1 pins and component pads.

5. Component-by-component review#

Every reference designator in the generator is covered.

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1Knowles SPH0641LU4H-1 (LGA-5, bottom port): 1.62–3.6 V; standard mode 1.024–2.475 MHz at 620 uA typ; sensitivity -26 dBFS (94 dB SPL, 1 kHz); SNR 64.3 dB(A); AOP 120 dB SPL; 1/2-cycle PDM outputThe entire sensor: MEMS element, input buffer, and sigma-delta modulator producing the 1-bit streamNo DATA activity at allRotated LGA is fatal; solder paste or pour intruding into the port hole permanently blocks/degrades the acoustic path; ultrasonic cleaning after reflow can destroy the MEMS
R1100 ΩSeries protection on the mic-driven DATA line (line rule); also damps the edge into host trace capacitanceDATA open — host sees a floating lineShort only removes miswiring protection; a much larger value would slow edges into the datasheet's 140 pF max load budget
C1100 nF X7RMic VDD decoupling, the datasheet-recommended bypass "near each Mic VDD pin" for maximum SNR; must not be a Class 2 dielectric per the datasheet interface-circuit note (X7R satisfies this; avoid Y5V)Reduced PSR/SNR, possible artifacts; the datasheet ties bypass quality directly to SNR performanceA shorted C1 is a rail short — board draws limit current
JP13-pad solder jumper (not in BOM/POS)SELECT strap: 1-2 = GND = drive on clock-LOW half (default); 2-3 = VDD = clock-HIGH half. Enables two-mic stereo sharing of one DATA lineOpen strap leaves SELECT on the weak internal pull-down — works by accident, violates the "should not be left floating" datasheet noteBoth sides bridged shorts 3V3 to GND through the jumper — inspect before power
J112-pin right-angle PMOD plug 2x6Host interface, 3.3 V onlyNo power/clockMis-keyed insertion swaps power and signals; verify pin-1 orientation before first power
#FLG01/02power flagsERC bookkeeping only, no physical partn/an/a

6. Datasheet summary and design interpretation#

Datasheet actually fetched and read for this review (retrieved 2026-07-14): Knowles SPH0641LU4H-1 product datasheet, Revision B (04/06/2015) — fetched from the DigiKey mirror; the knowles.com URL recorded in generate_design.py returned 404 at review time. Confirm the current revision on knowles.com before procurement.

Manufacturer figure (verified in the fetched datasheet)Board interpretation
Supply 1.62–3.6 V; standard-mode I_DD 620 uA typ / 700 uA max (2.4 MHz); low-power 235 uA (768 kHz); sleep 80 uA; ultrasonic 845 uA typ3.3 V PMOD rail is in range; expect well under 1 mA on the bench
Clock ranges: sleep 0–250 kHz; low-power 351–815 kHz; standard 1.024–2.475 MHz; ultrasonic 3.072–4.8 MHzThe schematic note and README say "CLK 1–3.2 MHz standard mode" — that is wrong per the datasheet: standard mode ends at 2.475 MHz and 2.476–3.071 MHz is an unspecified gap. Use 1.024–2.475 MHz; fix the docs
"Do not power up into ultrasonic mode. Do not wake-up from sleep mode into ultrasonic mode."Bring-up sequence must start in standard (or low-power) mode
SELECT = GND: asserts DATA on falling clock edge, latches on rising; SELECT = VDD: asserts on rising. t_DD 18–40 ns, t_DZ 3–16 nsJP1 default 1-2 = GND = the mic drives during clock-LOW; the FPGA samples mic(low) data on the CLK rising edge
Clock duty cycle 40–60% (f_CLK <= 2.4 MHz), 48–52% (2.4–4.8 MHz); t_EDGE max 3 nsThe FPGA clock output must be clean; a lab function generator with slow edges is out of spec
DC output 0 %FS (fullscale +/-100%); polarity: increasing sound pressure = increasing density of 1s; format "1/2 cycle PDM"Silence = about 50% ones-density; the CIC output for silence sits at mid-scale (signed zero)
Sensitivity -26 dBFS at 94 dB SPL/1 kHz (-27 to -25); SNR 64.3 dB(A); AOP 120 dB SPL; THD 0.2% typSets expected decimated signal levels; a normal voice at 30 cm (about 65 dB SPL) lands around -55 dBFS
V_IH >= 0.7 x VDD (2.31 V at 3.3 V); V_OH >= VDD - 0.45 V at 2 mA; V_OL <= 0.45 V; max load 140 pFLogic thresholds for CLK drive and DATA capture
Power-up <= 50 ms; wake-up <= 15 ms; fall-asleep <= 10 ms; mode change <= 10 msAllow 50 ms after power before judging DATA; sleep/wake tests below
Frequency response flat, roll-off below about 100 Hz (typical curve); ultrasonic response usable to 80 kHz in ultrasonic modeThe stretch exercise (4.8 MHz clock) is real but only after standard-mode bring-up

7. Expected values before bench testing#

All values are design targets from the schematic and datasheet.

QuantityDesign target / calculated valueWhere to measure
Supply current, CLK stopped (sleep after <=10 ms)about 80 uABench supply / uA meter
Supply current at 2.4 MHz CLK620 uA typ, 700 uA maxBench supply
CLK levels at J1 pin 3V_IH >= 2.31 V, V_IL <= 0.99 V, duty 40–60%, edges <= 3 nsScope
DATA drive window (SELECT = GND)valid 18–40 ns after CLK falling; Hi-Z 3–16 ns after CLK risingScope, 2-channel, >= 200 MHz
DATA logic levelsV_OH >= 2.85 V at 2 mA, V_OL <= 0.45 VScope
Ones-density in silenceabout 50% (DC output spec 0 %FS)Logic analyzer bit statistics
CIC output rate, R = 64 at 2.4 MHz37.5 kHzFabric counter / debug output
CIC output rate, R = 64 at 2.048 MHz32.0 kHzsame
CIC output rate, R = 64 at 1.024 MHz16.0 kHzsame
Silence DC level after CICapproximately mid-scale (signed zero) with small residual offsetFabric debug / UART dump
1 kHz whistle at normal effort, 30 cmclearly visible sine in the decimated stream, tens of dB above the noise floor (level unverified — depends on actual SPL)Fabric level meter / dump

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Bench context: either (a) a PMOD host — AruviX ECP5 rev-A or any 3.3 V Digilent-compatible PMOD socket — driving CLK from fabric, with a logic analyzer (>= 25 MS/s) and scope on pins 1/3, or (b) a bench 3.3 V current-limited supply plus a clean 3.3 V CMOS clock source (an FPGA dev board still being the practical choice given the 3 ns edge spec) and DMM/scope/logic analyzer. Stop at the first abnormal result.

A. Unpowered inspection and resistance#

  1. Complete the checklist in section 8.
  2. Measure 3V3-to-GND resistance both polarities; investigate a hard short.
  3. Confirm DATA-to-GND and DATA-to-3V3 are not shorted (should read open; the mic output is Hi-Z unpowered).

B. First power, no clock#

  1. Apply 3.3 V, current limit 20 mA. Wait 100 ms (power-up spec is 50 ms).
  2. Record supply current. With no clock the mic settles toward sleep-mode current: expect on the order of 80 uA (plus board leakage). Milliamps here mean a short or a damaged part.
  3. Verify DATA reads as a floating/Hi-Z node (a 1 MΩ scope input drifts; a logic analyzer shows an indeterminate level). There is no pull on DATA on this module by design — note for the host: enable a weak FPGA pull-down on the DATA pin, or expect garbage between clock edges at bring-up.

C. PDM clock/data capture (the core electrical test)#

  1. Drive CLK at 2.4 MHz (standard mode; the datasheet's own test frequency), 50% duty, from the FPGA. Wait 15 ms (wake-up spec).
  2. Scope CLK at J1 pin 3: confirm levels (>= 2.31 V high, <= 0.99 V low), duty inside 40–60%, and clean fast edges.
  3. Two-channel scope capture, CLK on CH1, DATA on CH2, 100 ns/div: a correct capture with SELECT = GND shows DATA transitioning shortly after each CLK FALLING edge (valid within 18–40 ns) and releasing to Hi-Z just after each CLK RISING edge (3–16 ns). During the clock-HIGH half-cycle the line floats — on a scope this shows as a drifty mid-level ramp unless the host pull is enabled. This half-cycle ownership is the signature of the wired L/R select; if DATA instead changes on rising edges, JP1 is strapped to VDD or mis-bridged.
  4. Logic analyzer capture (sample >= 25 MS/s, i.e. >= 10x oversample; latch DATA on the CLK rising edge): record at least one second of the bitstream in a quiet room. Compute ones-density: expect about 50% (datasheet DC output = 0 %FS). Density stuck at 0% or 100% means a dead/shorted DATA line, wrong SELECT phase, or a clock out of range.
  5. Raw PDM density modulation test: whistle a steady tone about 30 cm from the port while capturing. Zoomed out, the captured density (running average over, say, 128 bits) must visibly oscillate at the whistle frequency around the 50% silence level. Louder = deeper density swings (increasing sound = increasing density of 1s on positive pressure). This proves the acoustic path (port hole open, MEMS alive) with no fabric DSP at all.
  6. Sweep CLK across the standard band: 1.024, 1.536, 2.048, 2.475 MHz. The stream must stay live at all four. Then stop the clock, wait 10 ms (fall-asleep spec), confirm current drops toward sleep level, restart at 1.024 MHz and confirm data returns within 15 ms (wake-up spec).

D. CIC-core smoke test (fabric integration)#

Uses the platform pdm_cic core (Phase 0 HDL library) on the ECP5 host.

  1. Configure: f_CLK = 2.048 MHz, CIC decimation R = 64 -> expected output sample rate f_s = 2.048 MHz / 64 = 32.0 kHz exactly (verify with a fabric counter against the board oscillator; a mismatch means the decimator drops samples).
  2. Silence check: in a quiet room, the decimated output must sit near signed zero (mid-scale) with only noise-floor wander. A large fixed DC offset indicates a wrong CIC bit-growth/truncation or a stuck PDM input (density 0/100% folds to full-scale DC).
  3. Whistle test: whistle an approximately steady 1–2 kHz tone. The decimated stream (dumped over UART or plotted from a level-meter demo) must show a clean visible sine at the whistled frequency. CIC passband droop makes higher frequencies read slightly low until the compensation FIR is enabled — a few dB at the band edge is expected, not a fault.
  4. Level sanity: speech at normal effort about 30 cm away is roughly 65 dB SPL; with sensitivity -26 dBFS at 94 dB SPL, expect peaks in the ballpark of -55 dBFS. Exact SPL is uncalibrated on a bench — treat this as an order-of-magnitude check, not a spec measurement.
  5. Optional stereo exercise: add a second module strapped 2-3 (VDD). Sharing one DATA line, the two mics interleave half-cycles; the fabric demultiplexes on opposite CLK edges. Verify neither drives during the other's half (scope for contention glitches at the edges).

E. Ultrasonic stretch exercise (optional, after C/D pass)#

  1. With the mic already running in standard mode, move CLK to 3.072 MHz (never power up directly into this mode). Duty must tighten to 48–52%.
  2. Decimate by 64 -> f_s = 48 kHz with an ultrasonic-shaped response, or by 32 -> 96 kHz for actual ultrasonic work. Verify the stream stays live and silence density remains about 50%.
  3. Confirm supply current rises toward the 845 uA typical ultrasonic figure.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
Supply current in the mA rangethermal/visual, C1, JP1C1 short, JP1 double-bridge, U1 damaged/rotated
No DATA activity with valid CLKCLK at U1 pad, mode checkCLK below 1.024 MHz or in a spec gap, open CLK trace, U1 dead, R1 open
DATA changes on the wrong edgeJP1 strap, SEL voltageJP1 bridged 2-3 instead of 1-2
Density stuck at 0% or 100%MIC_DATA vs DATA both sides of R1DATA shorted to a rail, port blocked (mechanical), U1 damaged
Density about 50% but no whistle responseport hole inspectionPort blocked by paste/pour/label — the classic bottom-port assembly failure
Garbage during clock-high halfhost pull configurationExpected Hi-Z float — enable a host pull-down or ignore that half-cycle
Works at 1.024 MHz, dies above 2 MHzCLK edges/duty at J1 pin 3Slow clock edges (t_EDGE > 3 ns), duty outside 40–60%, marginal wiring
Wrong decimated ratefabric clock accountingCIC decimation factor mismatch, dropped samples in the core
Loud tonal artifact in decimated audioCLK jitter sourceClock from a fabric PLL with spread/jitter; use a clean divided clock
Dead after board rework/cleaningnone — inspectUltrasonic cleaning or wash destroyed the MEMS (forbidden)

11. Bench record template#

FieldRecord
Board revision / serial
JP1 strap state (1-2 GND / 2-3 VDD)
Host/clock source, logic analyzer, scope IDs and calibration
Supply current: no-clock, 1.024 MHz, 2.4 MHz
CLK levels/duty/edge screenshot paths
DATA edge-timing capture (t_DD/t_DZ window) paths
Silence ones-density result
Whistle density-modulation capture path
Clock sweep + sleep/wake result
CIC rate check (f_CLK, R, measured f_s)
Silence DC level and whistle capture after CIC
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The circuit is minimal and correct for its purpose: the datasheet's interface circuit is exactly one bypass capacitor plus the SELECT strap, and the module adds only the platform's 100 Ω series-protection rule on the mic-driven line. The JP1 default (SELECT = GND, drive on clock-low) is consistent between the generator, the README, and the datasheet's mic(low)/mic(high) table, and it composes correctly into the two-module stereo exercise. Two findings: (1) the documented "1–3.2 MHz standard mode" range is wrong — the datasheet standard mode is 1.024–2.475 MHz, with 2.476–3.071 MHz unspecified and ultrasonic starting at 3.072 MHz; correct the generator text and README, and keep the host clock plan inside the real bands. (2) DATA has no board-level pull, so the shared-bus idle level is the host's responsibility — document the required FPGA pull-down in the HDL deliverable. The real risks on this module are not electrical but mechanical/assembly: the bottom port must survive layout (hole clearance), paste, and cleaning. Nothing is bench-verified yet; every number above is a first-article target.