Circuit review & bench-test guide
AXS-027 — SPH0641LU4H-1 PDM microphone PMOD module
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.3 V only, from a PMOD host socket or a bench 3.3 V supply with the current limit at or below 20 mA. Expected draw is under 1 mA.
- The mic is a bottom-port MEMS device: never poke, vacuum, blow compressed air into, or wash over the port hole (datasheet handling rules). Board wash after reflow is prohibited for the assembled module.
- CLK is the only host-driven line. DATA is module-driven through R1; do not configure the host DATA pin as an output.
- Do not drive CLK while VDD is absent, and observe the mode map: the datasheet forbids powering up into ultrasonic mode and waking from sleep directly into ultrasonic mode. Bring the mic up in standard mode (1.024–2.475 MHz) first.
- The datasheet clock rise/fall spec (t_EDGE) is 3 ns max — drive CLK from a proper 3.3 V CMOS output (FPGA pin), not a slow-edged function generator through long leads.
- A working audio capture is not an acoustic calibration and no EMC/ESD/environmental claim follows from it.
3. Power and signal path#
- 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).
- At power-up with no clock the mic idles; DATA is high-impedance. The datasheet allows up to 50 ms power-up time.
- 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.
- 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.
- R1 (100 Ω) is series protection on the mic-driven DATA line, per the sensor-line rule for module-driven pins.
- 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 pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | DATA | NC | CLK | NC | GND | 3V3 | NC | NC | NC | NC | GND | 3V3 |
| 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 |
SEL | JP1 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 summary | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| U1 | Knowles 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 output | The entire sensor: MEMS element, input buffer, and sigma-delta modulator producing the 1-bit stream | No DATA activity at all | Rotated 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 |
| R1 | 100 Ω | Series protection on the mic-driven DATA line (line rule); also damps the edge into host trace capacitance | DATA open — host sees a floating line | Short only removes miswiring protection; a much larger value would slow edges into the datasheet's 140 pF max load budget |
| C1 | 100 nF X7R | Mic 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 performance | A shorted C1 is a rail short — board draws limit current |
| JP1 | 3-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 line | Open strap leaves SELECT on the weak internal pull-down — works by accident, violates the "should not be left floating" datasheet note | Both sides bridged shorts 3V3 to GND through the jumper — inspect before power |
| J1 | 12-pin right-angle PMOD plug 2x6 | Host interface, 3.3 V only | No power/clock | Mis-keyed insertion swaps power and signals; verify pin-1 orientation before first power |
| #FLG01/02 | power flags | ERC bookkeeping only, no physical part | n/a | n/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 typ | 3.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 MHz | The 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 ns | JP1 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 ns | The 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% typ | Sets 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 pF | Logic thresholds for CLK drive and DATA capture |
| Power-up <= 50 ms; wake-up <= 15 ms; fall-asleep <= 10 ms; mode change <= 10 ms | Allow 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 mode | The 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.
| Quantity | Design target / calculated value | Where to measure |
|---|---|---|
| Supply current, CLK stopped (sleep after <=10 ms) | about 80 uA | Bench supply / uA meter |
| Supply current at 2.4 MHz CLK | 620 uA typ, 700 uA max | Bench supply |
| CLK levels at J1 pin 3 | V_IH >= 2.31 V, V_IL <= 0.99 V, duty 40–60%, edges <= 3 ns | Scope |
| DATA drive window (SELECT = GND) | valid 18–40 ns after CLK falling; Hi-Z 3–16 ns after CLK rising | Scope, 2-channel, >= 200 MHz |
| DATA logic levels | V_OH >= 2.85 V at 2 mA, V_OL <= 0.45 V | Scope |
| Ones-density in silence | about 50% (DC output spec 0 %FS) | Logic analyzer bit statistics |
| CIC output rate, R = 64 at 2.4 MHz | 37.5 kHz | Fabric counter / debug output |
| CIC output rate, R = 64 at 2.048 MHz | 32.0 kHz | same |
| CIC output rate, R = 64 at 1.024 MHz | 16.0 kHz | same |
| Silence DC level after CIC | approximately mid-scale (signed zero) with small residual offset | Fabric debug / UART dump |
| 1 kHz whistle at normal effort, 30 cm | clearly 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#
- Verify U1 LGA-5 orientation (pin 1 = DATA; the datasheet marking diagram shows pin 1 adjacent to the port) and that the PCB port hole aligns with the package port and is kept clear of paste, pour, and soldermask web (layout item — the recommended land pattern is in the datasheet).
- Confirm JP1 is bridged 1-2 (SELECT = GND) and not double-bridged.
- Confirm C1 is placed immediately at U1 VDD (layout item) and is X7R.
- Measure R1 = 100 Ω in circuit.
- Confirm no board wash / no ultrasonic cleaning is specified in the assembly notes for this module.
- Verify J1 pin-1 orientation against PMOD-SPEC-NOTES.
- Fix the "1–3.2 MHz" text in
generate_design.pyand README to the datasheet's 1.024–2.475 MHz standard-mode range (finding, section 6).
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#
- Complete the checklist in section 8.
- Measure 3V3-to-GND resistance both polarities; investigate a hard short.
- 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#
- Apply 3.3 V, current limit 20 mA. Wait 100 ms (power-up spec is 50 ms).
- 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.
- 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)#
- 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).
- Scope CLK at J1 pin 3: confirm levels (>= 2.31 V high, <= 0.99 V low), duty inside 40–60%, and clean fast edges.
- 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.
- 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.
- 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.
- 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.
- 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).
- 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).
- 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.
- 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.
- 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)#
- 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%.
- 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%.
- Confirm supply current rises toward the 845 uA typical ultrasonic figure.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| Supply current in the mA range | thermal/visual, C1, JP1 | C1 short, JP1 double-bridge, U1 damaged/rotated |
| No DATA activity with valid CLK | CLK at U1 pad, mode check | CLK below 1.024 MHz or in a spec gap, open CLK trace, U1 dead, R1 open |
| DATA changes on the wrong edge | JP1 strap, SEL voltage | JP1 bridged 2-3 instead of 1-2 |
| Density stuck at 0% or 100% | MIC_DATA vs DATA both sides of R1 | DATA shorted to a rail, port blocked (mechanical), U1 damaged |
| Density about 50% but no whistle response | port hole inspection | Port blocked by paste/pour/label — the classic bottom-port assembly failure |
| Garbage during clock-high half | host pull configuration | Expected Hi-Z float — enable a host pull-down or ignore that half-cycle |
| Works at 1.024 MHz, dies above 2 MHz | CLK edges/duty at J1 pin 3 | Slow clock edges (t_EDGE > 3 ns), duty outside 40–60%, marginal wiring |
| Wrong decimated rate | fabric clock accounting | CIC decimation factor mismatch, dropped samples in the core |
| Loud tonal artifact in decimated audio | CLK jitter source | Clock from a fabric PLL with spread/jitter; use a clean divided clock |
| Dead after board rework/cleaning | none — inspect | Ultrasonic cleaning or wash destroyed the MEMS (forbidden) |
11. Bench record template#
| Field | Record |
|---|---|
| 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.