SPI通信
SPI(Serial Peripheral Interface)串行外设接口
1 SPI时钟信号的相位与极性
SPI接口由CPOL和CPHA设置四种不同传输格式的时序。其中:
CPOL(Clock Polarity)时钟极性
CPHA(Clock Phase)时钟相位
CPOL决定时钟信号SCK的有效脉冲方式 0:表示空闲状态时,SCK保持低电平;1:表示空闲状态时,SCK保持高电平;
CPHA决定数据线MOSI、MISO什么时候输出数据或什么时候采集数据 0:表示数据采样从第一个时钟边沿开始;1:表示数据采样从第二个时钟边沿开始。
一 (CP0L=0;CPHA=0):
此方式下,空闲状态SCK处于低电平;数据采样是在第1个边沿,也就是SCK电平到高电平的跳变,由图可以看出每一个上升沿到来之前数据已经准备好,所以上升沿进行数据采集;同时可以看出SCK从高电平向低电平跳变时进行数据发送,即下降沿进行数据发送。
二 (CPOL=1;CPHA=0):
此方式下,空闲状态SCK处于高电平;数据采样是在第1个边沿,也就是SCK电平到低电平的跳变,由图可以看出每一个下降沿到来之前数据已经准备好,所以下降沿进行数据采集;同时可以看出SCK从低电平向高电平跳变时进行数据发送,即上升沿进行数据发送。
三 (CPOL=0;CPHA=1):
此方式下,空闲状态SCK处于低电平;数据发送是在第一个边沿,也就是SCK电平到高电平的跳变,由图可以看出每个上升沿到来之前数据还未准备好,所以上升沿进行数据发送;同时可以看出当下降沿到来时数据已经准备完成,可以进行数据采集,所以下降沿进行数据采集。
四 (CPOL=1;CPHA=1):
此方式下,空闲状态SCK处于高电平;数据发送是在第一个边沿,也就是SCK电平到低电平的跳变,由图可以看出每一个下降沿到来之前数据还未准备好,所以下降沿进行数据发送;同时可以看出当上升沿到来时数据已经准备完成,可以进行数据采集,所以上升沿进行数据采集。
2 总结:数据与时钟的相位关系表
CPOL/CPHA的设定 | 第一位数据的输出 | 其它位的输出 | 数据采样 |
CPOL=0,CPHA=0 | 在第一个SCK上升沿之前 | SCK下降沿 | SCK上升沿 |
CPOL=1,CPHA=0 | 在第一个SCK下降沿之前 | SCK上升沿 | SCK下降沿 |
CPOL=0,CPHA=1 | 第一个SCK上升沿 | SCK上升沿 | SCK下降沿 |
CPOL=1,CPHA=1 | 第一个SCK下降沿 | SCK下降沿 | SCK上升沿 |
3 数据传输分析
主机移位寄存器中的一个数据通过MOSI传到从机移位寄存器(即写操作);同时,从机移位寄存器中的一个数据通过MISO传到主机移位寄存器(即读操作);读写操作同时进行。
1.如果主机只进行写操作,主机只需忽略接收到的字节
2.如果主机要读取从机的一个字节,必须先发送一个空字节0xFF,才能使从机中的数据移到主机。
注:所谓的空字节,SPI通信都是由主机发起的,想要从从机读取数据,就必须给它提供时钟,而SPI主机产生时钟的方法,一般都是通过SPI_DR寄存器写值,这里写入0xFF表示要发送0xFF这个数据了,SPI就会产生SCK,输出给从机,从而给从机提供时钟。