123 Main Street, New York, NY 10001

Haptics + Audio Sync Module (LRA/ERM, BLE/USB Sync)

← Back to: Audio & Wearables

Core idea: Audio–haptic sync is not “magic timing”—it is an engineering fight against three enemies: clock drift, scheduling jitter, and power droop. Control them with a stable timebase, timestamped lookahead + local timer execution, and clean rails, and the module becomes measurable, calibratable, and repeatable in the field.

H2-1. Module Definition & Boundary: What “Audio–Haptic Sync” Means (and what it does NOT)

Audio–haptic sync is an engineering problem: align an audio event to a haptic actuation and quantify the error with latency, jitter, and a calibratable offset.

Latency = time from an audio marker (event) to a defined haptic execution point.
Jitter = run-to-run spread of that latency under the same conditions (the “random part”).
Offset = a stable, repeatable bias between audio and haptic timing (the “fixed part” that can be calibrated).

A practical sync definition requires explicit reference points: the audio side must expose an event marker (frame boundary / sample counter / timestamp), and the haptic side must define what “happened” means. Two common haptic reference points are:

  • Driver-level execution point: driver output begins (enable-to-drive, or “energy injection start”).
  • Actuator-level start: mechanical response becomes measurable (often slower and more variable, especially for ERM).

For deterministic system behavior, it is usually safer to control and validate against the driver-level point first (because it is electrical and timestampable), then optionally correlate it to mechanical onset during characterization.

Example target audio→haptic error: < 10–20 ms Example target jitter: < 1–2 ms Interpretation offset is calibratable, jitter is not

Boundary (locked): This page focuses on timing anchors, timestamped triggering, deterministic execution on the module, and evidence-based validation. It does not cover the full audio decode chain, full product UX, or OS/driver tutorials.

F1 — Measuring Latency, Jitter, and Offset Three aligned timelines with marked reference points and arrows indicating latency, jitter spread, and calibratable offset. F1 — Define Sync by What Can Be Measured Latency = fixed distance • Jitter = spread • Offset = calibratable bias Audio Event Transport Haptic Actuation Audio marker (t0) Frame / packet boundary Haptic “execution point” (driver output start) Latency Jitter (spread) Offset (calibratable) Rule of thumb: reduce jitter first (determinism), then calibrate offset (bias), then optimize absolute latency.
Figure F1. “Sync” becomes actionable only after fixing reference points and separating fixed bias (offset) from randomness (jitter).
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F1, accessed 2026-01-22.

H2-2. System Architecture: Timing Anchors (Audio Clock, USB SOF, BLE Events)

Reliable audio–haptic sync is built on a shared timing anchor. The primary goal is not “minimum delay,” but consistent alignment to the same timebase. Fixed offset can be calibrated; random jitter cannot.

Hardware timing anchor (module-local): MCU timer capture/compare + GPIO marker.
Link timing anchor (cross-device): USB SOF (1 kHz) or BLE connection/ISO events.
Audio-frame anchor (content marker): frame boundary / sample counter as a timestampable “event index.”

Each anchor answers a different question and should be chosen deliberately:

  • Hardware anchor proves deterministic execution on the module (best place to define the haptic “execution point”).
  • Link anchor creates a shared cadence across devices (useful for timestamped scheduling and drift control).
  • Audio-frame anchor turns “sound happened” into a stable, indexable event (frame/sample counter) without requiring audio algorithm details.

A robust architecture typically uses two layers: (1) align the module to a link cadence (USB SOF or BLE events), and (2) schedule haptic execution using a module-local hardware timer. This converts transport variability into a manageable offset + bounded jitter.

Need repeatable clicks? module timer compare + pre-scheduled queue Need cross-device alignment? SOF / BLE event as cadence Need content-locked timing? frame/sample counter markers

Evidence-first rule: every latency/jitter claim should map to timestamp taps (host event marker, link cadence marker, module timer marker, driver output marker). If taps disagree, the sync budget is not observable yet.

F2 — Architecture and Timing Anchors Host to module flow over USB/BLE with timebase blocks (XO/RTC/PLL/timer), timestamp flow, and measurement taps at key points. F2 — Timing Anchors and Timestamp Flow Use a shared cadence (USB SOF / BLE events) + deterministic module timer execution Host / Source Audio event marker Frame / sample counter USB / BLE Cadence anchor Delivery variability Module MCU Timestamp queue + lookahead Timer compare / capture GPIO marker (tap) Haptic Driver LRA / ERM output Execution point (tap) LRA or ERM Timebase Blocks XO PLL RTC Timer Cadence anchor: SOF / BLE event event timestamp cadence marker timer compare Tap: audio marker Tap: SOF / BLE event Tap: GPIO marker Tap: driver out Architecture rule: schedule in advance, execute on a local timer, and validate with timestamp taps at every boundary.
Figure F2. A sync module becomes debuggable when timing anchors and taps are explicit: shared cadence (SOF/BLE) for alignment, module timer for deterministic execution, and driver output for the haptic execution point.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F2, accessed 2026-01-22.

H2-3. Actuators 101 (Only What Matters for Sync): LRA vs ERM Latency & Variability

Two modules can trigger at the same timestamp yet “feel” misaligned because the actuator adds a mechanical start delay that is voltage-, temperature-, and load-dependent. Sync becomes controllable only after separating the electrical execution point from the mechanical onset.

Two-layer reference: define sync at the driver execution point first (timestampable and repeatable), then characterize the mechanical delay to understand what the user feels.

From a sync perspective, ERM and LRA behave differently because their “start” is dominated by different physics:

  • ERM (eccentric rotating mass) — high inertia, slower spin-up/spin-down. It is effective for sustained “buzz,” but short “click” sensations vary because the rotor needs time to build speed. Sync error often appears as mechanical spin-up delay with a wide spread.
  • LRA (linear resonant actuator) — resonance-based motion suited for crisp, short “click” waveforms. However, it is sensitive to resonant frequency, drive waveform, and phase. Temperature drift and assembly tolerances shift resonance and damping, changing the time to reach a stable motion.

