写这篇文章,主要是为了记录一下工作中用到的一些技术、协议等等,随时填充一些细节,方便后续需要,不用再到处找资料了。如有错误的地方,希望各位大佬予以指教!
一、SPI简介
SPI总线是一种高速的、全双工、同步的串行总线,他采用主从方式工作,SPI只能有一个主机和一个或多个从机。与IIC不同的是,SPI有两根数据线,发送和接收可以同时进行,但是SPI没有应答机制确认是否接收到数据,数据可靠性比IIC低一些。
二、硬件连接
SPI有四条总线,分别为MISO(主机输入从机输出)、MOSI(主机输出从机输入)、SCLK(时钟)、CS(片选),连接方式如图1所示。
三、通信过程
主机向对应从机的CS(片选线)上发送使能信号并选中该从机
主机发送时钟信号,控制主机发送数据,从机接收数据,时钟信号由工作模式来确定
主机通过MOSI线上发送数据,从机读取;从机通过MISO线上发送数据,主机读取
一个字节数据传输完紧接着传输下一字节数据,没有应答信号和终止信号
1.寻址方式
当主机要进行通信时,主机向要控制的从机的CS(片选线)上发送使能信号(一般是低电平,具体要看数据手册),表示选中该从机,只有该从机能跟主机通信。
2.通信模式
SPI有四种工作模式,通过极性(CPOL)和相位(CPHA)来控制主机的工作模式
CPOL表示时钟空闲时的电平状态
CPOL=0,空闲时SCLK为低电平
CPOL=1,空闲时SCLK为高电平
CPHA表示采样时间
CPHA=0,每个周期的第一个时钟沿读取数据
CPHA=1,每个周期的第二个时钟沿读取数据
mode 0
CPOL = 0, CPHA = 0
SCLK空闲时为低电平,开始通信时发送器先发送一位数据,在SCLK由低电平变高电平时读取数据,也就是在第一个时钟沿变化时读取数据。
mode 1
CPOL = 0, CPHA = 1
SCLK空闲时为低电平,开始通信时发送器先发送一位数据,在SCLK由高电平变低电平时读取数据,也就是在第二个时钟沿变化时读取数据。
mode 2
CPOL = 1, CPHA = 0
SCLK空闲时为高电平,开始通信时发送器先发送一位数据,在SCLK由高电平变低电平时读取数据,也就是在第一个时钟沿变化时读取数据。
mode 3
CPOL = 1, CPHA = 1
SCLK空闲时为高电平,开始通信时发送器先发送一位数据,在SCLK由低电平变高电平时读取数据,也就是在第二个时钟沿变化时读取数据。
四、IIC、SPI的区别
1.相同点
都是串行、同步的总线
采用TTL电平,传输距离以及场合相差不大
属于主从方式工作
2.异同点
IIC为半双工、SPI为全双工
IIC可以多主机,SPI只有一个主机
IIC有应答机制,有起始信号和终止信号,SPI无
IIC通过发送一个字节数据寻址,SPI向对应从机的CS使能寻址
IIC时钟极性和相位固定,SPI时钟极性和相位可以设置