2. MIPI DSI协议详解:命令模式与视频模式、数据包格式、虚拟通道与模式切换
好,咱们今天来啃一块硬骨头——MIPI DSI协议的核心细节。说实话,这玩意儿刚接触的时候确实有点绕,但搞懂了之后你会发现,它其实就那么几件事。我当年第一次调DSI接口时,对着示波器看了三天波形,才把那些模式切换的时序给捋顺了。今天我把这些经验掰开了讲给你听。
2.1 命令模式 vs 视频模式:两种完全不同的玩法
DSI协议定义了两种工作模式,说白了就是:你要不要自己管刷新?
命令模式(Command Mode)
这种模式下,主控(AP)把显示数据写到显示模组的GRAM里,模组自己负责刷新屏幕。主控只需要在画面变化时更新数据就行。
- 优点:省电。静态画面时主控可以睡觉,模组自己刷。
- 缺点:需要GRAM,成本高,而且主控得发命令去读写GRAM。
- 典型应用:智能手表、小尺寸OLED屏。
视频模式(Video Mode)
主控实时地把每一帧数据流式地推给显示模组。模组没有GRAM,收到什么就显示什么。
- 优点:不需要GRAM,成本低,适合大尺寸屏幕。
- 缺点:主控必须持续发送数据,功耗高。
- 典型应用:手机主屏、平板、车载显示屏。
2.2 数据包格式:长包与短包
DSI通信的基本单位是数据包。不管你是发命令还是传图像,都得打包。包分两种:短包和长包。
短包(Short Packet)
固定4字节。用于发送命令、读取寄存器、同步信号等轻量级操作。
| 字节 | 内容 | 说明 |
|---|---|---|
| 0 | DI(Data Identifier) | 虚拟通道号 + 数据类型 |
| 1 | Data 0 | 数据低字节 |
| 2 | Data 1 | 数据高字节 |
| 3 | ECC | 纠错码 |
举个例子,发一个「进入睡眠模式」的命令,就是发一个短包,DI里写上命令类型,Data字段填0就行。
长包(Long Packet)
用于传输大量数据,比如一帧图像。结构如下:
| 包起始 | 数据标识符 | 字计数 | ECC | 数据负载 | 校验和 | 包结束 |
| SOT | DI | WC | ECC | Payload | CRC | EOT |
- 数据标识符(DI):和短包一样,标识虚拟通道和数据类型。
- 字计数(WC):2字节,表示数据负载的字节数。
- ECC:1字节,保护DI和WC。
- 数据负载:你要传的实际数据,比如RGB像素。
- 校验和(CRC):2字节,校验数据负载的完整性。
2.3 虚拟通道:一条总线,多个设备
DSI物理上只有一组差分对(Data Lane + Clock Lane),但逻辑上可以支持最多4个虚拟通道(Virtual Channel,VC)。
每个数据包的DI字段里,高2位就是VC号。显示控制器根据VC号把数据分发给不同的显示模组。
- VC0:通常用于主屏。
- VC1:副屏或摄像头预览。
- VC2/VC3:预留,比如双屏异显。
你想想看,如果手机有两个屏幕,一个主屏一个副屏,只需要一组DSI总线,通过VC区分就行。省引脚,省布线。
2.4 LP与HS模式切换:速度与功耗的平衡
DSI的物理层有两种信号模式:LP(Low Power,低功耗)和HS(High Speed,高速)。
LP模式
电压摆幅大(约1.2V),速率低(最大10Mbps)。用于传输控制命令、初始化序列、以及总线空闲时的低功耗状态。
- 差分信号变成单端信号(Dp和Dn独立驱动)。
- 功耗极低,但速度慢。
HS模式
电压摆幅小(约200mV),速率高(每lane可达1Gbps以上)。用于传输图像数据。
- 差分信号,抗干扰能力强。
- 功耗高,但速度快。
模式切换流程
从LP切换到HS,或者从HS切回LP,都有严格的时序要求。我画个简化的流程:
LP->HS切换:
1. 总线处于LP-11状态(Dp高,Dn高)
2. 发送LP-00(Dp低,Dn低)持续T_LPX时间
3. 发送LP-01(Dp低,Dn高)作为准备信号
4. 进入HS模式,开始发送HS数据
HS->LP切换:
1. HS数据传输结束
2. 发送T_HS_TRAIL时间的高电平
3. 进入LP-11状态
2.5 总结一下
DSI协议的核心就这四块:
- 命令模式 vs 视频模式:看你的屏有没有GRAM,有就用命令模式省电,没有就用视频模式。
- 长包 vs 短包:短包发命令,长包传数据。CRC别算错。
- 虚拟通道:一条总线带多个屏,靠VC号区分。
- LP/HS切换:低速省电,高速传图,切换时序必须精准。
嗯,这些搞明白了,DSI驱动你就入门了。下一节咱们聊聊实际调试时怎么用示波器抓这些包,怎么分析波形。到时候我会拿一个真实的案例来讲,保证你听完就能上手。