SPI有4个信号,主机输输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行时钟(SCLK或SCK)和外设片选(CS)。与标准的串行端口相比,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟。在与多芯片通信时,需要主机通过触发从设备的芯片的片选输入引脚来选择接收数据的从设备,没有被选中的外设将不会参与SPI传输。
在某一些芯片上MISO有时被称为串行输出(SO),或者串行数据输出(SDO)。MOSI有时被称为串行输入(SI),或者串行数据输入(SDI)。
我们在通过SPI总线,在主机和从机之间传输数据时,必须保证主机发出的时序和从机所要求的时序一致才可以。这就与时钟极性和时钟相位相关了。
时钟极性简称CPOL,指SPICLK空闲时的电平状态。
时钟相位简称CPHA,指采样数据是在SPICLK的那一个边沿进行。如果采样数据是在SPICLK的第一个边沿进行的,表示CPHA=0,如果采样数据是在第二个边沿进行的,表示CPHA=1。
两种总线SPI与IIC进行比较的异同点:
1.IIC总线不是全双工,有两根线SCL,SDA。SPI总线可以实现全双工,有四根线SCK,CS,MOSI,MISO。
2.IIC总线传输速度在100Kbps-4Mbps,SPI总线传输速度更快,可以达到30MHZ以上。
3.IIC总线空闲时SDA,SCL都是高电平,SPI总线空闲时MOSI,MISO由SCK的CPOL决定。
4.IIC总线和SPI总线数据传输都是MSB在前,LSB在后。
5.IIC总线和SPI总线的时钟都是由主设备产生,且只在数据传输时发生时钟。