一、什么是SPI
SPI全称 Serial Peripheral Interface,串行外设接口。
- 通信属性:同步、全双工串行通信协议,用于ARM/单片机和板载外设高速通信。
- 4根信号线作用
- SCLK:串行时钟线,由主机产生,用来同步通信时序
- MOSI:主机输出、从机输入,主机向从机发送数据
- MISO:主机输入、从机输出,从机向主机回传数据
- CS/SS:片选线,选中需要通信的从设备,实现一主多从
- 核心特点 ① 写即是读,读即是写。发送和接收同时发生,主机发1字节同时就会收到从机的1字节。 ② 读取从机数据时,主机必须发送Dummy占位字节(0xFF/0x00),用来产生时钟,才能读到从机数据。③ 传输速率:1MHz ~ 上百MHz;数据高位先行。
二、SPI有几种工作模式?分别是什么?
由两个参数共同决定模式:CPOL时钟极性 、CPHA时钟相位
1)参数含义
- CPOL(时钟极性):SCLK空闲状态的电平
- CPOL=0:空闲时SCLK为低电平
- CPOL=1:空闲时SCLK为高电平
- CPHA(时钟相位):接收方在哪一个边沿采样数据
- CPHA=0:在时钟第一个边沿采样
- CPHA=1:在时钟第二个边沿采样
2)四种工作模式
- Mode0:CPOL=0,CPHA=0 空闲SCLK低电平,在上升沿采样数据
- Mode1:CPOL=0,CPHA=1 空闲SCLK低电平,在下降沿采样数据
- Mode2:CPOL=1,CPHA=0 空闲SCLK高电平,在下降沿采样数据
- Mode3:CPOL=1,CPHA=1 空闲SCLK高电平,在上升沿采样数据
⚠️重要:主机、从机CPOL、CPHA必须完全一致,否则通信数据全部错乱。外设(ADXL345、OLED)都有固定模式,以芯片手册为准。
三、ADXL345传感器量程、分辨率
ADXL345:三轴MEMS数字加速度传感器,支持I2C、SPI。
- 量程 软件可配置档位:±2g、±4g、±8g、±16g;最大测量范围 ±16g;1g = 9.8m/s²。
- 分辨率
- ±16g量程下:13位分辨率
- 灵敏度:1LSB ≈0.0039g
- 换算公式:实际加速度(g) = 传感器原始数值 × 0.0039
示例: X轴原始123 → X = 123 × 0.0039 g Y轴原始200 → Y = 200 × 0.0039 g Z轴原始300 → Z = 300 × 0.0039 g
四、I2C和SPI有什么区别
下面分点逐条对比:
- 通信模式
- I2C:同步、半双工,同一时间只能单向收发
- SPI:同步、全双工,可以同时收、发数据
- 信号线
- I2C:只需要2根线(SCL时钟、SDA数据),增加从机不需要再加引脚
- SPI:4根线(SCLK、MOSI、MISO、CS),每增加1个从机,就要多1根CS片选引脚
- 通信速度
- I2C:100KHz ~ 3.4MHz,速度偏低
- SPI:1MHz ~ 100MHz,速度远高于I2C
- 设备架构
- I2C:支持多主多从,依靠设备地址区分不同外设
- SPI:只支持一主多从,依靠CS片选线选择外设
- 数据传输顺序
- I2C:低位先行
- SPI:高位先行
- 应答校验
- I2C:自带硬件ACK应答,可以确认数据是否被接收
- SPI:没有硬件应答,无校验,需要软件做判断
- 硬件电路要求
- I2C:SDA、SCL必须加上拉电阻
- SPI:不需要上拉电阻
- 适用场景
- I2C:引脚少,适合挂载大量低速传感器
- SPI:高速,适合OLED、Flash、高速加速度传感器
总结:I2C赢在引脚少、支持多主、有应答;SPI赢在速度快,支持全双工。
小结
- SPI是同步全双工串行协议,四根信号线,一主多从,读写同步进行。
- CPOL、CPHA组合出4种SPI模式,主从配置必须相同。
- ADXL345最大量程±16g,13位分辨率,原始读数乘0.0039得到g值。
- I2C引脚少、带应答;SPI速度高、可全双工。