时序图
1. 基础
- 时序图:用于表示单片机硬件的底层通信原理
- 多波形时序图:同一时间内,多个端口组合出的电平关系变化
- 横轴:表示时间
- 纵轴:表示逻辑信号0或者逻辑信号1
2. 符号
2.1. 斜线形式的上升沿、下降沿
上升沿、下降沿除了直线以外,也有斜线(因为在物理上不可能出现状态的秒变化)。
2.2. Either or 信号
表示信号在这一时间既可以高电平,也可以是低电平,常见于数据线。
2.3. 波形省略
波形省略在图中有两种常见的表现形式:
2.3.1. 虚线
2.3.2. 波浪号
2.4. 地址&数据表示
时序图上常用 A 来表示 Address, D 来表示 Data
3. 实例:WT588F语音芯片时序图
3.1. 了解背景
MCU向语音芯片发送控制指令,语音芯片按照指令运行
3.2. 分析
分析这张时序图:
- 默认电平状态:CLK 和 DATA 都是默认高电平
- 开始信号及结束信号:开始信号 CLK 拉低5ms;结束信号 CLK 和 DATA 恢复高电平
- 操作时序:上升沿接收数据,根据图像,需要先将 CLK 拉低、配置 DATA 数据,延时一个周期,再将 CLK 拉高延时一个周期。
- 数据顺序:接收数据低位在先
3.3. 列逻辑
列出详细逻辑:
- 初始化高电平
- CLK 拉低延时5ms
- 获取 data 最低位数据(尽可能放在数据发送之外)
- 循环8次,MCU 发送8位数据
- CLK 拉低(第1次循环的时候没有明显作用,但是后续需要)
- DATA 设置为指令对应逻辑电平
- CLK 延时一个周期
- CLK 拉高
- CLK 延时一个周期
- 更新待发送的数据(尽可能放在数据发送之外)
- 循环执行完成之后将 DATA 和 CLK 拉高
3.4. 根据逻辑写代码(伪代码)
#define CLK P1 // 引脚定义
#define DATA P2
void operation(data) // data是发送的指令数据
{
CLK = 1; // 初始化高电平
DATA = 1;
CLK = 0; // CLK拉低延时5ms
delay_ms(5);
b_data = data & 0x01; // 获取data最低位数据
for(int i=0; i<8; i++) // 循环8次,MCU发送8位数据
{
CLK = 0; // 第1次循环的时候没有明显作用,但是后续需要
DATA = b_data; // DATA设置为指令对应逻辑电平
delay_us(300); // CLK延时一个周期
CLK = 1; // CLK拉高
delay_us(300); // CLK延时一个周期
data = data >> 1;
b_data = data & 0x01; // 更新待发送的数据
}
CLK = 1; // 循环执行完成之后将DATA和CLK拉高
DATA = 1;
}
4. Review
- 请依据时序图写出伪代码: