Havenlon 工程集:一步一步构建开源硬件签名器(Open Hardware Signing Device)— Step 2:锂电池充电、电池电压监测与外部 SPI Flash
一、项目简介
完成第一步电源输入与 3.3V 稳压之后,设备已经具备了最基础的供电能力。
但是,一个真正可以独立工作的硬件签名器,不能只依赖 USB-C 外部供电。它还需要具备电池供电能力、电池状态感知能力,以及一定的本地非易失性存储空间。
因此,第二步的重点是继续完善基础硬件底座,让设备从“可以通电的电路板”,逐步走向“可以独立工作的硬件设备”。
本阶段主要围绕三个基础模块展开:
锂电池充电
电池电压监测
外部 SPI NOR Flash 存储
这些模块本身并不复杂,但它们对后续 MCU、显示屏、用户输入、安全芯片和本地日志系统都非常重要。
二、当前阶段目标(Step 2)
本阶段完成三个基础硬件模块设计,主要包括:
锂电池充电部分
MCP73831 锂电池充电管理芯片
USB-C VBUS 作为充电输入
VBAT 电池电源轨输出
PROG 电阻设置充电电流
STAT 状态引脚输出充电状态
电池电压监测部分
VBAT 电池电压输入
电阻分压采样
BAT_ADC 输出到 MCU ADC 引脚
采样电容用于降低噪声
固件可根据 ADC 值估算电池电量
外部 SPI Flash 存储部分
W25Q64JVZPIQ SPI NOR Flash
标准 SPI 接口连接
WP# / HOLD# 上拉保持正常工作模式
用于后续存储非敏感配置、日志、固件元数据等内容
三、系统原理说明
1. 锂电池充电设计
本阶段使用 MCP73831 作为锂电池充电管理芯片。
USB-C 的 VBUS 电源轨作为充电输入,经过充电芯片后输出到 VBAT 电源轨。VBAT 后续可以作为系统的电池供电来源,为 MCU、安全芯片、显示屏和其他外设提供基础电源。
PROG 引脚通过外接电阻设置充电电流。本设计中使用 4.7kΩ 电阻作为充电电流设定电阻。
STAT 引脚被引出为 BAT_STAT,后续可以接入 MCU GPIO,用于检测当前充电状态。
该模块的核心作用是让设备具备电池充电能力,而不是只能依赖 USB-C 供电。
主要信号如下:
VBUS USB-C 输入电源
VBAT 电池电源轨
BAT_STAT 电池充电状态信号
GND 系统地
2. 电池电压监测设计
硬件签名器如果要独立运行,就必须知道当前电池状态。
本阶段通过一个简单的电阻分压电路,将 VBAT 电池电压分压后送入 MCU ADC 输入引脚,信号命名为 BAT_ADC。
由于锂电池电压通常高于 MCU ADC 的直接输入范围,因此不能直接把 VBAT 接到 ADC 引脚,而是需要通过电阻分压降低到安全范围内。
同时,在 ADC 采样信号附近加入一个小电容,用于降低采样噪声,让电压读取更加稳定。
该模块可以让后续固件实现:
电池电量估算
低电压检测
充电状态显示
低电量保护逻辑
用户界面电池图标显示
主要信号如下:
VBAT 电池电压输入
BAT_ADC 电池电压 ADC 采样信号
GND 系统地
3. 外部 SPI Flash 存储设计
除了 MCU 内部 Flash 之外,本阶段还增加了一颗外部 SPI NOR Flash。
当前选型为 W25Q64JVZPIQ,这是一颗 64Mbit 的 SPI Flash 芯片。
它通过标准 SPI 接口与 MCU 连接,包括片选、时钟、MOSI 和 MISO 四类核心信号。
主要信号如下:
FLASH_CS# SPI Flash 片选信号
FLASH_CLK SPI 时钟信号
FLASH_MOSI MCU 到 Flash 的数据线
FLASH_MISO Flash 到 MCU 的数据线
WP# 和 HOLD#/RESET 引脚通过电阻上拉到 3.3V,使 Flash 保持在正常工作模式,避免误进入写保护、暂停或复位状态。
这颗外部 Flash 后续可以用于存储:
非敏感配置
设备日志
固件版本信息
升级元数据
运行状态记录
测试数据
未来扩展的设备侧持久化数据
需要注意的是,该 Flash 不应该直接用于保存私钥、助记词或高敏感安全数据。真正敏感的数据应由安全芯片、安全 MCU 或专门的密钥管理机制处理。
四、模块说明(图示)
图 1:锂电池充电模块
该模块负责:
USB-C VBUS 充电输入
MCP73831 锂电池充电管理
VBAT 电池电源轨输出
PROG 电阻设置充电电流
STAT 引脚输出充电状态

