3、单片机与LCD接口方式:并行接口(8080/6800)、串行接口(SPI、I2C、UART)的电气特性与适用场景
LCD显示屏作为嵌入式系统中最重要的信息输出设备之一,其与单片机之间的接口方式直接决定了系统设计的复杂度、通信速率、引脚占用和抗干扰能力。在工业控制、消费电子和物联网终端中,工程师需要根据主控资源、显示刷新率要求和PCB布局约束,在并行接口(8080/6800)与串行接口(SPI、I2C、UART)之间做出合理选择。本章将深入剖析这五种接口的电气特性、时序机制、适用场景及工程选型方法,帮助读者建立从底层信号到系统级应用的完整认知。
3.1 并行接口:8080与6800的电气特性与工程应用
核心原理:并行总线的时序本质
并行接口通过多根数据线同时传输一个字节或多个字节,配合控制信号完成读写操作。8080接口(Intel总线)与6800接口(Motorola总线)是两种最经典的并行LCD控制协议。8080接口使用独立的写使能(WR#)和读使能(RD#)信号,而6800接口使用单一的使能信号(E)和读写选择线(R/W#)。两者的核心区别在于控制信号的产生方式:8080通过下降沿锁存数据,6800通过E信号的高电平期间锁存数据。
从电气特性来看,并行接口的数据线通常为推挽输出,高电平为IOVDD(通常为1.8V~3.3V),低电平为GND。控制信号(CS#、RS、WR#、RD#)同样为CMOS电平。数据建立时间(tSU)和保持时间(tHD)是并行接口最重要的时序参数,典型值在20~100ns之间,具体取决于LCD控制器的规格书。例如,ILI9341控制器要求写周期最小为66ns,数据建立时间最小为15ns。
判断方法:如何选择8080还是6800
选择8080还是6800接口,主要取决于主控MCU的现有外设资源。大多数主流MCU(如STM32、GD32、ESP32)的FSMC/FMC接口原生支持8080时序,因此使用8080接口无需额外GPIO模拟。而6800接口在MCU中较少直接支持,通常需要GPIO模拟或使用CPLD/FPGA进行时序转换。此外,部分LCD控制器(如SSD1963)同时支持两种模式,通过引脚配置选择。
| 对比维度 | 8080接口 | 6800接口 |
|---|---|---|
| 控制信号 | WR#(写)、RD#(读)独立 | E(使能)、R/W#(读写选择) |
| 数据锁存时机 | WR#上升沿锁存写入数据 | E高电平期间锁存数据 |
| MCU原生支持 | STM32 FMC、NXP FlexBus等 | 较少直接支持,需模拟 |
| 读写切换效率 | 读写信号独立,切换快 | 需先设置R/W#再拉高E,稍慢 |
| 典型应用 | TFT彩屏、工业HMI | 老式家电、汽车仪表盘 |
案例拆解:STM32F407驱动4.3寸TFT彩屏
某工业手持设备需要驱动4.3寸480×272 TFT彩屏,要求刷新率不低于30fps。我们选用STM32F407ZET6的FSMC接口,配置为8080模式,16位数据宽度。关键配置如下:
// FSMC 8080接口初始化关键代码
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能FSMC相关GPIO时钟
__HAL_RCC_FSMC_CLK_ENABLE();
// 配置数据线PD0-PD15为复用推挽输出
// 配置控制线:PD4(NOE/RD#)、PD5(NWE/WR#)、PD7(NE1/CS#)、PD11(NE1/RS)
// 时序参数设置
FSMC_NORSRAM_TimingTypeDef Timing = {0};
Timing.AddressSetupTime = 3; // 地址建立时间 3个HCLK
Timing.DataSetupTime = 5; // 数据建立时间 5个HCLK
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 0;
Timing.DataLatency = 0;
Timing.AccessMode = FSMC_ACCESS_MODE_A;
实际测试中,FSMC时钟频率为84MHz,单次写操作耗时约95ns,理论最大写带宽约10.5MB/s。在480×272分辨率下,每帧数据量为480×272×2字节=261KB,加上控制命令开销,实际刷新率可达35fps,满足设计要求。此方案的优势在于FSMC硬件自动产生时序,CPU占用率低于5%,且无需GPIO模拟。
3.2 串行接口:SPI、I2C、UART的电气特性与适用场景
核心原理:串行通信的协议分层
串行接口通过一根或两根数据线逐位传输数据,以降低引脚占用为代价换取更简单的PCB布局。SPI(Serial Peripheral Interface)采用主从架构,使用SCLK、MOSI、MISO和CS#四根线,支持全双工通信,时钟频率可达10MHz以上。I2C(Inter-Integrated Circuit)仅需SCL和SDA两根线,通过设备地址寻址,支持多主多从,标准模式100kbps、快速模式400kbps、高速模式3.4Mbps。UART(Universal Asynchronous Receiver/Transmitter)为异步串行通信,无需时钟线,通过起始位和停止位同步,典型波特率9600~921600bps。
从电气特性角度,SPI的SCLK和MOSI为推挽输出,MISO为从机推挽输出(或开漏+上拉),CS#为低电平有效。I2C的SCL和SDA均为开漏输出,必须外接上拉电阻(典型值1kΩ~10kΩ),上拉电阻的大小决定了信号上升沿时间和最大通信速率。UART的TX/RX为推挽输出,电平标准可为TTL(3.3V/5V)或RS-232(±12V),在长距离传输时需使用RS-232/RS-485收发器。
判断方法:根据显示需求选择串行接口
选择串行接口时,需综合考虑显示分辨率、刷新率、引脚预算和通信距离。以下为工程选型决策流程:
- 计算所需数据速率:帧率×分辨率×每像素位数。例如,128×64单色屏,30fps,1bpp,所需速率=128×64×30=245,760bps。
- 评估接口上限:SPI典型10Mbps,I2C快速模式400kbps,UART典型115200bps。
- 检查引脚预算:SPI需4根(可复用),I2C需2根,UART需2根。
- 考虑扩展性:I2C支持多设备挂载,SPI支持多从机片选,UART点对点。
| 接口类型 | 最大速率 | 引脚数 | 通信方式 | 典型LCD应用 |
|---|---|---|---|---|
| SPI | 10-20Mbps | 4 | 全双工同步 | OLED、小尺寸TFT(≤320×240) |
| I2C | 3.4Mbps | 2 | 半双工同步 | 单色字符屏、低刷新率图形屏 |
| UART | 921600bps | 2 | 全双工异步 | 远距离显示终端、调试屏 |
案例拆解:I2C接口OLED屏的功耗优化
一款智能手环采用0.96寸128×64 OLED屏(SSD1306控制器),通过I2C接口连接。设计约束为:电池容量200mAh,OLED平均功耗目标低于5mA。初始方案使用400kHz快速模式,每100ms刷新一次时间显示。实测功耗为8.2mA,超出预算。
分析发现,I2C通信本身功耗占比不高,但OLED的像素点亮功耗占主导。优化措施:
- 将I2C时钟降至100kHz,减少信号翻转功耗(节省约0.3mA)
- 开启SSD1306的“电荷泵”低功耗模式,降低内部DC-DC损耗
- 采用局部刷新策略,仅更新变化区域(时间数字区域),减少像素写入次数
- 在静态显示时,将I2C总线释放(SDA/SCL置高),避免总线空闲电流
优化后实测功耗降至3.1mA,满足设计指标。此案例说明,I2C接口虽然速率有限,但通过协议优化和显示策略调整,可以在低功耗场景中发挥优势。
3.3 接口选型综合对比与工程决策
核心原理:接口选型的系统思维
接口选型不是简单的速率对比,而是系统级的权衡。工程师需要同时考虑MCU资源、PCB面积、成本、功耗、EMI和可维护性。例如,虽然并行接口速率最快,但会占用大量GPIO,可能迫使MCU选择更大封装或更高成本型号。而串行接口虽然速率较低,但释放的GPIO可用于其他功能(如按键扫描、传感器读取)。
判断方法:五步选型法
- 列出显示需求:分辨率、色深、目标帧率、是否需要局部刷新。
- 计算最低数据速率:确保所选接口的理论速率≥2倍需求速率(留余量)。
- 盘点MCU资源:可用GPIO数量、可用的硬件外设(SPI/I2C/UART/FSMC)、DMA通道。
- 评估PCB约束:板层数、走线空间、EMI要求、连接器尺寸。
- 考虑供应链:LCD模组是否支持目标接口、是否有第二供应商。
案例拆解:双接口设计的工业仪表
一款工业温度控制器需要驱动2.4寸TFT彩屏(320×240,16位色),同时预留调试接口。设计团队面临两种方案:
| 方案 | 接口 | MCU | 成本 | 刷新率 |
|---|---|---|---|---|
| A | 8080并行 | STM32F407(LQFP100) | ¥28 | 45fps |
| B | SPI(40MHz) | STM32G474(LQFP64) | ¥18 | 22fps |
方案A刷新率高但成本高、引脚占用多;方案B成本低、引脚少,但刷新率仅22fps,在快速翻页时可能出现轻微拖影。最终团队选择方案B,并通过以下优化弥补速率不足:
- 使用RGB565格式(2字节/像素),而非RGB888(3字节/像素),减少33%数据量
- 开启SPI的DMA循环模式,实现后台刷屏
- 将静态背景图存储在MCU内部Flash,仅更新动态数据区域
优化后实际刷新率提升至28fps,满足人眼感知需求,且BOM成本降低35%。此案例表明,串行接口配合软件优化,可以在多数工业HMI场景中替代并行接口。
3.4 接口调试与排障实战
核心原理:接口故障的定位方法
LCD显示异常时,首先应区分是接口通信问题还是LCD初始化问题。通过示波器测量关键信号波形,可以快速定位故障点。对于并行接口,重点检查CS#、RS、WR#/RD#的时序关系;对于SPI,检查SCLK频率、CPOL/CPHA相位配置;对于I2C,检查上拉电阻值和总线电平;对于UART,检查波特率误差和电平转换。
判断方法:系统化排障流程
- 静态检查:确认电源电压(VDD、IOVDD)、复位信号、背光控制。
- 波形测量:用示波器抓取CS#、SCLK/SCL、数据线波形,确认有信号翻转。
- 寄存器回读:尝试读取LCD控制器的ID寄存器,验证通信链路。
- 最小化测试:仅发送初始化命令,观察是否有响应。
- 对比验证:使用已知良好的代码和硬件交叉测试。
案例拆解:SPI接口白屏故障排查
某产品使用SPI接口驱动1.3寸IPS彩屏(ST7789V),上电后白屏。示波器测量发现SCLK有正常时钟输出,MOSI有数据,但CS#信号异常——在初始化序列中CS#始终为高电平。进一步检查代码发现,GPIO初始化时将CS#引脚配置为推挽输出,但未在SPI通信前拉低CS#。修正代码后,在每次SPI传输前将CS#置低,传输完成后拉高,故障解决。
此案例的教训是:SPI接口的CS#信号必须由软件精确控制,且需注意GPIO的复用功能配置。在STM32中,若CS#使用硬件NSS功能,需配置为“软件管理”模式,否则NSS自动翻转可能导致通信异常。