Files
MiPi_TEST/reports/20260413_141707_analysis.html

114 lines
19 KiB
HTML
Raw Normal View History

2026-04-13 15:03:47 +01:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MIPI Analysis — Captures 08010830</title>
<style>
body { font-family: Arial, sans-serif; max-width: 900px; margin: 40px auto; padding: 0 20px; color: #222; }
h1 { color: #1a3a5c; border-bottom: 2px solid #1a3a5c; padding-bottom: 8px; }
.meta { color: #555; font-size: 0.95em; margin-top: -8px; margin-bottom: 24px; }
p { line-height: 1.6; }
ol, ul { line-height: 1.8; padding-left: 24px; }
li { margin: 4px 0; }
.tokens { color: #888; font-size: 0.8em; margin-top: 32px; border-top: 1px solid #ddd; padding-top: 8px; }
.flicker-alert { background: #fff3cd; border: 2px solid #e65100; border-radius: 6px;
padding: 16px 20px; margin-bottom: 28px; }
.flicker-alert h2 { color: #e65100; margin-top: 0; }
.flicker-alert table { border-collapse: collapse; width: 100%; margin-top: 10px; }
.flicker-alert th { background: #e65100; color: white; padding: 6px 10px; text-align: left; }
.flicker-alert td { border: 1px solid #ccc; padding: 5px 10px; }
table { border-collapse: collapse; width: 100%; }
th { background: #1a3a5c; color: white; padding: 6px 10px; text-align: left; }
td { border: 1px solid #ddd; padding: 5px 10px; }
@media print { body { margin: 20px; } }
</style>
</head>
<body>
<h1>MIPI D-PHY Analysis Report</h1>
<div style="background:#fff3cd;border:2px solid #e65100;border-radius:6px;
padding:16px 20px;margin-bottom:28px;">
<h2 style="color:#e65100;margin-top:0">&#9888; FLICKER DETECTED &mdash; 3 of 30 display load sessions (10%) flickered</h2>
<p>Each flagged capture is a genuine flicker event (not an artifact) — the LP pass fires at
pipeline startup, so a missing or sub-50&nbsp;ns LP-low plateau means the SN65DSI83 bridge
missed the SoT sequence and dropped a frame.<br>
LP-low plateau &lt; 50&nbsp;ns means the LP-01/LP-00 SoT states are absent or too brief
for the SN65DSI83 bridge to detect start-of-transmission.</p>
<table>
<tr><th>Capture</th><th>Timestamp</th><th>Channel</th>
<th>LP-low plateau</th><th>LP exit&rarr;HS</th><th>LP-11 voltage</th></tr>
<tr><td>0803</td><td>20260413_140238</td><td>dat</td><td style='color:red'>0.2 ns</td><td>2.9 ns</td><td>1.017 V</td></tr><tr><td>0810</td><td>20260413_140509</td><td>dat</td><td style='color:red'>0.2 ns</td><td>0.7 ns</td><td>1.016 V</td></tr><tr><td>0830</td><td>20260413_141222</td><td>dat</td><td style='color:red'>0.2 ns</td><td>3.4 ns</td><td>1.016 V</td></tr>
</table>
</div>
<details style="margin-bottom:24px;">
<summary style="cursor:pointer;font-weight:bold;color:#1a3a5c;font-size:1.05em;">
DSI Register Snapshots (30 captures)
</summary>
<div style="overflow-x:auto;margin-top:8px;">
<table>
<tr><th>Capture</th><th>Timestamp</th><th>0x32e100b4<br><small>DSIM_PHYTIMING</small></th><th>0x32e100b8<br><small>DSIM_PHYTIMING1</small></th><th>0x32e100bc<br><small>DSIM_PHYTIMING2</small></th></tr>
<tr><td>0801</td><td>20260413_140154</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0802</td><td>20260413_140216</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0803</td><td>20260413_140238</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0804</td><td>20260413_140259</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0805</td><td>20260413_140321</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0806</td><td>20260413_140342</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0807</td><td>20260413_140404</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0808</td><td>20260413_140426</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0809</td><td>20260413_140448</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0810</td><td>20260413_140509</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0811</td><td>20260413_140531</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0812</td><td>20260413_140553</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0813</td><td>20260413_140615</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0814</td><td>20260413_140636</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0815</td><td>20260413_140658</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0816</td><td>20260413_140720</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0817</td><td>20260413_140741</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0818</td><td>20260413_140803</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0819</td><td>20260413_140824</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0820</td><td>20260413_140846</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0821</td><td>20260413_140908</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0822</td><td>20260413_140929</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0823</td><td>20260413_140951</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0824</td><td>20260413_141013</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0825</td><td>20260413_141035</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0826</td><td>20260413_141056</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0827</td><td>20260413_141118</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0828</td><td>20260413_141140</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0829</td><td>20260413_141201</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr><tr><td>0830</td><td>20260413_141222</td><td>0x00000305</td><td>0x020e0a03</td><td>0x00030605</td></tr>
</table>
</div>
</details>
<p class="meta">
<strong>Generated:</strong> 2026-04-13 14:17:07 &nbsp;|&nbsp;
<strong>Scope:</strong> Captures 08010830 &nbsp;|&nbsp;
<strong>Model:</strong> claude-opus-4-6
</p>
<p># MIPI D-PHY Signal Integrity Analysis — Captures 08010830</p>
<ul><li></li></ul>
<p>## 1. Executive Summary</p>
<p><strong>The system is running with non-compliant D-PHY timing registers (&quot;Round Best&quot; mode) that violate 5 D-PHY v1.1 Table 14 parameters. The LP→HS SoT sequence on the data lane is systematically degraded across ALL 30 captures — every single capture shows LP exit duration ≤ 4 ns (spec ≥ 50 ns), and the 3 confirmed flicker events (0803, 0810, 0830) correlate perfectly with LP-low plateau = 0 ns, meaning the SoT LP-01/LP-00 states were completely absent. The SN65DSI83 bridge&#x27;s SoT detector failed to recognise the HS entry because there was no discernible LP-low state to trigger on. Switching to &quot;Round Up&quot; compliant registers is the primary fix; the non-deterministic nature of the failure is explained by the timing margins being so thin that cycle-to-cycle byte-clock jitter pushes the PHY across the detection threshold stochastically.</strong></p>
<ul><li></li></ul>
<p>## 2. Consistent Spec Concerns</p>
<p>### 2.1 Register Timing Violations (ALL 30 captures — identical)</p>
<p>Every capture shows the same &quot;Round Best&quot; register values:</p>
<p>| Parameter | Register Value | Actual | Spec Min | Shortfall | Severity |<br>|-----------|---------------|--------|----------|-----------|----------|<br>| <strong>THS_EXIT</strong> | 5 bc → 92.6 ns | 92.6 ns | 100.0 ns | <strong>7.4 ns (7.4%)</strong> | HIGH — affects LP→HS exit |<br>| <strong>TCLK_PREPARE</strong> | 2 bc → 37.0 ns | 37.0 ns | 38.0 ns | <strong>1.0 ns (2.6%)</strong> | HIGH — CLK SoT init |<br>| <strong>TCLK_TRAIL</strong> | 3 bc → 55.6 ns | 55.6 ns | 60.0 ns | <strong>4.4 ns (7.3%)</strong> | MEDIUM — affects HS→LP |<br>| <strong>TCLK_PREPARE+TCLK_ZERO</strong> | 16 bc → 296.3 ns | 296.3 ns | 300.0 ns | <strong>3.7 ns (1.2%)</strong> | HIGH — CLK lane HS init |<br>| <strong>THS_PREPARE+THS_ZERO</strong> | 9 bc → 166.7 ns | 166.7 ns | 168.2 ns | <strong>1.5 ns (0.9%)</strong> | CRITICAL — DATA lane SoT |</p>
<p><strong>Key insight:</strong> THS_PREPARE+THS_ZERO is only 1.5 ns below spec. At 54 MHz byte clock, one byte-clock period is 18.5 ns — the quantisation granularity is much larger than the deficit. The PHY hardware implements these as digital counters, but the analog output has process/voltage/temperature variation. The 1.5 ns shortfall means the SN65DSI83&#x27;s SoT detector is operating at the very edge of its recognition window. Some attempts succeed, some fail — this is the stochastic mechanism.</p>
<p>### 2.2 LP→HS SoT Timing (Universal Degradation)</p>
<p>| Metric | Good Captures (no flicker) | Flicker Captures (0803, 0810, 0830) |<br>|--------|---------------------------|--------------------------------------|<br>| LP exit → HS | 14 ns (all ✗, spec ≥ 50 ns) | 13 ns (all ✗) |<br>| LP-low plateau | 108348 ns | <strong>0 ns</strong> |<br>| HS amplitude (SE p-p/2) | 20113 mV | 33108 mV |</p>
<p><strong>Critical finding:</strong> Even the &quot;good&quot; captures show LP exit durations of 14 ns — universally violating the ≥ 50 ns specification. The difference between flicker and no-flicker is whether the LP-low plateau (the LP-00 state that signals SoT to the bridge) is present at all:</p>
<ul><li><strong>LP-low = 0 ns → FLICKER</strong> (bridge cannot detect SoT → stuck → persistent flicker)</li><li><strong>LP-low = 108348 ns → NO FLICKER</strong> (bridge detects SoT despite short LP exit)</li></ul>
<p>This three-valued distribution of LP-low plateaux (0, ~108, ~343 ns) suggests the PHY&#x27;s internal state machine is quantised — the LP-00 state duration is set by a counter that sometimes loads 0 counts.</p>
<p>### 2.3 HS Differential Amplitude</p>
<p>| Lane | Median Amplitude | Spec Range | Concern |<br>|------|-----------------|------------|---------|<br>| CLK | 165.5 mV | 140270 mV | <strong>Marginal low</strong> — only 25.5 mV above 140 mV floor |<br>| DAT0 | 190 mV | 140270 mV | Acceptable but CLK positive/negative asymmetry: +194/137 mV |</p>
<p><strong>CLK lane asymmetry:</strong> Consistently +194 mV positive, 137 mV negative → common mode offset of ~+29 mV. The negative swing (137 mV) is <strong>below 140 mV</strong> in many individual samples, explaining the persistent &quot;samples below 140 mV&quot; warnings (18201 samples per capture on CLK). This is a systematic PHY output imbalance, likely due to termination mismatch or PCB trace asymmetry.</p>
<p>### 2.4 LP-11 Voltage</p>
<p>Consistently 1.0151.017 V across all captures. Spec is 1.01.45 V (for 1.8 V VDDIO, LP-11 should be at VOH ≥ 1.1 V per D-PHY spec for reliable detection). <strong>At 1.016 V, this is at the absolute floor</strong> — the LP driver output is ~56% of VDDIO rather than the expected ~80%+. This reduces LP-state noise margin and makes SoT detection more susceptible to noise.</p>
<p><strong>Root cause:</strong> The LP-11 voltage at 1.016 V (rather than ~1.41.5 V) suggests either:<br>- The LP driver pull-up is fighting a low-impedance termination path to ground on the SN65DSI83 input<br>- PCB series resistance in the 1.8 V LP supply path<br>- The measurement is single-ended Dp or Dn only, and the LP voltage divider with the SN65DSI83&#x27;s internal 200 Ω termination is pulling it down</p>
<ul><li></li></ul>
<p>## 3. Trend Analysis Across Captures</p>
<p>### 3.1 No Temporal Drift<br>- <strong>HS amplitude:</strong> CLK 164167 mV, DAT0 186223 mV — flat, no drift<br>- <strong>Jitter:</strong> CLK p-p 143180 ps, RMS 5156 ps — stable<br>- <strong>1.8 V supply:</strong> Mean 1.7621.769 V, droop 6.712.0 mV — stable<br>- <strong>LP-11 voltage:</strong> 1.0151.017 V — dead flat<br>- <strong>LP-11 duration:</strong> 1.73 µs — identical across all captures (hardware timer)</p>
<p>### 3.2 LP-low Plateau Distribution (key finding)</p>
<p>Tabulating across all 30 captures with LP data:</p>
<p>| LP-low Plateau | Count | Flicker? |<br>|----------------|-------|----------|<br>| <strong>0 ns</strong> | 3 (0803, 0810, 0830) | <strong>YES — all 3 flicker events</strong> |<br>| <strong>~108 ns</strong> | 7 (0808, 0809, 0812, 0815, 0820, 0823, 0827, 0828) | No |<br>| <strong>~342-348 ns</strong> | 17 (0801, 0804, 0806, 0807, 0811, 0813, 0814, 0816, 0817, 0818, 0819, 0821, 0822, 0824, 0825, 0826, 0829) | No |<br>| <strong>No LP data</strong> | 2 (0802, 0805) — processing error | Unknown |</p>
<p>This trimodal distribution (0 / 108 / 343 ns) is <strong>highly diagnostic</strong>. The LP-low plateau appears to be quantised at ~0, ~6, or ~18.5 byte-clock intervals:<br>- 343 ns ÷ 18.5 ns/bc ≈ <strong>18.5 bc</strong> (likely 19 bc counter)<br>- 108 ns ÷ 18.5 ns/bc ≈ <strong>5.8 bc</strong> (likely 6 bc counter)<br>- 0 ns = <strong>counter not loaded / skipped</strong></p>
<p>The trimodal quantisation strongly suggests a <strong>race condition in the Samsung DSIM PHY state machine&#x27;s SoT sequencer</strong>. The byte-clock domain loads the LP-state counters, but a metastability event at the boundary between the LP clock domain and the byte-clock domain occasionally causes a counter to load 0 or a reduced value.</p>
<p><strong>The too-short THS_PREPARE+THS_ZERO (166.7 ns vs 168.2 ns spec) narrows the timing window for this counter load, making the race more likely to result in a 0 or reduced count.</strong></p>
<ul><li></li></ul>
<p>## 4. Supply Correlation Analysis</p>
<p>### 4.1 1.8 V Supply vs Flicker Events</p>
<p>| Capture | Flicker? | LP-low (ns) | 1.8V Mean (V) | Droop (mV) | Ripple RMS (mV) |<br>|---------|----------|-------------|----------------|------------|-----------------|<br>| 0803 | <strong>YES</strong> | 0 | 1.7638 | 7.9 | 5.65 |<br>| 0810 | <strong>YES</strong> | 0 | 1.7642 | 8.2 | 5.54 |<br>| 0830 | <strong>YES</strong> | 0 | 1.7685 | 8.5 | 5.42 |<br>| 0801 | No | 343 | 1.7644 | 8.4 | 5.40 |<br>| 0804 | No | 343 | 1.7680 | 12.0 | 5.97 |<br>| 0825 | No | 343 | 1.7625 | 10.5 | 5.92 |</p>
<p><strong>Conclusion: No supply correlation.</strong> The flicker captures have droop/ripple values well within the range of non-flicker captures. Capture 0804 has the *highest* droop (12.0 mV) and *highest* ripple (5.97 mV) yet works perfectly. Capture 0830 (flicker) has the *highest* supply voltage (1.7685 V) in the batch. <strong>The supply is not the trigger.</strong></p>
<p>### 4.2 Supply Health<br>- All captures: Min voltage ≥ 1.752 V (spec 1.71 V) ✓<br>- Maximum droop: 12.0 mV (&lt; 1% of 1.8 V) ✓<br>- Ripple RMS: 5.125.97 mV — clean<br>- <strong>Supply is healthy and not contributing to the flicker.</strong></p>
<ul><li></li></ul>
<p>## 5. Warning/Error Explanations</p>
<p>### 5.1 &quot;CLK lane is in continuous HS mode — LP states not expected on CLK&quot;<br><strong>Explanation:</strong> Normal. In DSI video mode, the CLK lane enters HS once at pipeline start and remains in continuous HS mode. LP→HS transitions are only expected on data lanes. <strong>No action needed.</strong></p>
<p>### 5.2 &quot;Only negative swings in capture window — amplitude may be underestimated&quot;<br><strong>Explanation:</strong> The scope trigger captured a window where DAT0 was sending a long run of one polarity (e.g., a blanking pattern or repeated byte). With DDR signalling, a long run of `0x00` or `0xFF` data would produce only one polarity of differential swing. The reported amplitude (190195 mV) is consistent with the proto captures, so <strong>this is a trigger windowing artefact, not a signal problem.</strong> The amplitude is valid as a lower bound.</p>
<p>### 5.3 &quot;No HS signal detected — line may be in LP state or idle&quot; (sig/dat in 0804, 0808, 0811, 0813, 0827)<br><strong>Explanation:</strong> The high-res sig capture triggered during an inter-frame blanking interval when the data lane was in LP-11 or LP-00 idle state. In DSI video mode with non-burst timing, the data lane returns to LP between frames. <strong>Trigger timing variability, not a signal fault.</strong> Consider triggering sig captures on a specific HS burst.</p>
<p>### 5.4 &quot;[lp_dat] ERROR: index 200000 is out of bounds&quot; (0802, 0805)<br><strong>Explanation:</strong> The LP analysis script&#x27;s edge-detection algorithm ran off the end of the capture buffer without finding the expected LP→HS transition within the 200k-sample window. Most likely cause: <strong>the trigger fired too early or too late relative to the SoT event</strong>, placing it outside the capture window. These captures have no LP data — they are neither flicker-confirmed nor flicker-excluded. <strong>Increase LP capture depth or adjust trigger holdoff by ±1 µs.</strong></p>
<p>### 5.5 &quot;LP exit duration X ns below spec min 50 ns&quot; (ALL captures with LP data)<br><strong>Explanation:</strong> This is the systemic problem. Every single data-lane LP capture shows LP exit (time from LP-11 falling edge to HS-0 crossing) of 14 ns versus the 50 ns minimum. <strong>The PHY&#x27;s LP→HS transition is too fast for the bridge to track.</strong> The SN65DSI83&#x27;s input comparators need time to switch from LP mode (high-voltage, ~1 V common mode) to HS mode (low-voltage, ~200 mV differential). A 14 ns transition gives no settling time.</p>
<p><strong>Root cause linkage:</strong> This maps directly to the THS_EXIT violation (92.6 ns vs 100 ns spec). But the measured 14 ns is far shorter than even the programmed 92.6 ns. This suggests the LP exit metric is measuring a different event — likely the Dp/Dn single-ended fall time from LP-11 (~1.0 V) to 0 V, which is the analog slew rate of the LP driver turning off. The programmed THS_EXIT of 92.6 ns controls how long the PHY stays in LP-00 after LP-01 before asserting HS, but if the LP-01 and LP-00 states are being skipped or truncated (as the 0 ns LP-low plateau confirms), <strong>THS_EXIT never executes properly</strong>.</p>
<p>### 5.6 &quot;X settled samples below 140 mV&quot; (CLK lane, all captures)<br><strong>Explanation:</strong> CLK differential amplitude has a negative-swing shortfall (137 mV typical vs 140 mV spec). With noise, ~0.55% of settled HS samples dip below 140 mV. This is the <strong>CLK common-mode offset (+29 mV)</strong> causing asymmetric clipping. While functional, it reduces clock eye margin.</p>
<ul><li></li></ul>
<p>## 6. Detailed Root Cause Analysis</p>
<p>### 6.1 Why the Flicker is Non-Deterministic</p>
<p>The failure mechanism is a <strong>digital race condition in the DSIM PHY&#x27;s SoT state machine</strong>, amplified by timing parameters set below spec:</p>
<ol><li>At pipeline load, the DSIM controller commands the PHY to execute LP-11 → LP-01 → LP-00 → HS-0 (SoT sequence)</li><li>The LP-state durations are controlled by byte-clock counters loaded from PHYTIMING/PHYTIMING2 registers</li><li>THS_PREPARE+THS_ZERO is programmed to 9 byte-clocks (166.7 ns) — <strong>1.5 ns below the 168.2 ns spec minimum</strong></li><li>The PHY&#x27;s internal clock-domain crossing between LP and HS domains has a synchronisation window</li><li>When the counter values are at the spec boundary, the synchroniser occasionally <strong>drops a count or skips the LP-00 state entirely</strong></li><li>This is a classic metastability-induced non-deterministic failure</li></ol>
<p>The trimodal LP-low distribution (0 / 108 /</p>
<p class="tokens">Tokens: 45448 in / 4096 out</p>
</body>
</html>