← AXS-029

Circuit review & bench-test guide

AXS-029 — Stereo ICS-43434 I2S microphone-pair PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-029-stereo-mics prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the implemented schematic generator (generate_design.py), the module README, the sensor-line conventions in ../README.md, and the verified Pmod-spec notes in ../../pmod-common/PMOD-SPEC-NOTES.md.

This board is a schematic-complete prototype only. 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 numeric value below is a design target derived from the schematic and the manufacturer datasheets, not a measurement from real hardware. Datasheet figures cited here were verified against the fetched TDK InvenSense ICS-43434 datasheet (DS-000069, revision 1.0); see Section 6.

1. What the board does#

Two TDK InvenSense ICS-43434 24-bit I2S MEMS microphones share one I2S bus using slot multiplexing. The host FPGA drives SCK and WS to both microphones in parallel; each microphone drives the shared SD line only during its own hard-wired stereo slot (U1: LR pin to GND, left/WS-low slot; U2: LR pin to 3V3, right/WS-high slot) and tri-states otherwise. The module is a PMOD Type 7 (I2S) plug, 3.3 V only, host-clocked. There are no jumpers: the slot assignment is fixed by copper.

The teaching goals are stereo capture, tri-stated bus sharing, interaural delay measurement, and delay-and-sum beamforming in fabric. The layout target (not yet realized) is 10 cm microphone spacing.

Functional block diagram#

PMOD host (AruviX ECP5 rev-A or any 3.3 V Digilent-compatible socket)
   |
   J1 (PMOD Type 7 plug)
   |  pin 1  WS  (LRCLK, host out) ----+---------------------+
   |  pin 4  SCK (BCLK,  host out) ----|----+----------------|----+
   |  pin 3  SD  (ADC data, mic out) <-+    |                |    |
   |            ^                      v    v                v    v
   |            R1 100R          +-----------+          +-----------+
   |            |                | U1        |          | U2        |
   |    MIC_SD -+---------+------| ICS-43434 |          | ICS-43434 |
   |            |         |      | LR = GND  |          | LR = 3V3  |
   |            R2 100k   +------| SD (tri)  |     +----| SD (tri)  |
   |            |         |      +-----------+     |    +-----------+
   |           GND        +------------------------+
   |                          shared MIC_SD net
   +-- pins 5/11 GND, pins 6/12 3V3 --> C1, C2 (100 nF at each mic)

2. Safety and scope boundaries#

3. Signal and power sequence#

  1. The host socket applies 3.3 V on J1 pins 6/12 and GND on pins 5/11. C1 and C2 provide the local decoupling the datasheet calls for (0.1 uF at the VDD pin of each microphone).
  2. With no clocks, both microphones idle; once SCK falls below roughly 200 kHz (or is stopped) the parts are in standby/sleep (datasheet sleep current 12 uA typical each). R2 holds the released SD bus at 0.
  3. The host starts SCK and WS with WS = SCK/64. Within the high-performance sample-rate window (WS 23 to 51.6 kHz) both microphones wake; output is within 1 dB of final sensitivity in at most 20 ms.
  4. Both microphones sample acoustics synchronously at the WS falling edge (datasheet "Synchronizing Microphones"), which is what makes the stereo pair phase-comparable.
  5. During the WS-low half-frame U1 drives 24-bit two's-complement data MSB-first, with the MSB delayed one SCK from the WS edge (standard I2S). SD tri-states immediately after the LSB, so U1 actively drives only SCK cycles 2-25 of its 32-cycle slot.
  6. During the WS-high half-frame U2 does the same. In the undriven tail of each slot (cycles 26-32) and whenever both mics are tri-stated, R2 (100 kOhm, exactly the datasheet-recommended bus pull-down) bleeds the line toward 0.
  7. R1 (100 Ohm) sits between the shared MIC_SD net and J1 pin 3, the sensor-line series-protection rule for every module-driven pin.

Why slot sharing works (and what would break it)#

