354 lines
45 KiB
HTML
354 lines
45 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>MIPI DSI Flicker — Root Cause Investigation</title>
|
||
<style>
|
||
:root {
|
||
--arrive-purple: #5f016f;
|
||
--arrive-purple-dark: #3e0049;
|
||
--arrive-pink: #ff32a2;
|
||
--arrive-tint: #faf3fb;
|
||
--arrive-pink-tint: #fff0f8;
|
||
--text: #1a1a1a;
|
||
--muted: #666;
|
||
--rule: #e6dbe9;
|
||
--pass: #1a7f37;
|
||
--fail: #c62a3d;
|
||
--warn: #b58105;
|
||
}
|
||
body { font: 15px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI",
|
||
Roboto, sans-serif; max-width: 920px; margin: 0 auto;
|
||
padding: 0; color: var(--text); background: #fff; }
|
||
.page { padding: 0 28px 36px; }
|
||
.banner { background: var(--arrive-purple); padding: 18px 28px;
|
||
display: flex; align-items: center; gap: 24px;
|
||
border-bottom: 4px solid var(--arrive-pink); }
|
||
.banner img { height: 64px; width: auto; display: block;
|
||
border-radius: 4px; }
|
||
.banner .who { color: #fff; font-size: 13px; opacity: 0.9;
|
||
line-height: 1.4; }
|
||
.banner .who strong { display: block; font-size: 15px; opacity: 1;
|
||
margin-bottom: 2px; }
|
||
h1 { font-size: 26px; color: var(--arrive-purple);
|
||
border-bottom: 3px solid var(--arrive-purple); padding-bottom: 8px;
|
||
margin: 32px 0 4px; }
|
||
h2 { font-size: 19px; color: var(--arrive-purple); margin: 28px 0 8px;
|
||
border-bottom: 1px solid var(--rule); padding-bottom: 4px; }
|
||
h3 { font-size: 16px; margin: 18px 0 6px; color: var(--arrive-purple-dark); }
|
||
.meta { color: var(--muted); font-size: 13px; margin-bottom: 18px; }
|
||
.tldr { background: var(--arrive-tint); border-left: 4px solid var(--arrive-purple);
|
||
padding: 14px 18px; margin: 16px 0 24px;
|
||
border-radius: 0 6px 6px 0; }
|
||
.tldr strong { color: var(--arrive-purple); }
|
||
table { border-collapse: collapse; margin: 8px 0 16px; font-size: 14px;
|
||
width: 100%; }
|
||
th, td { padding: 7px 12px; text-align: left;
|
||
border-bottom: 1px solid var(--rule); }
|
||
th { background: var(--arrive-purple); color: #fff; font-weight: 600; }
|
||
td.num { text-align: right; font-variant-numeric: tabular-nums; }
|
||
tbody tr:nth-child(even) { background: var(--arrive-tint); }
|
||
.pass { color: var(--pass); font-weight: 600; }
|
||
.fail { color: var(--fail); font-weight: 600; }
|
||
.warn { color: var(--warn); font-weight: 600; }
|
||
code { font: 13px/1.4 "SF Mono", Menlo, Consolas, monospace;
|
||
background: var(--arrive-tint); padding: 1px 5px; border-radius: 3px;
|
||
color: var(--arrive-purple-dark); }
|
||
pre { background: var(--arrive-purple-dark); color: #f7e9f9; padding: 12px 16px;
|
||
border-radius: 4px; font: 13px/1.5 "SF Mono", Menlo, Consolas, monospace;
|
||
overflow-x: auto; }
|
||
pre.diagram { background: var(--arrive-tint); color: var(--text);
|
||
border-left: 4px solid var(--arrive-purple); }
|
||
.verdict { font-size: 18px; margin: 18px 0; padding: 16px 20px;
|
||
background: var(--arrive-pink-tint);
|
||
border: 2px solid var(--arrive-pink);
|
||
border-radius: 8px; }
|
||
.verdict strong.big { font-size: 22px; color: var(--arrive-purple); }
|
||
ul.tight li { margin-bottom: 4px; }
|
||
.footnote { color: var(--muted); font-size: 12px; margin-top: 32px;
|
||
border-top: 1px solid var(--rule); padding-top: 10px; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<div class="banner">
|
||
<img src="data:image/png;base64,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AACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAAAACQnNAKAAAAAACA5IRWAAAAAAAAJCe0AgAAAAAAIDmhFQAAAAAAAMkJrQAAAAAAAEhOaAUAAAAAAEByQisAAAAAAACSE1oBAAAA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AAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0QisAAAAAAADSCa0AAAAAAABIJ7QCAAAAAAAgndAKAAAAAACAdEIrAAAAAAAA0gmtAAAAAAAASCe0AgAAAAAAIJ3QCgAAAAAAgHRCKwAAAAAAANIJrQAAAAAAAEgntAIAAAAAACCd0AoAAAAAAIB0/w9T1XH95rH4WQAAAABJRU5ErkJggg==" alt="Arrive">
|
||
<div class="who">
|
||
<strong>Hardware Engineering</strong>
|
||
Display interface investigation
|
||
</div>
|
||
</div>
|
||
|
||
<div class="page">
|
||
|
||
<h1>MIPI DSI Flicker — Root Cause Investigation</h1>
|
||
<div class="meta">
|
||
Display flicker on i.MX 8M Mini → SN65DSI83 → LVDS panel<br>
|
||
Investigation period: May 7 – May 11, 2026 ·
|
||
Author: David Rice
|
||
</div>
|
||
|
||
<div class="tldr">
|
||
<strong>TL;DR.</strong> The flicker is caused by the
|
||
<code>PUT /video stop</code> path on the i.MX, not by signal-integrity
|
||
on the MIPI bus, not by the SN65DSI83 itself, and not by the panel.
|
||
Each video stop tears down the DSI HS-clock; the SN65's PLL loses lock
|
||
for 15–45 ms (1–3 display frames); on the subsequent start, the
|
||
PLL must re-acquire and the LVDS output is briefly garbled — the
|
||
visible flicker. <strong>Fix:</strong> change "stop" semantics so the
|
||
HS-clock keeps running (e.g. GStreamer <code>PAUSED</code> instead of
|
||
<code>NULL</code>), or simply avoid stopping video in production.
|
||
</div>
|
||
|
||
<h2>1. The problem</h2>
|
||
<p>
|
||
An i.MX 8M Mini SoC drives a SN65DSI83 MIPI-DSI → LVDS bridge into an
|
||
LCD panel. Under steady-state operation the display sometimes flickers.
|
||
Initial hypothesis: a MIPI bit-error or signal-integrity issue on the
|
||
CLK or data lanes.
|
||
</p>
|
||
|
||
<h2>2. Investigation summary</h2>
|
||
|
||
<table>
|
||
<thead><tr><th>Phase</th><th>Approach</th><th>Result</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>1 – proto decoder</td>
|
||
<td>Decode raw MIPI bursts from differential captures, look for byte-level anomalies</td>
|
||
<td><span class="fail">Inconclusive.</span> Capture coverage was ~0.0004% of time
|
||
(20 µs windows on a 10 s cycle). Flicker events not captured.</td></tr>
|
||
<tr><td>2 – segmented memory</td>
|
||
<td>Use scope's segmented-memory mode to capture 100 LP-trigger events per acquisition
|
||
(~50× higher coverage), analyse per-segment</td>
|
||
<td><span class="warn">Negative result.</span> Flicker and non-flicker captures
|
||
statistically indistinguishable across all LP-state metrics.</td></tr>
|
||
<tr><td>3 – SN65 register monitor</td>
|
||
<td>High-rate HTTP polling of SN65DSI83's status registers
|
||
(<code>csr_0a</code>, <code>csr_e5</code>) to catch transient PLL events
|
||
the post-event snapshot missed</td>
|
||
<td><span class="pass">Smoking gun found.</span> PLL unlocks during flicker
|
||
sessions, never during good sessions.</td></tr>
|
||
<tr><td>4 – Pulse-width characterisation</td>
|
||
<td>100 Hz polling (median 20 ms) to measure actual unlock pulse width</td>
|
||
<td>Pulse width <strong>15–45 ms</strong> (1–3 display frames). Too short for
|
||
a software-driven clock pause; too short for a brownout-and-restart.
|
||
Consistent with a brief clock-lane disturbance.</td></tr>
|
||
<tr><td>5 – Cycling vs hold</td>
|
||
<td>Compare PLL behaviour under continuous video to behaviour under
|
||
on/off cycling</td>
|
||
<td><span class="pass">Definitive.</span> 0 unlocks in 10 min 51 s of
|
||
continuous video. 30 unlocks in 9 min of cycling. The cycling is
|
||
the trigger.</td></tr>
|
||
<tr><td>6 – Transition isolation</td>
|
||
<td>Time-correlate every unlock against each <code>PUT /video start</code>
|
||
and <code>PUT /video stop</code> event</td>
|
||
<td><span class="pass">Conclusive.</span> 100% of unlocks happen 225–259 ms
|
||
after <code>stop</code>. 0% after <code>start</code>.</td></tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>3. Key data</h2>
|
||
|
||
<h3>3.1 Continuous video (hold) — baseline</h3>
|
||
<table>
|
||
<thead><tr><th>Run</th><th class="num">Duration</th><th class="num">PLL unlocks</th>
|
||
<th class="num">Rate</th><th class="num">I²C read errors</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>Hold (no cycling)</td><td class="num">650.9 s</td>
|
||
<td class="num pass">0</td><td class="num pass">0.0/min</td>
|
||
<td class="num pass">0.0%</td></tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>3.2 Video on/off cycling</h3>
|
||
<table>
|
||
<thead><tr><th>Run</th><th class="num">Duration</th><th class="num">Cycles</th>
|
||
<th class="num">PLL unlocks</th><th class="num">Unlocks / cycle</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>May 11 — 30 unlock-recovery pairs</td>
|
||
<td class="num">~9 min</td><td class="num">~54</td>
|
||
<td class="num fail">30</td><td class="num fail">0.56</td></tr>
|
||
<tr><td>May 11 — controlled (17 cycles)</td>
|
||
<td class="num">177 s</td><td class="num">17</td>
|
||
<td class="num fail">8</td><td class="num fail">0.47</td></tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h3>3.3 Unlock pulse-width distribution</h3>
|
||
<table>
|
||
<thead><tr><th>Metric</th><th class="num">Value</th><th>Notes</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>min</td> <td class="num">14.5 ms</td><td>under 1 frame at 60 Hz</td></tr>
|
||
<tr><td>median</td> <td class="num">21.3 ms</td><td>~1.3 frames</td></tr>
|
||
<tr><td>p90</td> <td class="num">40.0 ms</td><td>~2.4 frames</td></tr>
|
||
<tr><td>max</td> <td class="num">44.5 ms</td><td>~2.7 frames</td></tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="verdict">
|
||
<strong class="big">Transition-isolation verdict (n = 8)</strong><br><br>
|
||
Unlocks <strong>after STOP:</strong> <strong>8 / 8 (100%)</strong> ·
|
||
median offset <strong>230 ms</strong> (range 225–259 ms)<br>
|
||
Unlocks <strong>after START:</strong> 0 / 8 (0%)<br>
|
||
Unlocks unattributable to either: 0 / 8 (0%)
|
||
</div>
|
||
|
||
<h2>4. Mechanism</h2>
|
||
|
||
<pre class="diagram">
|
||
PUT /video stop arrives
|
||
│
|
||
│ ~5 ms HTTP / Flask processing
|
||
│ ~50-150ms App + GStreamer pipeline tears down
|
||
│ (state goes to NULL)
|
||
▼
|
||
DSIM driver disables HS_CLK_EN ──────► ~230 ms after stop
|
||
│
|
||
▼
|
||
MIPI CLK lane goes to LP-11
|
||
│
|
||
▼
|
||
SN65DSI83 sees no reference clock
|
||
│
|
||
▼
|
||
PLL drops lock ◄── csr_e5.pll_unlock = 1 caught here
|
||
(pulse width 15-45 ms)
|
||
│
|
||
▼
|
||
PLL re-acquires to "no-signal" idle state
|
||
│
|
||
(~500 ms OFF window)
|
||
│
|
||
PUT /video start
|
||
▼
|
||
DSIM re-enables HS_CLK_EN; MIPI traffic resumes
|
||
│
|
||
▼
|
||
SN65DSI83 PLL has to re-acquire to the new clock
|
||
│ (~10-30 ms, LVDS output is garbage during this)
|
||
▼
|
||
──── visible flicker on the panel ────
|
||
</pre>
|
||
|
||
<p>
|
||
The bridge is behaving correctly: a PLL is expected to lose lock when its
|
||
reference clock disappears. The defect is upstream — the act of
|
||
<em>stopping the video</em> drops the MIPI HS-clock, which puts the bridge
|
||
through an unlock-relock cycle every time, and the next start has to
|
||
re-acquire from cold. That re-acquisition window is the visible flicker.
|
||
</p>
|
||
|
||
<h2>5. Recommended fix</h2>
|
||
|
||
<p>Two orthogonal options. Either should eliminate the flicker.</p>
|
||
|
||
<h3>5.1 Don't tear the pipeline down</h3>
|
||
<p>
|
||
In the device-side video stack, change the "stop" path from a full
|
||
teardown to a soft pause that <strong>keeps the DSI HS-clock running</strong>.
|
||
For GStreamer:
|
||
</p>
|
||
<pre>// Today (causes flicker):
|
||
gst_element_set_state(pipeline, GST_STATE_NULL);
|
||
|
||
// Proposed:
|
||
gst_element_set_state(pipeline, GST_STATE_PAUSED);
|
||
</pre>
|
||
<p>
|
||
<code>PAUSED</code> retains the pipeline graph and buffers — and, importantly,
|
||
doesn't trigger the bridge-disable path in the i.MX DSIM driver, so HS-CLK
|
||
stays on and the SN65 PLL stays locked through the transition. Resume is
|
||
near-instant and visually clean.
|
||
</p>
|
||
|
||
<h3>5.2 Don't stop video in production</h3>
|
||
<p>
|
||
If the only reason <code>/video stop</code> is called in real deployments
|
||
is the flicker test harness itself, the flicker mode is purely an artefact
|
||
of the test. Production code that starts the stream once at boot and
|
||
leaves it running will see <strong>zero</strong> PLL unlocks (confirmed
|
||
empirically — 0 unlocks in 10 min 51 s of continuous video).
|
||
</p>
|
||
|
||
<h3>5.3 Verify the fix</h3>
|
||
<p>
|
||
Once the device server gains a soft-stop action (e.g.
|
||
<code>{"action": "pause"}</code>), <code>compare_stops.py</code> in this
|
||
repo runs an A/B test automatically:
|
||
</p>
|
||
<pre>STYLES = [
|
||
("stop_full", {"action": "start", "mode": "static-pink"}, {"action": "stop"}),
|
||
("stop_pause", {"action": "start", "mode": "static-pink"}, {"action": "pause"}),
|
||
]
|
||
$ python3 compare_stops.py --cycles 30
|
||
</pre>
|
||
<p>
|
||
A successful fix will show <code>~0.5</code> unlocks/cycle for
|
||
<code>stop_full</code> and <code>0.00</code> for <code>stop_pause</code>.
|
||
</p>
|
||
|
||
<h2>6. Tools developed</h2>
|
||
<table>
|
||
<thead><tr><th>Script</th><th>Purpose</th></tr></thead>
|
||
<tbody>
|
||
<tr><td><code>sn65_monitor.py</code></td>
|
||
<td>Polls SN65 status registers at 50–100 Hz, logs every PLL transition with
|
||
millisecond timestamps. Rolling 30 s buffer dumped to JSON on
|
||
<code>f</code>/<code>g</code> keypress.</td></tr>
|
||
<tr><td><code>video_cycler.py</code></td>
|
||
<td>Toggles <code>/video</code> start/stop on the device on a configurable
|
||
cadence. Logs every transition to a CSV. Has a <code>--hold</code>
|
||
mode for the no-cycling baseline.</td></tr>
|
||
<tr><td><code>analyze_session.py</code></td>
|
||
<td>Cross-references the latest SN65 log with the latest cycle log,
|
||
classifies each unlock as "after_START / after_STOP / neither",
|
||
prints a verdict.</td></tr>
|
||
<tr><td><code>compare_stops.py</code></td>
|
||
<td>Runs a controlled A/B/… test across multiple stop-style payloads.
|
||
Polls SN65 inline, attributes unlocks to the active style,
|
||
prints a comparison table. Use this to verify the eventual fix.</td></tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h2>7. Open questions</h2>
|
||
<ul class="tight">
|
||
<li><strong>The rare catastrophic black-screen mode.</strong> Most unlocks
|
||
recover cleanly within ~40 ms. Twice during the investigation a
|
||
flicker resulted in a persistent black screen. That is presumably the
|
||
same root cause but where PLL re-acquisition fails outright; eliminating
|
||
the trigger should eliminate the rare variant too, but worth
|
||
confirming with extended runs.</li>
|
||
<li><strong>The 8 % of "good" sessions that contained early unlock activity.</strong>
|
||
One <code>f</code> press on 11 May (08:33:28) had zero PLL activity in
|
||
the preceding minute, suggesting either an observation false-positive
|
||
or a separate, sub-poll-rate fault path. Worth keeping the
|
||
<code>sn65_monitor</code> running in any future regression testing
|
||
to catch.</li>
|
||
<li><strong>Device-side endpoint additions.</strong> Three small additions
|
||
would close out the diagnostic kit:
|
||
<ul>
|
||
<li><code>POST /video</code> support for <code>action=pause</code>
|
||
(GStreamer <code>GST_STATE_PAUSED</code>)</li>
|
||
<li><code>/registers</code> to expose the runtime DSIM registers
|
||
<code>DSIM_STATUS</code>, <code>DSIM_CLKCTRL</code>,
|
||
<code>DSIM_INTSRC</code>, <code>DSIM_FIFOCTRL</code> alongside the
|
||
existing PHY-timing config registers</li>
|
||
<li><code>GET /video/state</code> exposing the GStreamer pipeline
|
||
state (NULL / READY / PAUSED / PLAYING), which would let us
|
||
time-correlate the actual pipeline state transitions with the
|
||
PLL unlock window</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<div class="footnote">
|
||
Investigation traces, raw register snapshots, and the analysis scripts
|
||
are in this repository under <code>data/sn65_log/</code>,
|
||
<code>data/cycle_logs/</code>, and <code>data/compare_logs/</code>.
|
||
Each timestamped run is independently reproducible.
|
||
</div>
|
||
|
||
</div> <!-- /.page -->
|
||
|
||
</body>
|
||
</html> |