AN-004: MIPI DSI Display + Backlight Bring-up
Scope
Bring up an external MIPI DSI display from the SoM and drive its backlight via the on-module driver. Applies to AEN (2-lane DSI, FHD) and V2N / V2N-M1 (2 × 4-lane DSI, up to 1920 × 1200 @ 60 fps per port).
Table: Scope summary
| Item | Detail |
|---|---|
| Audience | Firmware engineers integrating an LCD / OLED display into the SoM design. |
| Prerequisites | QS- guide completed; MIPI DSI display panel with a 40-pin FFC or similar; panel-specific init sequence. |
| Outcome | LVGL widgets demo running on the panel with the on-module backlight driver lit. |
| Time | 30 minutes (panel-specific init lookup is the long pole). |
| Source | examples/display/lvgl-widgets-demo/, examples/display/lvgl-music-player/ in alp-sdk. |
Hardware Setup
Table: DSI support per family
| SoM family | DSI interfaces + backlight |
|---|---|
| E1M-AEN | 1 × 2-lane DSI (DSI0), up to FHD. On-module backlight driver supporting up to 10 LEDs in series or 2P6S. BL_LED_A (A31) anode, BL_LED_K (B31) cathode, BL_PWM shared. |
| E1M-X V2N / V2N-M1 | 2 × 4-lane DSI (DSI0, DSI1), up to 1920 × 1200 @ 60 fps. Same backlight driver block, same control pins. |
The backlight LED current is set by a feedback resistor R_FB:
ILED = 95 mV / RFB
For a 20 mA LED chain: R_FB = 95 mV / 20 mA = 4.75 Ω.
Software Walkthrough
west build -b <BOARD> examples/display/lvgl-widgets-demo
west flash
The example brings DSI0 up at the panel-native resolution, draws an LVGL widget grid, and ramps the backlight from 0 — 100 % via BL_PWM.
For a custom panel, supply the panel's init sequence to the SDK's <alp/display.h> API (vendor-provided DCS write list). The LVGL/GUI binding is in <alp/gui.h>; 2D-GPU-accelerated blits use <alp/gpu2d.h>.
Expected Output
[disp] DSI0 init: 4 lanes @ TBD Mbps
[disp] panel init: <panel name> -> OK
[disp] backlight: ramp 0 -> 100% in 1 s
[lvgl] frame 0
[lvgl] frame 60 (1 s elapsed, 60 fps)
Troubleshooting
- Blank screen, backlight on: DSI init sequence mismatch. Print the panel's expected DCS command list and step through the SDK's send log.
- Screen tearing: TE (tearing-effect) line not connected or driver running without sync.
- Backlight not lighting: feedback resistor open / shorted; the on-module driver enters fault state. Check
R_FBvalue and routing. - Image too dim:
BL_PWMduty too low; the SDK defaults to 50 % at boot.
References
- Examples:
examples/display/lvgl-widgets-demo/,examples/display/lvgl-music-player/,examples/display/lvgl-benchmark/in alp-sdk. - SDK API:
<alp/display.h>(panel / DSI),<alp/gui.h>(LVGL binding),<alp/gpu2d.h>(2D GPU). - Silicon bring-up reg-checks:
examples/aen/aen-dsi-regcheck/,examples/aen/aen-gpu2d-bench/in alp-sdk. - Hardware Design Guides: HG-AEN-001 §5.4, HG-V2N-001 §6.5 (MIPI DSI + backlight design rules).
- Datasheet DSI pin tables: §2.3 in each datasheet.
Revision History
Table: Revision History
| Revision | Changes | Date |
|---|---|---|
| 0.1 | Initial draft. | May 2026 |
| 0.2 | Updated SDK references to current layout: example paths moved to examples/display/ (lvgl-widgets-demo, lvgl-music-player, lvgl-benchmark); added <alp/display.h> / <alp/gui.h> / <alp/gpu2d.h> APIs and the aen-dsi-regcheck / aen-gpu2d-bench silicon reg-checks. | June 2026 |
Questions about this page? Discuss in Community Forum