chore: add MIT license headers to all source and header files
面向星脑 AI 处理机 MS2612 系列的高可靠卫星 BMC 固件 基于 STM32F105RC · 支持双镜像 OTA · 插件式可扩展星务协议 · MIT 许可证
本项目是星脑 AI 处理机(MS2612 系列)的 BMC(Baseboard Management Controller)控制器固件,运行于 STM32F105RC 微控制器,负责卫星数据处理机的通用平台管理。它为 MS2612/MS2612A/MS2612C/MS2612D 等硬件变体提供电源管理、星务通信、工作模式管理、状态监测、故障恢复、GPU 刷机与在线升级等能力。
设计目标是在资源受限的嵌入式环境中(256 KB Flash、64 KB SRAM),提供一套稳定、可维护、可远程升级的卫星载荷 BMC 方案。固件采用 FreeRTOS 多任务调度、STM32 HAL 驱动、双镜像冗余启动与 CRC 校验机制,确保在卫星复杂工况下保持高可用性。
更详细的引脚配置、时钟树和外设参数请参阅 doc/HARDWARE_zh.md。
graph TB subgraph 主机侧 HOST[星务主机 / 调试 PC] end subgraph MS2612 BMC APP[应用固件FreeRTOS + HAL] BL[Bootloader32 KB] APP --> PWR[power 状态机] APP --> SLV[IBC 从机层HSS / HIT] APP --> SENSOR[传感器与采样] APP --> ENV[环境变量 EasyFlash] APP --> VCP[USB CDC VCP] APP --> UART[UART 驱动] APP --> CAN_DRV[CAN 驱动] APP --> I2C_DRV[I2C 驱动] APP --> RTC_DRV[RTC] APP --> LOGGER[日志系统] end subgraph 被管对象 GPU[GPU / SOM 模块] end HOST -.->|CAN / I2C| SLV HOST -.->|USB CDC| VCP VCP -.->|AT 指令 / 透传| UART UART -->|串口| GPU PWR -->|SOM_SHUTDOWN / RESET / RECOVERY| GPU SLV -->|电源目标| PWR SENSOR -->|温度 / 电压 / 电流| PWR
graph LR SHUTDOWN[GPU_SHUTDOWN] -->|power_target=1 & 无故障| POWER_UP[GPU_POWER_UP] POWER_UP -->|启动完成| RUNNING[GPU_RUNNING] POWER_UP -->|超时 / 故障| POWER_DOWN[GPU_POWER_DOWN] RUNNING -->|故障 / 关机请求| POWER_DOWN POWER_DOWN -->|正常关机| SHUTDOWN POWER_DOWN -->|故障且目标仍开机| FAULT[GPU_FAULT] FAULT -->|恢复时间到 & 无故障| POWER_UP FAULT -->|连续失败达上限| FAILURE[GPU_FAILURE] FAILURE -->|重新请求开机| SHUTDOWN FAILURE -->|请求关机| SHUTDOWN
Core/Src/power.c
Core/Src/hss/
Core/Src/hit/
Core/Src/message.c
Core/Src/fifo.c
Core/Src/uart.c
Core/Src/uart_cfg.c
Core/Src/can.c
Core/Src/i2c_slave.c
Core/Src/i2c_memory.c
Core/Src/env.c
Middlewares/EasyFlash
Core/Src/vcp.c
Core/Src/io_on_cdc.c
Core/Src/at_cmd.c
Core/Src/sensor.c
Core/Src/ina226.c
Core/Src/gpu_recovery.c
Core/Src/gpu_stats.c
Core/Src/bootloader.c
Core/Src/logger.c
Core/Src/rtc.c
Core/Src/version.c
arm-none-eabi-gcc >= 10.0
>= 3.22
>= 1.10
>= 3.6
Linux 安装示例
sudo apt-get install cmake ninja-build gcc-arm-none-eabi python3
macOS
brew install cmake ninja arm-none-eabi-gcc python3
Windows 推荐使用 STM32CubeCLT(已包含 arm-none-eabi-gcc、CMake、Ninja)。
STM32F105RC 共有 256KB Flash,按以下方式分区:
地址范围 大小 用途 ────────────────────────────────────────────────────────── 0x08000000 - 0x08007FFF 32KB Bootloader 0x08008000 - 0x08023FFF 112KB Image1(含镜像头 + 应用代码) 0x08024000 - 0x0803FFFF 112KB Image2(含镜像头 + 应用代码)
Bootloader 源码已集成在本项目中,通过 Bootloader 预设独立编译,烧写至 Flash 首 32KB。
Bootloader
上电复位后的执行流程:
boot_table
0x665599AA
rom_base
0x3C
容错机制:Image1 和 Image2 互为热备份。若 OTA 升级写入一个镜像时发生断电, 另一个完整镜像仍可被 Bootloader 选中启动,不会导致变砖。
二进制文件中插入了一个头,Bootloader 和固件工具通过它读取构建信息。其内容如下:
# hd ms2612_f105.bin | head 00000000 aa 99 55 66 b6 fa 6b 68 00 80 00 08 00 c0 01 00 |..Uf..kh........| 00000010 58 c7 00 08 00 82 00 08 2c 24 01 00 b5 73 51 90 |X.......,$...sQ.| 00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000030 ff ff ff ff ff ff ff ff ff ff ff ff a4 36 38 96 |.............68.| 00000040 42 75 69 6c 64 3a 20 4a 75 6c 20 20 39 20 32 30 |Build: Jul 9 20| 00000050 32 35 20 31 36 3a 32 30 3a 31 32 20 52 65 76 3a |25 16:20:12 Rev:| 00000060 20 30 34 32 37 65 39 34 20 32 30 32 35 2d 30 37 | 0427e94 2025-07| 00000070 2d 30 38 20 30 30 3a 34 39 3a 35 38 20 2b 30 38 |-08 00:49:58 +08| 00000080 30 30 20 63 6c 65 61 6e 00 ff ff ff ff ff ff ff |00 clean........| 00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
64字节的头包含多个以小端序排列的uint32字段:
偏移量 字段 0x0 魔数0x665599aa 0x4 版本号 0x8 ROM段基址 0xc ROM段长度 0x10 入口地址 0x14 段0地址 0x18 段0长度 0x1c 段0 CRC-32校验值 0x20 段1地址 0x24 段1长度 0x28 段1 CRC-32校验值 0x2c 段2地址 0x30 段2长度 0x34 段2 CRC-32校验值 0x38 保留 0x3C 头CRC-32校验值 0x40 信息文本块
对于重定位配置(Image1 和 Image2),头位于 .bin 文件的开头(偏移 0x0)。 对于 Debug 和 Release 配置,为保持格式兼容性,头被保留并放置在向量表后的 0x200 偏移位置。
版本号字段(偏移 0x4)为无符号 32 位整数,格式自定义。Bootloader 按照数值大小比较,选择数值最大的有效镜像启动。版本号由构建系统从 git 信息自动生成,写入镜像头。
0x4
Linux / macOS
# 1. 构建全部预设(自动合并为 flash_rom.hex / flash_rom.bin) ./scripts/build.sh all # 2. 单独构建某个预设 ./scripts/build.sh Debug # 3. 选择 HIT 协议构建 ./scripts/build.sh all -DPROTOCOL=HIT # 4. 清理构建目录 ./scripts/clean.sh all
Windows(PowerShell)
# 构建全部预设并自动合并 .\build.ps1 all # 选择 HIT 协议 .\build.ps1 all -DPROTOCOL=HIT # 清理 .\clean.ps1 all
构建产物位于对应预设目录下,例如:
Debug/ms2612_f105.elf
Debug/ms2612_f105.bin
Image1/ms2612_f105.hex
Image2/ms2612_f105.hex
flash_rom.hex
flash_rom.bin
合并完整固件后烧写
# 使用 STM32CubeProgrammer CLI STM32_Programmer_CLI -c port=SWD -w flash_rom.hex -v -rst # 使用 st-flash st-flash --format ihex write flash_rom.hex # 使用 OpenOCD openocd -f interface/stlink.cfg -f target/stm32f1x.cfg \ -c "program flash_rom.hex verify reset exit"
单独烧写应用镜像(OTA 升级)
# 烧写 Image1 到 0x08008000 STM32_Programmer_CLI -c port=SWD -w Image1/ms2612_f105.hex -v -rst
详细烧写与合并流程请参阅 doc/BUILD_zh.md。
MCU 固件通过 USB CDC(虚拟串口)接收 AT+ 指令并执行相应操作。每条指令以换行符 \n 结尾。支持的指令包括:
AT+
\n
AT+RECOVERY
AT+RESET
AT+POWERON
AT+POWEROFF
AT+SHUTDOWN
AT+ENV=<key>
AT+ENV=<key>,<value>
AT+ENV?
AT+PWRSTAT
AT+TASKSTATS
AT+IFSTAT
AT+SENSORS
AT+GETTIME
AT+SETTIME<yyyymmddHHMMSS>
AT+VERSION
完整指令说明与参数范围请参阅 doc/AT_COMMANDS.md。
USB CDC 下行数据(Host → MCU)默认透传到 UART1,用于与 GPU 串口通信;UART1 上行数据(GPU → MCU)通过 USB CDC 回传至主机。以 AT+ 开头的数据包被拦截为本地命令,不再转发到 UART1。
tx_buf
rx_buf
详细实现与性能限制请参阅 doc/USB_VCP_development_guide.md。
通过 AT+ENV 可配置的运行时参数包括:
AT+ENV
log_lvl
4
gpu_wdt
0
gpu_tmin
gpu_tmax
-25
85
gpu_thyl
gpu_thyh
5
15
gpu_dst
1
ovc0
ovc6
gpu_put
gpu_pdt
gpu_frt
30
gpu_mfc
3
console
通过 CMake 参数 PROTOCOL 选择 IBC 协议类型:
PROTOCOL
HSS
HSS_PROTOCOL
HIT
HIT_PROTOCOL
# Linux / macOS ./scripts/build.sh Debug -DPROTOCOL=HIT # Windows PowerShell .\build.ps1 Debug -DPROTOCOL=HIT
默认值为 HSS。修改参数后需清理构建目录重新配置。
ms2612_f105/ ├── Bootloader/ # Bootloader 构建产物 ├── Core/ │ ├── Inc/ # 应用头文件 │ ├── Src/ # 应用源文件 │ │ ├── hit/ # HIT 协议实现 │ │ ├── hss/ # HSS 协议实现 │ │ └── ... # 各业务模块 │ └── Startup/ # 启动文件 ├── cmake/ # 工具链与 CubeMX 生成的 CMake 配置 ├── Debug/ # Debug 构建产物 ├── doc/ # 项目文档 ├── Drivers/ # STM32 HAL / CMSIS 驱动 ├── Image1/ # Image1 构建产物 ├── Image2/ # Image2 构建产物 ├── Middlewares/ # FreeRTOS、EasyFlash、USB 设备栈 ├── Release/ # Release 构建产物 ├── scripts/ # 构建、合并、CRC 脚本 ├── USB_DEVICE/ # USB CDC 配置 ├── CMakeLists.txt # 主构建配置 ├── CMakePresets.json # CMake 预设 ├── LICENSE # MIT 许可证 ├── README.md # 英文 README └── README_zh.md # 中文 README(本文件)
欢迎提交 Issue 与 Pull Request!贡献前请确认:
arm-none-eabi-gcc
snake_case
UPPER_SNAKE
/* USER CODE BEGIN */
/* USER CODE END */
详细代码规范请参阅 AGENTS.md。
本项目采用 MIT 许可证 开源。
Copyright (c) 2025 Maiar Star / MS2612 Project Contributors.
本项目基于 STMicroelectronics STM32CubeF1 HAL 库、FreeRTOS、EasyFlash 与 ST USB 设备栈构建。感谢所有卫星载荷与 BMC 固件领域的开源贡献者。
本项目是**星脑 AI 处理机(MS2612 系列)的 BMC(Baseboard Management Controller)控制器固件**,运行于 STM32F105RC 微控制器,负责卫星数据处理机的通用平台管理。它为MS2612A/C/D/E等硬件变体提供电源管理、星务通信、工作模式管理、状态监测、故障恢复、GPU 刷机与在线升级等能力。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MS2612 BMC 控制器固件
面向星脑 AI 处理机 MS2612 系列的高可靠卫星 BMC 固件
基于 STM32F105RC · 支持双镜像 OTA · 插件式可扩展星务协议 · MIT 许可证
目录
项目简介
本项目是星脑 AI 处理机(MS2612 系列)的 BMC(Baseboard Management Controller)控制器固件,运行于 STM32F105RC 微控制器,负责卫星数据处理机的通用平台管理。它为 MS2612/MS2612A/MS2612C/MS2612D 等硬件变体提供电源管理、星务通信、工作模式管理、状态监测、故障恢复、GPU 刷机与在线升级等能力。
设计目标是在资源受限的嵌入式环境中(256 KB Flash、64 KB SRAM),提供一套稳定、可维护、可远程升级的卫星载荷 BMC 方案。固件采用 FreeRTOS 多任务调度、STM32 HAL 驱动、双镜像冗余启动与 CRC 校验机制,确保在卫星复杂工况下保持高可用性。
功能特性
硬件平台
更详细的引脚配置、时钟树和外设参数请参阅 doc/HARDWARE_zh.md。
系统架构
graph TB subgraph 主机侧 HOST[星务主机 / 调试 PC] end subgraph MS2612 BMC APP[应用固件FreeRTOS + HAL] BL[Bootloader
32 KB] APP --> PWR[power 状态机] APP --> SLV[IBC 从机层
HSS / HIT] APP --> SENSOR[传感器与采样] APP --> ENV[环境变量 EasyFlash] APP --> VCP[USB CDC VCP] APP --> UART[UART 驱动] APP --> CAN_DRV[CAN 驱动] APP --> I2C_DRV[I2C 驱动] APP --> RTC_DRV[RTC] APP --> LOGGER[日志系统] end subgraph 被管对象 GPU[GPU / SOM 模块] end HOST -.->|CAN / I2C| SLV HOST -.->|USB CDC| VCP VCP -.->|AT 指令 / 透传| UART UART -->|串口| GPU PWR -->|SOM_SHUTDOWN / RESET / RECOVERY| GPU SLV -->|电源目标| PWR SENSOR -->|温度 / 电压 / 电流| PWR
graph LR SHUTDOWN[GPU_SHUTDOWN] -->|power_target=1 & 无故障| POWER_UP[GPU_POWER_UP] POWER_UP -->|启动完成| RUNNING[GPU_RUNNING] POWER_UP -->|超时 / 故障| POWER_DOWN[GPU_POWER_DOWN] RUNNING -->|故障 / 关机请求| POWER_DOWN POWER_DOWN -->|正常关机| SHUTDOWN POWER_DOWN -->|故障且目标仍开机| FAULT[GPU_FAULT] FAULT -->|恢复时间到 & 无故障| POWER_UP FAULT -->|连续失败达上限| FAILURE[GPU_FAILURE] FAILURE -->|重新请求开机| SHUTDOWN FAILURE -->|请求关机| SHUTDOWN软件组件
Core/Src/power.cCore/Src/hss/、Core/Src/hit/Core/Src/message.c、Core/Src/fifo.cCore/Src/uart.c、Core/Src/uart_cfg.cCore/Src/can.cCore/Src/i2c_slave.c、Core/Src/i2c_memory.cCore/Src/env.c、Middlewares/EasyFlashCore/Src/vcp.c、Core/Src/io_on_cdc.cCore/Src/at_cmd.cCore/Src/sensor.c、Core/Src/ina226.cCore/Src/gpu_recovery.c、Core/Src/gpu_stats.cCore/Src/bootloader.cCore/Src/logger.cCore/Src/rtc.cCore/Src/version.c构建系统
依赖要求
arm-none-eabi-gcc >= 10.0>= 3.22>= 1.10>= 3.6Linux 安装示例
macOS
Windows 推荐使用 STM32CubeCLT(已包含 arm-none-eabi-gcc、CMake、Ninja)。
构建目标
Flash 存储布局
STM32F105RC 共有 256KB Flash,按以下方式分区:
Bootloader 工作原理
Bootloader 源码已集成在本项目中,通过
Bootloader预设独立编译,烧写至 Flash 首 32KB。上电复位后的执行流程:
boot_table中预定义地址处的镜像头(先 Image1,后 Image2)0x665599AArom_base是否与目标地址一致0x3C字段)镜像头格式
二进制文件中插入了一个头,Bootloader 和固件工具通过它读取构建信息。其内容如下:
64字节的头包含多个以小端序排列的uint32字段:
对于重定位配置(Image1 和 Image2),头位于 .bin 文件的开头(偏移 0x0)。 对于 Debug 和 Release 配置,为保持格式兼容性,头被保留并放置在向量表后的 0x200 偏移位置。
镜像版本号
版本号字段(偏移
0x4)为无符号 32 位整数,格式自定义。Bootloader 按照数值大小比较,选择数值最大的有效镜像启动。版本号由构建系统从 git 信息自动生成,写入镜像头。快速开始
Linux / macOS
Windows(PowerShell)
构建产物位于对应预设目录下,例如:
Debug/ms2612_f105.elf、Debug/ms2612_f105.binImage1/ms2612_f105.hex、Image2/ms2612_f105.hexflash_rom.hex、flash_rom.bin(合并后的完整固件)固件部署
烧写方式
合并完整固件后烧写
单独烧写应用镜像(OTA 升级)
详细烧写与合并流程请参阅 doc/BUILD_zh.md。
使用指南
AT 指令调试
MCU 固件通过 USB CDC(虚拟串口)接收
AT+指令并执行相应操作。每条指令以换行符\n结尾。支持的指令包括:AT+RECOVERYAT+RESETAT+POWERONAT+POWEROFFAT+SHUTDOWNAT+ENV=<key>/AT+ENV=<key>,<value>AT+ENV?AT+PWRSTATAT+TASKSTATSAT+IFSTATAT+SENSORSAT+GETTIMEAT+SETTIME<yyyymmddHHMMSS>AT+VERSION完整指令说明与参数范围请参阅 doc/AT_COMMANDS.md。
USB 虚拟串口透传
USB CDC 下行数据(Host → MCU)默认透传到 UART1,用于与 GPU 串口通信;UART1 上行数据(GPU → MCU)通过 USB CDC 回传至主机。以
AT+开头的数据包被拦截为本地命令,不再转发到 UART1。tx_buf/rx_buf1000 B、UART FIFO 1024 B、CDC FIFO 1024 B详细实现与性能限制请参阅 doc/USB_VCP_development_guide.md。
环境变量
通过
AT+ENV可配置的运行时参数包括:log_lvl4gpu_wdt0禁用)0gpu_tmin/gpu_tmax-25/85gpu_thyl/gpu_thyh5/15gpu_dst1ovc0~ovc60gpu_put/gpu_pdt0/0gpu_frt30gpu_mfc3console1协议选择
通过 CMake 参数
PROTOCOL选择 IBC 协议类型:HSSHSS_PROTOCOLHITHIT_PROTOCOL默认值为
HSS。修改参数后需清理构建目录重新配置。项目目录
相关文档
参与贡献
欢迎提交 Issue 与 Pull Request!贡献前请确认:
arm-none-eabi-gcc完成所有预设的构建验证;snake_case,宏与常量使用UPPER_SNAKE;/* USER CODE BEGIN *///* USER CODE END */边界;详细代码规范请参阅 AGENTS.md。
许可证
本项目采用 MIT 许可证 开源。
Copyright (c) 2025 Maiar Star / MS2612 Project Contributors.
致谢
本项目基于 STMicroelectronics STM32CubeF1 HAL 库、FreeRTOS、EasyFlash 与 ST USB 设备栈构建。感谢所有卫星载荷与 BMC 固件领域的开源贡献者。