A practical definition of “when haptics happened” depends on the problem being solved: the driver output start is the best anchor to minimize jitter, while “felt onset” can be derived by correlating the driver output to a simple observation channel during characterization (without turning the design into a sensor project).

Must-have GPIO marker + driver output Optional near-field mic or small accelerometer Goal quantify mechanical delay distribution

Debugging rule: if “sync jitter” disappears when measuring at the driver output (but remains at the mechanical onset), the primary error source is actuator physics or driver waveform/lock behavior, not BLE/USB scheduling.

F3 — LRA vs ERM: Start-Time Variability Comes from Mechanical Delay Side-by-side ERM and LRA blocks with simplified waveforms from trigger to driver output to mechanical response, highlighting mechanical delay and variability. F3 — ERM vs LRA: What “Start” Means for Sync Define sync at driver execution, then characterize mechanical delay ERM spin-up dominated LRA resonance/phase dominated Trigger Driver output Mechanical response slow ramp-up; wide spread Timing sketch time driver mechanical mechanical delay Trigger Driver output Mechanical response builds to resonance; phase matters Timing sketch time driver mechanical mechanical delay Practical workflow: anchor sync at driver output → quantify mechanical delay distribution → budget remaining jitter for transport + firmware.
Figure F3. ERM “start” is dominated by inertia (spin-up), while LRA “start” depends on resonance/phase behavior. Separate driver execution timing from mechanical onset to avoid misattributing actuator variability to link jitter.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F3, accessed 2026-01-22.

H2-4. Driver Topologies & Waveform Shaping: What Determines Start-Time Repeatability

Start-time repeatability is usually determined less by the transport link and more by the power readiness and driver pipeline: when energy becomes available, how quickly it ramps, and whether closed-loop logic adds state-dependent delay.

Repeatability stack: (1) supply/boost readiness → (2) enable-to-drive pipeline → (3) waveform ramp/slew → (4) optional closed-loop detect/lock.

LRA drivers often support both open-loop and closed-loop operation:

  • Open-loop executes a predefined waveform immediately, making the electrical start more predictable. The trade-off is sensitivity to resonant frequency drift, which can change the mechanical onset/strength.
  • Closed-loop (back-EMF sensing / auto-resonance) improves consistency of motion by tracking resonance, but it may introduce a detect/lock state machine whose duration depends on initial conditions (temperature, battery voltage, previous actuation, damping).

ERM drivers typically emphasize robustness and protection. The chosen control mode affects how “instant” the actuation looks:

  • PWM / constant-voltage can start quickly at high VBAT but slows noticeably as VBAT drops.
  • Current limiting stabilizes stress and improves safety margins, but increases spin-up time and spreads perceived onset.

Three hardware details most often decide whether a timestamped trigger produces a repeatable execution point:

  • Drive ramp / slew: slow ramps delay energy injection; aggressive ramps reduce delay but can increase rail disturbance.
  • Boost pre-charge: without pre-charge, first actuation often has extra delay and a larger rail dip (“first click is late”).
  • Enable-to-drive pipeline: driver internal steps (mode set → safety checks → lock → drive) can add fixed and variable latency.

Measurement hint: capture VBAT/boost rail and driver output together. If “late haptics” correlates with rail dip, pre-charge and ramp strategy dominate. If rail is stable but delay varies, closed-loop lock/pipeline dominates.

F4 — Power + Driver Pipeline: Where Start-Time Variability is Born VBAT to PMIC/boost to driver to LRA/ERM. Boost includes pre-charge and current spike. Driver includes state machine (IDLE, PREP, DETECT, LOCK, DRIVE) and execution point tap. F4 — Supply Readiness + Driver State Machine Define “Start Time” Pre-charge, ramp/slew, and closed-loop lock can add fixed + variable latency VBAT Li-ion PMIC / Boost charge pump / boost rail readiness pre-charge cap current spike Haptic Driver waveform + protections open-loop / closed-loop state machine IDLE PREP DETECT LOCK DRIVE variable lock / pipeline time Actuator LRA or ERM mechanical onset Tap: driver execution point Waveform shaping knobs ramp / slew boost pre-charge late first actuation without pre-charge Design for determinism: keep rails ready, minimize pipeline variability, and treat closed-loop lock time as part of the sync budget.
Figure F4. Start-time repeatability is dominated by supply readiness (pre-charge), waveform ramp/slew, and the driver’s enable-to-drive pipeline. Closed-loop LRA modes add lock/state behavior that can be stable but state-dependent.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F4, accessed 2026-01-22.

H2-5. Sync Strategy #1: Timestamped Trigger (Host Event → Module Playback Time)

The cleanest way to minimize jitter is to convert “sync” into a scheduling contract: the host sends an event with a future target time, and the module executes at a local hardware timer-compare point (GPIO marker → driver enable). Link arrival jitter becomes harmless if it is absorbed by lookahead.

Minimal contract: event_id (traceability) + anchor (USB SOF / BLE event) + t_target (future time). Practical additions: ttl (drop if late) and profile_id (waveform selection).

A deterministic module pipeline keeps the “execution point” stable even when packets arrive with variable delay:

  • Receive: parse (event_id, anchor, t_target, ttl, profile_id).
  • Validate: reject too-close targets (insufficient lookahead) or expired events (ttl).
  • Queue: place into a time-ordered queue (earliest target first).
  • Arm: convert target time into local timer ticks and arm timer compare.
  • Trigger: at compare, toggle a GPIO marker and assert driver enable (execution point).

Three tactics reduce jitter without requiring any audio decoding or UX logic:

  • Lookahead: enforce a minimum lead time so arrival jitter is absorbed before execution. Late arrivals are either dropped (ttl) or moved to the next safe slot (policy-defined).
  • Local hard trigger: the timer compare ISR is kept minimal (marker + enable) to avoid software scheduling jitter.
  • Double-buffer: one slot drives the current event while the next event is preloaded, preventing register/memory contention.
