什么是SPI
SPI(Serial Peripheral Interface)串行外设接口是Motorola公司在2000年推出的一种同步接口。这种接口首先由motorola 公司在80年代中期开发,后来逐步成为行业标准。
它是一种高速、全双工的同步串行控制总线,主要用于芯片间的传输。
其优点是:
硬件实现简单,
通讯线比较少(通常4pin,有利于芯片封装),
通讯速度比较快(相对于uart, ⅱc,有些芯片可以达到133Mbit/s),
pcb 布线比较容易。
驱动程序相对简单。
缺点是:
数据没有应答, 需要上层硬件,软件来保证传输数据的正确性。
参考文章:
SPI 通讯协议 及 SPI 相关工程 详解
SPI接口被广泛的应用在串行falsh存储器、EEPROM、AD转换芯片、液晶显示屏,解码器和各类传感器芯片中。

spi 网络通讯 spi flash spi 传感器
SPI 标准接口
SPI 一主一从 连接

其中, 主芯片 发送 sclk,mosi, /ss ; 主芯片接收 miso 信号。
SCLK – Serial Clock (时钟信号,由主设备产生,输出);
MOSI– Master Output Slave Input (主设备数据输出,从设备数据输入);
MISO– Master Input Slave Output (主设备数据输入,从设备数据输出);
SS– Chip Select (从设备使能信号,由主设备控制, 输出)。
SPI 是一种同步全双工的接口, 主设备发出时钟(sclk),片选信号(ss),mosi 数据信号;
从设备使用主设备的时钟,返回(输出)miso 信号 给主设备
SPI 一主多从 连接

1)主设备可以有多个片选(ss )信号,每个ss 信号分别对应一个从设备, 一般情况下,ss信号为低电平有效,但不是绝对的, 需要查看相关的设备手册(也有高电平有效的设备)
2)所有miso 信号(从设备发出)共用一条miso 信号线。
3)没有被ss 选择的设备,设备内部的miso 需要高阻,这样就不影响其他从设备返回数给主设备。
4)从设备共用主设备发出的sclk, mosi 信号 (广播)
SPI 协议部分
数据传输
SCLK 由主设备发出,通常情况下, 时钟速率没有强制规定, 主要看从设备的接受能力,不能超过从设备所规定的时钟速率即可。
MOSI和MISO线在SCLK的每个时钟周期传输一位数据,一般情况下(绝大多数)先发送最数据最高位MSB;最后发送数据最低位LSB。
SPI有四种通讯模式, 四种模式的主要用来区分
总线空闲时SCLK的状态 (CPOL)
数据采样位置 (CPHA)
这样就分为:时钟极性CPOL(0,1)和 时钟相位CPHA(0,1), 这两个概念。 这主要是用于兼容不同的从设备的需求而产生的通讯模式。 因此:由CPOL和CPHA的组合而产生了四种的通讯模式。
CPOL(clock polarity)、CPHA(clock phase)
CPOL:没有数据传输时,时钟的空闲状态的电平。
CPHA:数据在什么位置采样

如图所示,
CPHA = 1 ; 表示在片选后(片选信号成立,有效),第二个时钟边沿 采集数据。同时还要看CPOL的初始状态(片选成立时)。
CPOL = 0 , 表示 初始sclk 电平为低,所以在sclk 的下降沿作为数据采样
CPOL = 1 , 表示 初始sclk 电平为高,所以在sclk 的上升沿作为数据采样
CPHA = 0 ; 表示在片选后(片选信号成立,有效),第一个时钟边沿 采集数据。同时还要看CPOL的初始状态(片选成立时)。
CPOL = 0 , 表示 初始sclk 电平为低,所以在sclk 的上升沿作为数据采样
CPOL = 1 , 表示 初始sclk 电平为高,所以在sclk 的下降沿作为数据采样
四种工作模式列表

通常被称作 mode 0,mode 1,mode 2,mode 3
SPI 数据通讯方式
1)所有数据都是根据sclk 时钟信号进行 数据转换, 或者 数据采样的。 即spi 是同步传输协议。具体情况(上升沿是采样还是数据转换, 下降沿是采样还是数据转换)根据spi 的4种通讯模式。
2)如果需要片选信号,一定是在片选信号有效的情况下,遵循spi 的4种通讯方式; 在片选无效时, 根据CPOL 的定义, 保持sclk 在高电平(CPOL = 1),或者低电平(CPOL = 0),在有些一主一从的情况下, 可能不需要片选, 这时,默认片选是一直有效的。
3)数据传输没有规定需要多少个时钟周期,算是一个完整的操作。通常是 8个sclk, 16个sclk,24个sclk, 32个sclk 等等。 根据从设备的定义,能够完成从设备的操作即可。
举例:

主设备发送8bit命令

主设备发送8bit 命令, 从设备返回24bit 的数据给主设备。

主设备发送8bit 命令, 发送 24bit 的地址; 从设备返回24bit地址所存储的数据。
总体来说, 通讯的内容,有主从设备共同决定,(从设备指出什么样的通讯,可以被接受,主设备,根据从设备的需求,编写相关的驱动)
4)数据通讯没有应答信号, (这个ⅱc是不同的)。 所以通讯时,无法保证对方一定正确接收到发送的数据。 需要上层(软件, 硬件)校验,来保证数据传输的正确性。
5)spi 总线是全双工同步通讯总线, 即发送时,也可以接收数据。但在一般情况下的应用是问答方式进行的。 即发送时,不接收数据; 接收时,不发送数据。 但没有明确规定,必须以这种半双工模式通讯。