基于 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
硬件环境:
Preparing dfu-util
dfu-util用于将固件下载到 DFU 设备,但它不会将 CRC32 添加到固件中。由于 SDK 中的 DFU demo 会验证 CRC32,以确保写入 Flash 的固件没有位错误,因此需要修改dfu-util源代码。
准备dfu-util 的步骤
- 安装依赖项
- sudo apt-get build-dep libusb-1.0-0 dfu-util
sudo apt-get 安装 gcc-mingw-w64-x86-64
- 下载dfu-util和libusb源代码
- 修改源代码中的 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);
}
-
- 构建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
制作
进行安装
光盘 ..
- 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文件夹中。
打开 Windows 的 cmd。使用新的dfu-suffix.exe运行以下命令,CRC32 将添加到固件中。
dfu-suffix.1 exe -a你的固件
运行演示
使用 SDK 中的预建固件
SDK 提供了一个预编译的固件二进制文件 ( dev_hid_mouse_bm.bin ),其中已包含 CRC32 校验码。请按以下步骤操作:
- 使用 MCUXpresso IDE 将dev_dfu_freertos_cm7演示刷入 EVKB 板。
- 通过 USB 将开发板连接到主机 PC。
- 在 USB 设备描述符中,我们找到供应商 ID 和产品 ID:
- 运行以下命令下载固件:
- dfu-util.exe -d <你的视频:进程号> -D <你的固件>
下载后,DFU 演示将验证 CRC32 并在 RAM 中执行新的固件。该设备将被枚举为 USB 鼠标,在屏幕上以矩形图案移动。
使用自定义固件
使用自定义固件时,请确保图像加载到正确的地址(例如,0x10000)。如果偏移量不正确,即使 CRC 校验通过,DFU 演示也将无法加载固件。
构建和加载自定义固件:
- 将hello_world_cm7项目导入 MCUXpresso IDE。
- 在托管链接器脚本设置中,启用“将应用程序链接到 RAM”。
- 调整内存设置以匹配 DFU 项目要求,确保 ITCM 是第一个 RAM 区域。
- 构建项目并生成二进制文件。
使用修改后的dfu-util工具将 CRC32 附加到二进制文件并将其下载到开发板。验证自定义固件是否正确执行。
- CRC 添加:
- 新固件加载成功:
中文版及演示版请见此链接:
https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=803149&fromuid=3253523