Prove marker vs target alignment Watch late/expired event counters Correlate enable timing vs driver/power readiness

Jitter budgeting inside this strategy is explicit: link arrival variation is handled by lookahead; remaining jitter usually comes from ISR contention (firmware) or enable-to-drive variability (driver pipeline / supply readiness).

F5 — Timestamped Trigger: Host Sends Future Target Time, Module Executes on Timer Compare SOF/BLE ticks as the time scale. Host transmits event_id and target_time. Module receives, queues, arms timer compare. GPIO marker and driver enable align to target time. Lookahead absorbs arrival jitter; double-buffer prevents contention. F5 — Sync Strategy #1: Timestamped Trigger Lookahead + timer compare → stable execution point (GPIO marker → driver enable) Anchor ticks (USB SOF / BLE events) Host Module RX / Queue MCU timer compare GPIO marker / driver enable time t_target TX: event_id + t_target TX (same target) RX (arrival A) RX (arrival B) lookahead window queue / reorder arm timer_compare compare fires double-buffer A B preload next execution point (stable) GPIO marker / driver enable Arrival jitter is absorbed by lookahead; remaining variability is dominated by firmware contention or driver/power pipeline.
Figure F5. Timestamped trigger strategy: the host transmits an event with a future target time referenced to a known cadence (SOF/BLE events). The module queues and executes on hardware timer compare, producing a stable GPIO marker/driver enable edge.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F5, accessed 2026-01-22.

H2-6. Sync Strategy #2: Phase-Locked Scheduling (Align to Audio Frames / Samples)

Some use cases require haptics to align to the content phase (frame/sample boundaries or beat markers), not just a wall-clock time. The module does not need the full audio stream—only a frame_counter / sample_counter marker that can be mapped into local timer ticks.

Phase-locked concept: host provides frame_counter + marker → module maintains a frame→ticks mapping (slope + offset) → drift is tracked by residual error → periodic re-sync keeps phase alignment.

A practical phase-locked workflow is built from three parts:

  • Marker definition: the host sends frame_counter (or sample counter) plus a marker type (frame boundary / beat marker / transient marker).
  • Linear mapping: the module maintains a mapping from counter-space to timer-space: slope (ticks per frame) and offset (counter origin alignment). This provides a deterministic timer target for future markers.
  • Drift + re-sync: host and module clocks drift over time. The module monitors residual error and performs soft re-sync (small offset trims) and hard re-sync (re-anchor when errors exceed a threshold or counters become discontinuous).
Use short click + sound transient Use beat / rhythm feedback Use interactive cues needing phase consistency

Validation focus: log (frame_counter, predicted_ticks, actual_ticks_at_marker) and track residual drift. Frequent hard re-sync often indicates counter discontinuities or unstable cadence; stable systems rely mostly on soft re-sync.

F6 — Phase-Locked Scheduling: Frame Counter ↔ Timer Ticks Mapping with Drift and Re-Sync Graph-like diagram: x-axis frame_counter, y-axis timer ticks. Ideal linear mapping line and actual drifted line. Re-sync points adjust offset. Residual error box shows drift and correction. F6 — Sync Strategy #2: Frame/Sample Phase Alignment Maintain a frame→ticks mapping, monitor drift, apply soft/hard re-sync frame_counter timer ticks ideal mapping actual (drift) drift re-sync re-sync re-sync Mapping model ticks ≈ slope·counter + offset slope ticks per frame offset anchor alignment Residual error observed − predicted soft re-sync trims offset; hard re-sync re-anchors Phase alignment is maintained by tracking drift in residuals and applying controlled re-sync to keep counter-space and timer-space consistent.
Figure F6. Phase-locked scheduling uses frame/sample counters as a phase reference and maintains a frame→ticks mapping (slope + offset). Drift is observed as residual error and corrected via soft/hard re-sync events.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F6, accessed 2026-01-22.

H2-7. BLE/USB Bridging Details (Only for Timing): Where Jitter Comes From

“Wireless is unstable” is not actionable. Timing jitter becomes actionable only after it is split into measurable segments with explicit timestamp taps. This chapter focuses strictly on timing: discrete BLE scheduling, USB SOF timebase vs host delivery jitter, and how to instrument each segment.

Key principle: absorb delivery variability with lookahead, then execute on a local timer compare. This converts transport jitter into early-arrival slack instead of execution-time noise.

BLE timing (discrete event grid): connection/ISO intervals form a discrete schedule. Even when average latency is small, deliveries can jump between events (“event slip”) due to retransmission, congestion, or slot contention.

  • What causes jitter: event quantization (interval grid), retransmission shifting delivery to later events, congestion/overlap causing event slip.
  • What reduces jitter: send earlier (lookahead) and schedule execution using local timer compare; late arrivals are dropped or moved by policy.
  • What to log: arrival event index vs target event index; “late” counters and slip distribution.

USB timing (stable SOF, unstable delivery): SOF provides a stable cadence, but the host software stack can introduce variable delivery timing (driver scheduling, buffering, system load). SOF stability alone does not guarantee stable event delivery to the module.

  • What causes jitter: host-side scheduling variance and buffering before the payload reaches the endpoint and user-space handler.
  • What reduces jitter: anchor target times to SOF-derived timing and execute via module timer compare; do not “execute on arrival.”
  • What to log: SOF index when message is produced vs SOF index when it is delivered; arrival-to-target slack.

The most useful output is a jitter attribution table (each segment has a tap, metric, and minimal fix action):

Segment Timestamp tap What to compute Typical causes Minimal fix
A Host stack TS0: event created / sent TS0→TS1 variability (host delivery jitter) thread scheduling, buffering, load lookahead, SOF/event anchoring
B Transport TS1: delivered to endpoint / RX event index slip; arrival quantization retransmit, congestion, slot contention lookahead, drop/shift policy
C Module entry TS2: RX ISR entry; TS3: queued TS2→TS3 queue latency distribution ISR contention, parsing in critical path short ISR, pre-parse, priority
D Execution TS4: compare fire; TS5: marker/enable edge TS4→TS5 execution jitter (should be tight) DVFS/flash stalls, wake latency, driver pipeline timer compare, DMA/trigger, locked window

