简单分享一下spi通信原理是什么
扫描二维码
随时随地手机看文章
SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。SPI是一种单主机、高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。 SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps
SPI 接口一般使用 4 条线通信:
MISO 主设备数据输入,从设备数据输出。
MOSI 主设备数据输出,从设备数据输入。
SCLK 时钟信号,由主设备产生。
CS 从设备片选信号,由主设备控制。
SPI允许至少有一个主机,一般都是一个主机多个从机,当只有一个从机时:
这站图来自于STM32参考手册,这个应该是STM双机通讯的接线,而且主机从机都工作在硬件模式(对于双击通讯不太懂),一会儿再聊移位寄存器的原理,现在先看个大概接法。
当有多个从机时,每个从机单独接一个片选信号:
这个图片很好的描述了主设备与多个从设备的接线
STM32中的SPI_CR寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系。
CPOL=0:SCLK=0时处于空闲态;CPOL=1:SCLK=1时处于空闲态;
CPHA=0:数据采样在第1个边沿;CPHA=1:数据采样在第2个边沿。
CPOL与CPHA各有两种状态,所以可以组成四种不同的工作方式。
为了能让主机与从机正常通讯,主机与从机应当设置为相同的模式,一般从机是出场就固定好的(一般在手册的SPECIFICATIONS->
TIMING CHARACTERISTICS中说明 ),我们要做的就是在SPI初始化时设置成与从机相同的工作方式。至于他不同模式时的时序图,一百度就能搜到,我觉得也不是重点,重点是你能在手册找到从机是哪种工作方式。
SPI的三种模式
SPI工作在3中模式下,分别是运行、等待和停止。
运行模式(Run Mode)
这是基本的操作模式
等待模式(Wait Mode)
SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。
停止模式(Stop Mode)
为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步
SPI通讯的优势
· 全双工串行通信;
· 高速数据传输速率。
· 简单的软件配置;
· 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
· 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
SPI的缺点
· 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
· 通常仅支持一个主设备;
· 需要更多的引脚(与I2C不同);
· 没有定义硬件级别的错误检查协议;
· 与RS-232和CAN总线相比,只能支持非常短的距离;