你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

深度拆解 STM32MP1 Boot 链路

[复制链接]
攻城狮Melo 发布时间:2025-12-16 09:46

引言:为什么“烧录”决定了 MP1 的生死?

STM32MP1 是一颗「Linux 级」异构 MPU,但上电第一行代码不在 DDR,也不在 eMMC,而是藏在 片上 ROM 。 从 ROM 到 Linux 用户空间,要经过 三代引导程序

ROM → TF-A(FSBL) → U-Boot(SSBL) → Linux

每一级都定义了一套 串行协议 ——USB DFUUSART ,用于 空板烧录、产线升级、现场救砖 。 AN5275 就是这份「三代协议白皮书」:

  • 35 页、20 张图、19 张表
  • 覆盖 ROM、TF-A、U-Boot 三线协议时序
  • 给出阶段 ID、数据包格式、校验算法

本文把它拆成「原理 → 时序 → 工具 → 产线」四段,带你 10 分钟看懂 STM32MP1 的整个烧录链路


1. 总体架构:一张图看懂「谁加载谁」

表格复制

阶段 载体 运行地址 协议角色 阶段 ID
ROM 片上固化 SYSRAM USB/USART 从机 0x01
TF-A 二进制 SYSRAM 初始化 DDR 0x01 / 0x03
U-Boot FIP 包 DDR 烧录服务 0x03 / 0x00
Layout TSV 文本 DDR 分区清单 0x00

image.png

结论:ROM 永远是「从」,PC 端 STM32CubeProgrammer 是「主」三代程序共用同一套 DFU/USART 帧格式 ,只是阶段 ID 不同。


2. 协议层:DFU vs USART——「同一帧格式,两种物理层」

2.1 帧结构(共用)

表格复制

字段 长度 说明
Command 1 B 0x31 = Download …
XOR 1 B Command ^ 0xFF
Payload N B 地址/长度/数据
CheckSum 1 B 全字节 XOR = 0x00
  • ACK = 0x79 NACK = 0x1F ABORT = 0x5F
  • USART 额外偶校验 ;USB 由 CRC16 保障

2.2 USB DFU 状态机(DFU 1.1)

appIDLE → DFU_DETACH → dfuIDLE → DFU_DNLOAD → dfuMANIFEST

  • STM32MP1 不支持 DFUSE 扩展 → 只能用标准 DFU 1.1
  • bitManifestationTolerant = 1 → 允许在 dfuIDLE 直接表现,减少一次 USB Reset

2.3 USART 波特率

  • 115200 8E1 (8 位 + 偶校验 + 1 停止)
  • 先发 0x7F 唤醒 ,ROM 回 0x79 表示就绪
  • 支持 256 B 块下载 → 与 USB 对齐,方便同一份 Layout 文件复用

3. 阶段 ID:Layout 文件里的「导航地图」

Layout 是 制表符分隔的 TSV ,每行 = 一个分区,字段:

Name Offset Size PhaseID Binary

表格复制

PhaseID 含义 谁加载 是否签名
0x00 Layout 自身 U-Boot
0x01 TF-A (FSBL) ROM
0x03 U-Boot (SSBL) TF-A
0x10~0xF0 用户分区 U-Boot ❌/可选
0xF2 OTP U-Boot
0xF4 PMIC-NVM U-Boot
0xFE End Of Operation
0xFF Reset

产线技巧: 把 PhaseID 写在标签上扫码枪一扫就知道烧到哪一步0xFE/0xFF 出现 → 绿灯亮,板子下线


4. 烧录时序:USB 与 USART「三线」对比

4.1 案例 1——空板 USB 烧录(最常见)

PC ↔ ROM ↔ TF-A ↔ U-Boot

  1. USB 枚举idVendor=0x0483 idProduct=0xDF11
  2. GetPhase=0x01 → PC 下发 TF-A 二进制 (带 STM32 头)
  3. 表现后 ROM 跳转到 TF-A → DDR 初始化完成
  4. GetPhase=0x03 → PC 下发 U-Boot-FIP (含 OP-TEE/SCP)
  5. GetPhase=0x00 → PC 下发 Layout 文件
  6. 循环 GetPhase=N → U-Boot 依次烧写 bootfs/rootfs/userfs
  7. GetPhase=0xFEOperation End自动复位

耗时:eMMC 8 GB Class10 → 约 4 min 30 s (USB 2.0 HS)

4.2 案例 2——已装系统,U-Boot 下“增量更新”

  • 上电按 USER 键 → U-Boot 停在 stm32prog> 模式
  • 同一套 DFU 协议只烧改动的分区30 s 完成
  • 支持 dfu-util / STM32CubeProgrammer CLI易集成 CI/CD

4.3 案例 3——USART 产线烧录(无 USB 夹具)

  • 夹具只接 RX/TX/GND3 线即可
  • 115200 8E1CRC + 偶校验误码率 < 10^-9
  • 256 B 块下载eMMC 8 GB 约 12 min适合白牌代工

image.png

5. 安全与签名:「关闭器件」必须过的一道坎

  • STM32MP1 分为 Open / Closed 两种生命周期
    • Open :不验签,任何二进制都能烧
    • Closed :ROM 强制 ECDSA 验证 STM32 头 → 失败直接 Abort

表格复制

阶段 签名工具 密钥长度 备注
TF-A sign-tool ECDSA P-256 由 ST-RoT 导出
U-Boot-FIP sign-tool ECDSA P-256 可打包 OP-TEE
用户分区 可选 RSA-2048 由客户 OEM 控制

产线建议: 烧录前一次性签名.sig 文件和 .bin 放同一目录STM32CubeProgrammer 自动校验


6. 产线落地:从「手工」到「无人化」的 5 步

表格复制

工站 动作 耗时 关键配置
1. ICT 3 线夹具 USART 烧空 Boot 30 s PhaseID=0x01/0x03
2. 功能测 USB DFU 烧 Linux + DTB 90 s PhaseID=0x10/0x11
3. 老化 SSH 拉脚本,循环重启 600 s 检查 0xFE 计数
4. OTA 密钥 写入 OTP RSA-2048 Hash 10 s PhaseID=0xF2
5. 下线 扫描 SN → MES 上传 5 s JSON 含 CRC、耗时

结果: 单班 8 h 产能 1200 板一次通过率 99.7% (ST 深圳代工厂数据)


7. 常见坑:别让“小阶段”变成“大砖块”

表格复制

现象 根因 快速修复
USB 枚举不到 时钟未起 检查 HSE 8 MHz + BOOT0=1
烧录 Abort 签名失败 关闭器件必须签名Open→Closed 不可逆
USART 0x7F 无回应 偶校验错 串口设置 8E1先发 0x7F 唤醒帧
GetPhase=0xFF 上一步 CRC 错 重发上一包NACK 重试 3 次
烧完不启动 GPT 分区表未写 Layout 里必须含 MBR+GPTeMMC 需 mmc partconf 使能
收藏 评论0 发布时间:2025-12-16 09:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版