A minimal, high-signal tap set is TS2/TS4/TS5 (module-side). TS0/TS1 improves blame isolation when host/transport behavior is suspect.

F7 — BLE/USB Bridging: Where Jitter Comes From (Measurable Timestamp Taps) Host stack flows into two transport branches: USB with SOF ticks and BLE with event grid. Both feed module RX ISR then queue/scheduler then timer compare and execution edge. Timestamp taps TS0-TS5 are placed at each segment boundary. F7 — BLE/USB Bridging: Jitter Attribution by Segment Decompose the chain and add timestamp taps (TS0…TS5) to make jitter measurable Host stack app / driver / scheduler event_id + t_target TS0 USB transport SOF cadence (1 kHz) delivery jitter can still occur above SOF BLE transport connection/ISO events event slip: delivery shifts to later events Module RX ISR timestamp + validate TS1 TS2 Queue / reorder lookahead, ttl policy TS3 Timer compare hardware execution point TS4 Execution marker + enable TS5 Segment B (USB) Segment B (BLE) Segment A Segment C Segment D Each TS tap enables per-segment jitter metrics; lookahead + timer compare isolates execution from delivery variance.
Figure F7. Link decomposition for timing-only jitter analysis: Host stack → transport (USB SOF or BLE events) → module RX/queue → timer compare → execution edge. Timestamp taps TS0…TS5 make each segment measurable and attributable.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F7, accessed 2026-01-22.

H2-8. Firmware Timing Pipeline: Low-Power Without Losing Determinism

Low-power modes often degrade synchronization because they inject non-deterministic wake and execution delays. The fix is not “avoid sleep,” but to separate responsibilities into: keeping time, waking deterministically, and executing deterministically.

Three-layer model: Keeping time (RTC/LP timer keeps a continuous timebase) → Deterministic wake (compare interrupt / hardware wake source with budget) → Deterministic execute (short ISR + precomputed waveform + DMA/trigger).

Common pitfalls that inflate jitter (and where they hurt):

  • Tickless idle: wake/scheduling points become variable; compare ISR may be delayed by deferred work.
  • DVFS / dynamic clock: ISR execution time varies; critical window shifts if frequency changes near compare.
  • Power-domain wake latency: oscillator/startup/regulator ramp adds a wide distribution of wake delays.
  • Flash wait-state / cache state: first instruction fetch after wake can vary; stalls appear as edge jitter.

A deterministic pipeline moves variability out of the execution path:

  • Short compare ISR: do only marker + DMA start / driver trigger; avoid parsing, logging formatting, or table generation inside ISR.
  • Precompute: prepare waveform tables (or register write sequences) during lookahead time; keep them in ready buffers.
  • DMA/trigger: use DMA to push a waveform/register burst into the driver interface, avoiding CPU micro-jitter.
  • Lock the critical window: freeze clock changes and prevent deep-sleep entry in a small window before compare fires.
Measure TS4→TS5 distribution Track wake-to-compare slack Count missed/late compares

If TS4→TS5 is wide, the execution path is not deterministic (ISR contention, DVFS, flash stalls). If events are missed, the wake budget is insufficient (deep sleep entry too close to compare).

F8 — Firmware Timing Pipeline: Low Power with Deterministic Execution Block diagram highlighting a deterministic path: event queue to timer compare to DMA waveform table to driver interface. Separate blocks show keeping time and power manager wake sources. Timestamp taps align with TS2/TS3/TS4/TS5. F8 — Firmware Timing: Deterministic Path Under Low Power Separate keeping time / deterministic wake / deterministic execute Timebase RTC / LP timer Power manager sleep states wakeup sources deterministic wake RX ISR timestamp + validate TS2 Event queue time-ordered lookahead window TS3 Scheduler policy / reorder non-critical work Timer compare short ISR only marker + DMA start TS4 DMA waveform table precomputed sequence A B next preload Driver interface SPI/I2C/GPIO trigger enable edge TS5 arm compare DMA start burst writes deterministic path queue → compare → DMA → driver enable Keep time continuously, wake with a budget, and execute via short ISR + precomputed DMA to preserve determinism under low power.
Figure F8. Firmware timing pipeline that preserves determinism in low-power operation by separating timebase retention, deterministic wake, and deterministic execution (short ISR + precomputed DMA into the driver interface).
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F8, accessed 2026-01-22.

H2-9. Power Integrity & Noise Coupling: When Sync Looks Bad but It’s Actually Brownout / Rail Sag

A module can appear to have “random delay” or “missed haptic hits” even when transport and firmware timing are correct. The most common reason is power integrity: the haptic transient current pulls down VBAT/BOOST, triggering clock disturbance, protection behavior, or driver derating. The goal here is simple: separate timing issues from power issues using two waveforms—and preferably four.

Rule of thumb: if a rail sag correlates with a marker slip or missing drive energy, the problem is power-domain behavior, not transport jitter.

How power problems impersonate bad sync (three practical paths):

  • Path A — MCU timing disturbed: VBAT/rail sag widens wake/ISR latency or causes reset → marker edges drift or disappear.
  • Path B — Driver energy delayed: marker is on-time, but BOOST/driver rail hits limit/UVLO → actual drive output arrives late or shrinks.
  • Path C — Protection causes “missed hits”: UVLO/OCP/thermal recovery creates gaps → looks like random misses.

Scope SOP (2–4 channels) — a fast “one-shot” proof

Recommended channels:

  • CH1: VBAT (module input / battery)
  • CH2: BOOST or driver rail (the rail that feeds the haptic driver)
  • CH3: GPIO marker (timer-compare / execution marker)
  • CH4: Driver output (EN edge, H-bridge output proxy, or a dedicated “drive-start” pin)

