两轮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 ─┘
                        方向反转点 ↑
相关推荐
生态学者2 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
lsswear2 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
Data analyse4564 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
Navigator_Z5 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2086 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
光影少年6 小时前
AI Agent、自动化与未来工作
人工智能·算法·架构
牧羊人.3336 小时前
计算机视觉基础 第16章|EigenFace,FisherFace,LBPH传统人脸识别算法
人工智能·算法·计算机视觉
Nil2086 小时前
leetcode 72编辑距离
算法·leetcode·职场和发展
神工坊6 小时前
技术分享︱SIMFORGE HSF® 网格加密与热点加速技术实践
算法·hpc·网格·cae·工程仿真·数值引擎·samr
CV@CV7 小时前
世界模型与智能体协同推理逻辑
人工智能·算法·边缘计算·量子计算·具身智能