两轮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 ─┘
                        方向反转点 ↑
相关推荐
智能排队系统_头部供应商1 小时前
RK3588边缘网关改造银行排队系统实战
算法
Fabarta2 小时前
从 0 实现 ChatGPT 风格的流式对话 UI
算法·架构
手写码匠2 小时前
手写 AI 上下文压缩系统:从零实现 Prompt 压缩与选择性上下文管理
人工智能·深度学习·算法·aigc
EAI-Robotics3 小时前
机器人操作鲁棒性:当机械手遇上真实世界的不确定性
人工智能·算法·机器人
Tairitsu_H3 小时前
[LC优选算法#17] 链表 | 合并 K 个升序链表 | K个⼀组翻转链表
数据结构·算法·链表
_olone3 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
kebidaixu4 小时前
两轮BMS 防打火策略详解
算法
wabs6665 小时前
关于动态规划【力扣1035.不相交的线和53.最大子数组和的思考】
算法·leetcode·动态规划
退休倒计时5 小时前
【每日一题】LeetCode 199. 二叉树的右视图 TypeScript
算法·leetcode·typescript