Trigger: GPIO marker rising edge. Window: ~20–50 ms before and after the edge to see sag + recovery.

Judgment criteria (use this to avoid mis-blame):

  • Marker slips + rail sag at the same time → suspect wake/clock/power-domain behavior first.
  • Marker stable but driver output delayed or reduced while BOOST sags → suspect driver derating / UVLO / current limit.
  • Rails stable, marker stable, driver output stable → move blame back to timing chain (H2-7/H2-8) or actuator/driver behavior (H2-3/H2-4).

Design checklist (module-level, directly tied to repeatable start-time):

  • Input capacitance & path: reduce VBAT droop and its slope; keep high pulse current off the “quiet” supply segment.
  • Soft-start & precharge: avoid “first-hit” collapse that causes a late or missing actuation.
  • Current limit & UVLO thresholds: too tight → delayed energy injection; too high UVLO → frequent drop/recover cycles.
  • Return path control: keep the high di/dt loop short; do not share critical ground segments with MCU/timebase reference.
Proof VBAT/BOOST sag aligns with slips Compare marker vs drive-start edge Spot UVLO/recovery gaps
F9 — Power Integrity: Prove Rail Sag vs Timing in One Capture Diagram of a module with VBAT input, boost rail, MCU marker pin, and driver output. An oscilloscope connects to 2-4 taps. Simplified waveforms illustrate sag and delayed drive; labels show decision criteria. F9 — Power Integrity vs “Bad Sync”: One Scope Capture Probe rails + marker/drive edges to separate timing from brownout / rail sag Haptics + Audio Sync Module MCU timer / marker Boost + Driver peak current path Actuator LRA / ERM VBAT in input path VBAT tap BOOST tap MARKER tap DRIVE tap Oscilloscope (2–4 channels) VBAT BOOST MARKER DRIVE marker edge Decision criteria (fast blame isolation) 1) Marker slips + sag → power-domain timing disturbed (wake/clock/reset) 2) Marker stable + drive delayed + sag → driver derating / UVLO / current limit 3) Rails stable + edges stable → return to transport/firmware or actuator causes CH2 CH3 CH4 CH1 Capture rails and edges together: it converts “random sync issues” into a measurable power-protection signature.
Figure F9. A single capture with VBAT/BOOST and MARKER/DRIVE edges separates true timing jitter from brownout, UVLO, or driver derating behavior.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F9, accessed 2026-01-22.

H2-10. Reliability, EMC/ESD, and “Audio-Path Pollution” (Only at Coupling Level)

Sync modules are often embedded next to audio electronics. A haptic driver’s switching edges and high di/dt current loop can inject noise into shared rails or shared ground impedance. The result may look like a “sync problem” (pops, noise floor jumps, or transient artifacts), but the root cause is coupling. This chapter stays strictly at the module coupling level—no full audio-path design deep dive.

Coupling-only view: Injector (high di/dt haptic loop) → Medium (shared impedance / return paths / ESD return) → Victim (audio quiet domain). Reduce coupling by controlling power partition, return paths, and ESD return routing.

Why “audio pollution” is misdiagnosed as sync:

  • Noise injection creates pops or baseline shifts that users perceive as “timing mismatch.”
  • EMC/ESD stress can trigger protection or resets, causing missed hits that look like jitter.
  • Measurement corruption: the marker/drive edges themselves can be disturbed if the return path is uncontrolled.

Module-level mitigation (practical, coupling-focused):

  • Partition rails: separate (or isolate) haptic power from MCU/timebase and audio quiet rails; avoid shared narrow supply segments.
  • Return-path isolation: keep the high di/dt loop compact and local; do not let coil current share the quiet ground reference path.
  • Switching frequency planning (principle only): avoid placing dominant switching energy where it is most audible/sensitive; reduce low-frequency modulation.
  • ESD placement + return control: place ESD close to the connector, and ensure ESD return current flows away from quiet ground.

The most valuable mental model is “current-loop drawing”: if the high di/dt loop is obvious and isolated, coupling symptoms collapse quickly. If ESD current returns through quiet ground, fixes that only add components will not stabilize behavior.

F10 — Coupling-Level View: High di/dt Loop, Quiet Ground, and ESD Return Diagram uses zones and thick loop lines to show how haptic driver current can couple into audio quiet domain through shared impedance and return paths. ESD placement and return routing are highlighted. F10 — EMC/ESD & “Audio-Path Pollution”: Coupling-Level Loops Draw loops and return paths first; it prevents misdiagnosing coupling as sync jitter HAPTIC POWER + DRIVER injector (high di/dt) MCU + TIMEBASE quiet reference AUDIO QUIET DOMAIN victim (coupling-sensitive) Boost cap + switch H-bridge driver stage Actuator LRA / ERM High di/dt loop keep short & local Quiet GND reference (do not share with coil return) Shared impedance noise injection via shared return/supply Connector I/O / shield ESD clamp place close to connector ESD return route away from quiet domain partition rails + returns Fix coupling by controlling loops and returns: partition rails, isolate return paths, and route ESD currents away from quiet ground.
Figure F10. Coupling-level layout view: the high di/dt haptic loop injects noise through shared impedance and return paths. Partition rails/returns and route ESD current away from the audio quiet domain to prevent “audio-path pollution” from being misread as sync jitter.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F10, accessed 2026-01-22.

H2-11. Validation & Field Debug Playbook: Symptom → Evidence → Isolate → Fix

This SOP turns “sync feels random” into a measurable root cause. The workflow is always: define metrics → run repeatability matrix → capture 2 probes (minimum) → classify symptom path → apply first fix → re-test. Offset can be calibrated; jitter must be isolated.

Exit criteria: latency/jitter/offset are reported with a consistent start reference (marker) and a consistent action reference (drive-start), across battery/temperature/host variations.

