一、什么是时序图?——新手入门基础
(一)时序图的核心要素
- 时间轴:从左到右表示时间流逝,是时序图的“骨架”。
- 电平信号:只有两种状态,用0(低电平,通常为0V)和1(高电平,如3.3V/5V)表示。
- 核心作用:展示电路中信号随时间的变化关系,帮助理解数字电路的工作逻辑。
(二)为什么要学时序图?
- 硬件工程师的“语言”:芯片手册、通信协议(如I2C、SPI)都通过时序图定义信号规则。
- 排查故障关键:信号时序错误会导致设备无法通信,看懂时序图才能定位问题。
二、时序图分析技巧——5个步骤轻松上手
(一)基础观察法(适合所有时序图)
- 从上到下看信号
每条横线代表一个信号(如I2C的SCL时钟线、SDA数据线),上下排列展示多信号的联动。
- 从左到右看时间
关注信号什么时候变高/变低,以及高低电平持续多久(有时间刻度时精确分析,无刻度时关注变化顺序)。
- 抓住关键变化点
- 上升沿:信号从0→1(如↑)
- 下降沿:信号从1→0(如↓)
- 稳定期:信号保持高或低电平的时间段。
(二)进阶分析技巧(分场景应用)
场景1:单个信号怎么看?
- 看持续时间:标注时间(如“3-6s低电平”)时,需严格遵守;未标注时,只需关注高低状态,不纠结具体时长。
- 看过渡过程:实际电路中,电平不会瞬间跳变,斜线表示过渡时间(高速电路中需注意过渡时间是否过长导致信号失真)。
案例一:考虑时间会标出时间长度,如果不标注时间长度,则不需要考虑时间
案例二:电平从某个电平到某个电平之间变换所耗费的时间,以下表示的是电平之间的过渡
案例三:物理的变化,电平的变化不可能是瞬间完成的,它需要一定的过渡时间
场景2:多个信号怎么看?
- 找主从关系:例如SPI协议中,SCK时钟信号是“主”,MOSI/MISO数据信号随SCK变化。
- 抓同步规则:如I2C协议中,SDA数据仅在SCL低电平时允许变化,高电平时必须稳定。
- 注意虚线含义:虚线表示省略中间重复波形,聚焦核心信号变化(如连续传输多个字节时,中间波形用虚线简化)。
案例一:多波形图主要用于在同一时间内,多个端口组合出的电平变换关系,例如I2c总线
案例二:虚线部分省略了中间过程中的很多波形的表示,还有一种和上面的表示类似
案例三:主机、从机的发送关系
三、数字电路的“语言”——电平与逻辑关系
(一)电平的两种状态
逻辑状态 | 电平信号 | 常见电压值 | 含义 |
0 | 低电平 | 0V | 电路断开、无效状态 |
1 | 高电平 | 3.3V/5V | 电路导通、有效状态 |
(二)简单例子
假设某信号时序如下:
- 0-3s:高电平(1)→ 设备A启动
- 3-6s:低电平(0)→ 设备A停止
- 6-9s:高电平(1)→ 设备A再次启动
通过高低电平的变化,就能“读懂”设备的工作节奏。
四、时序图的“说明书”——信号从哪里来?
时序图中的信号规则不是凭空出现的,主要来自两大“权威”:
1. 芯片数据手册
每个芯片的引脚(如GPIO、通信接口)都会有时序图,规定输入/输出信号的时序要求(例如:时钟信号的频率范围、数据信号的建立/保持时间)。
2. 通信协议规范
如I2C、SPI、UART等协议,明确定义了信号之间的配合规则(例如:I2C的起始信号是SCL高电平时SDA从高→低,停止信号是SCL高电平时SDA从低→高)。
五、实战案例——看懂SPI和I2C时序图
(一)SPI协议:高速串行通信(以W25Q128BV芯片为例)
1. 四根关键信号线
- SCK:时钟信号(主设备生成,控制数据传输节奏)
- MOSI:主设备→从设备数据线
- MISO:从设备→主设备数据线
- CS:片选信号(低电平有效,选中目标设备)
2. 读数据时序步骤(图1)
- CS拉低:选中芯片(如W25Q128BV)。
- 发送指令0x90:告诉芯片“我要读厂商ID和设备ID”。
- 发送24位地址0x000000:指定读取位置。
- SCK驱动数据传输:每个时钟周期传输1位数据,MSB(最高位)先传。
- CS拉高:结束通信。
3. 代码小知识
// 读ID函数片段(简化版)
uint16_t w25qxx_read_id(void) {
W25QXX_SS = 0; // CS拉低,选中芯片
SPI1_SendByte(0x90); // 发送读ID指令
SPI1_SendByte(0x00); // 发送24位地址(分3次发)
SPI1_SendByte(0x00);
SPI1_SendByte(0x00);
uint8_t mid = SPI1_SendByte(0xFF); // 读厂商ID(EFh)
uint8_t did = SPI1_SendByte(0xFF); // 读设备ID(17h)
W25QXX_SS = 1; // CS拉高,结束
return (mid << 8) | did;
}
(二)I2C协议:低速多设备通信(以AT24C02 EEPROM为例)
1. 两根关键信号线
- SCL:时钟线(主机生成,同步数据传输)
- SDA:数据线(双向,传输数据和地址)
2. 写数据时序步骤(图2)
- 起始信号:SCL高电平时,SDA从高→低(通知从设备“开始通信”)。
- 发送设备地址:7位地址+1位读写标志(写操作:地址0xA0,读操作:0xA1)。
- 发送内存地址:指定数据要写入的位置(如0x00表示从EEPROM的第一个字节开始写)。
- 发送数据:每个字节后等待从机应答(ACK,SDA拉低表示成功接收)。
- 停止信号:SCL高电平时,SDA从低→高(结束通信)。
3. 硬件小知识
- 设备地址由芯片引脚决定:AT24C02的地址是1010 A2 A1 A0 R/W,其中A0-A2接GND时,地址为1010 0000(0xA0,写操作)。
- 上拉电阻:SCL和SDA需外接上拉电阻(如4.7kΩ),确保信号稳定。
六、常见问题——零基础避坑指南
- Q:时序图中的斜线和竖线有什么区别?
A:无特殊标注时,斜线表示电平过渡时间(实际电路中的真实变化),竖线是简化画法(理想状态,忽略过渡时间),两者含义相同,无需纠结。
- Q:看不懂芯片手册的时序图怎么办?
A:先查协议规范(如I2C官方文档),再对照芯片手册的“时序参数表”,重点看信号的先后顺序和有效电平。
- Q:为什么我读出来的数据全是0xFF?
A:3大可能原因:①硬件接线错误(如CS未拉低);②软件时序写错(如发送指令顺序错误);③芯片未擦除(新芯片默认数据为0xFF,擦除后才会写入有效数据)。
七、总结——学习路线图
- 第一步:掌握基础概念(电平、时间轴、上升沿/下降沿)。
- 第二步:拆解简单案例(如单个信号的高低变化)。
- 第三步:动手实践(用开发板调试SPI/I2C设备,对比代码与时序图)。
- 第四步:挑战复杂时序(如DDR内存、USB协议的时序图)。
记住:时序图是硬件设计的“法律文件”,每一个信号的变化都有严格规则,看懂它,就能让芯片“听懂”你的指令!
附录:关键术语中英对照
中文 | 英文 | 缩写 | 含义 |
时序图 | Timing Diagram | - | 展示信号随时间变化的图形 |
高电平 | High Level | 1 | 电路导通状态 |
低电平 | Low Level | 0 | 电路断开状态 |
上升沿 | Rising Edge | ↑ | 信号从0→1的变化 |
下降沿 | Falling Edge | ↓ | 信号从1→0的变化 |
主设备 | Master | - | 发起通信的设备(如单片机) |
从设备 | Slave | - | 响应通信的设备(如传感器) |
(注:文中“图1”“图2”需根据实际文档中的图片编号插入,建议在Word中使用“插入图片”功能,并添加图注,如“图1 SPI读ID时序图”“图2 I2C写数据时序图”。)