PIC32MZ 通过USB在线升级 -- USB HID bootloader

  了解 bootloader 的实现, 请加QQ: 1273623966(验证填bootloader); 欢迎咨询或定制bootloader; 我的博客主页 www.cnblogs.com/geekygeek

        上一篇博文介绍了PIC32MZ 的USB CDC bootloader, 但是USB CDC bootloader是模拟UART通信,速度比较慢。所以我决定使用USB HID class替换USB CDC class. 让我的PIC32MZ bootloader更新程序时,有飞一般的感觉。整个PIC32MZ USB HID bootloader是在harmony 的bootloader例程基础上修改的。HID bootloader的开发环境如下。

       开发环境

        1. IDE:  MPLABX IDE 4.01

        2. Compiler:  XC32 1.40

        3. Library:  Harmony 1.07

        4. Example: c:/microchip/harmony/v1_07_01/apps/bootloader/basic/firmware/basic.X.

        下位机

       在harmony bootloader例程的基础上,首先修改的是项目属性的配置。让其适应我的硬件板子(PIC32MZ EC starter kit )。项目中对应的芯片修改成PIC32MZ2048ECH144。Bootloader的Linker File,  bsp,  以及 peripheral Library修改成PIC32MZ2048ECH所对应的。

       接着就是代码的修改。harmony bootloader例程的设计很成熟,只需要很少的改动,就可以适配到你的硬件板子。唯一的不足,就是例程的文档没有介绍到bootloader和应用程序的memory map。 这一点AN1388就做的很好,AN1388里面甚至有应用程序的例子,可以直接用来测试bootloader。 AN1388里面也有应用程序的Linker file。但是harmony bootloader例程文档中没有,我只好自己写应用程序的Linker script。 Linker script必须让bootloader和应用程序在flash中地址错开来。不能有overlap。 然后我在HID bootloader 的system_config.h中修改了以下与地址相关的宏定义:

#define BOOTLOADER_FLASH_BASE_ADDRESS   0x9D000000
#define BOOTLOADER_FLASH_END_ADDRESS    (0x9D000000 + 0x200000 - 1)

/* Address of  the Flash from where the application starts executing */
/* Rule: Set BOOTLOADER_FLASH_BASE_ADDRESS to _RESET_ADDR value of application linker script*/
#define BOOTLOADER_RESET_ADDRESS    0xBD000000        //(BOOTLOADER_FLASH_BASE_ADDRESS + 0x1000)

这些宏定义和我写的应用程序的Linker script中的定义相吻合。否则会烧写失败或跳转不成功。接着就试着编译我的HID bootloader, 一切都很顺利,一次就成功了。通过PICKit3将HID bootloader下载到了硬件板子上了。

        上位机

        这时候,我就去找harmony bootloader要用的电脑端的程序(上位机)。我找了harmony安装路径下的每一个角落,都没有发现。难道要自己写上位机, 这个可没那么简单。后来我突然想到了AN1388的上位机PIC32UBL.exe, 虽然AN1388的例程中bootloader的代码只支持PIC32MX, 不支持PIC32MZ。 但是上位机说不定是通用的。试完后,才知道PIC32UBL.exe果然是个好用工具,对harmony bootloader的支持非常的好。

        

       更新步骤

       1. 打开上位机PIC32UBL.exe, 选择勾选USB通信方式。

       2. 按住硬件板子的SW3 按键开关, 重启硬件板子。

       3. 点击上位机connect按钮,会提示发现bootloader,这个时候可以松开SW3按键开关。

       4. 点击上位机“Load Hex File"按钮,加载应用程序的hex。 (应用程序编译时,要用上面提到的客制的Linker script )

       5. 点击上位机“erase-program-verify"按钮,bootloader开始工作,等待其烧写完成。

       6. 点击上位机”Run application"按钮。

       整个步骤,就是这样。我非常满意这个HID bootloader, 操作简单,速度也快,完全可以用来作为产线生产时烧写的一个工具,有了它,就算产品出到客户端,如果需要更新程序,也不用召回,只需插上USB线,现场就可以完成更新,这个时候可以节省一大笔召回的成本。

原文地址:https://www.cnblogs.com/geekygeek/p/usb_hid_bootloader.html