SPI总线协议-一篇文章带你了解

By: Ailson Jack
Date: 2020.09.05
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/122.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

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通讯设备之间的连接方式,如下图所示:

SPI总线协议-一篇文章带你了解_第1张图片

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总线协议-一篇文章带你了解_第2张图片

下面的表格是对上述描述的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空闲电平的状态不一样,模式0SCK空闲电平是低电平,模式3SCK空闲电平是高电平;模式0和模式3都在SCK的上升沿进行数据采样,在SCK的下降沿进行数据发送。

同样的,可以对模式1和模式2进行一个总结:模式1和模式2的主要差异是SCK空闲电平的状态不一样,模式1SCK空闲电平是低电平,模式2SCK空闲电平是高电平;模式1和模式2都在SCK的下降沿进行数据采样,在SCK的上升沿进行数据发送。

如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。

排版更好的内容见我博客的地址:http://www.only2fire.com/archives/122.html
注:转载请注明出处,谢谢!^_^

你可能感兴趣的:(嵌入式驱动,spi,嵌入式驱动,嵌入式学习)