4、8080并行接口时序分析:读写时序图、CS/RS/RD/WR信号详解、数据建立时间要求

好,咱们进入第4章。8080并行接口,说白了就是当年Intel 8080处理器留下的“遗产”,但在LCD驱动领域,它至今仍是很多工程师的首选。为什么?因为它简单、直接、速度快。我当年第一次调LCD屏,用的就是8080接口,那时候连示波器都不会用,硬是盯着逻辑分析仪看了三天三夜。

这一章,咱们把8080接口的时序彻底拆开。你如果能把这章吃透,以后调任何并行接口的屏,心里都有底。

4.1 8080接口信号线概览

先看一张接口信号线的总览表。别急着背,先有个印象。

信号名 方向 功能描述
CS (Chip Select) MCU → LCD 片选信号,低电平有效。选中该LCD芯片。
RS (Register Select) MCU → LCD 寄存器/数据选择。0=命令,1=数据。
RD (Read) MCU → LCD 读使能,低电平有效。读取数据/状态。
WR (Write) MCU → LCD 写使能,低电平有效。写入命令/数据。
D[15:0] 或 D[7:0] 双向 数据总线。8位或16位,取决于芯片。
RESET MCU → LCD 硬件复位,低电平有效。初始化用。

嗯,这里要注意:RS 信号在很多数据手册里也叫 DC (Data/Command) 或 A0。名字不同,意思一样。我见过不少新手把RS和CS搞混,结果屏幕死活不亮。

4.2 写时序详解:WR信号与数据建立时间

写操作是8080接口最常用的操作。咱们先看写时序图。

8080并行接口写时序图 8080并行接口写时序图 CS RS WR D[7:0] 高阻 数据1 数据2 t_AS t_WRL t_DSW t_DHW 关键:数据必须在WR上升沿之前稳定,t_DSW必须满足芯片手册最小值

这张图我画得比较细。你看,写操作的核心就是 WR 信号。WR拉低时,LCD从数据总线上“抓取”数据;WR拉高时,数据被锁存到内部寄存器。

这里有几个关键时序参数,我列个表,你对照着看:

参数 符号 说明 典型值 (ns)
地址建立时间 t_AS CS/RS在WR下降沿前必须稳定的时间 0 ~ 10
地址保持时间 t_AH CS/RS在WR上升沿后保持稳定的时间 0 ~ 10
写脉冲低电平宽度 t_WRL WR低电平持续时间 15 ~ 50
数据建立时间 t_DSW 数据在WR上升沿前必须稳定的时间 10 ~ 30
数据保持时间 t_DHW 数据在WR上升沿后保持稳定的时间 5 ~ 15
写周期时间 t_CYCW 两次写操作之间的最小间隔 50 ~ 200

数据建立时间 t_DSW 是重中之重。 我见过太多工程师,代码逻辑完全正确,但屏幕就是花屏。最后查出来,是WR上升沿来的时候,数据总线上的电平还没稳定。说白了,就是t_DSW没满足。

4.3 读时序详解:RD信号与数据输出延迟

读操作相对用得少,但调试时必不可少。比如读LCD的ID寄存器、读状态寄存器。

8080并行接口读时序图 8080并行接口读时序图 CS RS RD D[7:0] 高阻 读数据 t_AS t_RDL t_DHR 注意:读操作时,数据由LCD驱动,MCU必须在RD上升沿之前完成采样

读时序和写时序最大的区别在于:数据方向变了。写操作时,数据由MCU驱动;读操作时,数据由LCD驱动。这意味着,MCU的GPIO需要切换方向。

我曾经踩过一个坑: 读操作时,MCU的GPIO没有及时从输出模式切换到输入模式,结果数据总线冲突,读回来的数据全是0xFF。后来我在每次读操作前,强制加了一个GPIO方向切换的延迟,问题才解决。

4.4 CS/RS/RD/WR 信号详解

这四个信号,每个都有自己的脾气。咱们一个一个说。

4.4.1 CS (Chip Select) - 片选信号

CS是“门卫”。只有CS拉低时,LCD才会响应RD和WR的操作。如果CS为高,其他信号再折腾,LCD也不理你。我习惯把CS当作“总开关”,在每次读写操作前拉低,操作完成后拉高。

4.4.2 RS (Register Select) - 寄存器/数据选择

RS决定数据总线上传输的是“命令”还是“数据”。

  • RS = 0:传输的是命令(比如设置显示坐标、配置寄存器)
  • RS = 1:传输的是显示数据(比如像素颜色值)

你想想看,如果没有RS信号,LCD怎么知道你是要写命令还是写数据?所以RS必须在WR/RD有效之前就稳定下来。这就是前面说的t_AS参数。

4.4.3 RD (Read) - 读使能

RD拉低时,LCD把内部寄存器的值放到数据总线上。MCU在RD上升沿采样数据。读操作通常比写操作慢,因为LCD内部需要时间把数据“推”到总线上。

4.4.4 WR (Write) - 写使能

WR是“写入触发器”。WR下降沿开始写入,WR上升沿锁存数据。所以,数据必须在WR上升沿之前稳定——这就是t_DSW的意义。

4.5 数据建立时间要求与实战避坑

数据建立时间(t_DSW)是8080接口最容易被忽视的参数。我直接给你一个实战中的检查清单:

  1. 查手册:找到LCD数据手册中t_DSW的最小值。比如某款ILI9341屏,t_DSW最小是15ns。
  2. 算延迟:MCU的GPIO从写数据到数据总线稳定,需要多少时间?这包括GPIO输出延迟、PCB走线延迟、电平转换延迟(如果有)。
  3. 留余量:实际t_DSW至少要比手册最小值大20%。比如手册写15ns,你至少留18ns。
  4. 调时序:如果发现数据建立时间不够,可以降低MCU的时钟频率,或者在WR下降沿之后插入几个NOP指令。

我的个人习惯: 在驱动代码里,我会把WR的脉冲宽度和建立时间做成宏定义。这样调试时,只需要改一个宏,就能调整整个时序。比如:

#define T_WRL_NS    50   // WR低电平宽度 50ns
#define T_DSW_NS    30   // 数据建立时间 30ns

4.6 8080接口与6800接口的对比

说到并行接口,就不得不提另一个“老前辈”——6800接口。我简单做个对比,帮你理解8080的优势:

特性 8080接口 6800接口
控制信号 RD、WR独立 E(使能)、R/W(读写选择)
时序复杂度 较低,容易理解 较高,需要处理E信号边沿
速度 通常更快 通常稍慢
兼容性 与Intel MCU天然匹配 与Motorola MCU天然匹配
常见LCD ILI9341、ST7789、NT35510 部分Sharp、Hitachi屏

说白了,8080接口更“直来直去”,RD和WR各管各的,互不干扰。6800接口用一个E信号同时控制读写,时序上需要更精细的调整。我个人更推荐8080,尤其是对新手来说。

4.7 本章小结

8080并行接口的时序,核心就是四个字:建立时间。CS、RS、数据,都必须在WR/RD的有效边沿之前稳定下来。你只要抓住这个核心,剩下的就是查手册、调参数。