两轮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 ─┘
                        方向反转点 ↑
相关推荐
元Y亨H2 分钟前
数据结构与算法的通俗指南
数据结构·算法
2301_7644413316 分钟前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模
林泽毅18 分钟前
PyTRIO快速入门(二):Datum构建
人工智能·算法·产品
keep intensify31 分钟前
最长有效括号
算法·leetcode·动态规划
CoderYanger35 分钟前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
猫头虎1 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作
长不胖的路人甲2 小时前
什么是赫夫曼树(哈夫曼树 / Huffman Tree)
python·算法·霍夫曼树
Warren2Lynch2 小时前
掌握 UML 构造型、标记定义与标记值:面向领域特定建模的 UML 扩展全面指南
大数据·算法·uml
157092511343 小时前
【无标题】
开发语言·python·算法
稚南城才子,乌衣巷风流3 小时前
换根法(Rerooting)算法详解
算法