The ICS-43434 SD pad is specified to tri-state when not actively driving its channel (t_SDD max 76 ns after the relevant SCK edge). Two outputs may therefore share one net only because their drive windows are disjoint halves of the WS frame. If both LR straps were accidentally wired to the same level, both parts would fight over the same slot: overlapping push-pull drivers, contention current on every disagreeing bit, corrupted data, and possible long-term damage. Verifying the two LR straps is therefore a first-article priority, not a formality.

4. Interfaces and pin map#

Bench contexts: either a PMOD host (AruviX ECP5 rev-A or any 3.3 V Digilent-compatible PMOD socket) driving real I2S clocks, or a bench 3.3 V current-limited supply plus DMM/oscilloscope/logic analyzer with a signal generator standing in for SCK/WS.

J1 pinNetDirectionRole
1WShost to moduleI2S word select (LRCLK), must be SCK/64
2NC-Type 7 DAC-data slot, unused on a mic-only module
3SDmodule to hostShared I2S data (ADC-data slot), via R1
4SCKhost to moduleI2S bit clock (BCLK)
5, 11GND-Ground
6, 123V3-3.3 V supply
7-10NC-Unused

Per PMOD-SPEC-NOTES.md, this is the corrected Type 7 mapping (1 = LRCLK, 3 = ADC data, 4 = BCLK); module pin 1 is the rightmost pin of the upper row viewed from the module top with the connector toward you.

There are no test points in the schematic. Until layout adds them, probe at the J1 pins, the R1/R2 junction (MIC_SD), and each microphone's LR pad.

5. Component-by-component review#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J112-pin right-angle PMOD plug (2x6, 2.54 mm)Sole power and signal interface to the hostNo functionReversed/mis-keyed insertion can put 3.3 V on signal pins; the host-side 200 Ohm series resistors and this module's R1 limit, but do not excuse, miswiring
U1TDK InvenSense ICS-43434, 24-bit I2S MEMS mic, LR = GNDLeft-slot capture; drives SD only while WS is lowNo left-channel data; left slot reads 0 through R2LR strapped high duplicates U2's slot: bus contention, corrupted data, contention current; blocked port hole kills sensitivity
U2Same part, LR = 3V3Right-slot capture; drives SD only while WS is highNo right-channel data; right slot reads 0LR strapped low duplicates U1's slot: same contention failure
R1100 Ohm 0603 (Yageo RC0603FR-07100RL)Series protection on the one module-driven line, per the sensor-line rule; damps the shared-bus edge into trace/host capacitanceMiswiring or host contention couples full drive current into the mic SD padsWrong high value slews the bus too slowly against the 85 pF datasheet load limit and the host's setup time; short merely removes protection margin
R2100 kOhm 0603 (Yageo RC0603FR-07100KL)SD bus pull-down; exactly the datasheet-recommended discharge resistor so the tri-stated bus reads 0 between and after slotsUndriven bus floats: unpredictable levels in unused cycles, phantom bits, EMI pickupToo-low value loads both mic drivers every driven bit; short to GND grounds the data line entirely
C1100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D)U1 VDD decoupling, the datasheet's required 0.1 uF at the VDD pinSupply bounce during simultaneous output edges; degraded PSR (datasheet PSR is -99 dBFS with proper decoupling)Shorted capacitor is a 3V3-GND short: board dead, possible supply damage
C2Same, at U2U2 VDD decouplingSame as C1, for U2Same as C1
#FLG01/#FLG02ERC power flagsSchematic-only artifacts that tell ERC 3V3/GND are drivenNo physical effect; nothing to assembleNot applicable

ICS-43434 key datasheet parameters (verified from DS-000069 rev 1.0)#

