资料介绍
描述
介绍
*2021 年 9 月更新* Bootloader 和固件更新系统现在作为GitHub 上的STM32 Secure Patching Bootloader的一部分提供。
*更新于2020 年 12 月*演示现在使用引导加载程序中的嵌入式 USB 主机来使用 USB 闪存驱动器更新主应用程序。
每个物联网和嵌入式系统都需要一种在现场更新固件的方法。除了最简单的项目,添加功能、修复和推出更新已成为每个软件项目的常态,固件也不例外。
该项目描述并演示了适用于 STM32 MCU 的完整固件更新解决方案,提供行业领先的功能集,包括:
- 加密
- 验证
- 增量修补
- 双图像
- 外部 (Q)SPI 闪存上的图像托管
- 构建工具和 IDE 集成
- 集成 USB 主机,用于使用 USB 闪存驱动器进行更新
该解决方案旨在支持现场更新最先进的固件应用程序——例如那些包含TouchGFX等 UI的应用程序。我们称之为多段的新功能使用 TouchGFX 实现固件应用程序的无缝启动、更新和修补,这些应用程序分布在内存映射的外部 SPI 闪存上——将内部和外部闪存的组合视为一个逻辑活动区域。
有了这个新功能,现在可以在 STM32 MCU 上为 8 MB GUI 应用程序系统中的单个 GUI 资产(比如 32 KB 图标)打补丁。该固件更新系统可以在您的应用程序没有任何限制的情况下做到这一点。
许多 STM32 MCU 包括具有主机功能的 USB OTG 内核(想想 L4、F4 等),因此 FM-SBSFU 与这种用户友好的更新方法相结合,广泛适用于采用 STM32 系列 MCU 的嵌入式设备。
此外,还有一些模块可用于通过几乎任何方法以 OTA 方式下载补丁,包括:
- 蜂窝网络(HTTP/FTP - 适用于各种系统)
- LoRaWAN(对于小型物联网项目,打补丁是必须的)
- USB 闪存驱动器(在这个新的更新演示中有特色 - 最终用户的不错选择)
- 非接触式 NFC(非常适合移动设备 - 万岁,不需要蓝牙!)
- YMODEM over UART(在之前的演示中有特色,更具技术性)
- 自定义(以太网等)
补丁和编程文件在每次构建结束时使用构建后 shell 和 python 脚本自动生成。我们已将其部署到 STM32CubeIDE。
如果您对此感兴趣,请继续阅读。我们将深入了解其工作原理。让我们从一个演示开始。
TouchGFX 固件更新演示
本demo在STM32F769I-DISCO上运行,将经历补丁更新应用程序的过程。该演示会将中间图像从“彩球”更改为水肺潜水员的图像。
要运行演示,您需要一个STM32F769I-DISCO板、一个 USB 闪存驱动器、STM32CubeProgrammer和两个演示文件:一个 main . hex编程文件和.sfbp更新补丁文件,位于该项目末尾的附件(“原理图”)部分:
- SBSFU_MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0.hex
- MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp
简而言之,要运行演示 1) 使用 STM32CubeProgrammer 加载 .hex 文件,以及 2) 将 .sfbp 放到 USB 记忆棒上,将其插入适配器,按下复位键。看到版本从 1 增加到 2,中间的图像由于安全补丁文件的内容而改变。详情如下。
.hex文件在每次构建结束时自动生成,并结合了安全引导加载程序、应用程序和 DISCO 的 QSPI 闪存的内容:分配给ExtFlashSection部分的所有内容。将所有元素组合到一个编程文件中,可以轻松地一步对您的设备进行编程。
.sfbp文件是一个安全补丁 -使用您自己的 AES 和 ECDSA 密钥加密和签名 - 仅包含设备内部和外部闪存上已有的内容与新版本之间的差异。这些差异应用于现有应用程序,以创建位于专用 QSPI 段中的第二个更新映像。在引导加载程序(再次)完全验证重建的更新映像之前,不会触及主应用程序。在此演示中,.sfbp文件仅包含新“水肺潜水员”图像的内容和一些应用程序字符串修改。
对.hex 文件进行编程
启动 STM32CubeProgrammer 并确保通过单击左下方区域的图标选择“ External Loader ”。为 STM32F769I-DISCO 选择加载程序。打开上面链接或附件中下载的hex文件进行烧录,点击program。编程过程擦除必要的内部和外部闪存扇区,然后将 hex 文件的内容写入正确的位置,包括引导加载程序、应用程序和 QSPI。
运行应用程序
重置电路板(这在编程后自动发生)并观察此终端输出到 115200 N81 的 STLINK VCOM 端口。
= [SBOOT] RuntimeProtections: 0
= [SBOOT] System Security Check successfully passed. Starting...
QSPI Init status=2
= [FWIMG] Slot #0 @: 8080000 / Slot #1 @: 90400000 / Block size: 40000
======================================================================
= Firmware Modules =
= =
= Secure Boot and Secure Firmware Update =
= With Delta Patching =
= for STM32F7 =
= =
= *** Bootloader *** =
======================================================================
Build Date: Dec 15 2020 10:03:36
Build Version: v2.1.0-23-g5d206f7
Anti-rollback: Enabled
= [SBOOT] STATE: WARNING: SECURE ENGINE INITIALIZATION WITH FACTORY DEFAULT VALUES!
= [SBOOT] STATE: CHECK STATUS ON RESET
INFO: A Reboot has been triggered by a Software reset!
Consecutive Boot on error counter reset
Consecutive Boot on error counter = 0
Consecutive Boot on error counter updated
INFO: Last execution status before Reboot was:Checking Status on Reset.
INFO: Last execution detected error was:No error. Success.
= [SBOOT] STATE: CHECK NEW FIRMWARE TO DOWNLOAD
= [SBOOT] STATE: CHECK FLASH MEDIA
= [SBOOT] No valid firmware found on flash media, status=1
= [SBOOT] STATE: CHECK USER FW STATUS
= [FWIMG] No valid header found in slot 1.
A valid FW is installed in the active slot - version: 4096
= [SBOOT] STATE: EXECUTE USER FIRMWARE
======================================================================
= Firmware Modules FM-SBSFU =
= https://firmwaremodules.com =
= =
= Secure Boot and Secure Firmware Update =
= For STM32F7 =
= Multi-Segment QSPI Delta Patch FM-SBSFU Demo =
= With USB Flash Loader =
= =
= *** Demonstration Application *** =
======================================================================
FW Version: 1.0.0
FW Build: v2.1.0-23-g5d206f7
FW Tag: 0x6D70087E
QSPI string: This is a message from QSPI!
Images @ 0x90000000 0x9001c28a 0x90038514
=================== Main Menu ============================
Download a new Fw Image ------------------------------- 1
Read Application Info ----------------------------- 2
在屏幕上您将看到版本 1 图像集:
每张图片大约 112 KB。.sfbp补丁文件仅更改了一些文本字符串和中间图像,因此大约为 113 KB。文本字符串驻留在 MCU 闪存中,而图像驻留在 QSPI 闪存中。
执行更新
要执行更新,请将更新补丁文件 MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp 文件复制到 USB 闪存驱动器,将驱动器插入 USB micro-A 到 A 适配器并按下重置按钮。如文件名所示,此补丁用于将“v1.0.0”更新为“v2.0.0”。它非常精确:要更新的图像的 SHA-256 哈希标签和最终重建的图像包含在补丁文件中,以 100% 确定补丁过程每次都成功完成或根本不完成,以防万一补丁对于设备上的固件不正确。
传输补丁、重建最终更新映像以及复制主应用程序插槽 (SLOT 0) 的顶部都是通过 USB 闪存驱动器快速完成的,主要受限于所涉及的闪存扇区的擦除次数。按下重置按钮后,您将看到从头到尾的更新以及更新进度跟踪,如下所示:
= [SBOOT] STATE: CHECK NEW FIRMWARE TO DOWNLOAD
= [SBOOT] STATE: CHECK FLASH MEDIA
Open update file [MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp] 115488 bytes
[ ] 0%
[ ] 1%
[. ] 2%
[. ] 3%
[. ] 4%
[.. ] 5%
[.. ] 6%
[.. ] 7%
[... ] 8%
[... ] 9%
[... ] 10%
[.... ] 11%
[.... ] 12%
[.... ] 13%
[.... ] 14%
[..... ] 15%
[..... ] 16%
[..... ] 17%
[...... ] 18%
[...... ] 19%
[...... ] 20%
[....... ] 21%
[....... ] 22%
[....... ] 23%
[........ ] 24%
[........ ] 25%
[........ ] 26%
[......... ] 27%
[......... ] 28%
[......... ] 29%
[.......... ] 30%
[.......... ] 31%
[.......... ] 32%
[........... ] 33%
[........... ] 34%
[........... ] 35%
[............ ] 36%
[............ ] 37%
[............ ] 38%
[............ ] 39%
[............. ] 40%
[............. ] 41%
[............. ] 42%
[.............. ] 43%
[.............. ] 44%
[.............. ] 45%
[............... ] 46%
[............... ] 47%
[............... ] 48%
[................ ] 49%
[................ ] 50%
= [SBOOT] Firmware patched from flash media and ready to install, status=1
= [SBOOT] STATE: CHECK USER FW STATUS
= [FWIMG] Valid header found in slot 1. Version=8192 Size=390064
= [FWIMG] Valid installation trigger header found in slot 1.
Potentially valid backup or update firmware present and ready in SLOT 1 - see if it needs to and can be installed.
= [SBOOT] STATE: INSTALL NEW USER FIRMWARE
[................ ] 50%
[................ ] 51%
[................. ] 52%
[................. ] 53%
[................. ] 54%
[.................. ] 55%
[.................. ] 56%
[.................. ] 57%
[................... ] 58%
[................... ] 59%
[................... ] 60%
[.................... ] 61%
[.................... ] 62%
[.................... ] 63%
[.................... ] 64%
[..................... ] 65%
[..................... ] 66%
[..................... ] 67%
[...................... ] 68%
[...................... ] 69%
[...................... ] 70%
[....................... ] 71%
[....................... ] 72%
[....................... ] 73%
[........................ ] 74%
[........................ ] 75%
[........................ ] 76%
[......................... ] 77%
[......................... ] 78%
[......................... ] 79%
[.......................... ] 80%
[.......................... ] 81%
[.......................... ] 82%
[........................... ] 83%
[........................... ] 84%
[........................... ] 85%
[............................ ] 86%
[............................ ] 87%
[............................ ] 88%
[............................ ] 89%
[............................. ] 90%
[............................. ] 91%
[............................. ] 92%
[.............................. ] 93%
[.............................. ] 94%
[.............................. ] 95%
[............................... ] 96%
[............................... ] 97%
[............................... ] 98%
[................................] 99%
[................................] 100%
= [FWIMG] FW installation succeeded.
= [SBOOT] STATE: VERIFY USER FW SIGNATURE
= [SBOOT] STATE: EXECUTE USER FIRMWARE
======================================================================
= Firmware Modules FM-SBSFU =
= https://firmwaremodules.com =
= =
= Secure Boot and Secure Firmware Update =
= For STM32F7 =
= Multi-Segment QSPI Delta Patch FM-SBSFU Demo =
= With USB Flash Loader =
= =
= *** Demonstration Application *** =
======================================================================
FW Version: 2.0.0
FW Build: v2.1.0-23-g5d206f7
FW Tag: 0x7DCDB900
QSPI string: This is a message from QSPI!
Images @ 0x90000000 0x9001c28a 0x90038514
引导程序
FM-SBSFU 引导加载程序接管每个设备引导。它在Download SLOT 1中寻找有效的、完整的和重建的更新图像在 QSPI 闪存中。如果它找到这样的图像,就像它在执行补丁的 USB 闪存更新后所做的那样,它会将新固件的版本号与活动固件进行比较。如果新固件更高,例如 2.0.0 对 1.0.0 或 1.0.1 对 1.0.0,则执行更新:活动图像被擦除并复制新图像。如果活动映像已损坏且仅当新固件具有相同或更高版本时,才会执行更新。如果缺少活动图像,则从任何版本执行更新。活动图像标头位于设备的安全内部闪存内,无法操纵它来安装位于不安全外部闪存中的旧版本固件。
请注意,当我们使用此处介绍的 USB 闪存驱动器方法从 SBSFU(引导加载程序)执行更新时,补丁和更新过程是在线进行的,中间没有重置。新应用程序立即启动。另一方面,如果主应用程序正在使用某种 OTA 更新方法(例如通过蜂窝 HTTP)下载和安装补丁,它显然不能覆盖自身并且必须重置以便引导加载程序接管并执行如上所述的更新。
FM-SBSFU 引导加载程序的工作是确保有效且最新版本的固件在设备上处于活动状态。如果主应用程序因任何原因损坏,引导加载程序会通过重新安装主应用程序(受版本检查)来纠正该问题。引导加载程序使用 ECDSA 执行所有身份验证检查,以确保只有您的构建系统签名的固件才能进入您的设备。这些相同的检查由补丁系统和引导加载程序完成,以确保设备的最大安全性、正常运行时间和可用性。
更新完成后,应用程序启动,在显示屏上您会注意到中间的图像已更改为水肺潜水员的图像!
QSPI flash上TouchGFX应用的补丁更新已经顺利完成。想象一下如何将这些技术应用到具有外部 QSPI 闪存的物联网和嵌入式系统产品中!
演示 Flash 布局
现在您已经看到了演示应用程序,我们可以更详细地讨论一下 Flash 布局。demo应用程序按如下方式放置在MCU内部flash和板卡QSPI flash中。此位置由构建工具自动设置,并包含在.hex文件和引导加载程序和补丁系统中。
ExtFlashSection(资源)内容映射到 MCU 内存地址(0x9000 0000),该地址在内存映射模式下为 QSPI 保留。内存映射模式允许固件指令从 QSPI 访问数据,就好像它在闪存 (0x0800 0000) 或 SRAM (0x2000 0000) 等任何其他内存空间中一样。好处是访问图像等 GUI 资源不必通过 SPI 闪存固件驱动程序层:STM32 MCU QSPI 外设负责处理。当 TouchGFX 在此模式下运行时,引导加载程序和修补系统使用直接 QSPI 模式执行读取、写入和擦除。
概括
您已经了解了一系列先进技术,可以在结合内部和外部闪存以及 USB 主机以通过 USB 闪存驱动器进行更新的项目中,在现场无缝部署和更新固件。
如果您想了解更多信息和/或有兴趣以比自己安装更快且成本更低的方式安装此系统,
查看我们的 FM-SBSFU 项目:
- STM32F7系列的外设互连
- STM32F7技术--高速缓存
- UM1907_基于STM32F746NG的STM32F7系列探索套件
- UM2470_采用STM32F750N8MCU的STM32F7系列探索套件
- AN4936_从STM32F7到STM32H7的软件移植
- AN4031_STM32F2、STM32F4和STM32F7系列的DMA控制器的应用
- AN4731_适用于STM32F7系列的STM32Cube固件例程
- AN5293 STM32F7系列移植到STM32H7系列
- AN5293 STM32F7系列移植到STM32H7系列
- STM32F7系列上缓存 3次下载
- STM32F7与STM32F4复位序列比较 0次下载
- 32位单片机STM32F7外扩QSPI SRAM芯片
- STM32F7与STM32F4之复位序列比较
- STM32F7与STM32F4的复位序列比较 0次下载
- STM32F7介绍 0次下载
- 泰凌微电子蓝牙Mesh设备固件更新功能和测试说明(一) 1427次阅读
- 如何添加触摸屏驱动到TouchGFX中? 1674次阅读
- 批量更新固件工具ControlFLASH Plus使用方法 3917次阅读
- TouchGFX界面开发:TouchGFX软件安装 1319次阅读
- 超低功耗MCU的安全固件更新注意事项 956次阅读
- STM32程序HEX文件中加入固件版本信息 4166次阅读
- stm32f030和stm32f103功能差异 2.1w次阅读
- 微雪电子32F746GDISCOVERY STM32F7开发板简介 4040次阅读
- STM32的多个ADC模块如何同时采样转换详细应用实例说明 3.3w次阅读
- 基于STM32介绍DMA的双缓冲模式 2.3w次阅读
- Cortex-M3处理器中断和FreeRTOS中断优先级配置 6920次阅读
- 苹果将为中国的iPhone用户发布软件更新系统解决合规问题 2923次阅读
- STM32单片机固件库建立工程的方法及步骤 5874次阅读
- 基于ARM®Cortex®-M7内核的高性能微控制器STM32F7系列特色分析 4315次阅读
- 《振南电子STM32视频教程》第二讲:STM32固件库说明 1444次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多