BST85226 vs P1025_PURDY_G2 电量计固件对比分析
文档概述
本文档详细对比分析两个O2Micro电量计固件工程:
- BST85226 (ARM): 基于ARM Cortex-M0 (NEWTON芯片) 的固件工程
- P1025_PURDY_G2 (RISC-V): 基于RISC-V (hbird-e200核心) 的固件工程
第一部分:MCU底层架构差异
1.1 处理器架构对比
| 对比项 | BST85226 (ARM) | P1025_PURDY_G2 (RISC-V) |
|---|---|---|
| 核心架构 | ARM Cortex-M0 | HummingBird E200 (RISC-V) |
| 架构版本 | ARMv6-M | RV32I |
| 指令集 | Thumb (16/32-bit混合) | RISC-V (32-bit) |
| 流水线 | 3级流水线 | 2级流水线 |
| 中断控制器 | NVIC (嵌套向量中断控制器) | PLIC (Platform-Level Interrupt Controller) |
| 中断优先级 | 2位优先级 (4级) | 多级可配置优先级 |
| 向量表 | 固定48条目 | 可配置向量表 |
1.2 内存系统对比
| 对比项 | BST85226 (ARM) | P1025_PURDY_G2 (RISC-V) |
|---|---|---|
| Flash地址 | 0x00002000 - 0x0000D400 (45KB) | 0x80000300 - 0x801FFBFF (128KB) |
| RAM地址 | 0x20000000 - 0x20000C00 (3KB) | 0x90000C00 (5KB) |
| DTCM | 无独立DTCM | 0x80100000 (3KB) |
| ITCM | 无独立ITCM | 代码可加载到ITCM执行 |
| Boot ROM | 0x00000000 (8KB) | 集成在Flash起始地址 |
1.3 启动流程对比
ARM (Cortex-M0) 启动流程
1 | // startup_ARMCM0.c |
RISC-V (E200) 启动流程
1 | # start.S |
1.4 中断系统对比
ARM NVIC (Cortex-M0)
1 | // 向量表大小: 48条目 (16系统异常 + 32外设中断) |
RISC-V PLIC
1 | // PLIC中断控制器 (Platform-Level Interrupt Controller) |
1.5 链接脚本对比
ARM链接脚本 (newton.sct)
1 | LR_IROM1 0x00000000 0x00002000 { // 8KB Boot ROM |
RISC-V链接脚本 (link_flash.lds)
1 | MEMORY |
1.6 关键差异总结
| 特性 | ARM Cortex-M0 | RISC-V E200 | 影响 |
|---|---|---|---|
| 代码密度 | Thumb指令优化 | 标准RISC | ARM代码更紧凑 |
| 中断延迟 | ~12周期 | ~15-20周期 | ARM响应更快 |
| 功耗 | 经过优化 | 可定制 | 取决于具体实现 |
| 工具链 | Keil/GCC ARM | RISC-V GCC | 需分别配置 |
| DTCM支持 | 无 | 有 | RISC-V可优化数据访问 |
| ITCM支持 | 无 | 有 | RISC-V可优化代码执行 |
第二部分:电量计逻辑差异分析
2.1 SBS协议结构对比
共同SBS命令 (两者均有)
1 | // 基础电池信息命令 |
特有SBS命令对比
| 命令 | BST85226 (ARM) | P1025 (RISC-V) | 说明 |
|---|---|---|---|
| Cell3支持 | 通过SBS3E_CELLMV03 | 通过SBS3E_CELLMV03 | 3S电池支持 |
| ISRW1接口 | SBS70/71/72 | SBS70/71/72 | 微短路检测接口 |
| LOG接口 | SBS90-95 (国标/企标) | SBS90-95 (国标/企标) | 事件日志 |
| 国标LOG查询 | SBS92/93 (GB) + SBS94/95 (Enterprise) | SBSBE/SBSBF (旧) + SBSC0/SBSC1 (GB) | LOG查询 |
| 校准命令 | SBS8A-8E (校准) | 无独立校准命令 | ARM版本校准功能完整 |
| 参数访问 | SBSF9 (特殊命令) | SBSF9 (特殊命令) | 底层参数读写 |
| 快充使能 | SBS03 FastCharge位 | 无 | ARM支持快充标志 |
| 生命周期 | SBSB0_LIFETIME | SBSB0_LIFETIME | 老化记录 |
SBS命令定义差异
BST85226 (ARM) SBS命令枚举:
1 | typedef enum { |
P1025 (RISC-V) SBS命令枚举:
1 | typedef enum { |
2.2 保护机制对比
共同保护项目
| 保护类型 | BST85226 | P1025 | 说明 |
|---|---|---|---|
| Cell1 OV | ✓ | ✓ | 电芯1过压 |
| Cell1 UV | ✓ | ✓ | 电芯1欠压 |
| Cell2 OV | ✓ | ✓ | 电芯2过压 |
| Cell2 UV | ✓ | ✓ | 电芯2欠压 |
| 充电OT | ✓ | ✓ | 充电过温 |
| 放电OT | ✓ | ✓ | 放电过温 |
| 放电UT | ✓ | ✓ | 放电低温 |
| OCC | ✓ | ✓ | 充电过流 |
| OCD | ✓ | ✓ | 放电过流 |
| SC | ✓ | ✓ | 短路保护 |
保护标志定义对比
BST85226 (ARM) 保护标志:
1 | // GSTATUS保护标志定义 |
P1025 (RISC-V) 额外保护:
1 | // 额外保护标志 |
P1025独有SOV机制
1 | // P1025 RISC-V版本特有SOV (Safety Over Voltage) 状态机 |
2.3 LOG系统对比
LOG存储布局
| 项目 | BST85226 (ARM) | P1025 (RISC-V) |
|---|---|---|
| 国标LOG区域 | Page 34-52, 61 (20KB) | Page 261+ (193KB) |
| 企标LOG区域 | Page 62 (1KB) | 继承ARM布局 |
| Page大小 | 1024字节 | 256字节 |
BST85226 LOG存储:
1 | // Page 33: 持久化数据 (激活、校准、累计放电) |
P1025 LOG存储:
1 | // RISC-V版本使用更大Page |
LOG_T数据结构对比
两者通用结构 (8字节):
1 | typedef struct { |
P1025扩展事件类型:
1 | typedef enum { |
2.4 SOC计算对比
共同算法特征
两者都使用O2Micro的lib_fg (Fuel Gauge Library):
1 | // 核心数据结构 |
SOC初始化方法
ARM版本 (BST85226):
1 | // sbsif.c |
RISC-V版本 (P1025):
1 | // 更简洁的初始化 |
2.5 TTF (Time to Full) 算法对比
两者通用算法
1 | // 时间计算基础公式 |
ARM版本额外优化
1 | // BST85226 支持更多TTF相关SBS命令 |
2.6 状态机对比
两者状态机定义
1 | // IMODE (电流模式) |
2.7 ISRW1 (微短路检测) 对比
两者ISRW1接口完全兼容:
| SBS命令 | 功能 | 访问 |
|---|---|---|
| SBS70 | ISRW1告警结果 | 只读 |
| SBS71 | 检测间隔设置 | 读写 |
| SBS72 | 告警阈值设置 | 读写 |
ISRW1 Alert格式:
1 | // SBS70返回数据 |
第三部分:应用层差异
3.1 文件结构对比
1 | BST85226 (ARM) P1025_PURDY_G2 (RISC-V) |
3.2 编译工具链
| 项目 | BST85226 (ARM) | P1025 (RISC-V) |
|---|---|---|
| IDE | Keil uVision | Makefile + GCC |
| 编译器 | ARMCC/GCC ARM | RISC-V GCC |
| 调试器 | ULINK/J-Link | OpenOCD + J-Link |
| Makefile | .uvprojx项目文件 | 独立Makefile |
第四部分:ISRW1接口说明
4.1 接口定义
ISRW1 (Internal Short Resistance Window Detection) 用于检测电池内部微短路故障。
4.2 SBS接口命令
| 命令码 | 名称 | 方向 | 数据长度 | 说明 |
|---|---|---|---|---|
| 0x70 | ISRW1Alert | R | 4字节 | 告警结果 |
| 0x71 | ISRW1Interval | R/W | 4字节 | 检测间隔(秒) |
| 0x72 | ISRW1Threshold | R/W | 4字节 | 告警阈值(mA) |
4.3 数据格式
SBS70 (ISRW1Alert) - 只读:
1 | typedef struct { |
SBS71 (ISRW1Interval) - 读写:
1 | // 写入: 设置检测间隔 (秒) |
SBS72 (ISRW1Threshold) - 读写:
1 | // 写入: 设置告警阈值 (mA) |
4.4 后续修改说明
如需修改ISRW1相关接口,请关注以下文件:
BST85226 (ARM):
user/isrw1_detect.h/c- 检测算法核心user/isrw1_filter.h/c- 滤波算法user/isrw1_integration.h/c- SBS接口集成user/isrw1_tables.h/c- OCV和内阻查找表
P1025 (RISC-V):
src/user/isrw1_*.h/c- 对应文件
附录A:寄存器对比速查
ARM NEWTON寄存器映射
| 外设 | 基地址 | 大小 |
|---|---|---|
| FLASHCTRL | 0x30000 | 256B |
| I2C | 0x40000400 | 48B |
| TIMER16 | 0x40000800 | 24B |
| VADC | 0x40000C00 | 128B |
| CADC | 0x40001000 | 64B |
| DFE | 0x40001400 | 128B |
| UART | 0x40001800 | 32B |
RISC-V P1025寄存器映射
| 外设 | 基地址 | 大小 |
|---|---|---|
| DFE (AFE) | 0x40000000 | 128B |
| FLASH | 0x80000000 | 128KB |
| CLINT | 0xD0000000 | - |
| PLIC | 0xE0000000 | - |
附录B:关键宏定义差异
| 宏定义 | BST85226 | P1025 | 说明 |
|---|---|---|---|
| THREE_CELL_CASE | 0 | 0 | 3S电池支持 |
| CALIBRAION_EN | 1 | - | 校准功能 |
| PAGE_SIZE | 1024 | 256 | Flash页大小 |
| ISRW1_INTERVAL | 1800 | 1800 | 检测间隔(秒) |
| ISRW1_THRESHOLD | 100 | 100 | 告警阈值(mA) |
文档生成日期: 2026-04-02
版本: v1.0