ParameterValueBench relevance
Supply voltage1.65 to 3.63 V (abs max 3.63 V)3.3 V PMOD rail is in range with little headroom above
Supply current, high-performance mode490 uA typ, 550 uA max eachModule target ~1 mA total; a big excess suggests contention
Sleep current12 uA typ, 20 uA max (f_S < 3.125 kHz)Expect tens of uA with clocks stopped
SCK period303 to 2500 ns (SCK roughly 0.4 to 3.3 MHz)3.072 MHz SCK / 48 kHz WS is the natural test point
Sample rate, high-performance mode23 to 51.6 kHz (low-power mode 6.25 to 18.75 kHz)WS outside the window changes mode or sleeps the part
Frame formatI2S, 64 SCK per stereo frame, 24-bit two's complement, MSB-first, MSB delayed 1 SCK from the WS edgeDefines the logic-analyzer decode settings
SD tri-stateTri-states immediately after the LSB; t_SDD max 76 ns; t_SDV max 75 ns; 100 kOhm pull-down recommended; max bus load 85 pFFoundation of the shared bus; what the contention test probes
Sensitivity-26 dBFS +/-1 dB at 94 dB SPL, 1 kHzOrdinary speech should land tens of dB below full scale
SNR / EIN / noise floor64 dBA / 30 dBA SPL / -90 dBFS (A-weighted)Silence should decode near -90 dBFS, not at 0
Acoustic overload point120 dB SPL at 10% THDLoud claps may legitimately near full scale
Wake-up timemax 20 ms to within 1 dB of final sensitivityDiscard the first ~20 ms after starting clocks
Digital levelsVIH min 0.7 VDD; SD VOH min 0.65 VDDSet logic-analyzer thresholds near 1.65 V
Standby entrySCK below roughly 200 kHzA too-slow bring-up clock silently sleeps the mics

6. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
ICS-43434Verified from the fetched DS-000069 rev 1.0 datasheet PDF (also listed on the TDK InvenSense product page): pinout (1 WS, 2 LR, 3 GND, 4 SCK, 5 VDD, 6 SD), 64 SCK/frame I2S, SD tri-state behavior, 100 kOhm pull-down recommendation, 0.1 uF decoupling requirement, and the electrical/acoustic table aboveThe schematic follows the datasheet's own stereo application: LR straps select disjoint slots, SD pins tied together, one pull-down. The generator even patches the KiCad symbol's SD pin to tri_state so ERC models the shared bus truthfully
PassivesYageo RC series resistors, Murata GRM188 capacitors (generic series data)Commodity parts; values, not vendor limits, are what matters here

Two documentation notes. First, the generator embeds the original invensense.tdk.com datasheet URL, which now redirects/403s; the fetched copy above is the same document number (DS-000069) at revision 1.0, while the generator names v1.2 — re-verify against v1.2 before release in case a limit moved. Second, the README/schematic note "SCK 0.5-3.6 MHz" is slightly wider than the rev 1.0 SCK-period limits (about 0.4-3.3 MHz); treat the datasheet numbers as authoritative until v1.2 is checked.

7. Expected values before bench testing#

Example clock plan used throughout: SCK = 3.072 MHz, WS = 48 kHz.