1) Metrics definitions + logging sheet (make arguments measurable)

  • Latency: time from event reference to action reference. Recommended: marker edge → drive-start edge.
  • Jitter: repeatability spread under identical conditions (use p-p range over N=10–30 triggers).
  • Offset: fixed bias between event and action that stays constant (can be calibrated if jitter is low).

Measurement reference must be explicit. Example references: (A) USB SOF-aligned marker, (B) BLE event-aligned marker, (C) MCU timer-compare marker. Action reference: (1) driver enable/drive-start pin, (2) H-bridge output proxy.

Setup Metrics Evidence + outcome
Host model / OS
Transport: USB / BLE
Actuator: LRA / ERM
Battery: % / VBAT
Temp: °C (cold/room/hot)
Latency mean (ms)
Jitter p-p (ms)
Offset (ms)
Miss rate (%)
VBAT/BOOST sag (mV)
Marker slip (ms)
Drive delay vs marker (ms)
Root bucket (Power/Timebase/Transport/Driver/Coupling)
First fix + re-test result

2) Repeatability matrix (temperature / battery / host)

Run a small matrix and record jitter p-p and miss rate. This converts “occasional” into a reproducible pattern. Each cell: N=10 triggers at the same configuration.

Condition Host A (USB) Host A (BLE) Host B (USB/BLE)
High battery (near full) Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Low battery (near UVLO risk) Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Hot / cold (pick one extreme) Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Jitter p-p: ____ ms
Miss: ____%
Low-batt only worse → Power/UVLO bucket BLE only worse → Transport/stack delivery bucket Hot/cold only worse → Driver/actuator repeatability bucket

3) Minimal tools (two probes) — the fastest isolation method

Minimum setup: a 2-channel scope or logic analyzer. Capture one rail and one marker. This splits “timing chain” vs “power collapse” before deeper work.

  • Probe #1 (rail): VBAT or BOOST/driver rail (choose the rail that feeds the driver energy).
  • Probe #2 (timing): GPIO marker (timer-compare / execution marker).

Optional but high value: add a dedicated DRIVE_START test pin (or driver EN pin) to measure “marker → energy injection” directly.

4) Symptom library (S → E → I → F) — follow the same 4-step template

Symptom: “Sometimes early, sometimes late” (random lead/lag)

First 2 measurements:

  • GPIO marker edge timing (repeat N=10, measure edge-to-edge spacing vs expected cadence)
  • Transport anchor (USB SOF or BLE event timestamp at arrival, if available) vs marker

Discriminator:

  • If marker itself slips (variable compare-to-edge delay) → Timebase/wake determinism bucket.
  • If marker is stable but arrival time is not → Transport delivery jitter bucket.

First fix (module-level):

  • Move trigger to hardware timer compare and keep ISR short; precompute waveforms; prefer DMA for drive tables.
  • Stabilize clocking (fixed PLL settings during critical path; avoid frequency changes at trigger time).
  • MPN examples (timebase/MCU family examples): STM32U5 (ULP + timers), NXP i.MX RT (high determinism), Nordic nRF52/nRF53 (BLE + timers). Select by required timers/DMA/low-power wake behavior.
Symptom: “Worse at low battery” (late hits / missed hits)

First 2 measurements:

  • VBAT or BOOST sag during haptic hit (scope on rail)
  • GPIO marker edge vs drive-start edge (if available)

Discriminator:

  • If sag correlates with marker slip/reset → Power-domain timing disturbed.
  • If marker stable but drive-start is delayed/reduced → Driver derating / UVLO / current limit.

First fix (module-level):

  • Add local energy and reduce droop slope (input/boost capacitors; shorten high di/dt loop).
  • Tune UVLO and current limit behavior (avoid “drop/recover” oscillation).
  • MPN examples (power path building blocks):
  • Boost: TI TPS61023, TI TPS61291, MPS MP3429 (pick by peak current / rail target).
    Load switch: TI TPS22918 / TPS22965 (soft-start / inrush control).
    Low-noise LDO (quiet rails): TI TPS7A02, Microchip MCP1700 (choose by IQ and PSRR needs).
    Bulk cap series examples: Murata GRM, Taiyo Yuden LMK (select actual value/voltage by rail).
Symptom: “Accurate until BLE connects” (sync degrades on BLE activity)

First 2 measurements:

  • BLE event cadence (connection/ISO interval) vs marker scheduling time
  • Marker stability (timer compare to edge) under BLE load

Discriminator:

  • If arrival timestamps jump but marker remains stable → Stack delivery / event slip (transport bucket).
  • If marker itself becomes variable under BLE → Firmware contention / low-power wake path (timebase bucket).

First fix (module-level):

  • Use lookahead scheduling: send target time early; execute locally on timer compare.
  • Separate BLE ISR/soft events from the deterministic drive path; keep drive path pre-armed.
  • MPN examples (BLE SoC examples): Nordic nRF52840, Nordic nRF5340, Silicon Labs EFR32BG22 (choose by BLE Audio/ISO needs, timer/DMA, power modes).
Symptom: “First hit is always slow” (then normal afterwards)

First 2 measurements:

  • BOOST rail ramp and current limit behavior during first hit
  • Drive-start vs marker on the first hit vs subsequent hits

Discriminator:

  • If BOOST ramp dominates first-hit delay → precharge/soft-start/state machine path (driver/power bucket).
  • If marker is late only on first hit → wake path / clock settle path (timebase bucket).

First fix (module-level):

  • Keep a small “armed” state: precharge boost cap; avoid cold-start of driver state machine right at trigger.
  • Use a deterministic wake policy for the drive window.
  • MPN examples (haptic drivers): TI DRV2605L (ERM/LRA), TI DRV2625 (LRA closed-loop), Renesas DA7280 (LRA driver). Pick by control mode and start-time determinism needs.
Symptom: “Only hot/cold makes it drift” (temperature sensitivity)

First 2 measurements:

  • Drive waveform consistency (drive-start timing and amplitude vs temperature)
  • Actuator response proxy (optional): accelerometer pickup / near-field mic / simple vibration sensor

