zoukankan      html  css  js  c++  java
  • 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线,现场就可以完成更新,这个时候可以节省一大笔召回的成本。

  • 相关阅读:
    Web服务器讲解与JavaWeb应用部署(本机,以Tomcat为例)
    DNS与DNS劫持原理、IP、域名、服务器访问浅讲
    MyArrayList——自己实现ArrayList
    Map排序——按key排序,按value排序
    储存对象并按对象某属性排序的几种方法
    常用集合类使用方法
    避免窗口切换闪烁——卡片式布局的使用方法
    [Netbeans]为面板设置背景图片
    JDBC编程之预编译SQL与防注入式攻击以及PreparedStatement的使用教程
    JDBC编程之事务的使用教程
  • 原文地址:https://www.cnblogs.com/geekygeek/p/usb_hid_bootloader.html
Copyright © 2011-2022 走看看