本帖最后由 chenxiaolang 于 2019-12-3 09:46 编辑
MCHP的MCC工具集成了PIC16/PIC18的Bootloader生成器,通过勾选就能完成绝大部分工作;dsPIC33/PIC24/PIC32的Bootloader则是以库的方式提供,还未集成到图形界面。近期基于dsPIC33EP64MC204-I/PT进行了Bootloader调试,在这里分享一些经验。
1、Bootloader名为EZBL,鉴于附件太大不好上传,感兴趣的朋友可从MCHP官网自行下载。我调试用的实例工程在帖子最后面可下载参考。
2、下载EZBL加压后,可以看到下图中的文件
<1>、该Bootloader可支持多种通讯口:UART/IIC/USB
<2>、Bootloader的源码在ezbl_lib文件中,绝大部分是汇编码,所以正常使用是以库的形式加到工程里的,如果要研究具体如何实现的,可以查看源码
<3>、Bootloader的难点一般是在和App之间的地址分配、中断资源的分配,这些在help文件都有介绍,在本文后面也有简单描述
3、我使用的硬件平台是dsPIC33EP64MC204-I/PT,希望采用UART1实现在线升级,在步骤2图中的ex_boot_uart工程基础上更改满足需求。
由于这是个现成的Bootloader工程,需要改动地方非常少:一是修改MCU型号,二是修改硬件初始化文件。在硬件初始化时有两点需要注意:
<1>、配置字。配置字是MCU运行的一些基础参数,一旦有变化影响比较大,所以建议Bootloader和App程序采用完全一致的配置字,且放到bootloader工程中。(App功能不用在放了,即便放了编译也会报错,重复了)
<2>、时钟配置。采用和配置字一样的策略,放在Bootloader中初始化。(时钟配置是可以多次修改的,只是觉得没必要经常变)。
下面是dsPIC33EP64MC204_hal.c的截图,配置了LED pin脚、定时器1、UART1,详细情况请看附件源码。
main.c需要注意的一个地方如下图红色框。
这里需要说下Bootloader和App的存储和中断重映射,如下图所示,MCU上电肯定从初始地址跳转到Bootloader运行,而Bootloader占用了Timer1和UART1的中断向量,所以一旦有这两个外设中断发生,不论当前是否处于升级状态,程序肯定会跳转到Bootloader运行,这就导致App程序无法使用者两个外设。针对这种情况,EZBL提供解决办法:
<1>、Default IGT Remapping——Bootloader不使用的外设,通过重设置中断向量表,发生中断时直接跳转到App程序段。
<2>、ISR Reuse——对于Bootloader使用的外设,App可以通过API函数访问
<3>、Interrupt Forwarding——对于Bootloader使用的外设,如果<2>不方便,发生中断时Bootloader交给App处理。
也就是说实际应用是可选择<1>、<2>组合,或<1>、<3>组合。现在再看上图main.c中的红色框里三个函数就是为了实现<3>。(<1>是默认实现的,Bootloader不用的中断自然要重映射到App)
4、完成上述工作,编译链接,在ezbl_integration目录下得到如下两个文件,这是App工程需要的。
5、创建自己的App工程dsPIC33EP64MC204_App.X,把步骤4得到的ezbl_integration文件夹整个拷贝到该工程目录下,手动添加下面的文件
此时注意,App工程里不再需要配置字,也不要调用初始化时钟函数(Bootloader运行时已经初始化了)。为了便于观察和验证,App让LED按1Hz闪烁,UART1做一些简单收发工作。
6、使用PICkit3或ICD3烧写。其实EZBL提供了脚本式的上位机(在ezbl_integration目录下),在编译App工程时会根据ezbl_app.mk的配置进行升级(第一次编译肯定会升级失败,MCU里还没有Bootloader呢,所以肯定先烧写一次).
编译时,如果连着板子且已烧写过Bootloader(或集成了Bootloader的App),会启动升级,不需要这个功能可自行修改mk文件进行屏蔽。
7、在步骤6升级中,如果事先烧写了App程序,MCU当然运行在App程序段,而所有的中断控制权Bootloader都交出去了,那是如何回到Bootlaoder程序段再升级的呢?答案是:不能自动回去,需要手动复位或者App软复位。
结合刚才的问题,下面说一下如何脱离X IDE进行升级,在App工程ezbl_integration目录下是有升级的上位机的,但没有界面,通过执行批处理Update_App.bat实现。(升级用的目标文件是dsPIC33EP64MC204_App.X.production.bl2文件,是从编译连接后在dist目录下生成的,为了便于操作手动拷贝过来的,当然也可修改mk文件自动拷贝过来)
8、现在Bootloader和App工程都有了,还缺一个界面上位机,用VB.Net做一个(源码见附件),也是通过调用批处理完成升级,而且可以通过设置命令让MCU预先软复位,无需在人工操作。
VB.Net上位机界面
VB.Net程序调用批处理升级的界面,升级完成后调出日志文件:
|
您好,冒昧打扰,我用mcc配置了dspic33e的boot loader,但是用官方的上位机无法下载,我应该怎么去调用例程里面的上位机,求指导