本文介绍了SPI的特点、物理连接和通讯过程。
SPI特点
-
串行
-
高速(波特率可以很高)
-
全双工
-
同步
物理连接
SPI通讯系统由一个主机、若干从机、三条总线和若干片选线组成。
SPI的物理连接
三条总线:
-
时钟信号线(SCK,Serial Clock):用于数据同步,由主机产生,决定着通讯的波特率。
-
主设备输出,从设备输入(MOSI,Master Output&Slave Input):主机在这条线上写数据,从机在这条线上读数据。即这条线用于主机给从机发数据。
-
主设备输入,从设备输出(MISO,Master Input&Slave Output):从机在这条线上写数据,主机在这条线上读数据。即这条线用于从机给主机发数据。
片选线(SS,Slave Select),也称为NSS,CS(Clip Select),每一个从机都有一条片选线连接主机,当某一条片选线上的电平被主机拉低时,连接该条片选线上的从机就被“选中”,可以和主机进行通讯。
通讯过程
SPI通讯时序(SPI模式1)
-
通讯开始①:主机拉低某一条片选线电平,与该片选线上的从机建立连接。
-
数据传输②③④:主机控制MOSI线,向从机传输数据;从机控制MISO线,向主机传输数据;两者可以同时进行。根据不同的SPI模式(下文介绍),数据的采样时刻(数据有效性)不同。
-
通讯结束⑥:拉高片选线。
SPI模式
SPI模式规定了空闲时SCK的时钟状态和数据采样时刻。为了方便说明,引入“时钟极性CPOL”和“时钟相位CPHA”的概念:
-
时钟极性CPOL:规定SPI通讯设备处于空闲状态时,SCK时钟线的电平信号。CPOL=0,空闲时SCK为低电平;CPOL=1,空闲时SCK为高电平。
-
时钟相位CPHA:规定SPI数据的采样时刻。CPHA=0时,将在SCK时钟线的“奇数边沿”采样;CPHA=1时,将在SCK时钟线的“偶数边沿”采样。
CPOL概念比较好理解,下面具体看看CPHA:
CPHA=0 时的 SPI 通讯模式时序图
当CPHA为0时,采样在奇数边沿进行(即上图SCK线上第1、3、5…个边沿时刻采样)。也可以说,在奇数边沿,MOSI和MISO上的电平有效。
例如,若在SCK线上电平第一次跳变(即第1个边沿)时,MOSI上的电平为高电平,则传输的数据为1,低电平则为0(数据有效);在SCK线上电平第二次跳变(即第2个边沿)时,MOSI上的电平无论是什么,都不会被读取(数据无效)。
CPHA=1 时的 SPI 通讯模式时序图
当时钟相位CPHA为1时,采样在偶数边沿进行(即上图SCK线上第2、4、6…个边沿时刻采样)。也可以说,在偶数边沿,MOSI和MISO上的电平有效。
例如,在SCK线上电平第一次跳变(即第1个边沿)时,MOSI上的电平无论是什么,都不会被读取(数据无效);在SCK线上电平第二次跳变(即第2个边沿)时,若MOSI上的电平为高电平,则传输的数据为1,低电平则为0(数据有效);
由时钟极性CPOL及时钟相位CPHA的不同取值,SPI分成了四种模式:
通讯时,主机和从机的SPI的模式要相同,才能保证数据正常传输。