[PIC®/AVR®/dsPIC®产品]

给PIC16F18446 curiosity nano板做个bootloader

[复制链接]
7499|65
手机看帖
扫描二维码
随时随地手机跟帖
lcczg|  楼主 | 2019-6-14 17:02 | 显示全部楼层 |阅读模式
本帖最后由 lcczg 于 2019-6-14 17:02 编辑

这个帖子将介绍一个完整的bootloader的开发过程。会分部分的贴出来。
(一)缘起与准备
最近一直想研究下PIC的自举程序,手头上有PIC16F18446 curiosity nano板,正好拿他开练
702655d036234dff6c.png
很多项目里都会用到bootloader,毕竟升级更新经常碰到,想想我们的电脑和手机吧。。。

当然不能做无米之炊,先找些资料。
板子的资料https://www.microchip.com/Develo ... ils/PartNO/DM164144
官网上搜索bootloader的应用笔记找到 AN851 A FLASH Bootloader for PIC16 and PIC18 Devices
还有AN1310 High Speed Bootloader for PIC16 and PIC18 Devices
只有原理,没有步骤,停下来想想。。。

这么经典的,精英年会应该会讲到。感谢热心的坛友943614033已经上传了历年的年会资料https://bbs.21ic.com/icview-2524156-1-1.html
在2017年的动手实验四里就有。

470125d035fdf462b2.png
另外为方便大家快速查看,我也附加上传了实验手册。后续操作都是参考该手册完成的。

C18H04 21041_BTL1 Lab Manual_cn 1719.pdf

1.15 MB

使用特权

评论回复
评论
forgot 2023-7-31 17:59 回复TA
不错 
奔波儿熊| | 2019-6-17 12:18 | 显示全部楼层
期待后续

使用特权

评论回复
lcczg|  楼主 | 2019-6-18 11:54 | 显示全部楼层
本帖最后由 lcczg 于 2020-2-13 10:37 编辑

(二)产生自举程序并下载应用程序
这部分的内容是依据前面提到的实验手册的“”实验2“”部分。
1.创建新项目,器件选择PIC16F18446.

2.启动万能的MCC, 选择16MHz的HFINTOSC. 添加EUSART1, memory和Bootloader Generator.
  。。。配置管脚,按照板子说明,设RA2为BL_INDICATOR(BOOTLOADER指示灯)。 按照手册往下设置Memory Model。

3.编译
  哦,编译失败,错误提示不能找到空间。好吧,对空间加点优化吧,成功了。
810035d085999b5b9a.png

4. 使用板载nEDBG下载。
  下载后满心期待LED0常亮,指示自举程序正在运行。
  然而黑暗一片有木有,LED没亮。进入调试,程序执行没问题,RA2=1。然而板子文档里的说明是接到地(RA=0)亮,反掉了,改改代码(重配BL_INDICATOR_ON,BL_INDICATOR_OFF)再下载,亮了。

5.  继续产生应用程序。
    为便于观察,产生一个闪灯的应用程序,用MCC里的PWM.

6. 在官网https://www.microchip.com/promo/8-bit-bootloader最下面右侧下载Bootloader HOST,我们将通过它下载应用程序。
    在配置里选择端口,该端口是板子连上USB线后生产的虚拟串口,通常是比较大的,不同电脑显示一般不同。
74785d085ea67ff80.png
     
     编程器件,可以看到LED开始闪灯了。结束了?

7. 还没有。
    板子掉电上电后又开始闪灯了,进入应用程序了。然而如果还想进入自举吶,再想想。
    重新进入自举程序的MCC配置,打开bootloader Generator,
   有一个I/O Pin Entry, 这个就是进入自举程序的IO阀门。使能它。在Pin Manager 里选择板上的按键RC2做BL_ENTRY.
   重新生成并下载自举工程,用Bootloader HOST下载闪灯应用程序,成功。更改应用程序闪灯频率,按住按键,准备再次进入自举,
   然而LED没有常亮,而是在闪。还是进入了应用程序。
   怎么回事? 调试代码,没有问题,奇怪。看看板子说明文档里关于按键的介绍,里面很明显的提示要使能管脚的内部上拉。返回Pin Module使能上拉。经过测试OK,现在靠按键终于能重复进入自举了。

599705d0865487d21e.png

(三)总结
总的来说,有一些小插曲,最终却是大圆满。这也让我感受到MCC的强大。
自举和应用的工程在附件里,供大家参考,谢谢。

(四)补充(2020.02.13)
对于XC8 2.10及以后的版本,编译附件的BOOT工程会出现如下错误:
pic16f1_bootload.c:138:: error: (1349) initialization of absolute variable "_EE_Key_1" in RAM is not supported
pic16f1_bootload.c:139:: error: (1349) initialization of absolute variable "_EE_Key_2" in RAM is not supported

这是由于XC的版本差异导致的。XC8 2.10及以后的版本有此限制:不允许对RAM绝对变量初始化,
Absolute variables in RAM cannot be initialized when they are defined, and they are
not cleared by the runtime startup code. After defining absolute variables, assign them
an initial value at a suitable point in your main-line code, if required.
两种解决办法:
1,使用XC8 2.05或以前版本。
2.  _EE_Key_1, _EE_Key_2不在定义的时候赋值,在代码中开始的地方去赋值。

