什么是SPI通信

ARM体系-SPI通信

一、什么是SPI通信

1、SPI是串行外设接口(Serial Peripheral Interface),可以理解为一种通信协议,也就是用来传输数据的。
2、SPI 是由摩托罗拉(Motorola)公司开发的全双工同步串行总线,是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、数字信号处理器(DSP)以及数字信号解码器之间。SPI 系统可直接与各个厂家生产的多种标准外围器件直接连接。

二、物理接线

1、一般使用4 条线:串行时钟线SCK、主机输人/从机输出数据线MISO、主机输出/从机输人数据线MOSI 和低电平有效的从机选择线CS。
2、CS:从设备选择信号线,常称为片选信号线。当有多个SPI从设备与SPI主机相连时,设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的这一条CS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。SPI协议中没有设备地址,它使用CS信号线来寻址,当主机要选择从设备时,把该从设备的CS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以CS线置低电平为开始信号,以NSS线被拉高作为结束信号。
3、SCK:时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如STM32的SPI时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
4、MOSI (Master Output, Slave Input)主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
5、MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

三、通信原理

1、这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。
2、SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时,MSB先行或LSB先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定。
3、需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。

四、通信特点

1、SPI优点
①支持全双工通信
②通信简单
③数据传输速率块
2、缺点
①没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。
3、特点
①高速、同步、全双工、非差分、总线式
②主从机通信模式

五、通信时序

1、SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
①SDO/MOSI – 主设备数据输出,从设备数据输入;
②SDI/MISO – 主设备数据输入,从设备数据输出;
③SCLK – 时钟信号,由主设备产生;
④CS/SS –其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。
⑤需要注意的是,在具体的应用中,当一条SPI总线上连接有多个设备时,SPI本身的CS有可能被其他的GPIO脚代替,即每个设备的CS脚被连接到处理器端不同的GPIO,通过操作不同的GPIO口来控制具体的需要操作的SPI设备,减少各个SPI设备间的干扰。

2、SPI通信有4种不同的模式
①不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的。
②但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置。
③通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:
1)Mode0:CPOL=0,CPHA=0
2)Mode1:CPOL=0,CPHA=1
3)Mode2:CPOL=1,CPHA=0
4)Mode3:CPOL=1,CPHA=1

3、时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:
①CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
②CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
③CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
④CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

猜你喜欢

转载自blog.csdn.net/weixin_46089486/article/details/108994311
今日推荐