发新帖本帖赏金 9.00元(功能说明)我要提问
123下一页
返回列表
打印
[PIC®/AVR®/dsPIC®产品]

disPIC33 Bootloader 实例介绍

[复制链接]
6193|49
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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程序调用批处理升级的界面,升级完成后调出日志文件:






SerialCom.rar

442.37 KB

VB.Net做的上位机

dsPIC33EP64MC204_UART_Bootloader.X.rar

1.34 MB

Bootloade程序

dsPIC33EP64MC204_App.X.rar

1.22 MB

集成了Bootloader的应用程序

使用特权

评论回复

打赏榜单

myxs 打赏了 3.00 元 2022-10-24
理由:冒昧打扰,dsp33e30F的bootloader求指导,卡住了。

myxs 打赏了 5.00 元 2022-10-24
理由:求指导

评论
myxs 2022-10-22 21:14 回复TA
您好,冒昧打扰,我用mcc配置了dspic33e的boot loader,但是用官方的上位机无法下载,我应该怎么去调用例程里面的上位机,求指导 
沙发
huiyong828| | 2019-12-16 19:03 | 只看该作者
我这几天也是在调pic16f的bootloader部分,对于上位机部分没有接触过编写方法,您能介绍个工具用下吗?最好是您擅长的,以后多请教问题,谢谢!能留个联系方式吗?沟通方便些

使用特权

评论回复
板凳
gotomy| | 2019-12-16 19:14 | 只看该作者
很好的**,mark 学习中,谢谢!

使用特权

评论回复
地板
z_jzhao| | 2019-12-17 17:23 | 只看该作者
好贴,怎么收藏

使用特权

评论回复
5
小明的同学| | 2019-12-17 21:36 | 只看该作者
好**, 我要保存成PDF

使用特权

评论回复
6
chenxiaolang|  楼主 | 2019-12-19 00:36 | 只看该作者
huiyong828 发表于 2019-12-16 19:03
我这几天也是在调pic16f的bootloader部分,对于上位机部分没有接触过编写方法,您能介绍个工具用下吗?最好 ...

其实对于dsPIC33的升级,MCHP官方是有上位机的,不过不是界面形式的,通过批处理完成的。我自己做的上位机并未重新编写协议,只是根据官方批处理的格式重新做了一份,具体通信还是MCHP原来的程序,看不到源码。

使用特权

评论回复
7
chenxiaolang|  楼主 | 2019-12-19 00:44 | 只看该作者
huiyong828 发表于 2019-12-16 19:03
我这几天也是在调pic16f的bootloader部分,对于上位机部分没有接触过编写方法,您能介绍个工具用下吗?最好 ...

PIC16的Bootloader,通过MCC工具可自动生成,要方便许多,MCHP有官方培训文档,请参考
//pan.baidu.com/s/1haNdYC5DQbzKy4BrSRF4HQ 提取码: ant8 提取码: ant8

使用特权

评论回复
8
luochangqing112| | 2020-4-5 23:15 | 只看该作者
mark

使用特权

评论回复
9
弓长月月鸟| | 2020-4-5 23:22 | 只看该作者
不错。一直想了解这一块。太好了,谢谢楼主!!!

使用特权

评论回复
10
bobee| | 2020-5-8 23:35 | 只看该作者
很不错的**!

这里我有2个疑问:
1. 这里的工程是在哪里开发环境下的?
  (我之前一直使用的是MPLAB IDE V8.76)

2. 有将hex文件转为 二进制bin文件的工具吗?

非常感谢!

使用特权

评论回复
11
wsndg| | 2020-5-9 08:38 | 只看该作者
mark一下

使用特权

评论回复
12
quickman| | 2020-5-9 21:18 | 只看该作者

disPIC33与disPIC30有什么区别?

使用特权

评论回复
13
jstgotodo| | 2020-5-9 21:18 | 只看该作者
如何dsPIC33E在Bootloader和APP中都有中断

使用特权

评论回复
14
iamaiqiyi| | 2020-5-9 21:19 | 只看该作者
         

使用特权

评论回复
15
dzfansman| | 2020-5-9 21:19 | 只看该作者
Bootloader 太难了。   

使用特权

评论回复
16
sanxingnote7| | 2020-5-9 21:19 | 只看该作者
有开发的教程吗   

使用特权

评论回复
17
backlugin| | 2020-5-9 21:19 | 只看该作者
Microchip的disPIC33E  

使用特权

评论回复
18
sdCAD| | 2020-5-9 21:20 | 只看该作者
详细使用方式      

使用特权

评论回复
19
updownq| | 2020-5-9 21:20 | 只看该作者
DSPIC33 BOOTLOADER 例程  

使用特权

评论回复
20
sanfuzi| | 2020-5-9 21:20 | 只看该作者
dispic33ep512的系统时钟切换例程  

使用特权

评论回复
发新帖 本帖赏金 9.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

48

帖子

4

粉丝