摘要

ESP-Miner 并不是“ESP32 收到任务后转发给 ASIC”这么简单。它实际上是一个同时包含硬件抽象、实时任务、矿池协议、Web 管理、生产测试、云端通信和 OTA 的嵌入式产品平台。本文从 app_main() 出发,重建一次完整启动过程,并讨论当前架构的优点和边界。

关键词:ESP32-S3、ESP-IDF、FreeRTOS、Bitaxe、固件架构

1. 从入口函数看系统边界

入口位于 main/main.c。启动顺序大致如下:

PSRAM 检查
  -> I2C 初始化并保持 ASIC Reset
  -> ADC、NVS、eFuse 身份初始化
  -> 识别设备型号和硬件版本
  -> 自检/量产模式分流
  -> Wi-Fi、云端客户端、显示和电源外设
  -> 电源管理、运行时诊断、REST、TCP、BAP
  -> 等待网络
  -> ASIC 初始化
  -> Stratum、作业生成、ASIC 收发、算力统计任务

这个次序体现了两个重要原则。第一,ASIC 在基础配置完成前始终保持复位,避免未知电压下运行;第二,管理平面先于挖矿数据平面启动,因此设备即使暂时不能出算,也仍具备诊断和升级能力。

app_main() 还把 cJSON 的分配器优先指向 PSRAM,失败后回退内部 RAM。JSON、证书和网络缓冲属于容量敏感而时延不敏感的数据,放入 PSRAM 可以把片上 SRAM 留给 UART、I2C 和实时任务。这是 ESP32-S3 产品化固件中很实用的内存分层。

2. GlobalState:便利的共享上下文

main/global_state.h 中的 GlobalState 聚合了:

  • SystemModule:网络、矿池、Share、升级和故障状态;
  • DeviceConfig:板型、ASIC、传感器、电源芯片;
  • PowerManagementModule:电压、功率、温度、风扇和目标算力;
  • HashrateMonitorModule:寄存器计数和统计窗口;
  • 两条工作队列、当前作业表、传输锁及 ASIC 初始化标志。

集中状态让各任务的函数签名保持简单,也方便 REST 接口一次性汇总。但它不是无代价的:大量字段被不同任务读写,只有 transport_lockvalid_jobs_lock 等少数字段显式加锁。32 位标量通常能够原子读写,不代表复合状态具有一致快照。例如 URL、端口和 is_using_fallback 若跨多个语句更新,观察者可能读到组合不一致的状态。

更稳健的演进方式不是立刻拆掉 GlobalState,而是逐步定义所有权:Stratum 任务拥有连接状态,电源任务拥有电源遥测,其他模块通过快照 API 读取。这样可以保留现有结构,同时减少隐式耦合。

3. 控制平面与数据平面

ESP-Miner 可以按职责划分为两条路径。数据平面追求吞吐和连续性:

矿池 JSON -> mining_notify -> bm_job -> ASIC UART
ASIC Nonce -> 难度计算 -> mining.submit

控制平面追求安全和可维护性:

NVS/REST/BAP -> 频率、电压、风扇、矿池参数
传感器/PMBus -> 热控、故障系统、Web 状态、量产判定
OTA -> 停止挖矿、关闭电源、写分区、切换启动分区

当前实现已经在关键处建立隔离。例如 OTA 会先静默 Stratum 和 ASIC;睡眠模式会让挖矿任务退出;过热恢复通过 asic_initialize() 统一走冷启动/恢复逻辑。

4. 任务优先级透露出的实时需求

ASIC 结果任务优先级为 15,作业发送与作业生成是 10,Stratum 管理为 5,统计为 3。这个排序合理:ASIC UART 缓冲是最容易溢出的边界,Nonce 处理必须优先;统计允许延后;网络连接管理虽然重要,却不能阻塞结果接收。

需要注意,多个任务使用 8192 字节栈,部分任务优先尝试 PSRAM 栈。统一的大栈减少了早期栈溢出风险,但掩盖了真实水位。生产固件应定期记录 uxTaskGetStackHighWaterMark(),随后按任务缩减,避免 PSRAM 不可用时内部 RAM 突然耗尽。

5. 架构亮点与改进方向

值得肯定的设计包括:硬件抽象覆盖多代 ASIC 和电源芯片;挖矿任务与 Web/云端解耦;启动时对 ASIC 做安全复位;具备主备矿池、TLS、运行时错误和工厂测试。

优先改进项有三点:

  1. 为共享状态建立单写者和快照约定,避免靠“通常不会同时发生”维持正确性。
  2. 把启动流程显式建模为状态机,替代散落的布尔量和等待循环。
  3. 建立统一资源生命周期:任务创建、队列初始化、睡眠退出和恢复重建应成对出现。

ESP-Miner 的价值不只在于驱动了一颗 ASIC。它展示了如何把矿池协议、硬件控制和产品运维压缩到一颗 ESP32-S3 中,而后续工程质量的关键,是让这些模块之间的契约从“代码约定”升级为“明确接口”。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