Discriminator:

  • If drive is stable but response shifts → actuator mechanical variability (driver/actuator bucket).
  • If drive timing changes with temperature → driver lock/state transitions (driver bucket) or rail behavior (power bucket).

First fix (module-level):

  • For LRA: prefer drivers with resonance tracking or calibrated drive tables; avoid slow “lock-in” at trigger.
  • Set guard bands for target timing (offset calibration) only after jitter is controlled.
  • MPN examples (LRA drivers): TI DRV2625, Renesas DA7280. For ERM basic drive: TI DRV2605L in ERM mode.
Symptom: “Haptic triggers cause audio pop / noise floor jump”

First 2 measurements:

  • Quiet rail ripple (audio/MCU rail) during haptic hit
  • Ground reference shift proxy (measure between quiet GND and power GND if test pads exist)

Discriminator:

  • If noise aligns with high di/dt loop edges → coupling / shared impedance bucket.
  • If issue appears after ESD events → ESD return path bucket (coupling/reliability).

First fix (module-level):

  • Partition rails and returns; keep high di/dt loop local; avoid routing ESD current through quiet ground.
  • Add interface ESD close to connector; control return routing.
  • MPN examples (ESD/TVS): TI TPD1E10B06, Nexperia PESD5V0S1UL, Littelfuse SP1005 (choose by interface voltage and capacitance).
  • MPN examples (ferrite beads): Murata BLM18AG / BLM21 series (select impedance/current for the rail).
Symptom: “Marker is stable, drive is stable, but ‘feel’ timing is off”

First 2 measurements:

  • Drive-start edge vs marker edge (prove electrical timing is deterministic)
  • Response proxy timing (optional sensor pickup) to estimate mechanical start delay drift

Discriminator:

  • If mechanical delay varies while drive timing is constant → actuator variability path.
  • If electrical drive is clipped under some conditions → return to power bucket.

First fix (module-level):

  • Use actuator-specific calibration: keep a fixed offset table per unit or per temperature band only after jitter is controlled.
  • Prefer LRA drivers with controlled startup behavior; avoid trigger-time lock delays.
  • MPN examples: driver options above (DRV2625 / DA7280); actuator selection is product-specific and should match the driver control mode.

5) Root-cause buckets + “first-fix” BOM examples (MPNs)

After symptom classification, apply the smallest module-level fix and re-test the same cell in the repeatability matrix. Use these buckets to keep fixes scoped and measurable.

Bucket First fix actions (module-level) Example MPNs (reference options)
Power integrity
rail sag / UVLO / derating
Add local energy; control inrush/soft-start; tune UVLO behavior; shorten high di/dt loop and returns. Boost: TPS61023, TPS61291, MP3429
Load switch: TPS22918, TPS22965
Caps (series): Murata GRM, Taiyo Yuden LMK
Timebase / determinism
wake/ISR variability
Trigger via hardware timer compare; pre-arm waveform; avoid frequency changes during drive window; keep ISR short. MCU/BLE SoC examples: Nordic nRF52840 / nRF5340, Silicon Labs EFR32BG22, STM32U5 family
Transport delivery
USB/BLE event slip
Lookahead scheduling; local timer execution; decouple transport ISR from drive path; double-buffer events. BLE SoC examples: nRF5340, EFR32BG22
(USB bridge depends on architecture; keep transport jitter off the drive path.)
Driver + actuator
start-time repeatability
Prefer controlled startup behavior; avoid lock-in delays at trigger; calibrate offset only after jitter is controlled. Haptic driver: TI DRV2605L, TI DRV2625, Renesas DA7280
Coupling / EMC / ESD
audio pollution / resets
Partition rails and returns; route ESD current away from quiet ground; place ESD close to connector; add beads where needed. ESD/TVS: TI TPD1E10B06, Nexperia PESD5V0S1UL, Littelfuse SP1005
Ferrite beads: Murata BLM18AG/BLM21 series
F11 — Field Debug Decision Tree: Symptom → 2 Evidence Taps → Bucket → First Fix Decision tree with multiple symptom nodes, evidence nodes, root-cause buckets, and compact first-fix nodes. Minimal text, many nodes, optimized for mobile readability. F11 — Validation & Field Debug SOP (Decision Tree) Use 2 probes minimum: rail + marker. Add drive-start for faster isolation. Random early/late Low-batt worse BLE on worse First-hit slow Hot/cold drift Audio pop/noise when haptic Marker ok feel off Sag? Marker slip? Drive delay? BLE slip? Ripple? Mech drift? POWER UVLO / derating TIMEBASE wake / ISR TRANSPORT USB/BLE delivery DRIVER+ACT start repeatability COUPLING EMC/ESD First fix Energy + inrush TPS61023 / TPS22965 First fix HW timer compare short ISR + DMA First fix Lookahead schedule local execute First fix Controlled startup DRV2625 / DA7280 First fix Return control TPD1E10B06 Always re-test the same matrix cell after a first fix. Offset tuning only after jitter is controlled.
Figure F11. Field debug decision tree: symptom → two evidence taps → isolate bucket → first fix. The fastest minimum is rail + marker; adding drive-start makes “timing vs energy injection” separation immediate.
Cite this figure — Suggested citation: ICNavigator, “Haptics + Audio Sync Module,” Fig. F11, accessed 2026-01-22.

Note on MPN lists: these are reference options to speed early prototyping and debug. Final selection depends on voltage/current, package, availability, and actuator control requirements.

Request a Quote

Accepted Formats

pdf, csv, xls, xlsx, zip

Attachment

Drag & drop files here or use the button below.

H2-12. FAQs (Audio–Haptic Sync, no scope creep)

Every answer routes back to the three enemies of sync: clock, scheduling, and power. Each includes a minimal “first two checks” so the issue becomes measurable.

Clock: drift / timebase / clock switching Scheduling: USB SOF / BLE events / timer-compare Power: VBAT/BOOST sag / UVLO / inrush
1) Sync feels “off” — should the metric be latency or jitter?

