Home » Technology » USB / PCIe / HDMI / MIPI » DSI / DSI-2 with D-PHY & C-PHY (Tx/Rx) Practical Guide
DSI / DSI-2 with D-PHY & C-PHY (Tx/Rx) Practical Guide
← Back to: USB / PCIe / HDMI / MIPI — High-Speed I/O Index
DSI/DSI-2 display links become reliable when Tx/Rx share a single “timing contract” (format, sync, blanking, lane rate) and the PHY is operated with enough margin in clock, power, and SI. This page turns the link into an executable workflow: budget → configure → layout → bring-up → validate → troubleshoot with measurable pass criteria.
H2-1. What is DSI / DSI-2 and where it fits (Tx/Rx view)
Intent
Build a system-level mental model in 30 seconds: who transmits, who receives, what data moves, and why the PHY is a transport layer—not the semantic owner of pixels.
Scope guard
Covers: DSI/DSI-2 link role split (Tx/Rx), video/control payload concept, and system path.
Does NOT cover: CSI-2 camera links, long-reach SerDes extenders, or ESD/TVS part libraries.
Working definition (engineering view)
MIPI DSI / DSI-2 is a display interface that
packetizes pixel streams (video) and control commands (DCS),
and transports them over D-PHY or C-PHY to a panel or a bridge receiver.
The protocol defines what is sent and when ;
the PHY defines how the bits move on wires .
DSI vs DSI-2 (capability checklist, not CTS details)
Payload model: video pixels (long packets) + control/metadata (short packets, DCS).
Operating modes: video-mode streaming vs command-mode with scheduling/TE interactions.
Transport options: D-PHY (HS/LP) or C-PHY (symbol/gear style transport).
System-level “must-align”: lane configuration, pixel format, timing model, and error-check policy.
Debug visibility: link/PHY state, error counters, clock lock status, and frame pacing observability.
Responsibility boundary (Tx vs PHY vs Rx)
Tx (DSI Host): define pixel format + timing parameters, packetize video/control, map packets to lanes, manage HS/LP transitions.
PHY (D-PHY/C-PHY): transport bits with mode/timing rules; it does not “understand pixels”.
Rx (Panel/Bridge): unpack packets, reconstruct frame/line timing, drive panel timing engine, and handle TE/sync feedback if used.
Common mis-attribution to avoid: a stable-looking waveform can still produce a black screen when
pixel format / timing alignment is wrong; a “protocol-looking” flicker can be a
clock/noise issue affecting frame boundary stability.
Failure symptom dictionary (symptoms only)
Black screen: no visible output, often with link state uncertainty.
Flicker / intermittent blanking: frame boundary instability or periodic disruptions.
Tearing: visible frame split due to sync/pacing misalignment.
Color shift / wrong colors: format/packing mismatch symptoms.
Line artifacts / sparkles: intermittent corruption that may appear “random” to users.
These symptoms map to later chapters via budgets and observability: packetization alignment, timing/sync control, clock/jitter stability, SI/layout continuity, and bring-up sequencing.
Figure-1 · System Map (SoC → PHY → Connector/FPC → Panel/Bridge)
SoC
Display Controller
DSI Host (Tx)
PLL/Ref
Packetizer
D-PHY
C-PHY
HS / LP
Conn
/FPC
Rx
Panel
Bridge
Timing
Traffic types
Payload: Pixels
Control: DCS
Sideband: RESET / TE / IRQ
Tx: Pack / Time / Lane-map
Rx: Unpack / Drive
H2-2. Protocol stack & packetization for video (DSI/DSI-2 essentials)
Intent
Explain how a pixel stream becomes link packets, so later chapters can close the loop on bandwidth math and sync control without guesswork.
Video mode vs Command mode (decision logic, not platform specifics)
Video mode: stream pixels continuously with explicit frame/line timing; simplest for steady refresh.
Command mode: schedule updates using command transfers; enables selective/partial updates and tighter power control, but depends on pacing and TE behavior.
Engineering implication: mode choice changes how “frame boundary correctness” is enforced and how latency/pacing failures manifest.
Packet types and what they represent
Long packets: carry bulk payload (typically pixel data). Key property: word count must match what Rx expects for reconstruction.
Short packets: carry lightweight events (sync markers or short commands). Key property: they shape boundaries and control flow.
DCS command channel: control-plane traffic for panel configuration and updates. It is not the pixel payload itself, but it can enable/disable the pixel path.
Error checks (concept level): ECC/CRC improve detectability of corruption, but do not replace correct timing/format alignment.
Fields that govern reconstruction (DT / VC / WC)
Rx reconstruction depends on three anchor fields:
Data Type (DT) to interpret payload meaning,
Virtual Channel (VC) to route streams,
and Word Count (WC) to size payload correctly.
When any one of these is mismatched, the link can look “active” while the displayed image is wrong.
Minimum alignment set (Tx ↔ Rx)
Lane configuration: lane count + mode (D-PHY vs C-PHY) must match.
Pixel format: pixel packing / bits-per-pixel must match DT expectations.
Timing model: line/frame boundaries and blanking model must align with Rx assumptions.
Error-check policy: ECC/CRC enablement must not conflict with Rx parsing expectations.
Practical first checks (packetization-level)
Black screen with “link active”: verify DT/format and timing parameters before blaming SI.
Wrong colors: validate pixel format mapping and packing assumptions end-to-end.
Tearing: confirm frame pacing strategy and boundary markers, especially in command mode.
Intermittent artifacts: check whether WC/line sizing is stable across dynamic mode switches.
Detailed HS/LP timing and training behavior is handled in later chapters; this section stays at the “pixel → packet → lane” abstraction boundary.
Figure-2 · Packet Flow (Pixel stream → Packetizer → Lane mapper)
Pixel stream
Frame timing
Lines / pixels
Format (BPP)
Mode policy
Packetizer
DT
VC
WC
Short packets
Long packets (pixel payload)
boundaries
Lane mapper
Lane count
Lane order
Mode: HS/LP
Key idea:
Short + Long packets share the same link path; correctness depends on DT/VC/WC alignment.
H2-3. D-PHY vs C-PHY modes and timing (HS/LP + state machine)
Intent
Make HS entry and HS exit predictable. Many black-screen and flicker issues originate from state-machine windows rather than “raw signal quality”.
Engineering boundary (what matters for bring-up)
D-PHY: LP for control/handshake and HS for payload bursts; typically a clock lane plus data lanes at the transport boundary.
C-PHY: symbol/gear framing at the transport boundary; triad/lane mapping must match end-to-end.
Practical implication: stable video requires both sides to agree on mode , lane/triad mapping , and transition windows .
HS entry / HS exit are windowed sequences (not a simple switch)
Treat mode transitions as a state machine with timing windows:
a receiver-ready window , a stable-capture window , and an exit window .
When any window is violated, the link may appear “partially alive” but produce black frames, flicker, or recovery loops.
Minimal transition gates (platform-agnostic)
Before HS entry: reference/PLL lock stable, lane ready asserted, Rx ready window open.
During HS burst: clock/noise conditions keep the capture window stable (avoid boundary jitter).
During HS exit: exit sequence must complete cleanly, or the next entry may fail intermittently.
ULPS / sleep-resume is a dedicated branch of the state machine
ULPS entry: do not assume “idle equals safe”; ULPS is a controlled state with explicit preconditions.
Resume risk: recovery often fails due to missing guard time between power/clock readiness and HS entry.
Recovery principle: prove the state machine completes LP→HS entry and HS→LP exit deterministically before tuning SI or bandwidth.
Calibration / training: shared decisions vs static configuration
Shared decisions (Tx ↔ Rx): readiness windows, capture tolerance, and any negotiated calibration behavior (if implemented).
Static configuration (Tx-driven): lane/triad selection, target rate/gear, and chosen timing parameters (tX placeholders).
Failure signature rule: shared-decision issues often look intermittent and environment-sensitive ; static misconfiguration is often stable and reproducible .
Observability checklist (prove the state machine first)
Clock readiness: PLL lock / reference stable before HS entry.
Transition state: HS entry/exit completion without retries.
Lane status: lane stop/ready state is coherent across lanes/triads.
Recovery count: unexpected re-entry or retrain attempts are treated as a failure indicator.
Figure-3 · PHY State Machine Timeline (LP → HS entry → HS burst → HS exit → LP)
Windowed transition model
Use placeholders: tX_enter / tX_stable / tX_exit (no fixed numbers)
time →
LP
HS entry
HS burst
HS exit
LP
Electrical mode
tX_enter
tX_stable
tX_exit
Tx actions
LP prepare
Start HS
Send packets
Stop HS
Idle
Rx readiness
Ready window
Capture stable
Exit window
Gate: PLL lock
Gate: Lane ready
Gate: Resume guard time
H2-4. Bandwidth math: frame-rate / color-depth / overhead → lane rate
Intent
Determine the minimum lane count and lane rate with a margin policy. Avoid “it works at 60 fps but fails at 90/120” due to missing blanking or overhead.
Inputs (lock the variables before calculating)
Resolution: active pixels (W × H).
Frame rate: FPS (including dynamic targets if used).
Color depth: bits-per-pixel (BPP) or pixel format mapping.
Blanking model: line/frame blanking or equivalent timing overhead.
Compression (if any): effective throughput multiplier and its corner-case behavior.
Overhead bucket (express as proportions)
Protocol overhead: headers + ECC/CRC and any required markers.
Blanking overhead: time not carrying active pixels but still consuming link budget.
LP/Escape overhead: transition/low-power time that reduces effective HS payload time.
Margin overhead: explicit engineering margin to cover PVT, jitter, and layout sensitivity.
Treat overhead as a controllable budget. A “barely meets math” design often fails in temperature corners and resume scenarios.
Outputs (what the calculation must produce)
Required payload throughput: pixels × FPS × BPP (active payload).
Required link throughput: payload scaled by overhead proportions (protocol + blanking + LP/escape).
Required lane rate: link throughput ÷ (lane count) with a margin policy.
Margin policy: reserve X% headroom (placeholder) to cover worst-case corners.
Common pitfalls (symptom-driven)
Only active pixels counted: stable at low FPS, fails at higher FPS due to missing blanking/time overhead.
Blanking ignored: “math looks fine” but real timing model pushes occupancy too high.
BPP/format changed without re-budgeting: color upgrade quietly consumes lane-rate margin.
Dual display not additive-budgeted: single display passes; dual output flickers or drops under peak.
Figure-4 · Bandwidth Calculator Block (Inputs → Overhead bucket → Outputs)
Inputs
Resolution
FPS
BPP
Blanking
Compression
Lock variables
Overhead
Protocol
Blanking
LP / Escape
Margin
Outputs
Lanes
Lane rate
Occupancy
Margin X%
Rule: if any input changes, re-budget lanes, lane rate, and margin.
H2-5. Video timing & sync control (TE/VS/HS, frame pacing, latency)
Intent
Turn tearing, jitter, and occasional wrong frames into a timing-consistency problem: stable frame boundaries, predictable pacing, and coherent line reconstruction.
Timing vocabulary (engineering-level)
Frame boundary: the exact start/end of a frame as understood by both Tx and Rx timing engines.
Line boundary: the start/end of each line used to map payload into raster order.
Active vs blanking: blanking is not “free time”; it consumes budget and affects pacing.
TE (optional): a pacing/synchronization cue (commonly in command-mode flows), not the video payload.
If boundaries are not coherent, symptoms may look like random tearing or occasional frame jumps even when the link remains up.
Frame pacing policy (decision logic)
Fixed refresh: easiest to keep boundaries stable; predictable latency and fewer corner-case transitions.
Dynamic FPS: power/thermal gains, but boundary drift risk rises if switching windows are not protected.
Low-power refresh: more aggressive pacing changes; TE (if used) and buffering policy become critical.
Pacing is a system contract: when cadence changes, both boundary timing and buffering must remain consistent or the display may tear or “hiccup”.
Receiver reconstruction (packets → lines → frames)
Boundary cues: Rx timing logic uses sync boundaries and payload mapping to re-create raster order.
Coherency requirement: Tx timing model and Rx reconstruction must agree on line/frame boundaries.
Command-mode sensitivity: updates may be gated by TE/pacing cues; missing or unstable cues can create partial updates and tearing.
Latency & buffering (why tearing and latency often correlate)
Buffer depth trade: deeper buffers smooth jitter but increase latency and hide boundary mistakes until overflow/underflow events.
Queue alignment: pacing changes must be aligned with safe windows to avoid mid-frame updates.
Practical rule: verify frame boundaries and pacing stability before changing bandwidth or PHY parameters.
Failure modes → first checks (platform-agnostic)
Tearing / partial updates: check boundary coherence and pacing/TE gating behavior; require stable frame boundary over X frames (placeholder).
Occasional wrong line / frame jump: validate VS/HS/blanking parameters match end-to-end and remain constant during a frame.
TE missing / TE jitter: treat as a synchronization signal quality issue; require TE stability within X (placeholder).
Figure-5 · Frame/Line Timing Map (frame timeline + packet-to-line mapping)
Frame boundary consistency
Top: frame timeline · Bottom: packets mapped to lines (blocks, minimal text)
time →
Frame timeline
VS
Active
Blanking
Frame boundary
TE (opt.)
Packets mapped to lines
Short
Long payload
Short
Long payload
Short
Long payload
Short
Long payload
Short
Long payload
Short
Payload
Line boundary
H2-6. Clocking, jitter, PLL/ref, and spread-spectrum interactions
Intent
Explain “looks OK on a scope but still unstable” as a jitter-tolerance and injection-path problem across multiple clock domains.
Clock domains (what drives what)
PLL/ref reference: the stability anchor; ref noise can amplify through PLL dynamics.
Pixel clock: controls pixel production cadence (display pipeline timing).
Byte/HS clock: controls transport cadence (PHY/lane timing).
Key risk: if domain relationships drift near tolerance edges, the result is often intermittent flicker instead of a permanent link-down.
Jitter budget (Source → Coupling path → Symptom)
Sources: ref noise, PLL near lock edge, PMIC ripple, ground bounce, crosstalk injection.
Coupling: power/ground impedance, clock distribution, PLL loop behavior, mode-switch transients.
Symptoms: periodic flicker, temperature/load sensitivity, failures during refresh-rate switching, worse after resume.
Periodic or load-correlated instability is a strong hint of injection, not just average “eye quality”.
PLL lock margin (edge-of-lock behaves like a noise amplifier)
Lock is not binary: near the edge, small disturbances can inflate phase noise and jitter.
Field signature: OK at cold start, worse after warm-up; worse at peak load; sensitive to supply ripple.
Bring-up rule: confirm robust lock margin before pushing lane rate or enabling aggressive pacing changes.
SSC / EMI interaction (not “free”)
SSC changes instantaneous frequency: EMI improves, but Rx tracking tolerance must keep up.
Coordination point: treat SSC enable/disable as a timing-mode change requiring safe windows.
Pass criteria: no flicker/tearing while SSC is toggled within X cycles (placeholder).
Dynamic frequency switching (safe window required)
Switching is a sequence: adjust clocks, verify lock/settle, then re-enter stable transport and pacing.
Common signature: single flash at the moment of switching; intermittent drop only at one FPS gear.
Guard policy: enforce a settle window tX (placeholder) before sending critical frame boundaries.
Figure-6 · Clock Tree + Jitter Injection (domains + injection points)
PLL / Ref
HS / Byte clk
Pixel clk
PHY lanes
capture tol.
Display pipe
frame pace
PMIC ripple
Ground bounce
Crosstalk
SSC (optional)
Symptoms
Flicker
Intermittent retrain
Frame instability
Rule: follow injection paths before increasing lane rate or changing pacing.
H2-7. Signal integrity & layout for DSI links (FPC/connector/ESD parasitics)
Intent
Provide DSI-specific SI/layout rules centered on FPC/connector transitions and ESD symmetry—avoid generic SerDes/USB/PCIe guidance.
Differential constraints (what must be managed)
Zdiff consistency: keep the lane bundle consistent across SoC → connector → FPC → panel/bridge transitions.
Intra-pair skew: control within each differential pair to protect eye symmetry.
Inter-pair skew: keep lanes aligned so one lane does not become the systematic worst case.
Segment continuity: minimize sudden width/spacing changes and uncontrolled stubs around the connector region.
Intermittent flicker that worsens with touch/pressure often points to transition and symmetry issues, not peak bandwidth.
Return-path continuity (the DSI failure multiplier)
Reference plane: keep the differential bundle tightly referenced to a continuous plane.
Plane splits: avoid crossing gaps; a split is a return-path break that excites common-mode.
Via transitions: treat layer changes as return-path rebuild events—add stitching GND vias near transitions.
Connector region: make return paths short and obvious; do not “force detours” around keepouts.
FPC/connector pitfalls (mechanical + electrical)
Pin ground strategy: GND distribution around lanes defines how “tight” the return path stays through the connector.
Density & reference: dense routing without stable reference increases bundle imbalance sensitivity.
Shield bond concept: prefer a return-path-first mindset; avoid creating long, inductive return detours.
ESD parasitics (symmetry beats absolute capacitance)
Ultra-low C is necessary: but ΔC asymmetry is often the real killer.
Mode conversion: imbalance turns differential energy into common-mode, reducing margin and increasing sensitivity.
Placement rule: close to entry, keep stubs short, and preserve left/right symmetry around each pair.
Verification gates (platform-agnostic)
Symmetry check: lane-side parasitics balanced within X (placeholder).
Return continuity: no plane split crossings; stitching near transitions passes a visual audit.
Assembly sensitivity: touch/bend A/B test shows error/flicker delta ≤ X (placeholder).
Symptoms → first checks (fast triage)
Pressing near connector changes flicker: prioritize connector return-path and GND pin strategy.
Swapping ESD worsens stability: suspect ΔC imbalance and stub symmetry before blaming lane rate.
Temperature/load sensitivity: treat as common-mode/return-path stress first, then revisit clock injection (H2-6).
Figure-7 · Layout Do/Don’t Map (connector + FPC + ESD symmetry + return path)
SoC / DSI Host
Connector zone
FPC → Panel/Bridge
Lane bundle
Board-to-board
GND pin strategy
FPC segment
Return path (continuous)
ESD array
symmetry
Do / Don’t
Continuous ref plane
Stitch GND vias
Symmetric ESD (ΔC small)
Short, obvious return
Plane split / long stub
Don’t: plane split crossing
split
H2-8. Power/reset/bring-up sequencing (LP control, panel init, error recovery)
Intent
Systematize “works once but fails after reboot/resume” as an incomplete state-machine loop with guard times and observable pass criteria.
Bring-up state machine (end-to-end)
Power-off → Rails up: rails reach stable conditions before releasing reset.
Reset hold → Reset release: exit from a known state, then wait a guard window tX .
LP ready → Init envelope: send initialization in a controlled envelope (avoid panel-specific tables here).
Video on → Sleep/ULPS → Resume: transitions require safe windows to avoid mid-frame discontinuities.
Recovery: a minimal closed loop that is re-entrant and observable.
Rails sequencing (stability window first)
Stability gate: require rails stable for tX before reset release.
Domain separation: treat “display content path” and “backlight/power domain” as separate controls.
Repeatability: sequence must work cold boot, warm reboot, and resume with the same gates.
Reset & enable discipline (avoid state residue)
Reset hold: enforce a known baseline and prevent partial init from prior cycles.
Guard after release: allow internal readiness before sending init envelope (tX placeholder).
Field signature: cold boot OK, warm reboot fails → suspect missing reset gate or insufficient guard time.
Init envelope (command-mode role, without vendor tables)
Role: establish mode/format/timing assumptions and prepare the sink to accept video.
Re-entrant design: initialization must be repeatable after any recovery path.
Do not hardcode: avoid embedding panel-specific command tables in a generic design doc.
Sleep/ULPS & resume (safe windows)
Enter: stop video cleanly, complete boundary, then transition to sleep/ULPS.
Exit: restore rails/clock readiness → wait tX → re-init envelope → video on.
Common failure: resume black screen despite link up → order is correct but windows are insufficient.
Recovery: minimal closed loop (must be observable)
Reset PHY / link state: return transport to a known baseline.
Re-enter stable transport: ensure HS/LP state is coherent before proceeding.
Re-send init envelope: re-apply the minimal initialization needed for the sink.
Validate: confirm the sink is responsive and frame boundaries are stable.
Observability & pass criteria (placeholders)
Rails stable: within X (placeholder) before reset release.
Reset guard: reset release to init start ≥ tX (placeholder).
Init completion: init envelope completes within X ms (placeholder).
Video stability: stable frames over X frames (placeholder).
Resume robustness: no recovery loop within X cycles (placeholder).
Figure-8 · Bring-up State Machine (power → init → video → sleep/resume → recovery)
Power-off
Rails up
Reset hold
Reset rel
guard tX (placeholder)
LP ready
Init envelope
Video on
Validate
Sleep / ULPS
Resume
Recovery
Every arrow needs: precondition + guard + pass criteria
Use placeholders: tX / X ms / X frames to avoid vendor lock-in
H2-9. Debug & validation workflow (what to measure first)
Intent
Convert symptoms into a repeatable, layer-based workflow: symptom → first measurement → layer classification → next action.
Layering map (classify before tuning)
Protocol config: mode/format/lanes/timing fields alignment between Tx and Rx.
PHY state & timing: HS/LP coherence, lane enable/stop state, ULPS transitions.
Clock & PLL: lock status, safe switching windows, noise-coupled instability.
SI/layout: connector/FPC/ESD symmetry and return-path discontinuities.
Power noise & sequencing: rail stability, ripple correlation, brownout-like resets.
Minimal observability set (what must be captured)
State
Link state, lane stop/ULPS state, PLL lock, clock ready, mode (video/command), lane count.
Counters
Packet/ECC/CRC (if exposed), lane error flags, re-train count, re-init attempts (placeholders).
Timing captures
TE/VS/HS capture (if available), frame boundary stability, refresh switching log markers.
Recommended logging format: timestamp + state snapshot + counter deltas + active mode (FPS/format/lanes).
Symptom → first measurement (fast triage)
Black screen
State: link up? lanes enabled? stop/ULPS state coherent?
Clock: PLL lock and clock ready stable?
Config: lane count + format/BPP + core timing fields aligned?
Flicker / intermittent flash
Timing: frame boundary stability (VS/TE capture or equivalent)?
Correlation: temperature/rail ripple/pressing near connector changes symptoms?
Stability: re-train or state bounce observed during flicker?
Color shift / wrong colors
Format: pixel format and BPP consistent across Tx/Rx?
Packing: packing/byte order assumptions aligned?
ID fields: VC/data type mapping matches the sink expectations?
Artifacts / line issues
Line/Frame: HS/VS/blanking values consistent with the sink restore logic?
Mode dependency: appears only at certain FPS/resolution → treat as budget/margin issue.
Counts: counter increments align with visible artifacts timing?
Convergence rules (avoid the tuning trap)
State first: confirm state coherence before interpreting counters.
Freeze mode: fix FPS/format/lanes before testing dynamic switches.
Correlation before redesign: run minimal A/B tests (rail, temperature, pressing) to classify the layer.
Validation runbook (repeatable sequence)
Baseline: fixed mode burn-in for X minutes (placeholder).
Switching: controlled sequence of FPS/format/resolution changes (fixed order).
Corners: temperature/voltage corners and mechanical A/B (FPC bend/press) trials.
Log: time-stamped state snapshots + counter deltas + re-train/re-init counts.
Acceptance criteria (placeholders)
Stable operation ≥ X min (placeholder).
Error counter increment ≤ X per minute (placeholder).
Re-train / re-init count ≤ X (placeholder).
No visible flicker/artifacts across switch sequence (with recorded correlation notes).
Figure-9 · Troubleshooting decision tree (symptom → first checks → layer)
Symptoms
Black
Flicker
Artifacts
Color
First checks (3–4 steps)
State
link / lanes / stop / lock
Timing
frame boundary / TE / VS
Counters
ECC/CRC / retrain / errors
Correlation A/B: temp / rail / press
Layer
Config
PHY
Clock
SI
Power
H2-10. Compliance & test hooks (platform-agnostic but DSI-specific)
Intent
Define what “pass” means via measurable stability and a stress matrix—without relying on vendor-specific CTS details.
Test objectives (what each test proves)
Transport stability: link/state coherence with no bouncing and no unexpected retrain.
Data integrity: error counters stable (ECC/CRC or platform equivalents).
Timing robustness: frame boundary stability under mode and refresh changes.
Stress survivability: corners and mechanical sensitivity do not trigger intermittent failure.
PRBS / loopback (if available)
Purpose: isolate PHY/SI margin from protocol and application timing variables.
Interpretation: loopback/PRBS fails → prioritize PHY/SI/power; passes → re-focus on config/timing.
Fallback: if PRBS is not exposed, use fixed-pattern video + state/counter stability as the transport proxy.
Eye/jitter measurement levels (practical without vendor lock-in)
Level 1 (must)
Stable link/state + stable counters + no retrain across the baseline run.
Level 2 (recommended)
Relative margin checks: compare eye/edge quality trends across FPC/ESD variants and mechanical A/B.
Level 3 (deep)
Quantified eye/jitter thresholds: pass margin ≥ X (placeholder), tracked across all corners.
Stress tests (DSI-specific corner focus)
Temp corner: cold/hot sweep (placeholder range) while monitoring stability metrics.
Voltage corner: rail variation/ripple scenarios (placeholder) to expose noise sensitivity.
Mode switching: FPS/resolution/color-depth changes in a fixed sequence, repeated for X cycles.
Mechanical A/B: controlled FPC bend/press near connector to screen assembly-induced intermittents.
Production screening (fast, high-yield filters)
Connector/FPC fit: quick mechanical sensitivity trial to catch borderline contact/return-path issues.
ESD symmetry risk: screen for assembly-induced asymmetry (ΔC-like effects) using repeatable A/B patterns.
Short stress script: prefer short, high-coverage switch/corner scripts over long, single-mode runs.
Pass criteria (placeholders)
Baseline stable time ≥ X min (placeholder).
Error increment ≤ X per minute (placeholder).
Re-train count ≤ X (placeholder).
Mode-switch success ≥ X % (placeholder).
Mechanical A/B delta ≤ X (placeholder).
Figure-10 · Test matrix (corner × metric × pass X) — card grid (no tables)
Corner (stimulus)
Metric (what to watch)
Temp
corner
Vin
variation
FPS
switch
Mode
switch
Mech
A/B
Error
count
Lock
state
Flicker
rate
Retrain
Resume
Pass X placeholders
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Temp
Vin
FPS
Mode
Mech
Error
Lock
Flick
Retr
Res
Engineering Checklist (Design → Bring-up → Production)
Goal: move from “lights up” to “production-stable” with three gated checklists.
Each gate requires evidence (logs, measurements, configs) plus pass criteria (threshold placeholders X). This prevents repeat failures such as
black screens after reboot, intermittent flicker, or assembly-sensitive artifacts.
Figure-11 · Gate checklist flow (Design → Bring-up → Production)
DSI Engineering Gates Checklist Flow
Three gates with compact checklist tiles and an evidence pack output.
Engineering Gates
freeze budgets → prove observability → screen for assembly variability
Design Gate
Bring-up Gate
Production Gate
Budget
Mode
Timing
SI Rules
ESD Sym
Power
Init
State
Counters
Frame
Regression
Recovery
Matrix
Assembly
Mech
ESD QA
Logs
Limits
Evidence Pack
budget sheet · timing contract · layout constraints · bring-up logs · screening recipe
Design Gate (freeze budgets + constraints)
Use short, evidence-driven checks. Avoid “best practice” paragraphs; every item must be provable.
1) Bandwidth budget locked
Evidence: budget sheet version + inputs (Res/FPS/BPP/Blanking/Compression).
Pass criteria: lane-rate margin ≥ X% ; no “active-only” math.
2) PHY mode + lane plan frozen
Evidence: chosen D-PHY/C-PHY mode + lane count + target lane rate.
Pass criteria: rate ≤ silicon limit (datasheet) with ≥ X% headroom.
3) Timing contract defined (Tx/Rx match list)
Evidence: one-page parameter contract: format, VC/DT, sync, blanking, ECC/CRC policy.
Pass criteria: automated config-diff check covers ≥ X fields.
4) Layout constraints published
Evidence: differential impedance + skew rules + “no split return” zones + connector pin strategy.
Pass criteria: violations in review = 0 .
5) Connector-side ESD symmetry rules committed
Evidence: ESD footprint + routing symmetry plan (pair-to-pair matching).
Pass criteria: ESD-to-connector distance ≤ X mm; no asymmetric stubs.
6) Power sequencing + rail noise plan
Evidence: rails/reset timing diagram + measurement points for PLL/PHY supplies.
Pass criteria: rail ripple (at test point) ≤ X mVpp; reset/enable guard time ≥ tX .
Example BOM parts (verify per design)
DSI→LVDS bridge: TI SN65DSI83 / SN65DSI84
DSI→eDP bridge: TI SN65DSI86
MIPI D-PHY ReDriver (trace/connector loss): Diodes Inc. PI2MEQX2505 (4-lane+clk), PI2MEQX2503A (2-lane+clk)
Ultra-low-C ESD options: Nexperia PHDMI2BB4 (diode array), ST HSP051-4N10 (4-ch array), TI ESD204 (ultra-low-C)
FPC connector (0.5mm pitch example): Hirose FH12 series (e.g., FH12-12S-0.5SH(55) )
Panel rail load switch: TI TPS22919 (controlled rise)
Low-noise / low-Iq LDO example: TI TPS7A02 (200mA class)
Bring-up Gate (make it repeatable + observable)
1) Init sequence is reproducible
Evidence: init log with timestamps (guard times as tX ).
Pass criteria: cold boot success rate ≥ X% across Y cycles.
2) Snapshot points exist (state / lock / lane stop)
Evidence: register snapshot schema (link state, ULPS, PLL lock, error counters).
Pass criteria: missing fields = 0 ; snapshot overhead acceptable.
3) Frame boundary stability validated
Evidence: TE/VS/line-boundary capture (platform equivalent is acceptable).
Pass criteria: boundary jitter/drift ≤ X ; no periodic “frame slips”.
4) Regression script exists (mode switches)
Evidence: scripted transitions: FPS/format/brightness/sleep-resume.
Pass criteria: continuous run ≥ X minutes; retrain count ≤ X .
5) Correlation tests done (temp / rail / touch)
Evidence: A/B log pairs: temperature corners, rail ripple injection, mechanical press test.
Pass criteria: symptom classified to a primary layer (clock / SI / power / timing).
6) Recovery loop validated
Evidence: recovery recipe: reset PHY → retrain → re-send init → validate output.
Pass criteria: recovery success rate ≥ X% ; time-to-recover ≤ X ms.
Optional support parts (often used in bring-up)
I²C GPIO expander (reset/enable control): TI TCA9535 / NXP PCA9555
Level translator (if mixed voltages): TI TXS0108E / Nexperia NVT2008
Production Gate (screen for assembly-sensitive failures)
1) Screening matrix defined
Evidence: corners × metrics: (Temp/Vin/FPS/Mode) × (errors/lock/flicker).
Pass criteria: coverage ≥ X corners; failures produce actionable logs.
2) Assembly consistency checks
Evidence: connector insertion depth + latch state + FPC bend radius constraints.
Pass criteria: out-of-spec cases = 0 ; rework does not change behavior.
3) Mechanical sensitivity test included
Evidence: press/bend/tap tests with timestamped symptom markers.
Pass criteria: flicker/artifacts rate ≤ X% across Y samples.
4) ESD protection audit
Evidence: incoming inspection + placement symmetry photo checks for ESD arrays.
Pass criteria: pair mismatch risk items = 0 ; ESD failures produce root-cause logs.
5) Field log schema frozen
Evidence: stable log fields: link state, lock, counters, mode, timing hash.
Pass criteria: logs are sufficient to choose the first measurement without rework.
Applications & IC Selection
A) Applications (DSI / DSI-2 display links)
Applications are listed only to map system shapes and requirements. This section does not compare to other protocols.
Typical system shapes
SoC → Panel (direct DSI link; shortest path, highest sensitivity to timing/SI details)
SoC → Bridge → Panel (format conversion; adds configuration + validation surface)
Dual-display (two links or split paths; bandwidth and synchronization must be budgeted explicitly)
Where DSI is commonly used
Mobile/tablet panels · AR/VR micro-displays · Industrial HMI panels · Automotive cockpit displays
B) IC Selection Logic (classes + decision map)
Select by requirements first (lane rate, mode, low-power behavior, observability), then map to IC classes with concrete examples.
Must-answer questions (selection dimensions)
Required lane rate and margin policy (≥ X% )
D-PHY / C-PHY support requirement (and compatibility constraints)
Lane count (1/2/4 or dual-channel) and scaling needs
Video vs command mode usage; TE (or equivalent) requirement
Sleep/ULPS/resume expectations and recovery behavior
Timing flexibility: dynamic FPS / blanking / format switches
Debug visibility: state snapshots, counters, retrain indicators
Integration risk: firmware complexity, config-table drift, ESD parasitic sensitivity
IC classes with example part numbers
DSI → LVDS bridge class: TI SN65DSI83 (single-link LVDS) / SN65DSI84 (dual-link options)
DSI → eDP bridge class: TI SN65DSI86
MIPI D-PHY signal-conditioning class: Diodes Inc. PI2MEQX2505 (4-lane+clk) / PI2MEQX2503A (2-lane+clk)
Bridge/FPGA glue logic class (format/routing needs): Lattice CrossLink family (e.g., LIF-MD6000 device class)
Connector-side ESD class (ultra-low-C / symmetry): Nexperia PHDMI2BB4 , ST HSP051-4N10 , TI ESD204
Power control class (panel rails): TI TPS22919 load switch; LDO example TI TPS7A02
FPC connector class: Hirose FH12 series (example: FH12-12S-0.5SH(55) )
Figure-12 · Application → selection decision map (single-column)
Application to Selection Decision Map
Top: application tiles. Bottom: requirement bubbles leading to IC classes with example part numbers.
Application → Requirements → IC Classes
Applications (system shapes)
SoC → Panel (direct)
SoC → Bridge → Panel
Dual-display / split paths
Assembly-sensitive links (FPC)
Decision map
Need LVDS panel?
Need eDP output?
Long/losy path?
Strict ESD symmetry?
DSI→LVDS
SN65DSI83 / SN65DSI84
DSI→eDP
SN65DSI86
D-PHY ReDriver
PI2MEQX2505 / 2503A
Connector-side
ESD: PHDMI2BB4 / HSP051-4N10 / ESD204 · FPC: FH12 series
FAQs (Field Troubleshooting, 4-line answers)
Scope: only field long-tail troubleshooting. No new domains, no protocol comparisons.
Each item is fixed to four lines: Likely cause / Quick check / Fix / Pass criteria (with numeric placeholders X/Y/tX).
▸
Link reports HS entry, but panel stays black—first check PLL lock or packet/timing mismatch?
Likely cause: PLL/byte-clock not stable, or Tx/Rx timing contract mismatch (lane/format/blanking/sync).
Quick check: Read PLL lock + lane stop/ULPS state; diff a config hash (lane count, pixel format, blanking).
Fix: Freeze to a known-good mode; reset PHY → wait tX ms → re-init → start video.
Pass criteria: PLL lock stays asserted ≥ X min ; retrain events ≤ X / hour over Y min .
▸
Flicker appears only after sleep/resume—ULPS exit timing or re-init sequence missing?
Likely cause: ULPS exit guard time too short, or resume path skips a required panel re-init step.
Quick check: Log ULPS enter/exit timestamps; confirm lane returns to LP/HS; verify init commands re-sent.
Fix: Resume recipe: exit ULPS → wait tX ms → re-send minimal init → restart video.
Pass criteria: Resume success ≥ X% across N cycles; flicker ≤ X / hour .
▸
Works at 60 fps, fails at 90/120—bandwidth margin, blanking, or lane rate cap?
Likely cause: Insufficient lane-rate headroom due to blanking/overhead, or lane-rate cap is reached.
Quick check: Recompute throughput including blanking + headers/ECC/CRC; compare programmed lane rate to max.
Fix: Reduce blanking, lower BPP, increase lanes (if possible), or step down FPS; keep margin ≥ X% .
Pass criteria: Lane-rate margin ≥ X% ; errors ≤ X over Y min at target FPS.
▸
Color looks wrong after switching pixel format—BPP/packing mismatch or endianness/DT mismatch?
Likely cause: Tx packing (BPP/endianness) changed but Rx expects old DT/format, causing payload mis-interpretation.
Quick check: Diff DT/VC/WC + pixel format on both ends; verify both packetizer and panel/bridge updated.
Fix: Atomic switch: stop video → update both ends → flush FIFOs → restart.
Pass criteria: Color bars correct; format-switch failures ≤ X / 10k over Y switches.
▸
Intermittent artifacts under load—power noise coupling into PLL or marginal SI at connector?
Likely cause: Rail ripple/ground bounce modulates PLL/clock, or connector/FPC SI margin is borderline at peak activity.
Quick check: Correlate artifacts with rail ripple at PLL/PHY supply (mVpp at test point) and retrain/error bursts.
Fix: Improve decoupling/return path; reduce aggressiveness; add conditioning if loss is high; enforce ESD symmetry.
Pass criteria: Ripple ≤ X mVpp ; artifacts = 0 over Y min at worst-case load.
▸
TE is present but tearing persists—TE polarity/window or command-mode scheduling jitter?
Likely cause: TE polarity/edge selection wrong, or update scheduling misses the safe window due to latency jitter.
Quick check: Capture TE phase vs frame boundary; measure worst-case scheduling latency jitter (timestamps).
Fix: Correct TE edge/polarity; reserve a guaranteed update window; cap per-frame update size.
Pass criteria: Tearing ≤ X / 10k frames ; TE-to-update latency jitter ≤ X µs over Y min .
▸
Stable on bench, unstable in enclosure—ground return discontinuity or ESD parasitic asymmetry?
Likely cause: Chassis bonding changes return path, or ESD/connector parasitics create mode conversion and reduce margin.
Quick check: A/B test shield bonding; inspect ground stitching + reference continuity; verify pair-to-pair symmetry near ESD.
Fix: Add ground stitching, avoid plane splits, minimize stubs; place symmetric ultra-low-C ESD close to connector.
Pass criteria: Failure rate ≤ X% in enclosure press/shake test; errors ≤ X over Y min .
▸
Only one panel SKU fails—init command table mismatch or timing tolerance narrower?
Likely cause: Wrong init table for that panel revision, or tighter timing tolerance requires different guard times.
Quick check: Validate panel ID/revision (if available) and selected init profile; compare timing parameters vs known-good SKU.
Fix: Add SKU-specific profiles; widen guard times to tX ms ; freeze format/timing to supported set.
Pass criteria: Boot success ≥ X% across N units; flicker = 0 over Y hours soak.
▸
Random “one-frame glitch” during dynamic refresh changes—unsafe frequency switch window?
Likely cause: FPS/lane-rate change occurs inside an unsafe window and breaks one frame’s timing contract.
Quick check: Timestamp switch relative to frame boundary; check PLL relock and lane state changes during active payload.
Fix: Switch only at safe points: stop video → wait tX ms → change rate → confirm lock → restart.
Pass criteria: Glitches = 0 over X switches; switch time ≤ X ms ; no retrain ≤ X .
▸
C-PHY mode works, D-PHY fails (or vice versa)—mode-specific timing/calibration not aligned?
Likely cause: Mode-specific timing/calibration parameters differ; one side uses the wrong profile assumptions.
Quick check: Confirm both ends actually switch mode (status + config); validate mapping and timing placeholders.
Fix: Separate mode profiles; apply a controlled reset/re-init sequence for each mode.
Pass criteria: Mode switch success ≥ X% ; stable run ≥ Y min with errors ≤ X .
▸
Error counters stay low, but users see flicker—measurement blind spot: frame pacing vs PHY errors?
Likely cause: Flicker driven by frame pacing/timing drift rather than PHY bit errors; counters miss pacing failures.
Quick check: Measure frame boundary stability and drop/duplicate events; log pacing metrics separately from PHY counters.
Fix: Enforce deterministic scheduling; lock refresh policy for critical modes; add pacing instrumentation alarms.
Pass criteria: Frame pacing deviation ≤ X% ; dropped/duplicated frames = 0 over X frames .
▸
After firmware update, failures increase—configuration defaults changed (lane count/format/blanking)?
Likely cause: Default lane/format/blanking/ULPS policy changed and silently broke the Tx/Rx timing contract.
Quick check: Diff before/after snapshots: lane count, DT/format, blanking, ULPS policy, PLL settings.
Fix: Freeze versioned profiles; add boot-time sanity checks; rollback to last-known-good on mismatch.
Pass criteria: Config hash identical; stable soak ≥ Y hours ; failure rate ≤ X% .