Haptics + Audio Sync Module (LRA/ERM, BLE/USB Sync)
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.
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.
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.
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.
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).
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.
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.
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.
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).
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).
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.
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.
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.
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).
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.
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.
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: ____% |
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, TITPS61291, MPSMP3429(pick by peak current / rail target).
Load switch: TITPS22918/TPS22965(soft-start / inrush control).
Low-noise LDO (quiet rails): TITPS7A02, MicrochipMCP1700(choose by IQ and PSRR needs).
Bulk cap series examples: MurataGRM, Taiyo YudenLMK(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, NordicnRF5340, Silicon LabsEFR32BG22(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), TIDRV2625(LRA closed-loop), RenesasDA7280(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, RenesasDA7280. For ERM basic drive: TIDRV2605Lin 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, NexperiaPESD5V0S1UL, LittelfuseSP1005(choose by interface voltage and capacitance). - MPN examples (ferrite beads): Murata
BLM18AG/BLM21series (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, MP3429Load switch: TPS22918, TPS22965Caps (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 SP1005Ferrite beads: Murata BLM18AG/BLM21 series
|
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.