图 2:电池电压监测模块
该模块负责:
VBAT 电池电压采样
电阻分压降低 ADC 输入电压
BAT_ADC 输出到 MCU ADC 引脚
采样电容降低噪声
为固件提供电池电量估算基础

图 3:外部 SPI NOR Flash 模块
该模块负责:
外部非易失性存储
标准 SPI 接口连接
WP# / HOLD# 上拉
存储非敏感配置、日志和固件元数据
为后续系统扩展提供本地存储能力

五、本阶段关键设计点
硬件签名器不能只依赖 USB-C 供电,还需要电池充电路径。
MCP73831 可以提供简单可靠的单节锂电池充电方案。
PROG 电阻用于设置充电电流,需要根据电池容量和散热条件选择。
BAT_STAT 可以接入 MCU,用于判断充电状态。
VBAT 不能直接接入 MCU ADC,需要通过电阻分压。
ADC 采样点附近加入电容,可以降低电压采样噪声。
外部 SPI Flash 可用于非敏感配置、日志和固件元数据。
WP# 和 HOLD# 需要上拉,避免 Flash 进入异常工作模式。
外部 Flash 不应用于直接保存私钥或助记词。
清晰的信号命名可以降低后续 MCU 接入和固件调试成本。
六、当前硬件阶段
Step 1:USB-C 电源输入与 3.3V LDO 稳压
状态:草图完成
Step 2:锂电池充电、电池电压监测与外部 SPI Flash
状态:进行中
从系统结构上看,前两步主要是在补齐硬件签名器的基础底座。
第一步解决的是“如何稳定供电”。
第二步解决的是“如何独立供电、感知电池状态,并具备基础本地存储能力”。
只有这些基础模块稳定之后,后续的 MCU、安全芯片、显示屏、按键确认路径和签名逻辑才有可靠的硬件基础。
七、下一阶段规划(Step 3)
后续将继续扩展完整硬件系统,可能包括:
MCU 最小系统设计
复位与启动配置
Secure Element 安全芯片接口
OLED 显示屏接口
用户输入按键
确认路径设计
状态 LED
PCB 完整布局设计
结构与外壳对齐设计
下一阶段的重点,会逐步从“电源与存储”转向“控制核心与安全外设”。
也就是说,设备会开始具备真正的运行能力,而不只是完成基础硬件供电。
八、仓库结构说明
docs/ 设计文档与学习记录
hardware/ 原理图、PCB、BOM、Gerber
firmware/ 固件代码与驱动
enclosure/ 3D 外壳设计文件
tools/ 辅助工具脚本
images/ 原型与装配图
九、安全声明
本系列内容为开源硬件实验过程的阶段性整理与技术记录,仅用于学习、研究和开源硬件探索。
当前设计不构成生产级实现方案,也不提供任何安全保证。
请不要使用当前设计存储真实资产。
请不要将当前原理图、固件或外壳文件视为可直接用于真实环境的安全硬件。
请不要把外部 SPI Flash 当作私钥、助记词或敏感密钥材料的存储位置。
真正的安全硬件需要经过完整的安全审计、硬件验证、固件测试、生产控制、密钥管理设计以及系统级威胁建模后,才能进入实际部署环境。
十、项目地址
GitHub 仓库:
https://github.com/HavenlonLabs/open-hardware-wallet-lab
后续所有设计,包括原理图、PCB、固件、外壳和文档,都会按照阶段持续更新。
更多推荐
所有评论(0)