两轮BMS AFE SH367306 I2C 读写时序

SH367306 I2C 读写时序

SH367306 是两轮车 BMS 常用的 AFE 芯片,通过 I2C 与 MCU 通信。它的读写时序有一个反直觉的地方------读比写多了一步。


写操作

复制代码
START → SlaveAddr(W) → RegAddr → Data → STOP

全程 Master 说、Slave 听,方向一致。

读操作

复制代码
START → SlaveAddr(W) → RegAddr → RESTART → SlaveAddr(R) → Data → STOP

比写多了一个 RESTART + SlaveAddr®


为什么读不能像写一样直接 START + SlaveAddr(W) + RegAddr + Data ?

I2C 总线上谁控制 SDA(数据线)由地址字节的 R/W 位决定:

地址 R/W 方向
SlaveAddr(W) 0 Master→Slave
SlaveAddr® 1 Slave→Master

读操作的前半段是"告诉从机读哪个寄存器"------这是 Master 说,所以用 SlaveAddr(W)。但后半段是"从机把数据返回来"------方向反了,Slave 必须知道现在轮到它控制 SDA。

如果不发 RESTART + SlaveAddr®,Slave 全程认为自己在"听",永远不会往外发数据。RESTART 的作用就是在不释放总线(不发 STOP)的前提下反转通信方向------告诉 Slave:"刚才那个地址是我要读的,现在轮到你说了。"


一图对比

复制代码
写:  START ── W ── RegAddr ── Data ── STOP
               └──── Master→Slave ────┘

读:  START ── W ── RegAddr ── RESTART ── R ── Data ── STOP
               └─ Master→Slave ─┘          └─ Slave→Master ─┘
                        方向反转点 ↑
相关推荐
不会就选b29 分钟前
算法日常・每日刷题--<贪心>17
算法
6Hzlia3 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
有点。9 小时前
C++03阶段练习(练习题)
数据结构·算法·图论
周末也要写八哥11 小时前
经典算法实例:游戏中弱角色的数量(二)
算法
是Yu欸11 小时前
鸿蒙PC移植:2048 从网页小游戏到 AI 桌面应用
大数据·人工智能·算法·数据挖掘·openharmony·codex
鹿角片ljp11 小时前
KV Cache 解析
java·算法
liliangcsdn11 小时前
IVOL与偏度因子的对比测量分析
算法
threerocks13 小时前
Jev 入门第一课
算法
西柚研究生12345614 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
hetao173383714 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法