2、硬件接口解析:GPIO、SPI、I2C、RGB、LVDS、MIPI DSI物理层
各位做显示驱动的朋友,大家好。今天我们来聊聊硬件接口。说实话,很多刚入行的工程师拿到原理图,看到一堆接口名字就头大。GPIO、SPI、I2C、RGB、LVDS、MIPI DSI……这些到底怎么选?怎么用?
我当年刚接触联发科平台时,也踩过不少坑。有一次项目赶进度,我随手选了个SPI接口去刷屏,结果刷新率死活上不去。后来才发现,这种场景就该用RGB接口。嗯,今天我就把这些经验掰开了讲给你听。
2.1 GPIO:最基础的“开关”
GPIO,全称通用输入输出口。说白了,它就是芯片上的一个引脚,你可以控制它输出高电平或低电平,也可以读取外部信号是高还是低。
在LCD驱动中,GPIO主要干三件事:
- 复位控制: 给LCD模组一个复位信号,让它初始化。
- 背光控制: 通过PWM或简单的开关,控制屏幕亮度。
- 电源使能: 控制LCD的供电芯片是否工作。
重要提醒: GPIO虽然简单,但时序要求很严格。复位信号必须保持足够长的时间(通常至少10ms),否则LCD可能无法正常初始化。
我在项目中遇到过一个问题:屏幕偶尔花屏。查了半天,发现是复位GPIO的时序不对,复位脉冲太短了。改了一下代码,问题就解决了。所以,别小看GPIO。
2.2 SPI:控制与数据传输的“多面手”
SPI,串行外设接口。它用四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。
在LCD驱动中,SPI的典型用途:
- 发送初始化命令: 配置LCD的寄存器,设置分辨率、色彩格式等。
- 传输少量图像数据: 比如显示一个静态Logo或文字。
- 读取状态: 查询LCD是否忙碌或出错。
你想想看,SPI的速度比GPIO快多了,但比RGB和MIPI慢。所以它适合控制,不适合刷视频。
个人经验: 我建议你在初始化LCD时,先用SPI发送命令,确认模组能正常响应。如果SPI通信失败,后面的RGB或MIPI配置都是白搭。
2.3 I2C:两线制的“慢工出细活”
I2C,集成电路总线。它只用两根线:SCL(时钟)和SDA(数据)。
在LCD驱动中,I2C的常见场景:
- 读取触摸屏数据: 很多LCD模组集成了触摸屏,I2C用来读取触摸坐标。
- 配置LCD的辅助芯片: 比如电源管理芯片或背光驱动芯片。
- 读取模组ID: 验证你拿到的LCD型号是否正确。
I2C的速度通常只有100kHz到400kHz,比SPI慢。但它胜在连线少,适合板内通信。
避坑指南: 我曾经遇到过I2C总线锁死的问题。原因是某个从设备没有正确释放SDA线。解决办法是:在初始化时,先强制发送几个时钟脉冲,让总线恢复空闲状态。
2.4 RGB接口:并行传输的“老将”
RGB接口,也叫并行RGB接口。它用多根数据线同时传输红、绿、蓝三原色数据。
常见的RGB接口类型:
- RGB565: 16位数据线,红5位、绿6位、蓝5位。
- RGB666: 18位数据线,每色6位。
- RGB888: 24位数据线,每色8位。
RGB接口的典型信号:
| 信号名 | 功能 |
|---|---|
| PCLK | 像素时钟,每个时钟传输一个像素 |
| HSYNC | 行同步信号,表示一行数据的开始 |
| VSYNC | 帧同步信号,表示一帧数据的开始 |
| DE | 数据使能信号,表示当前数据有效 |
| R[7:0], G[7:0], B[7:0] | 红绿蓝数据线 |
RGB接口的优点是速度快,适合中小尺寸屏幕(比如5寸以下)。缺点是连线太多,占用的GPIO也多。
关键点: 联发科平台通常支持RGB接口的时序可编程。你可以通过配置寄存器来调整PCLK的极性、HSYNC和VSYNC的脉冲宽度。这些参数必须和LCD模组的数据手册完全匹配,否则显示会错位。
2.5 LVDS:差分传输的“长跑健将”
LVDS,低压差分信号。它用一对差分线传输一路数据,抗干扰能力强,适合长距离传输。
LVDS在LCD驱动中的特点:
- 高速: 单路LVDS可以跑到几百Mbps。
- 低功耗: 差分信号电压摆幅小,只有350mV左右。
- 抗干扰: 共模噪声会被差分接收器抑制掉。
常见的LVDS配置:
- 单路6位: 4对差分数据线 + 1对时钟线。
- 单路8位: 4对差分数据线 + 1对时钟线(数据映射方式不同)。
- 双路8位: 8对差分数据线 + 2对时钟线,用于高分辨率屏幕。
我记得有一次做车载项目,屏幕和主板之间距离有30厘米。用RGB接口根本不行,信号衰减太严重。换成LVDS后,画面稳得很。所以,大屏或长距离传输,首选LVDS。
个人建议: 在PCB布局时,LVDS差分对要等长走线,误差控制在5mil以内。否则信号时序会偏移,导致显示噪点。
2.6 MIPI DSI物理层:移动设备的“新贵”
MIPI DSI,移动行业处理器接口的显示串行接口。它是目前手机、平板等移动设备的主流选择。
MIPI DSI物理层的特点:
- 差分串行: 每路数据用一对差分线,类似LVDS。
- 可配置通道数: 支持1、2、3或4对数据线(Data Lane)。
- 双向通信: 除了下行数据,还支持上行读取(通过BTA机制)。
- 低功耗模式: 有高速模式(HS)和低功耗模式(LP)。
MIPI DSI的物理层信号:
| 信号名 | 功能 |
|---|---|
| CLKP / CLKN | 差分时钟线 |
| D0P / D0N | 第0路差分数据线 |
| D1P / D1N | 第1路差分数据线 |
| D2P / D2N | 第2路差分数据线 |
| D3P / D3N | 第3路差分数据线 |
MIPI DSI的速率计算:
举个例子,一个1080p(1920x1080)的屏幕,刷新率60Hz,色彩深度24位。需要的总带宽是:
1920 x 1080 x 24 x 60 = 2.99 Gbps
如果使用4路MIPI,每路速率大约是:
2.99 Gbps / 4 = 747.5 Mbps
所以,你需要选择每路速率至少为800Mbps的MIPI DSI发射器。
避坑指南: 我曾经在调试MIPI DSI时,屏幕一直不亮。查了半天,发现是物理层的电压不匹配。联发科平台的MIPI DSI通常要求1.2V的共模电压,而我的LCD模组要求1.8V。加了一个电平转换芯片后,问题解决。所以,一定要核对电压等级。
2.7 接口选型对比
最后,我整理了一个对比表,方便你快速决策:
| 接口类型 | 连线数量 | 最大速率 | 传输距离 | 典型应用 |
|---|---|---|---|---|
| GPIO | 1-2根 | 几MHz | 板内 | 复位、背光控制 |
| SPI | 4根 | 几十MHz | 板内 | 初始化命令、小数据量传输 |
| I2C | 2根 | 400kHz | 板内 | 触摸屏、配置芯片 |
| RGB | 20-30根 | 几十MHz | 短距离(<10cm) | 中小尺寸屏幕 |
| LVDS | 4-10对差分线 | 几百Mbps/路 | 长距离(>30cm) | 大屏、车载、工控 |
| MIPI DSI | 2-5对差分线 | 1.5Gbps/路 | 板内 | 手机、平板、智能穿戴 |
好了,这一章的内容就到这里。硬件接口是显示驱动的基石,选对了接口,后面的工作就顺风顺水。下一章,我们会深入联发科平台的时钟树配置,看看如何让这些接口跑出最佳性能。
总结一句话: 小屏用RGB,大屏用LVDS,移动设备用MIPI,控制用SPI/I2C,GPIO永远留一手备用。