QuantityDesign target / calculated valueWhat to measure
3V3 rail at J1 pin 6/123.30 V nominal (mics accept 1.65-3.63 V)DMM
Module supply current, both mics running~0.98 mA typ, 1.1 mA max (2 x datasheet HP-mode figure)Bench supply readout / series DMM
Module supply current, clocks stoppedtens of uA (2 x 12-20 uA sleep)Series DMM
SCK frequency3.072 MHz (within 0.4-3.3 MHz)Scope/counter
WS frequency48.0 kHz, exactly SCK/64Scope/counter; 64 SCK per WS period
SD idle level (no slot driven)0 V via R2Scope on MIC_SD / J1 pin 3
Left-slot data positionWS-low half; MSB one SCK after WS falling edge; bits on SCK cycles 2-25 of 32Logic analyzer I2S decode
Right-slot data positionWS-high half, same internal timingLogic analyzer
Undriven slot tailCycles ~26-32 of each half: no active drive; slow decay through R2 into bus capacitanceScope, look for high-impedance signature
Quiescent output in silenceSmall codes around 0 (two's complement), roughly -90 dBFS A-weighted noise floorFPGA capture statistics
94 dB SPL, 1 kHz tone (calibrated source only)-26 dBFS +/-1 dBFPGA capture RMS
Inter-channel delay, centered source~0 us (both mics sample at the same WS falling edge)Cross-correlation in fabric/offline
Inter-channel delay, off-axis source~2.9 us per mm of path difference (1/343 m/s); max ~292 us for the full 10 cm spacing endfireCross-correlation peak position
Contention current signatureNone: supply flat across slot boundariesCurrent probe / supply monitor

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record captures with board serial, host/equipment IDs, thresholds, ambient noise conditions, and operator.

A. Unpowered inspection and resistance tests#

  1. Complete the Section 8 checklist under magnification.
  2. Measure 3V3-to-GND resistance in both meter polarities; investigate any hard short before power.
  3. Measure J1 pin 3 to GND: expect about 100.1 kOhm (R1 + R2). Grossly low readings suggest a solder bridge on the SD net.
  4. Verify the two LR straps one more time with the board in hand.

B. First power, no clocks (bench supply context)#

  1. Feed 3.3 V from a current-limited bench supply (set the limit to about 20 mA) into J1 pins 6/12 vs 5/11.
  2. Expect only tens of uA once settled (both mics asleep without clocks). Milliamps at this stage means a fault; stop and inspect.
  3. Confirm SD sits at 0 V.

C. Clock bring-up and framing capture (PMOD host or generator)#

  1. Attach to the PMOD host (AruviX ECP5 rev-A or any 3.3 V Digilent-compatible socket). Configure the fabric to output SCK = 3.072 MHz and WS = SCK/64 = 48 kHz, receive-only on SD.
  2. Confirm supply current rises to roughly 1 mA and wait 20 ms (wake-up) before trusting data.
  3. Scope SCK and WS: check frequency, the exact /64 ratio, and clean monotonic edges at the module (the mics tolerate 40-60% SCK duty and need rise/fall under 25 ns per the datasheet).
  4. Logic-analyzer capture of SCK/WS/SD, threshold ~1.65 V, I2S decode: 24-bit words, MSB one SCK after each WS edge, 32 SCK per slot, 64 per stereo frame. Verify data changes on SCK falling and is stable on SCK rising (host sampling edge).

D. L/R slot verification and SD bus-sharing checks#

  1. Slot ownership. Firmly cover (or gently rub a fingertip over the board area above) U1's port while playing ambient sound. The WS-low (left) words should collapse toward the noise floor while WS-high (right) words stay live. Repeat with U2 covered and confirm the mirror result. Tapping very near one mic gives the same discrimination with a sharper signature. This proves U1 owns left and U2 owns right, i.e. the LR straps match the design intent.
  2. Tri-state behavior. Scope SD during the tail cycles (26-32) of each half-frame: the line must show a released, slowly-decaying level toward 0 through R2, not an actively driven value. With one mic's slot silent (port covered, data near zero) its slot bits still show active drive of near-zero codes during cycles 2-25 - that is correct; only the tail is released.
  3. Bus contention screen. Watch supply current and the SD waveform across both WS edges. Contention shows up as current spikes aligned with slot boundaries, mushy intermediate voltage levels on SD (neither VOL nor VOH), or excessive heating of either mic. Any of these is a stop-and-fix: recheck the LR straps first.
  4. Confirm both slots idle to 0 within a few tail cycles; if the decay through 100 kOhm is too slow for the host's decode of the next slot's leading zero, note it - the datasheet sanctions dropping the pull-down to 10 kOhm.

E. Stereo phase and interaural-delay test (one source)#

  1. Place a single small sound source (phone speaker playing a 1 kHz tone, or a repeated sharp click) on the perpendicular bisector of the two microphones, equidistant from both. Capture simultaneous L/R sample streams in fabric.
  2. Cross-correlate L against R (an FPGA cross-correlation exercise: a few-hundred-tap sliding dot product, or export the FIFO and correlate offline). Expected peak at lag 0: both mics sample on the same WS falling edge, so an equidistant source gives in-phase channels.
  3. Move the source well off-axis toward one microphone. The correlation peak must shift by the acoustic path difference at roughly 2.9 us per mm (speed of sound 343 m/s); with the intended 10 cm spacing the endfire maximum is about 292 us, i.e. about 14 samples at 48 kHz.
  4. Check the sign convention: source nearer U1 means the left channel leads. Record lag vs angle at a few positions; this is the calibration table a delay-and-sum beamformer demo will reuse.
  5. Note the resolution limit honestly: at 48 kHz one sample is ~21 us, or about 7 mm of path difference, so fine angles need interpolated correlation or a higher sample rate (up to 51.6 kHz in HP mode).

F. Acoustic sanity and endurance (release-track, not first-power)#

  1. In a quiet room, record noise-floor statistics and compare against the -90 dBFS A-weighted target (unweighted bench numbers will read higher; log the difference rather than fail on it).
  2. If a calibrated 94 dB SPL source is available, verify -26 dBFS +/-1 dB sensitivity per channel; otherwise record relative L/R gain match only.
  3. Soak with clocks running for an extended period, monitoring current; also verify clean recovery through stop-clocks/sleep/restart cycles.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No SD activity at all3V3 at mic pins, SCK/WS present at mic pins, WS = SCK/64 exactlyHost clocking, J1 soldering, wrong WS ratio (mics sleep), SCK below standby threshold
Only one slot has dataCovered-port test both ways, LR strap continuityOne dead/unsoldered mic, one blocked port, LR strap open
Both slots carry the same signalLR straps, correlation of L vs RBoth LR pads wired to the same rail; contention likely - power down promptly
Intermediate/mushy SD levels, current spikes at WS edgesScope SD at slot boundaries, supply currentBus contention (LR duplication) or a solder bridge from SD to WS/SCK
Data decodes shifted by one bitMSB position vs WS edgeAnalyzer set to left-justified instead of I2S (MSB must lag WS edge by one SCK)
Random bits in the slot tailScope tail cycles, R2 presenceR2 open (floating bus); reduce to 10 kOhm if decay is genuinely too slow
Silence decodes far above the noise floorSupply ripple, C1/C2 placementMissing/far decoupling, supply noise (PSR), mechanical vibration coupling
Cross-correlation peak not at 0 when centeredSource geometry, sample alignment in fabricOff-center source, FIFO channel misalignment (off-by-one WS), swapped channels
Excess current with clocks stoppedCurrent at pins, SCK/WS idle levelsClocks left toggling below spec (standby not entered), leakage path, damaged mic

11. Bench record template#

FieldRecord
Board revision / serial
Assembly notes (ports inspected, reflow profile)
Host / generator, analyzer, scope IDs and thresholds
Ambient acoustic conditions
Unpowered resistance results (3V3-GND, pin3-GND)
LR strap continuity result (U1 to GND, U2 to 3V3)
Sleep and running supply currents
SCK/WS frequencies and ratio
Framing capture reference (file/path)
Slot-ownership result (cover U1 / cover U2)
Tri-state and contention screen result
Centered-source correlation lag
Off-axis lag table (position vs us)
Noise-floor / sensitivity notes
Deviations, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The design is a faithful implementation of the ICS-43434 datasheet's own stereo application circuit: disjoint hard-wired LR slots, tied SD pins, the recommended 100 kOhm pull-down, the required per-mic 0.1 uF decoupling, and the sensor-line 100 Ohm series rule on the one module-driven pin. The ERC-level modeling is unusually honest (the SD pin was re-typed to tri-state so the shared bus is checked, not waived). The principal risks are all downstream of the schematic: the unstarted layout (10 cm spacing, port keep-outs, decoupling placement, bus stub lengths against the 85 pF load limit), assembly quality around the acoustic ports, first-article LR strap verification, and re-verification of clock limits against datasheet v1.2. Until a fabricated board passes Sections 9.A-9.E, every number here remains a target.