解读 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 的位置:
- UART(解读 151):两根线,没有时钟,异步——双方事先约定波特率。本项目总线 1 Mbps,而 STM32 用内部 HSI16 时钟,精度最坏 −1.85%/+1.55%,对照 ±3% 容差"够用但余量不多"——异步的代价就是余量要精打细算。
- I²C(解读 152):两根线 + 地址点名,慢而省脚,项目里 ToF、音频都挂 400 kHz 的 i2c3。
- SPI:多用两根线,换来一根时钟线——节拍由主机现场给,双方不用为"每秒多少位"讨价还价。
板上还有两根不起眼的线:IMU_INT1/INT2,从 U2 接到主机的 PA0/PB0——新数据到了从机主动"举手",主机不必一遍遍问"好了吗"。出板复核(2026-09-12)把"SPI 读 WHO_AM_I"列为首次上电调试的前几步:读身份寄存器,是验证四根线都焊对了的最短一招。
板上这段链路为什么选 SPI 而不是 I²C,仓库没写明理由,待验证;能确定的是接线表、原理图与固件(SPI1 初始化)都按 SPI 四线落位。
你带走的收获
- SPI 四线 = 片选(CS)+ 时钟(SCK)+ 两根单向数据(MOSI/MISO);CS 拉低选中,时钟由主机提供,天然全双工。
- 模式选择脚在上电瞬间的电平决定一切,悬空 = 抛硬币;R1 这类上拉电阻是把"不确定"钉死的最低成本手段。
- "没用的脚"要分待遇:辅助接口 SDx/SCx 手册要求接地,OCS_Aux/SDO_Aux 允许悬空——以手册条目为准,不凭感觉。
- SPI(同步)与 UART(异步)的本质差别是有没有时钟线;UART 的波特率容差焦虑(HSI16 最坏 −1.85%)SPI 用一根 SCK 就免了。
- 中断脚(INT1/INT2)是轮询之外的选择:数据就绪主动举手,不浪费主机时间。
延伸
- 解读 152(I2C 入门):点名叫人的那套协议;解读 151(半双工 UART):1 Mbps 总线的物理层;解读 150(上拉电阻):为什么悬空不可靠,R1/R4/R5 一家的故事
- 本地:
microduck-replica/hardware/imu_to_dxl/imu_to_dxl-接线表.md、microduck-replica/hardware/imu_to_dxl/出板复核-2026-09-12.md