bootloder and app.zip

103.88 KB

使用特权

评论回复
评论
渔夫的烟斗 2020-3-24 13:01 回复TA
Failure Hint: Confirm Erase Range 
martin| | 2019-6-18 15:16 | 显示全部楼层
楼主高效自学了MCC和精英年会的课程,还学以致用,赞!

使用特权

评论回复
奔波儿熊| | 2019-6-18 16:54 | 显示全部楼层
动作迅速

使用特权

评论回复
天灵灵地灵灵| | 2019-7-28 21:44 | 显示全部楼层
高手啊,弄的这么快。

使用特权

评论回复
天灵灵地灵灵| | 2019-7-28 21:45 | 显示全部楼层
基于串口的bootloader

使用特权

评论回复
yiy| | 2019-7-29 20:40 | 显示全部楼层
高手,这真是高手。

使用特权

评论回复
wanduzi| | 2019-7-31 23:03 | 显示全部楼层
太赞了,学习一下。

使用特权

评论回复
天灵灵地灵灵| | 2019-7-31 23:50 | 显示全部楼层
教程总结的到位。

使用特权

评论回复
GIGGWANG| | 2019-12-26 23:36 | 显示全部楼层
app下载不到啊

使用特权

评论回复
lcczg|  楼主 | 2019-12-27 10:14 | 显示全部楼层
本帖最后由 lcczg 于 2019-12-27 10:16 编辑

是指主机软件吗?你试试这个https://www.microchip.com/mymicrochip/filehandler.aspx?ddocname=en1000558

使用特权

评论回复
GIGGWANG| | 2019-12-27 12:17 | 显示全部楼层
lcczg 发表于 2019-12-27 10:14
是指主机软件吗?你试试这个https://www.microchip.com/mymicrochip/filehandler.aspx?ddocname=en1000558 ...

是的,我在你给的网址已经下过了。但是下载下来,没有安装包啊,不知道你现在还有没有,有的话可以发我一下吗 QQ583078065

使用特权

评论回复
lcczg|  楼主 | 2019-12-27 14:50 | 显示全部楼层
GIGGWANG 发表于 2019-12-27 12:17
是的,我在你给的网址已经下过了。但是下载下来,没有安装包啊,不知道你现在还有没有,有的话可以发我一 ...

解压包里面包含Java可执行文件UnifiedHost-1.15.1,需要先安装JAVA JRE  https://www.java.com/en/download/manual.jsp , 然后直接双击UnifiedHost-1.15.1就可运行了。

使用特权

评论回复
GIGGWANG| | 2019-12-27 14:58 | 显示全部楼层
lcczg 发表于 2019-12-27 14:50
解压包里面包含Java可执行文件UnifiedHost-1.15.1,需要先安装JAVA JRE  https://www.java.com/en/downlo ...

好的,非常感谢!

使用特权

评论回复
TsaiRH| | 2020-2-10 21:32 | 显示全部楼层
大神能分享下完整的开发流程吗,我照着试了,还是出现很多问题

使用特权

评论回复
lcczg|  楼主 | 2020-2-11 12:39 | 显示全部楼层
TsaiRH 发表于 2020-2-10 21:32
大神能分享下完整的开发流程吗,我照着试了,还是出现很多问题

3楼附带的工程测试了没?有什么问题?

使用特权

评论回复
TsaiRH| | 2020-2-11 21:17 | 显示全部楼层
lcczg 发表于 2020-2-11 12:39
3楼附带的工程测试了没?有什么问题?

led_app编译ok,bootloader_demo编译错误,如图显示C:\Users\cairo\OneDrive\桌面\11.jpg
11.jpg

使用特权

评论回复
评论
渔夫的烟斗 2020-3-24 10:56 回复TA
怎么报的错与我测试的不一样? 
lcczg|  楼主 | 2020-2-13 10:29 | 显示全部楼层
TsaiRH 发表于 2020-2-11 21:17
led_app编译ok,bootloader_demo编译错误,如图显示

这是由于XC的版本差异导致的。XC8 2.10及以后的版本有此限制:不允许对绝对地址变量初始化,
Absolute variables in RAM cannot be initialized when they are defined, and they are
not cleared by the runtime startup code. After defining absolute variables, assign them
an initial value at a suitable point in your main-line code, if required.
两种解决办法:1,使用XC8 2.05或以前版本。 2.  _EE_Key_1, _EE_Key_2不在定义的时候赋值,在代码中开始的地方去赋值。

使用特权

评论回复
TsaiRH| | 2020-2-13 23:20 | 显示全部楼层
本帖最后由 TsaiRH 于 2020-2-13 23:22 编辑
lcczg 发表于 2020-2-13 10:29
这是由于XC的版本差异导致的。XC8 2.10及以后的版本有此限制:不允许对绝对地址变量初始化,
Absolute va ...

我现在把编译器换成XC 8 2.0版本,还是不行
微信截图_20200213231923.png

使用特权

评论回复
评论
渔夫的烟斗 2020-3-24 10:57 回复TA
解决的话能通知一下我吗?同样卡在一个地方了 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:滴水可穿石,众志更成城 http://my.21ic.com/static/image/smiley/comcom/2.gif

27

主题

812

帖子

4

粉丝