liquidproton/3M-TR-801N-Battery-Emulator

GitHub: liquidproton/3M-TR-801N-Battery-Emulator

逆向工程并模拟 3M TR-830 电池组的 SMBus/I2C 协议,使用 Arduino Nano 和通用电池替代昂贵的专有电池来驱动 PAPR 设备。

Stars: 1 | Forks: 1

# 3M TR-800 PAPR 电池模拟器 逆向工程并模拟 3M TR-830 电池组的 Smart Battery System (SBS) SMBus/I2C 协议。目标是使用自定义电源方案(例如通过降压转换器使用 DeWalt 20V 电池)来安全地运行 TR-800 PAPR 鼓风机组,以替代昂贵的专有电池组。该电池使用了 TI BQ20Z655 芯片。 ## 硬件配置 该设置使用标准的 5V Arduino Nano 来模拟电池的逻辑层,并结合了一个大功率降压级。Printables 链接: ### 组件构成 * **电源:** DeWalt 20V Max 电池 * **适配器:** goBILDA 20V DeWalt 电池接收器 * **稳压器:** 20A DC-DC 降压转换器(降至 **14.5V**) * **微控制器:** Arduino Nano(5V 逻辑电平) * **上拉电阻:** $2 \times 2.2\text{ k}\Omega$ 电阻,上拉至 Nano 的 5V 供电轨 ### 连接器引脚定义 | 鼓风机引脚 | 信号 | Arduino 连接 | 备注 | | :--- | :--- | :--- | :--- | | **Pin 1** | VCC | 降压转换器输出 (+) | 提供主工作电源(**14.5V DC**) | | **Pin 2** | SCL | 模拟引脚 **A5** | 硬件 I2C 时钟线;需要强上拉至 5V | | **Pin 3** | SDA | 模拟引脚 **A4** | 硬件 I2C 数据线;需要强上拉至 5V | | **Pin 4** | GND | 开发板 **GND** | 主参考地(星型接地点) | ## 当前状态:10 秒后发出蜂鸣声 该模拟器目前无法正常工作。我已经能够通过一些验证检查。似乎位于 `0x60` 的辅助芯片也参与了其中,并阻止了旁路的正常工作。 ## 协议解析与待解决问题 ### 1. 缺失的地址 `0x60` 来自原装 TR-830 电池组的逻辑跟踪记录显示,鼓风机会主动监控*两个* I2C 地址[cite: 1]: * **`0x0B`**:主电量计管理器(处理标准电池指标)[cite: 1]。 * **`0x60`**:包含安全映射或制造跟踪密钥的辅助芯片[cite: 1]。 恰好在 17 秒标记处,鼓风机会向地址 `0x60` 发送一串多字节配置突发数据(`C2 B4 00 5C C2 2D`)[cite: 1]。由于我们目前的代码仅在 `0x0B` 处初始化为 slave,Nano 会忽略该请求,从而导致硬件 `NACK`[cite: 1, 2]。鼓风机意识到缺少了一个核心组件,随后触发警报。 ### 2. 寄存器值校准 原装跟踪捕获记录显示,标准的 Smart Battery 变量应采用小端字节顺序。如果数值没有严格对齐到原装的工作极限,当前的布局就会失效。 ## 待办事项列表 / 固件路线图 * [ ] **启用多地址 Slave 模式:** 在 `setup()` 中使用 Two-Wire Address Mask Register (`TWAMR`) 修改 ATmega328P 的硬件寄存器。这会强制单个 Nano 在相同的物理线路上同时侦听 `0x0B` 和 `0x60` 并发出硬件 `ACK` 响应。 * [ ] **处理地址 `0x60` 遥测数据:** 更新中断处理程序(`receiveEvent` / `requestEvent`),通过解析 `TWSR` 状态标志来动态路由数据。当地址 `0x60` 被查询寄存器 `0x01` 时,代码必须返回预期的 5 字节数组:`[0x61, 0x0B, 0x70, 0x16, 0xF0]`[cite: 1]。 * [ ] **验证 `0x2F` 握手逻辑:** 清理验证路由。确保如果鼓风机向寄存器 `0x2F` 执行多字节写入质询[cite: 1],代码会在提供 `authSignature` 签名响应之前[cite: 1],将其按顺序存储在易失性数组缓冲区中。 ## 交流 SimpleX:
标签:3D打印, Arduino, UML, 云资产清单, 协议分析, 嵌入式开发, 权限提升, 物联网, 硬件, 逆向工程