SPI通讯简单总结

前言:

本文为转载,由于时间太过久远,当时博主整理笔记时忘记记录原博地址,转载地址不详

1.速览点

SPI:
在这里插入图片描述

(1)四条信号线:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)、片选线(SS)。(所谓的进出,是针对信号进出主机而言)
(2)SPI总线可以实现多SPI设备互相连接。提供时钟的SPI设备为主设备(Master),其他设备为从设备(Slave)。SCLK信号线只由主设备控制,从设备不能控制信号线。
(3)在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机。主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。
(4)主从设备间可以实现全双工通信,收发独立,操作简单,数据传输速率较高,但需要占用主机较多的口线(每个从机都需要一根片选线),而且只支持单个主机,没有指定的流控制,没有应答机制确认是否接收到数据。
(5)数据输出通过SDO线,数据在时钟上沿或下沿时改变(即发送),在紧接着的下沿或上沿被读取,从而完成一位数据传输。数据输入也使用同样原理。因此,8位数据的传输,至少需要8次时钟信号的改变(上沿和下沿为一次)。
(6)普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
(7)SPI接口在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前(先传?),低位在后,为全双工通信。

2.数据传输

(1)SPI在数据传输的时候,需要确定两件事情:
其一,数据是在时钟的上升沿采集还是下降沿采集;
其二,时钟的初始(空闲)状态是为高电平还是低电平。
对比:I2C空闲状态时,时钟线(不是数据线?)为高电平,数据采集时,时钟线也为高电平,但SPI给出了更自由的方式。
(2)两个概念
CPOL:时钟极性,表示SPI在空闲时,时钟信号是高电平还是低电平。
CPHA:时钟相位,表示SPI设备是在在时钟的上升沿采集还是下降沿采集。
则SPI数据传输就有四种可能—按照标准的说法,SPI数据传输就有四种模式。

3.SPI读写

(1)SPI在硬件设计上采用的双数据线制,根据设计,在SPI通信过程中,主从设备之间会形成一个数据环形链路——即主设备向从设备写一次数据,从设备就会回一次数据(至于从设备回复的数据是否有效,则另当别论——如果有效,主设备就把它读入,否则丢弃)
在这里插入图片描述

(2)例子:假设上升沿发送、下降沿接收、高位先发送。
假设主机8位寄存器装的是待发送的数据10101010
那么第一个上升沿时,数据将会是SDO=1,寄存器=0101010x

下降沿到来的时候,SDI上的电平将存到主机的寄存器中的最低位(最右边),SDO上的电平将存到从机的寄存器的最低位(最右边),则此时主机寄存器=0101010SDI(SDI表示1bit),从机寄存器=1010101SDO。
这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次,这样就完成里一个spi时序。
假定主机和从机初始化就绪,并且主机的sbuff=0xaa=0b1010 1010,从机的sbuff=0x55=0b0101 0101

猜你喜欢

转载自blog.csdn.net/weixin_44524004/article/details/112617247