2007889_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2007889_zh-CN

2007889_zh-CN

基于 RT1170 通过 USB DFU 更新固件

基于 RT1170 通过 USB DFU 更新固件

基于 RT1170 通过 USB DFU 更新固件
开发环境
准备dfu-util
准备dfu-util 的步骤
运行演示
使用 SDK 中的预建固件
使用自定义固件

无需借助外部编程工具即可在现场执行微控制器 (MCU) 固件升级是一项必要的功能。
对于支持 USB 设备控制器的 MCU,USB 设备固件更新 (DFU) 类提供了一种解决方案。USB_DFU 引导加载程序只需要一台 PC 和一根 USB 电缆。

RT系列也提供了此功能。以 RT1170 为例,SDK 中 USB 类下提供了一个 DFU 项目。该项目基于 MCUXpresso IDE。通过运行 SDK 中的 dev_dfu_freertos_cm7 项目,RT1170 将被枚举为 dfu 设备,并且在通过另一根 USB 电缆将其连接到主机 PC 后,用户可以使用“dfu-util”实用程序将固件下载到该设备。

开发环境

软件环境:

  • SDK版本:2.15.000
  • IDE: MCUXpresso IDE
  • 演示项目 dev_dfu_freertos_cm7
  • 主机软件 dfu-util
    • 下载链接: dfu-util
    • 对于 Windows 64 位:下载dfu-util-0.9-win64.zip

 

硬件环境:

  • 主板:RT1170-EVKB

 

Preparing dfu-util

dfu-util用于将固件下载到 DFU 设备,但它不会将 CRC32 添加到固件中。由于 SDK 中的 DFU demo 会验证 CRC32,以确保写入 Flash 的固件没有位错误,因此需要修改dfu-util源代码。

准备dfu-util 的步骤

  1. 安装依赖项
  • sudo apt-get build-dep libusb-1.0-0 dfu-util
    sudo apt-get 安装 gcc-mingw-w64-x86-64
  1. 下载dfu-utillibusb源代码
  1. 修改源代码中的 CRC 代码
    修改
    dfu_file.c中的dfu_store_file函数,将CRC32添加到Firmware后缀。
  • /* 如果有后缀,则写入 */
    如果(写入后缀){
    uint8_t dfusuffix[DFU_SUFFIX_LENGTH];
    dfusuffix[0] = 文件->bcdDevice & 0xff;
    dfusuffix[1] = 文件->bcdDevice >> 8;
    dfusuffix[2] = 文件->idProduct & 0xff;
    dfusuffix[3] = 文件->idProduct >> 8;
    dfusuffix[4] = 文件->idVendor & 0xff;
    dfusuffix[5] = 文件->idVendor >> 8;
    dfusuffix[6] = 文件->bcdDFU & 0xff;
    dfusuffix[7] = 文件->bcdDFU >> 8;
    dfusuffix[8] = 'U';
    dfusuffix[9] = 'F';
    dfusuffix[10] = 'D';
    dfusuffix[11] = DFU_SUFFIX_LENGTH;
    /*crc = dfu_file_write_crc(f, crc, dfusuffix,
    DFU_SUFFIX_LENGTH - 4);*/
    dfusuffix[12] = crc;
    dfusuffix[13] = crc >> 8;
    dfusuffix[14] = crc >> 16;
    dfusuffix[15] = crc >> 24;
    crc = dfu_file_write_crc(f,crc,dfusuffix +
    12, 4);
    }
  •  
  1. 构建libusb
  • mkdir -p构建
    cd libusb-1.0.24
    ./autogen.sh
    PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build
    制作
    进行安装
    光盘 ..
  1. Build dfu-util
  • cd dfu-util-0.11
    ./autogen.sh
    PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig./configure --host=x86_64-w64-mingw32 --prefix=$PWD/../build
    制作
    进行安装
    光盘 ..

完成这些步骤后,新构建的工具将位于/build/bin文件夹中。

Gavin_Jia_0-1733384039454.png

打开 Windows 的 cmd。使用新的dfu-suffix.exe运行以下命令,CRC32 将添加到固件中。

dfu-suffix.1 exe -a你的固件

Gavin_Jia_1-1733384039494.png

运行演示

使用 SDK 中的预建固件

SDK 提供了一个预编译的固件二进制文件 ( dev_hid_mouse_bm.bin ),其中已包含 CRC32 校验码。请按以下步骤操作:

  1. 使用 MCUXpresso IDE 将dev_dfu_freertos_cm7演示刷入 EVKB 板。
  • Gavin_Jia_2-1733384039655.png
  •  
  1. 通过 USB 将开发板连接到主机 PC。
  • Gavin_Jia_3-1733384039682.png
  1. 在 USB 设备描述符中,我们找到供应商 ID 和产品 ID:
  • Gavin_Jia_4-1733384039793.png
  •  
  1. 运行以下命令下载固件:
  • dfu-util.exe -d <你的视频:进程号> -D <你的固件>

下载后,DFU 演示将验证 CRC32 并在 RAM 中执行新的固件。该设备将被枚举为 USB 鼠标,在屏幕上以矩形图案移动。

使用自定义固件

使用自定义固件时,请确保图像加载到正确的地址(例如,0x10000)。如果偏移量不正确,即使 CRC 校验通过,DFU 演示也将无法加载固件。

Gavin_Jia_5-1733384039909.png

构建和加载自定义固件:

  1. hello_world_cm7项目导入 MCUXpresso IDE。
  2. 托管链接器脚本设置中,启用“将应用程序链接到 RAM”。
  • Gavin_Jia_6-1733384040028.png
  1. 调整内存设置以匹配 DFU 项目要求,确保 ITCM 是第一个 RAM 区域。
  • Gavin_Jia_7-1733384040294.png
  1. 构建项目并生成二进制文件。
  • Gavin_Jia_8-1733384040455.png

使用修改后的dfu-util工具将 CRC32 附加到二进制文件并将其下载到开发板。验证自定义固件是否正确执行。

  • CRC 添加:
  • Gavin_Jia_9-1733384040480.png
  • 新固件加载成功:
  • Gavin_Jia_10-1733384040568.png

中文版及演示版请见此链接:
https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=803149&fromuid=3253523

动手实践培训
Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 11:54 AM
Updated by: