SPI(Serial Peripheral Interface)是一种串行通信协议,常用于连接微控制器、存储器、传感器和其他外围设备。SPI通常由一个主设备(通常是微控制器)和一个或多个从设备组成。
1、SPI通信一般由四根线组成:
-
SCLK(时钟线):由主设备产生的时钟信号,用于同步数据传输。
-
MOSI(主设备输出从设备输入线):主设备输出的数据线,用于向从设备发送数据。
-
MISO(主设备输入从设备输出线):从设备输出的数据线,用于向主设备发送数据。
-
SS(片选信号):由主设备控制的片选信号,用于选择与主设备通信的从设备。
2、时序:
SPI的时序通常由时钟极性(CPOL)和时钟相位(CPHA)来定义:
时钟极性(CPOL):指定在不活动状态时时钟信号的电平。通常有两种极性:
- CPOL=0:时钟信号在空闲状态为低电平。
- CPOL=1:时钟信号在空闲状态为高电平。
时钟相位(CPHA):指定数据采样的时机,即在时钟的哪个边沿(上升沿或下降沿)上采样数据。通常有两种相位:
- CPHA=0:数据在时钟信号的第一个边沿上采样。
- CPHA=1:数据在时钟信号的第二个边沿上采样。
所以SPI通信有时钟极性和时钟相位组成四种通信方式:
- Mode 0: CPOL=0, CPHA=0
- Mode 1: CPOL=0, CPHA=1
- Mode 2: CPOL=1, CPHA=0
- Mode 3: CPOL=1, CPHA=1
3、数据传递:
-
选择从设备:在开始数据传输之前,主设备通过片选信号(SS)选择要与之通信的从设备。当需要与某个从设备通信时,主设备将片选信号拉低,表示选中该从设备。
-
发送数据:主设备在时钟信号(SCLK)的边沿(根据CPHA指定的边沿)上发送数据,发送的数据位数由通信的数据长度决定。通常是从最高位开始,依次发送到最低位。
-
接收数据:从设备在时钟信号的相应边沿上(与主设备发送数据的边沿相对应,根据CPHA指定的边沿)将数据发送回主设备。主设备在这个时候采样(读取)MISO线上的数据。
-
结束通信:当数据传输完成后,主设备将片选信号拉高,表示与从设备的通信结束。