DEEP 153 · 第十三辑 · 小白电气课 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 153 · SPI 入门

解读对象:概念课 · 以 microduck-replica/hardware/imu_to_dxl/imu_to_dxl-接线表.md(「IMU(SPI 四线 + 两路中断)」节)为教材
需要的前置:解读 44(IMU 芯片路径);听过 I²C 和 UART 各是什么,不确定也没关系,本文对着比。

四根线,各管一件事

SPI 是芯片之间的"四线对话"。主机(发起对话的一方)是板上的 STM32(U1),从机是 IMU 芯片 LSM6DSV16X(U2)。接线表里就一行表格,把四根线全交代了:

网络 U1 (STM32) 引脚 U2 (IMU) 引脚 这根线干什么
SPI_CS 11 · PA4 12 · CS 片选:拉低才跟"你"说话
SPI_SCK 12 · PA5 13 · SCL 时钟:主机打拍子
SPI_MISO 13 · PA6 1 · SDO/SA0 从机 → 主机的数据
SPI_MOSI 14 · PA7 14 · SDA 主机 → 从机的数据

生活类比:I²C 像大教室点名,靠地址喊人(项目里 ToF 报 0x29、音频 codec 报 0x18,都是地址);SPI 是每人桌上一根唤铃线——CS 拉低,这颗芯片才知道"下面的话是说给我听的"。另外三根分工固定:SCK 是节拍器,由主机提供;MOSI/MISO 各走单向,所以 SPI 是全双工。

一个有意思的细节:U2 的引脚名印的是 SCL/SDA——那是 I²C 的名字。这颗芯片是"双语者":CS 拉低时这几根线换说 SPI,拉高时是 I²C(所以引脚 1 叫 SDO/SA0,一个名字藏着两种身份)。同一根铜线,叫什么取决于 CS 这根模式开关的状态。

CS 为什么必须上拉:上电瞬间的一念之差

接线表给了 R1(10 kΩ)一个"必须"的评语:它把 SPI_CS 拉到 3.3 V。理由是上电与复位期间,主机的 PA4 脚是高阻态(既不输出高也不输出低,像松开的手),CS 浮着,模式就不确定:既可能漂进不想要的协议,也可能把总线噪声当成命令。

《硬件入门》把这归为"上电状态"一课:CS 脚的电平在上电瞬间决定走 SPI 还是 I²C,悬空就是"不确定"——有时能跑,有时不能,最难查的那种 bug。加一个 10 kΩ 上拉,把上电默认钉在安全态,等工作时 MCU 再主动拉低进 SPI;这与解读 150 讲的上拉电阻是同一个道理。

IMU 上还有两组"备用接口":引脚 2/3(SDx/SCx)是辅助 SPI,本板不用,但数据手册(ST DS13510 Rev 1, Table 1)要求必须接地,不可悬空;引脚 10/11(OCS_Aux/SDO_Aux)则允许悬空。"没用的脚"分两种待遇,以手册为准。

同步与异步:SPI 靠时钟线省掉了多少麻烦

三兄弟对比一下就清楚 SPI 的位置:

板上还有两根不起眼的线:IMU_INT1/INT2,从 U2 接到主机的 PA0/PB0——新数据到了从机主动"举手",主机不必一遍遍问"好了吗"。出板复核(2026-09-12)把"SPI 读 WHO_AM_I"列为首次上电调试的前几步:读身份寄存器,是验证四根线都焊对了的最短一招。

板上这段链路为什么选 SPI 而不是 I²C,仓库没写明理由,待验证;能确定的是接线表、原理图与固件(SPI1 初始化)都按 SPI 四线落位。

你带走的收获

  1. SPI 四线 = 片选(CS)+ 时钟(SCK)+ 两根单向数据(MOSI/MISO);CS 拉低选中,时钟由主机提供,天然全双工。
  2. 模式选择脚在上电瞬间的电平决定一切,悬空 = 抛硬币;R1 这类上拉电阻是把"不确定"钉死的最低成本手段。
  3. "没用的脚"要分待遇:辅助接口 SDx/SCx 手册要求接地,OCS_Aux/SDO_Aux 允许悬空——以手册条目为准,不凭感觉。
  4. SPI(同步)与 UART(异步)的本质差别是有没有时钟线;UART 的波特率容差焦虑(HSI16 最坏 −1.85%)SPI 用一根 SCK 就免了。
  5. 中断脚(INT1/INT2)是轮询之外的选择:数据就绪主动举手,不浪费主机时间。

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页