fahreddinaykut/SparkAltBatteryBoard

GitHub: fahreddinaykut/SparkAltBatteryBoard

通过逆向工程 DJI Spark 飞控与电池间的 I2C/SMBus 通信协议,打造了一块可让标准 3S LiPo 电池替代停产原装智能电池的遥测转接板。

Stars: 12 | Forks: 0

# SparkAltBatteryBoard 这是一个专为 DJI Spark 平台设计的定制化、研究导向的电池接口和遥测板,它基于标准的 3S LiPo 电池包运行,而不是使用已停产且难以找到的 OEM Smart Battery。 本项目记录了一个逆向工程的 I2C/SMBus smart-battery 通信接口,最初开发它是为了研究 DJI Spark 飞行控制器如何与其电池包进行通信。该电路板连接在标准的 3S 电池包和无人机之间,读取实际的电芯电压和电流,并重现该通信接口。

DJI Spark flying on SparkAltBatteryBoard

## 工作原理 1. 将原始的 DJI Spark Smart Battery 拆解,并使用 Saleae Logic Analyzer 捕获了其与飞行控制器之间的 I2C/SMBus 通信流量。 2. 对这些流量进行解码,以恢复 SBS + DJI 专有命令集(auth 握手、电芯电压、PEC/CRC-8 等)—— 参见 [`Docs/I2C_BMS_PROTOCOL.md`](Docs/I2C_BMS_PROTOCOL.md)。 3. 定制的 PCB 复刻了 OEM 电池的外形尺寸和连接器,带有用于单电芯电压感测的电阻分压器以及一个 INA199 电流分流放大器。 4. 板上的 ATmega328P 通过 I2C 实时重现了 Smart Battery 通信接口 —— 动态计算 PEC 并在需要时进行时钟拉伸。完整的协议实现请参见 [`Firmware/README.md`](Firmware/README.md)。

Original DJI Spark battery, disassembled for reverse engineering

## 仓库结构 | 文件夹 | 内容 | |---|---| | [`Hardware/`](Hardware) | KiCad 项目:原理图、PCB layout、3D 连接器模型、Gerbers、BOM | | [`Firmware/`](Firmware) | 用于 ATmega328P I2C/SMBus 电池模拟器的 PlatformIO 项目 | | [`Mechanical/`](Mechanical) | 电池安装座 3D 模型 (STEP) | | [`Docs/`](Docs) | 原理图 PDF、协议逆向工程笔记、原始抓取的 I2C 会话、参考照片/视频 | ## 硬件 | 正面 | 背面 | Layout | |---|---|---| | ![PCB 正面 3D](https://static.pigsec.cn/wp-content/uploads/repos/cas/16/16fadadc4046363abfd9a075cd417b8113558504aaeb94771566720826b68a41.png) | ![PCB 背面 3D](https://static.pigsec.cn/wp-content/uploads/repos/cas/df/df28beb0711f5126de74bf951265509d2ad4da041f9c0a69c57f5856186b0f0d.png) | ![PCB layout](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/30045d320f943ec93ac7c608327863248756fa8bfcaf4d88465cd7354e39a95e.png) | - **MCU:** ATmega328P —— 之所以特别选择它,是因为其硬件 TWI 外设能可靠地支持 I2C 时钟拉伸,这是 DJI FC 的轮询所必需的(关于为什么 ESP32 在这里行不通,请参见 [`Firmware/README.md`](Firmware/README.md#hardware))。 - **感测:** 三路电阻分压网络用于单电芯电压取样,INA199 分流放大器用于电池包电流感测。 - **完整原理图:** [`Docs/SparkAltBatteryBoardV1.pdf`](Docs/SparkAltBatteryBoardV1.pdf) - **制造输出:** [BOM](Hardware/Fabrication/SparkAltBatteryBoard_BOM.csv) · [Gerbers](Hardware/Fabrication/SparkAltBatteryBoard_Gerbers.zip) - **电池安装座:** [`Mechanical/batterymount.stp`](Mechanical/batterymount.stp) ### PCB 设计 / 制造说明 该 PCB 版本是作为面向制造的 KiCad 项目准备的,而不仅仅是概念验证原理图。 设计考量包括: - 层次化原理图结构 - 分离的 MCU、电源、感测和连接器模块 - 3.3 V I2C/SMBus 逻辑接口 - ADC 缩放的电芯电压感测输入 - 模拟测量线路上的 RC 滤波 - INA199 高侧电流感测前端 - Kelvin 式的分流测量走线方法 - Buck 稳压的 3.3 V 系统供电轨 - I2C 上拉电阻 - 外部通信线路上的 ESD/TVS 防护 - AVR ICSP 编程/调试接口 - 针对电池电流路径的宽走线铺铜策略 - 准备好的制造输出:BOM 和 Gerber 文件包 ## 固件 针对 ATmega328P(Arduino Uno/Nano 引脚排列)的 PlatformIO 项目。处理 I2C 从机逻辑、ADC 读取、CRC-8 PEC 计算以及所有 SBS/DJI 命令响应。 ``` pio run -e uno pio run -e uno -t upload ``` 完整的引脚映射、支持的命令表及已知限制:[`Firmware/README.md`](Firmware/README.md)。 ## 协议逆向工程 用于解码协议的原始逻辑分析仪捕获文件已包含在内,以供参考: - [`Docs/sniffedsession2.csv`](Docs/sniffedsession2.csv) - [`Docs/sniffedsession3.csv`](Docs/sniffedsession3.csv) - 完整的分析文章:[`Docs/I2C_BMS_PROTOCOL.md`](Docs/I2C_BMS_PROTOCOL.md) ## 早期原型飞行测试 下面的视频展示了大约 4 年前测试的早期原型。它并不代表本仓库中重新设计的 PCB 版本的飞行测试。 ## 免责声明 这是一个出于教育目的分享的爱好者逆向工程项目。使用改装过的电池/BMS 进行飞行需自担风险 —— 在飞行前请自行验证电芯电压、电流限制和接线。本项目与 DJI 无关,也未获得其认可。 原始原型过去曾进行过飞行测试。本仓库中重新设计的 PCB 版本尚未进行过飞行测试,因为最初的测试无人机后来在一次坠机中受损。 ## 许可证 源代码可供个人、教育和研究使用。未经书面许可,不允许商业使用。请参见 [`LICENSE`](LICENSE)(带有 Commons Clause 的 MIT 协议)。
标签:I2C/SMBus协议, UML, 固件开发, 嵌入式开发, 无人机硬件, 电池管理系统, 硬件设计, 硬件逆向工程