您尚未登录。

楼主 # 昨天 22:57:03

小兵
会员
注册时间: 昨天
已发帖子: 23
积分: 23

全志平台双屏同显/异显调试小结:LCD、HDMI、DE/TCON 怎么排

最近整理全志平台双屏显示相关问题,发现“同显”和“异显”经常被混在一起说,但实际排查时最好先把概念拆开,不然很容易在 dts、disp 配置和应用层之间来回绕。

1. 先区分同显和异显

双屏同显:两个输出口显示同一份画面。比如 LCD + HDMI 都显示 framebuffer0 的内容。这个更像 clone/mirror。

双屏异显:两个输出口显示不同画面。比如 LCD 显示主 UI,HDMI 显示副屏视频/广告/仪表。这个通常需要两个 layer/mixer/framebuffer,或者 DRM/KMS 下两个 CRTC/plane 组合。

这俩差别很大。同显主要看一路图像能不能复制到两个输出;异显则要看硬件显示引擎资源够不够、驱动有没有把两路暴露出来。

2. 全志显示链路大概怎么理解

可以粗略按这个链路看:

应用 / framebuffer / DRM
        ↓
Display Engine / Mixer / Layer
        ↓
TCON0 / TCON1
        ↓
LCD / RGB / LVDS / MIPI-DSI / HDMI / TV

所以双屏不只是打开两个屏节点,还要确认:

  • DE/mixer 是否支持两路输出;

  • TCON 是否分配正确;

  • LCD/HDMI 对应的输出类型和输出编号有没有配错;

  • framebuffer 或 DRM 设备有没有正常创建;

  • 应用层是否真的往对应屏幕输出内容。

3. BSP disp2 下常见配置点

老 BSP/disp2 方案里,经常会看到类似 screen0/screen1、disp_init、lcd0/lcd1、hdmi 等配置。排查时建议先看:

  • screen0_output_type

  • screen0_output_mode

  • screen1_output_type

  • screen1_output_mode

  • lcd_used

  • hdmi_used

  • fb0_width/fb0_height

  • fb1_width/fb1_height

同显时,有些 BSP 可以通过配置 clone/mirror 或让两个输出绑定同一路 framebuffer;异显时,一般要确认 fb0/fb1 是否都创建出来。

如果系统里只有 /dev/fb0,那大概率只能先做一路显示;如果有 /dev/fb0/dev/fb1,才比较适合继续看异显。

4. DRM/KMS 下怎么排

如果是主线内核或 DRM 方案,建议先用工具看资源:

modetest -M sun4i-drm

重点看:

  • connector:LCD/HDMI 是否都存在;

  • encoder/CRTC:是否有两套可用;

  • plane:主图层/overlay 是否够用;

  • mode:HDMI EDID 是否读到,LCD timing 是否正确。

同显可以尝试两个 connector 使用同一 framebuffer;异显则要分别给不同 CRTC/plane 设置不同 buffer。这个阶段别急着跑 Qt/应用,先用 modetest 把链路点亮更省时间。

5. 双屏异显最容易踩的坑

  1. 硬件资源不够
    不是所有 SoC 都能随便两路独立输出。有的只有一个 mixer,能同显但异显受限。

  2. TCON 分配错
    LCD 和 HDMI 可能分别走不同 TCON。DTS 或 sys_config 里输出编号错了,现象就是一个屏正常、另一个黑。

  3. HDMI EDID/HPD 问题
    HDMI 读不到 EDID 时,副屏可能根本没 mode。先固定 720p60 测试,不要一上来自动模式。

  4. 应用层只画了一个 fb
    底层 fb1 已经有了,但应用只往 fb0 画,自然看起来“第二屏没内容”。可以先用 cat /dev/urandom > /dev/fb1 或简单测试程序确认 fb1 是否有效。

  5. 内存带宽和像素格式
    两路高分辨率同时输出时,带宽压力会上来。调试阶段建议先用较低分辨率和 RGB565/ARGB8888 中一种固定格式,别一次把变量拉满。

6. 我建议的调试顺序

  1. 先单独点亮 LCD;

  2. 再单独点亮 HDMI;

  3. 确认两路分别都能工作后,再做同显;

  4. 同显稳定后,再看是否具备 fb1/第二 CRTC;

  5. 最后再做异显应用。

这样排查会比一开始就“双屏异显 + Qt + HDMI 自动模式 + 触摸”一起上省很多时间。

7. 一个实用判断

如果目标只是“主屏内容投到 HDMI”,优先走同显,简单很多。

如果目标是“LCD 操作界面,HDMI 播放另一个画面”,那就先确认 SoC/内核驱动是否真的支持两路独立 pipeline。别等应用写完才发现底层只有一路显示资源。

总之,全志双屏问题不要只盯一个 hdmi_usedlcd_used。按 DE/mixer、TCON、connector、framebuffer/DRM、应用输出这几层拆开看,基本就能定位是硬件资源、驱动配置,还是应用层没画到第二屏。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发