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

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

解读 152 · I2C 入门

解读对象:概念课 · 以 microduck-replica/docs/imu_to_dxl-设计包/原理图连接表.md 为教材(SCL/SDA、上拉、地址)
需要的前置:解读 150(上拉电阻)、解读 44(IMU 是哪颗)、解读 105(读回来的数据怎么解)

主控要跟 IMU 说两句话,再专门铺一条 UART 总线就太奢侈了。I2C 就是那根"便宜的两芯电话线":两根线挂一串设备,靠门牌号喊人。

1. 两根线,一个节拍一个数据

I2C 只有两根线:SCL 是节拍线(谁打拍子谁主导,像音乐指挥),SDA 是数据线(数据跟着节拍一位一位走)。所有设备并联在这两根线上:设计包连接表里,SCL 一行写着 U1.PB6、U2.SCL、R1.2,SDA 一行写着 U1.PB7、U2.SDA、R2.2——主控 STM32 的两个脚,IMU 的两个脚,共用两条线。本项目跑 400kHz(设计规格 §四:PB6/PB7,I2C1 400kHz),即指挥每秒打 40 万拍,一拍送一位。

与 UART 一对一专线不同(见解读 151),I2C 是"公共广播"——好处是省线、好扩展,代价是要有办法点名,这就轮到地址。

2. 地址 0x6A:IMU 的门牌号

每台 I2C 设备有一个 7 位地址,主机发起通话时先喊门牌,只有对号的从机应答。本板的 IMU 是 LSM6DSV16X,地址 0x6A——这个号不是随机的:连接表 U2 引脚表写明 SA0 → GND(I2C 地址 = 0x6A)。SA0 是地址选择脚,接地取一个号、接高取另一个(另一号是多少,以 ST 数据手册为准,待验证)——厂家就是这样让同款芯片在同一条总线上共存的。

主控想读姿态时,流程是:喊 0x6A → 说要读哪个寄存器 → IMU 回数据。固件骨架阶段先用轮询(连接表 IMU_INT1 一行"数据就绪中断(固件骨架先用轮询,预留)"),等以后让 IMU 用 INT1 脚主动举手"有新数据了"。

3. 两颗电阻和一根不能悬空的脚

I2C 有个新手必踩的坑,恰好把前两篇的概念串起来了:

4. 动手验证

板子上电后量 SCL/SDA:万用表直流档两根线都应读在 3.3V 附近(空闲态被上拉拉高),任何一颗掉到 0V 都说明总线被谁摁住没松手。把板子接到 Radxa 的 40-pin I²C 座(教程:"IMU 就接这里")扫总线,应看到 0x6A 应答;读不到时,第一件事是查 CS 是否真的拉到了 3V3,第二件事才是怀疑芯片。

你带走的收获

延伸

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