显示系统架构:车载显示硬件平台与多屏互动
各位同学,今天我们来聊聊ADAS融合显示的硬件基础。说白了,就是那些屏幕背后的东西——SoC、GPU、显示链路,还有多屏怎么协同工作。我在做第一代量产ADAS项目时,就吃过硬件选型的亏,所以这部分内容,我会把踩过的坑一并讲清楚。
车载显示硬件平台:SoC与GPU
车载显示的核心,是SoC(系统级芯片)。它不像手机SoC那样只追求跑分,车载SoC更看重稳定性、温度范围和实时性。我个人习惯把车载SoC分为三类:
| 类型 | 代表芯片 | 典型应用 | 我的评价 |
|---|---|---|---|
| 仪表专用 | 瑞萨R-Car D3 | 液晶仪表盘 | 稳,但性能上限低 |
| 座舱旗舰 | 高通SA8295 | 中控+副驾+AR-HUD | 性能强,但散热要命 |
| ADAS融合 | 英伟达Orin/Thor | 智驾+渲染+显示 | 算力冗余,但功耗高 |
GPU方面,车载场景有个特殊要求:必须支持多图层合成。你想想看,仪表盘要显示车速、导航箭头、ADAS警告、倒车影像,这些图层来自不同进程,GPU得把它们无缝叠在一起。我曾经在项目里遇到图层撕裂问题,查了三天才发现是GPU的合成管线没配好。
关键指标:车载GPU的填充率(Fill Rate)至少要达到 4K@60fps 的像素处理能力,否则多图层叠加时帧率会断崖式下跌。
显示链路:DSI与DP
SoC算完了,数据怎么送到屏幕?这就靠显示链路了。目前车载主流是两种接口:
- DSI(Display Serial Interface):MIPI联盟的标准,主要用于仪表盘和中小尺寸屏幕。带宽一般在 1-2 Gbps/lane,4 lane 配置下能跑 1080p@60fps。
- DP(DisplayPort):主要用于中控大屏和AR-HUD。带宽高,eDP 1.4 能到 8.1 Gbps/lane,支持 4K@120fps。
嗯,这里要注意:DSI和DP不能直接互连。我见过有人想用DSI接口驱动4K中控屏,结果带宽不够,画面卡成PPT。正确的做法是:
// 显示链路选择伪代码
if (分辨率 <= 1920x1080 && 帧率 <= 60fps) {
使用 DSI 接口;
} else if (分辨率 >= 2560x1440 || 帧率 > 60fps) {
使用 DP/eDP 接口;
} else if (需要长距离传输 > 1米) {
使用 FPD-Link 或 GMSL 桥接;
}
避坑指南:我曾经在项目里直接用DSI线缆连接仪表盘和SoC,结果EMI测试没过。后来发现DSI信号在PCB上超过15cm就必须加屏蔽,否则辐射干扰会影响到GPS和收音机。
多屏互动架构
现在的智能座舱,少则两块屏(仪表+中控),多则五块屏(仪表+中控+副驾+AR-HUD+后排)。这么多屏怎么协同?我总结了一套分层架构:
这个架构的核心思想是解耦。应用层不知道屏幕是DSI还是DP,服务层负责把多个应用的画面合成到对应屏幕,驱动层只关心时序和像素。我在做多屏互动时,最头疼的是跨屏拖拽功能——比如把导航从仪表拖到中控。这需要服务层维护一个全局的窗口树,每次拖拽都要重新计算图层Z序。
实战技巧:多屏互动时,建议用虚拟屏幕的概念。把物理屏幕抽象成逻辑屏幕,应用只跟虚拟屏幕交互。这样换屏幕硬件时,应用层代码不用改。我在一个项目中用这个方案,把仪表盘从LVDS换成eDP,只改了驱动层,上层完全没动。
显示时序与同步
多屏互动最大的坑是帧同步。仪表盘60fps,中控30fps,AR-HUD 90fps,如果不同步,会出现画面撕裂或延迟。我建议的做法是:
- 所有屏幕使用同一个参考时钟(通常来自SoC的PLL)
- 服务层维护一个全局帧计数器,每帧递增
- 每个屏幕的渲染线程等待全局帧号变化后再提交
- 使用双缓冲或三缓冲避免撕裂
// 帧同步伪代码
static uint32_t global_frame_id = 0;
void vsync_handler() {
global_frame_id++;
// 通知所有屏幕渲染线程
notify_all_screens();
}
void screen_render_thread(Screen* screen) {
uint32_t last_frame = 0;
while (1) {
wait_for_vsync();
if (global_frame_id != last_frame) {
// 提交当前帧
submit_frame(screen);
last_frame = global_frame_id;
}
}
}
注意:帧同步不能做得太死。如果某个屏幕卡住了,全局帧号不更新,其他屏幕也会跟着卡。我建议加一个超时机制:如果某个屏幕超过2帧没响应,就跳过它,继续推进全局帧号。
带宽计算与链路预算
最后,我们来算一笔账。假设你要驱动一块 1920x1080@60fps 的屏幕,色彩深度24bit:
| 参数 | 数值 | 说明 |
|---|---|---|
| 分辨率 | 1920 x 1080 | 约207万像素 |
| 帧率 | 60 fps | 每秒60帧 |
| 每像素位数 | 24 bit | RGB888 |
| 原始带宽 | 1920x1080x60x24 = 2.99 Gbps | 约3 Gbps |
| DSI 4 lane 有效带宽 | 4 x 1.5 Gbps = 6 Gbps | 够用 |
| DP 1.2 有效带宽 | 4 x 2.7 Gbps = 10.8 Gbps | 绰绰有余 |
你看,单块屏用DSI就够了。但如果是三块屏同时显示,总带宽接近9 Gbps,DSI就扛不住了。这时候要么用DP,要么用多路DSI。我个人习惯是:仪表盘用DSI,中控和副驾用DP,这样既省钱又够用。
总结一下:显示系统架构的核心是选对SoC、配好链路、做好同步。硬件选型时留30%的带宽余量,软件架构时做好分层解耦,多屏互动时注意帧同步和超时处理。做到这几点,你的ADAS融合显示系统基本就稳了。