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接口最常用的操作。咱们先看写时序图。
这张图我画得比较细。你看,写操作的核心就是 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寄存器、读状态寄存器。
读时序和写时序最大的区别在于:数据方向变了。写操作时,数据由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接口最容易被忽视的参数。我直接给你一个实战中的检查清单:
- 查手册:找到LCD数据手册中t_DSW的最小值。比如某款ILI9341屏,t_DSW最小是15ns。
- 算延迟:MCU的GPIO从写数据到数据总线稳定,需要多少时间?这包括GPIO输出延迟、PCB走线延迟、电平转换延迟(如果有)。
- 留余量:实际t_DSW至少要比手册最小值大20%。比如手册写15ns,你至少留18ns。
- 调时序:如果发现数据建立时间不够,可以降低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的有效边沿之前稳定下来。你只要抓住这个核心,剩下的就是查手册、调参数。