ARM嵌入式学习笔记:SPI通信协议详解

一、什么是SPI

SPI全称 Serial Peripheral Interface,串行外设接口。

  1. 通信属性:同步、全双工串行通信协议,用于ARM/单片机和板载外设高速通信。
  2. 4根信号线作用
  • SCLK:串行时钟线,由主机产生,用来同步通信时序
  • MOSI:主机输出、从机输入,主机向从机发送数据
  • MISO:主机输入、从机输出,从机向主机回传数据
  • CS/SS:片选线,选中需要通信的从设备,实现一主多从
  • 核心特点 ① 写即是读,读即是写。发送和接收同时发生,主机发1字节同时就会收到从机的1字节。 ② 读取从机数据时,主机必须发送Dummy占位字节(0xFF/0x00),用来产生时钟,才能读到从机数据。③ 传输速率:1MHz ~ 上百MHz;数据高位先行。

二、SPI有几种工作模式?分别是什么?

由两个参数共同决定模式:CPOL时钟极性 、CPHA时钟相位

1)参数含义

  1. CPOL(时钟极性):SCLK空闲状态的电平
  • CPOL=0:空闲时SCLK为低电平
  • CPOL=1:空闲时SCLK为高电平
  1. CPHA(时钟相位):接收方在哪一个边沿采样数据
  • CPHA=0:在时钟第一个边沿采样
  • CPHA=1:在时钟第二个边沿采样

2)四种工作模式

  1. Mode0:CPOL=0,CPHA=0 空闲SCLK低电平,在上升沿采样数据
  2. Mode1:CPOL=0,CPHA=1 空闲SCLK低电平,在下降沿采样数据
  3. Mode2:CPOL=1,CPHA=0 空闲SCLK高电平,在下降沿采样数据
  4. Mode3:CPOL=1,CPHA=1 空闲SCLK高电平,在上升沿采样数据

⚠️重要:主机、从机CPOL、CPHA必须完全一致,否则通信数据全部错乱。外设(ADXL345、OLED)都有固定模式,以芯片手册为准。

三、ADXL345传感器量程、分辨率

ADXL345:三轴MEMS数字加速度传感器,支持I2C、SPI。

  1. 量程 软件可配置档位:±2g、±4g、±8g、±16g;最大测量范围 ±16g;1g = 9.8m/s²。
  2. 分辨率
  • ±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有什么区别

下面分点逐条对比:

  1. 通信模式
  • I2C:同步、半双工,同一时间只能单向收发
  • SPI:同步、全双工,可以同时收、发数据
  1. 信号线
  • I2C:只需要2根线(SCL时钟、SDA数据),增加从机不需要再加引脚
  • SPI:4根线(SCLK、MOSI、MISO、CS),每增加1个从机,就要多1根CS片选引脚
  1. 通信速度
  • I2C:100KHz ~ 3.4MHz,速度偏低
  • SPI:1MHz ~ 100MHz,速度远高于I2C
  1. 设备架构
  • I2C:支持多主多从,依靠设备地址区分不同外设
  • SPI:只支持一主多从,依靠CS片选线选择外设
  1. 数据传输顺序
  • I2C:低位先行
  • SPI:高位先行
  1. 应答校验
  • I2C:自带硬件ACK应答,可以确认数据是否被接收
  • SPI:没有硬件应答,无校验,需要软件做判断
  1. 硬件电路要求
  • I2C:SDA、SCL必须加上拉电阻
  • SPI:不需要上拉电阻
  1. 适用场景
  • I2C:引脚少,适合挂载大量低速传感器
  • SPI:高速,适合OLED、Flash、高速加速度传感器

总结:I2C赢在引脚少、支持多主、有应答;SPI赢在速度快,支持全双工。

小结

  1. SPI是同步全双工串行协议,四根信号线,一主多从,读写同步进行。
  2. CPOL、CPHA组合出4种SPI模式,主从配置必须相同。
  3. ADXL345最大量程±16g,13位分辨率,原始读数乘0.0039得到g值。
  4. I2C引脚少、带应答;SPI速度高、可全双工。
相关推荐
by209991 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
乌暮2 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
CodeFragment2 小时前
裸机开发速记:启动流程|GIC 中断|时钟系统|UART 通信
arm开发·单片机·嵌入式硬件
小雪崩3 小时前
嵌入式学习 day60:ARM汇编——触摸屏与SPI
汇编·arm开发·学习
问天_观心4 小时前
大模型训练与推理优化(二)
人工智能·深度学习·学习·大模型·transformer
Because_of_Her14 小时前
dfs-洪水填充技巧
笔记·算法·深度优先·洪水填充
xzal124 小时前
GESP Python笔记
笔记·python·算法
周玉奎先生5 小时前
CGM系列水泥基灌浆料型号参数解析及安庆重点工程应用匹配
经验分享·笔记·零售
海海不掉头发5 小时前
软件项目管理学习笔记-从软件危机到敏捷与DevOps
笔记·学习·devops