If the delay is consistent, it’s mainly latency/offset (calibratable). If it sometimes leads and sometimes lags, it’s jitter (must be isolated). First two checks: repeat the same trigger N=10 and log p-p spread; compare marker → drive-start across runs. Stable spread → tune offset; wide spread → hunt jitter sources.

Maps to H2-1 (Latency/Jitter/Offset definitions).
2) Same firmware, different phones behave differently — blame USB or BLE first?

Start with scheduling, not assumptions. First two checks: (1) transport arrival timestamp (USB packet arrival or BLE event cadence), (2) local timer-compare marker. If arrivals jitter but the marker is stable, it’s USB/BLE delivery (lookahead + local execute fixes it). If the marker itself slips, it’s local wake/ISR determinism (clock/scheduling inside the module).

Maps to H2-7 (Transport jitter sources) and H2-8 (Firmware determinism).
3) LRA “click” sometimes feels soft/hard — bad sync or resonance drift?

This is often driver/actuator repeatability, not scheduling. First two checks: keep the same marker timing and capture (1) drive-start time, (2) drive waveform amplitude/shape. If timing is stable but amplitude/lock behavior changes (temperature/voltage), the “feel” varies from resonance tracking, startup state, or rail headroom. Example drivers: DRV2625, DA7280.

Maps to H2-3 (LRA vs ERM variability) and H2-4 (Driver startup/topology).
4) Timestamps are accurate — why is the execution point still random?

A timestamp is only a plan; determinism depends on local scheduling. First two checks: (1) “arrival → queue” delay variation, (2) “queue → timer-compare marker” variation. If variability appears after the timestamp is received, the cause is tickless idle, clock switching, ISR contention, or flash wait-state changes. Fix: pre-arm events and execute with hardware timer compare + short ISR.

Maps to H2-5 (Timestamped trigger) and H2-8 (Low-power determinism).
5) BLE gets busy and hits are late/missed — which two timestamp taps first?

Use two taps to separate delivery jitter from execution jitter. Tap #1: BLE connection/ISO event boundary or packet arrival time. Tap #2: local timer-compare marker (the true execute reference). If tap #1 slips but tap #2 stays fixed relative to target_time, lookahead scheduling is working; remaining issues are power/driver. If tap #2 slips, the module’s wake/ISR path is the culprit.

Maps to H2-7 (BLE jitter sources) and H2-8 (Deterministic pipeline).
6) Low battery suddenly increases delay — inrush or UVLO?

This is a power question. First two checks on one scope capture: (1) VBAT/BOOST rail, (2) marker or drive-start. If the rail droops only during the hit and recovers, suspect inrush/peak current and insufficient local energy (add capacitance, soften ramp, control inrush with a load switch like TPS22965). If behavior toggles near a threshold (drop/recover/derate), suspect UVLO/derating and tune limits.

Maps to H2-9 (Rail sag vs timing illusion).
7) Short “click” is hard to align, but long “buzz” looks OK — why?

Short clicks expose jitter and mechanical start delay; long buzzes hide small timing errors because perception integrates over time. First two checks: measure jitter p-p of marker→drive-start across N=10, and compare LRA/ERM mechanical delay variability. If jitter is a few ms, a 60–100 ms buzz still “feels aligned” while a 10 ms click does not. Fix = reduce jitter or align to frame markers.

Maps to H2-3 (Mechanical delay) and H2-6 (Frame/sample aligned scheduling).
8) Enabling power-save increases jitter — wake delay or clock switching?

Usually clock + scheduling interaction. First two checks: (1) marker edge spread with power-save OFF vs ON, (2) clock source/frequency transitions near the trigger window. If marker p-p grows only with low-power modes, the issue is wake latency variance, oscillator/PLL settle time, or ISR contention after waking. Fix: keep a deterministic “armed” window, avoid frequency changes during the drive window, and use timer-compare + DMA.

Maps to H2-8 (Low-power determinism).
9) Sync looks random, but it “jumps” every few minutes — is it drift?

Drift is a clock issue: the error grows gradually until re-sync. First two checks: log latency/offset over time and see if the error accumulates linearly; then check if a re-sync event resets it. A periodic step change often indicates transport rescheduling (BLE reconnect/interval change), not pure drift. Fix: maintain a mapping between frame counter and local ticks, and apply periodic re-sync points to bound error.

Maps to H2-6 (Frame/timer mapping & drift management).
10) Audio pops/noise appear and sync gets worse — coupling or scheduling?

Prove it with power/coupling evidence. First two checks: (1) quiet rail ripple (audio/MCU rail) during the hit, (2) marker stability at the same time. If the marker timing stays stable while noise increases, the root is coupling/return path, not scheduling. If ripple causes resets/marker slips, it’s power integrity. First fix: partition rails/returns, shorten the high-di/dt loop, and place ESD close to connectors (e.g., TPD1E10B06).

Maps to H2-10 (Coupling/EMC/ESD) and H2-9 (Rail sag).
11) Production calibration: is one-time offset calibration enough?

Only if jitter is already controlled and offset is stable across battery/temperature/hosts. First two checks: validate the same unit at (1) high vs low battery, (2) room vs hot/cold, and ensure offset stays within a narrow band. If offset shifts with conditions, a single value is not enough; use banded calibration (by temperature or voltage) or periodic re-sync points. Never “calibrate away” jitter.

Maps to H2-5 (Timestamped execution) and H2-6 (Re-sync strategy).
12) Only one scope in the field — fastest 5-minute root-cause call?

Do a 2-probe split test. Probe #1: VBAT or BOOST rail. Probe #2: timer-compare marker. Trigger on the marker and observe rail droop at the hit. If the rail droops or resets correlate with misses/late hits, it’s power (add energy/inrush control). If rail is clean but marker slips, it’s clock/scheduling (wake/ISR). If marker is stable, add drive-start to test driver startup determinism.

Maps to H2-11 (Field SOP: symptom → evidence → isolate → fix).