1.SPI总线概述
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是Motorola公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。主要应用在EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器和数字信号解码器等设备与MCU之间进行通信。
SPI具有通信简单,支持全双工通信,数据传输速度快的优点。但是由于SPI没有指定的流控制,没有应答机制确认数据是否发送或接收成功,所以SPI总线跟IIC总线比较的话,SPI总线在数据可靠性上有一定的缺陷。
2.SPI信号线
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备。SPI使用3条通讯总线和1条片选线。
(1).MOSI
主设备数据输出,从设备数据输入。
(2).MISO
主设备数据输入,从设备数据输出。
(3).SCLK(或叫SCK)
时钟信号线,用于通讯同步,该信号由主机产生和控制。
(4).CS
片选线,从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时就需要设置从设备对应的片选引脚,来使能从设备。
SPI通讯设备之间的连接方式,如下图所示:
3.SPI总线的4种通讯模式
SPI通信有4种不同的通讯模式,不同的从设备可能在出厂时就配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。
MOSI和MISO线在SCK的每个时钟周期传输一位数据,开发者可以自行设置MSB或LSB先行,不过需要保证两个通讯设备都使用同样的协定。
时钟极性CPOL是用来配置SCK空闲状态的电平,时钟相位CPHA是用来配置数据采样是在第几个边沿。
CPOL=0,表示当SCK=0时处于空闲态,所以有效状态就是SCK处于高电平时; CPOL=1,表示当SCK=1时处于空闲态,所以有效状态就是SCK处于低电平时; CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿; CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿;
CPOL和CPHA进行组合配置之后产生四种时序关系,也就是四种通讯模式。四种通讯模式文字描述如下:
CPOL=0,CPHA=0:此时空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由 低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。 CPOL=0,CPHA=1:此时空闲态时,SCK处于低电平,数据发送是在第1个边沿,也就是SCK由 低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。 CPOL=1,CPHA=0:此时空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由 高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。 CPOL=1,CPHA=1:此时空闲态时,SCK处于高电平,数据发送是在第1个边沿,也就是SCK由 高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
下面的表格是对上述描述的SPI四种通讯模式的总结:
SPI模式 | CPOL | CPHA | SCK空闲时电平 | 数据采样 | 数据发送 |
---|---|---|---|---|---|
0 | 0 | 0 | 低电平 | 第1个边沿 | 第2个边沿 |
1 | 0 | 1 | 低电平 | 第2个边沿 | 第1个边沿 |
2 | 1 | 0 | 高电平 | 第1个边沿 | 第2个边沿 |
3 | 1 | 1 | 高电平 | 第2个边沿 | 第1个边沿 |
模式0和模式3的差异主要是,模式0的SCK空闲电平是低电平,模式3的SCK空闲电平是高电平。因为模式0的SCK空闲电平是低电平,数据采样发生在SCK的第1个边沿,也就是SCK的上升沿,数据发送发生在SCK的第2个边沿,也就是SCK的下降沿。同样的因为模式3的SCK空闲电平是高电平,数据采样发生在SCK的第2个边沿,也就是SCK的上升沿,数据发送发生在SCK的第1个边沿,也就是SCK的下降沿。
从上面一段文字,可以对模式0和模式3进行一个总结:模式0和模式3的主要差异是SCK空闲电平的状态不一样,模式0的SCK空闲电平是低电平,模式3的SCK空闲电平是高电平;模式0和模式3都在SCK的上升沿进行数据采样,在SCK的下降沿进行数据发送。
同样的,可以对模式1和模式2进行一个总结:模式1和模式2的主要差异是SCK空闲电平的状态不一样,模式1的SCK空闲电平是低电平,模式2的SCK空闲电平是高电平;模式1和模式2都在SCK的下降沿进行数据采样,在SCK的上升沿进行数据发送。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !