SPI(Serial Peripheral Interface,串行外围接口)是一种高速、全双工、同步的通信总线,主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。
信号线
SPI有四根信号线:
MOSI:Master Output Slave Input,主机向信号线上输出数据,从机读取。
MISO:Master Input Slave Output,从机向信号线上输出数据,主机读取。
SCLK:Serial Clock,串行时钟信号。由主机产生并发送给从机。
SS/CS:Slave Select,片选信号。通常是低电平有效,由主机输出,在主设备连接多个从设备时用来控制与哪个从设备通信。
如果主机连接多个从设备时,则每个从设备上都需要有一个片选引脚接入到主设备机中,当我们的主设备希望和某个从设备通信时,需要将对应从设备的片选引脚电平拉低。同时,SPI协议还规定时钟信号必须由主机提供给从机,从机自身不能产生和控制时钟信号,没有时钟信号同步从机不能正常工作。
传输方式
SPI总线上的主机必须在通信开始时候配置并生成相应的时钟信号,然后再进行数据传输。主机向MOSI信号线传送数据给从机,同时,从机也必须将一些内容通过MISO信号线返回给主机,也就是说,每隔时钟周期内,都在发生全双工数据通信。时钟信号的作用就是保证两个设备之间的传输始终是同步的。
即使只进行单向数据传输,也要保证主机和从机时刻都有数据交换,两者必须要互相发送一些东西,接收方只需要忽略即可。这种情况我们称为虚拟数据。
时钟配置
SPI协议需要对时钟进行配置,一般配置下面三个参数:
时钟频率:理论上讲,时钟频率可以任何想要的速率,实际上会受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。
时钟极性:Clock Polarity,CPOL,表示SPI总线的极性。CPOL = 0,表示时钟空闲时是低电平;CPOL = 1,表示时钟空闲时是高电平。
时钟相位:Clock Phase,CPHA,表示SPI总线的相位。一个时钟周期会有2个跳变沿,SPHA决定了接收端在时钟信号的哪一个跳变沿对接收数据进行采样。CPHA = 0,表示从第一个跳变沿开始采样;CPHA = 1:表示从第二个跳变沿开始采样。
CPOL和CPHA可以组合出四种工作模式,可以根据不同器件的支持情况和自己的需求进行选择和配置。
举例
优缺点
SPI的优点:
支持全双工通信,独立的MISO、MOSI可以同时发送和接收数据。
通信简单。
数据传输速率快,比I2C快几乎两倍。
无起始位和停止位,因此数据可以持续传输不会中断。
SPI的缺点:
没有指定的流控制,没有应答机制确认是否接收到数据,与I2C相比在数据可靠性上有一定的缺陷。
使用四根线,I2C、UART只使用两根线。
没有任何形式的错误检查,UART有奇偶校验位。
I2C和SPI异同点
相同点
串行、同步
采用TTL电平,传输距离近
采用主从方式(I2C一个或多个主机和一个或多个从机;SPI一个主机和一个或多个从机)
不同点
I2C半双工;SPI全双工
I2C有应答机制;SPI无应答机制
I2C通过向总线广播从机地址来寻址(节省硬件资源);SPI通过向对应从机发送使能信号来寻址(寻址速度快)文章来源:https://www.toymoban.com/news/detail-557280.html
I2C时钟极性和时钟相位固定;SPI时钟极性和时钟相位不固定(主从一致)文章来源地址https://www.toymoban.com/news/detail-557280.html
到了这里,关于SPI 通信协议 最详细解读!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!