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线,现场就可以完成更新,这个时候可以节省一大笔召回的成本。
PIC32MZ 通过USB在线升级 -- USB HID bootloader的更多相关文章
- PIC32MZ 通过USB在线升级 -- USB CDC bootloader
了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...
- PIC24 通过USB在线升级 -- USB HID bootloader
了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader; 我的博客主页www.cnblogs.com/geekygeek ...
- PIC24 通过USB在线升级 -- USB CDC bootloader
了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek 今 ...
- PIC32MZ 通过U盘在线升级 -- USB Host bootloader
了解bootloader的实现,请加QQ: 1273623966(验证填bootloader); 欢迎咨询或定制bootloader; 我的博客主页 www.cnblogs.com/geekygeek ...
- nrf52——DFU升级USB/UART升级方式详解(基于SDK开发例程)
摘要:在前面的nrf52--DFU升级OTA升级方式详解(基于SDK开发例程)一文中我测试了基于蓝牙的OTA,本文将开始基于UART和USB(USB_CDC_)进行升级测试. 整体升级流程: 整个过程 ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Encrypted bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- dsp 28377在线升级 实例总结
使用dsp品台28377d来实现在线升级的功能. 方案 : 升级程序 + 应用程序 升级程序 : 主要的目的是将上位机发送过来的应用程序数据(ccs编译生成的.bin文件)烧写到指定位置,之后在跳 ...
- STM32 IAP 在线升级详解(转)
源:http://blog.csdn.net/yx_l128125/article/details/12992773 (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP ...
随机推荐
- spring整合mybatis错误:HTTP Status 404 - xxx-xxx....
运行环境:jdk1.7.0_17 + tomcat 7 + spring 3.2.0 +mybatis 3.2.7+ eclipse,访问路径:http://localhost:8085/Spring ...
- shell变量$(CURDIR),$0,$1,$2,$#含义解释
$(CURDIR): CURDIR是make的内嵌变量, 为当前目录 实例 SRCTREE := $(CURDIR) *$(CURDIR)为当前目录,相当于SRCTREE=./ MKCONFIG ...
- vue中数据双向绑定的实现原理
vue中最常见的属v-model这个数据双向绑定了,很好奇它是如何实现的呢?尝试着用原生的JS去实现一下. 首先大致学习了解下Object.defineProperty()这个东东吧! * Objec ...
- 为什么可以通过URL来调起APP - URL Scheme和Intent
在手机浏览器中可以通过URL调起APP是不是很神奇?这篇文章就告诉你为什么. URL Scheme 先从前端能接触到的URL Scheme分析一下 丢wiki:https://en.wikipedia ...
- ★浅谈Spanking情节
- Linux cat /proc/meminfo 输出分析
$cat /proc/meminfoMemTotal: 2052440 kB //总内存MemFree: 50004 kB //空闲内存Buffers: ...
- 【集美大学1411_助教博客】团队作业3——需求改进&系统设计 成绩
看到同学们越来越认真了,助教非常高兴.大家已经开始了alpha冲刺,请控制好进度.成功的关键就是不断迭代,不断迭代. 关于leangoo 我看到所有组的同学都已经开始使用leangoo,请大家把助教加 ...
- 个人作业3—个人总结(Alpha阶段)
一.关于Alpha阶段的总结 1.我们团队的情况 关于我们拖拉机团队,大家在一起做项目的这几周算是比较团结.首先组长布置的任务,每个人都有认真去做,每次例会还会总结不足,提出改进,并且实施这些改进:其 ...
- Swing-BoxLayout用法-入门
注:本文内容源于http://www.java3z.com/cwbwebhome/article/article20/200016.html?id=4797:细节内容根据笔者理解有修改. BoxLay ...
- 201521123042 《java程序设计》 第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. ①泛型定义:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展, ...