DFU V2 CDC 用户应用示例
源码路径:example/dfu_v2/cdc/app
支持的平台
sf32lb52-lcd_n16r8_hcpu— SF32LB52X 芯片,NOR Flash(16Mb NOR + 8MB PSRAM)。
概述
本例程演示通过 USB-CDC(虚拟串口)通道进行 DFU V2 固件升级的用户应用侧。设备枚举为一个 CDC ACM 串口,正常运行时在屏幕上显示版本号;当 PC 工具通过该串口发来升级触发指令后,设备应答并重启进入 DFU loader 完成刷写。
PC 端配套工具为 dfu_v2_cdc_tool.py,负责先发送触发指令让设备进入 DFU 模式,再通过 USB-CDC 上传固件。
例程的使用
把编译产物烧录到设备后,设备正常运行并枚举为 USB-CDC 串口,屏幕显示版本号。准备一份新版本固件,在 PC 上运行 dfu_v2_cdc_tool.py 并加 --trigger 触发升级,设备重启进入 loader 完成刷写后再回到新的用户应用。
硬件需求
运行该例程前,需要准备:
一块本例程支持的开发板(支持的平台)。
一根 USB 数据线,用于连接开发板与 PC。
编译和烧录
切换到例程project目录,运行scons命令执行编译:
> scons --board=sf32lb52-lcd_n16r8_hcpu -j8
编译应用工程时会通过 building.py 中的 AddDFU_CDC 自动把同级 loader 作为子工程一并构建,无需单独编译 loader。
关于编译、下载的详细步骤,请参考快速入门的相关介绍。
例程的预期结果
将编译产物烧录到设备并复位。设备运行后枚举为一个 USB-CDC 串口,屏幕显示标题
CDC DFU EXAMPLE、品牌SIFLI以及版本号Ver: 1.0.9(版本号来自main.c中的APP_VERSION)。准备一份“新版本”固件用于验证升级:把
src/main.c里的APP_VERSION改一个新值(如1.1.0)后重新编译,得到project/build_sf32lb52-lcd_n16r8_hcpu/main.bin。然后在 PC 上运行升级工具,指定串口、这份新固件和目标分区地址,并加上--trigger让工具先发送触发指令:python dfu_v2_cdc_tool.py --port COM3 --firmware project/build_sf32lb52-lcd_n16r8_hcpu/main.bin --addr 0x12218000 --trigger其中
0x12218000是HCPU_FLASH_CODE分区地址(分区表基址0x12000000加偏移0x00218000)。触发流程:工具向设备发送 4 字节魔数
AA 55 DF 00;main.c的usbd_cdc_acm_bulk_out回调识别该魔数后,回送应答AA 55 DF 01,并置位g_dfu_trigger_requested;主循环检测到该标志后调用dfu_enter_dfu_mode(),写下升级标志并重启。重启后 bootloader 检测到升级标志,跳入 DFU loader。工具自动重连,按 DFU V2 协议把固件上传并直写到目标分区,完成后命令设备复位。
设备重启回新的用户应用。屏幕上的
Ver:版本号变为新固件中的值,即表示升级成功。
异常诊断
参考文档
更新记录
版本 |
日期 |
发布说明 |
|---|---|---|
0.0.1 |
06/2026 |
初始版本 |