简介
特点:串行,全双工,同步
SPI(Serial Peripheral Interface,串行外设接口)协议是由Motorola公司发明的同步全双工串行接口协议,SPI协议主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。在芯片中只占用四根管脚用来控制及数据传输。
优点:是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快
缺点:没有指定的流控制,没有应答机制确认数据是否接收,与IIC总线通讯协议相比,在数据可靠性上有一定缺陷,而且只支持单主机。
物理层
SPI协议总共由四个串行总线构成。
- SCK (serial clock):时钟信号线,用于数据传输同步。由通讯主机产生,决定了数据传输速率。当相互通讯设备支持的最大传输速率不同时,受限于速率最低的设备。
- MOSI(master output slave input):主机输出从机输入线, 将主机数据传输至从机。
- MISO(master input slave output):主机输入从机输出线, 将从机数据传输至主机。
- CS_N(chip select):片选线,有多少个从机,主机上就有多少根片选线,空闲时为高电平。在SPI协议中从设备没有唯一的设备地址,而是通过拉低CS_N来选择从机。
协议层
SPI协议层通讯主要有四种模式,为模式0、模式1、模式2以及模式3。
分别由时钟极性(CPOL,clock prority)和时钟相位(CPHA,clock phase)来决定。其中CPOL参数规定了空闲状态(CS_N为高电平,设备未被选中)时SCK时钟信号的电平状态,CPHA规定了数据采样是在SCK时钟的奇数边沿还是偶数边沿。
模式0:CPOL= 0,CPHA=0。空闲状态时SCK串行时钟为低电平;数据采样在SCK时钟的奇数边沿,本模式中,奇数边沿为上升沿;数据更新在SCK时钟的偶数边沿,本模式中,偶数边沿为下降沿。
模式1:CPOL= 0,CPHA=1。空闲状态时SCK串行时钟为低电平;数据采样在SCK时钟的偶数边沿,本模式中,偶数边沿为下降沿;数据更新在SCK时钟的奇数边沿,本模式中,偶数边沿为上升沿。
模式2:CPOL= 1,CPHA=0。空闲状态时SCK串行时钟为高电平;数据采样在SCK时钟的奇数边沿,本模式中,奇数边沿为下降沿;数据更新在SCK时钟的偶数边沿,本模式中,偶数边沿为上升沿。
模式3:CPOL= 1,CPHA=1。空闲状态时SCK串行时钟为高电平;数据采样在SCK时钟的偶数边沿,本模式中,偶数边沿为上升沿;数据更新在SCK时钟的奇数边沿,本模式中,偶数边沿为下降沿。
起始信号和停止信号
当CS_N信号拉低时,代表主机发送起始信号,选中某一个从机。
当CS_N信号拉高时,代表主机发送停止信号。
SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制。