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

使用MCC配置bootloader

[复制链接]
10005|37
手机看帖
扫描二维码
随时随地手机跟帖
TsaiRH|  楼主 | 2020-4-16 19:32 | 显示全部楼层 |阅读模式
本帖最后由 TsaiRH 于 2020-4-16 19:43 编辑

就一个多月学习bootloader做个记录,同时对lcczg的解答表示感谢。
文中的很多内容摘抄于Microchip 2017 Master的课程《C18H04 21041_BTL1 Lab Manual_cn 1719.pdf》和21ic上lcczg的《给PIC16F18446 curiosity nano板做个bootloader》(https://bbs.21ic.com/forum.php?mod=viewthread&tid=2823060&page=1#pid10883760)教程。
准备:
MPLAB X IDE V5.20
XC8 V2.00
PIC16F18446 curiosity nano 开发板
USB串口调试工具
实验1“新建编译应用程序”
1、启动MPLAB X,新建一个项目,编写应用程序,编译下载到板上,验证功能,我这直接使用lcczg提供的led_app.X,功能为led闪烁。
实验2“生成UART自举程序”
1、创建新项目。
器件:PIC16F18446
编译器工具:XC8 V2.00
项目名称:“BTL_V2.0”
2、启动MCC。
3、在System Module(系统模块)窗口中,选择以下振荡器:
INTOSC oscillator:I/O function on CLKIN pin。
Internal Clock选择位16MHz_HF。
146995e9843bd65b14.png

4、在Device Resources(器件资源)窗口中,选择EUSART1、MEMORY和Bootloader Generator。
637585e9843c6c0b2a.png
5、EUSART1,使能发送和连续接收。代码将使用自动波特率,因此我们不必在此设置。
157825e9843d299904.png
       6、MEMORY,不需要配置。
634985e98440217449.png
7、Bootloader Generator
(1)、Transport Type:UARTEUSART
(2)、Verification:Check_State_Flag。
(3)、Application Reset Vector:0x300,
(4)、Enable IO Pin Indicator and Software Protection.
44575e984409c1c84.png

8、Pin Manager Grid (引脚管理器网格)
RB7设置TX1,RB5设置RX1,RA2 设置BL_INDICATOR(BOOTLOADER指示灯),Disable所有选中引脚模拟功能。
777485e9844122eeb4.png
971805e98441993db1.png

9、Generate(生成)(忽略警告)。
10、选择project(项目)选项卡,右键单击项目以启动Project Properties(项目属性)窗口。
448125e984422b90f3.png
11、单击XC8 Linker(XC8链接器),选择Memory Model(存储器模型)下拉选项卡,如下配置,这将使自举程序位于存储器的前0x300字中。
272235e98442a5bb56.png
12、编译项目
编译失败,错误提示不能找到空间,对空间加点优化。
Non line specific message::: advisory: (1493) updated 32-bit floating-point routines might trigger "can't find space" messages appearing after updating to this release; consider using the smaller 24-bit floating-point types
795185e9844306c5f1.png
545475e984435181c9.png

编译成功。
13、使用板载nEDBG下载。
先做个修改:
#define  BL_INDICATOR_ON   0
#define  BL_INDICATOR_OFF  1
因为板子文档里的说明是接到地(RA2=0)亮,反掉了。
146995e98443df3fd7.png
下载到板上,这是LED常亮。
993615e98444526678.png

实验3“将自举程序连接到应用程序”
1、创建偏移应用程序
(1)、重新打开led_app.X,创建偏移应用程序。
(2)、转到Project Properties窗口。
(3)、选择XC8 Linker,然后选择Additional options(其他选项)选项卡。
(4)、将项目偏移设置为0x300。单击Apply。
(5)、编译项目。
659525e98444c072de.png
2、自举偏移应用程序
(1)、用串口调试工具连接好Nano板上的TX、RX,将串口调试工具插到PC的USB口中。
381875e984452255b5.png
(2)、在官网https://www.microchip.com/promo/8-bit-bootloader最下面右侧下载Bootloader HOST,我们将通过它下载应用程序。
174155e984459ecba5.png
(3)、启动统一自举程序java应用程序。
520015e98445ed03eb.png

888015e98446445c5d.png
(4)、在Settings(设置)菜单中,选择Serial(串行),然后正确的UART。
135895e98446ba8672.png

(5)、将端口配置为19200,8个数据位,1个停止,禁止奇偶校验。单击“Apply”关闭窗口。
606125e984471d486e.png
(6)、自举程序主机按字节地址和长度工作,因此我们必须通过将PIC16字地址乘以2进行转换。将程序存储器大小设置为0x8000,将自举程序偏移设置为0x600。
519515e98447854ccb.png

(7)、选择File Open/Load(文件打开/加载)下拉菜单,打开应用程序的Hex文件。
154345e98447ddfa7b.png
883185e9844848c965.png
(8)、点击“Program Device”(编程器件)按钮。最终器件得到与实验1相同的LED等闪烁共能。
820535e98448b188c9.png
实验视频:https://v.youku.com/v_show/id_XNDYzNTA3NjY3Ng==.html




使用特权

评论回复
lcczg| | 2020-4-17 13:19 | 显示全部楼层
更进一步,顶一个

使用特权

评论回复
TsaiRH|  楼主 | 2020-4-17 17:23 | 显示全部楼层
本帖最后由 TsaiRH 于 2020-4-17 17:32 编辑
lcczg 发表于 2020-4-17 13:19
更进一步,顶一个

现在又遇到一个问题,使能I/O Pin Entry,编译不通过
微信图片_20200417172116.png

使用特权

评论回复
TsaiRH|  楼主 | 2020-4-19 22:05 | 显示全部楼层
本帖最后由 TsaiRH 于 2020-4-19 22:07 编辑
TsaiRH 发表于 2020-4-17 17:23
现在又遇到一个问题,使能I/O Pin Entry,编译不通过

更新,注释掉这行代码——#info  "You may need to add additional delay here between enabling weak pullups and testing the pin."编译成功,实现功能:上电是,按住按键,进入boot loader
微信截图_20200419220543.png

使用特权

评论回复
welssss| | 2020-5-17 23:04 | 显示全部楼层
学习了!

使用特权

评论回复
kaventwahaha| | 2020-9-10 12:58 | 显示全部楼层
不错的东东,可以看看!

使用特权

评论回复
dorry3| | 2020-9-12 19:30 | 显示全部楼层
我按照步骤对 PIC18F26K22 用MCC产生bootloader 成功,程序运行正常,但是 EEPROM编程失败。请教是什么原因造成的呢?附件为我的配置。EEPROM的OFFSET 已更改是多少?0x00不对,默认也不对。不知道什么问题。Flash烧录正常,程序运行正常。就是eeprom的数据不能写入。
QQ图片20200912191422.png
QQ图片20200912191428.png

使用特权

评论回复
zhulaoda| | 2020-11-7 01:35 | 显示全部楼层
    asm ("psect  intcode,global,reloc=2,class=CODE,delta=1");
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));

    asm ("psect  intcodelo,global,reloc=2,class=CODE,delta=1");
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));

请教一下,这4句有什么作用?

使用特权

评论回复
klz198327| | 2021-6-16 08:09 | 显示全部楼层
本帖最后由 klz198327 于 2021-6-16 08:11 编辑

学习了,这里的 ROM rangse 储存器0-2ff是什么意思呢,是指什么储存器,EEPROM还是程序储存器
194026c34ew3zgbh73eq3e.png.thumb.jpg
8340960c9401d46c55.png
9523060c94026bb32d.png

使用特权

评论回复
lcczg| | 2021-6-16 09:33 | 显示全部楼层
klz198327 发表于 2021-6-16 08:09
学习了,这里的 ROM rangse 储存器0-2ff是什么意思呢,是指什么储存器,EEPROM还是程序储存器

...

是FLASH的BOOT区

使用特权

评论回复
CoolSilicon| | 2021-6-16 10:26 | 显示全部楼层
zhulaoda 发表于 2020-11-7 01:35
asm ("psect  intcode,global,reloc=2,class=CODE,delta=1");
    asm ("GOTO " str(NEW_INTERRUPT_VEC ...

硬件的中断向量是固定的, 这几句是进入中断后, 跳转到APP的中断入口的..

使用特权

评论回复
CoolSilicon| | 2021-6-16 10:28 | 显示全部楼层
dorry3 发表于 2020-9-12 19:30
我按照步骤对 PIC18F26K22 用MCC产生bootloader 成功,程序运行正常,但是 EEPROM编程失败。请教是什么原因 ...

做bootloader跟EEPROM似乎是没有关系的...
你这里"EEPROM编程失败"是要对EEPROM做了些什么操作???

使用特权

评论回复
mainpthread| | 2021-7-17 16:57 | 显示全部楼层
我也出现了下面这个问题,加了优化也不管用啊!
我使用的是PIC18F55Q43,8bit MCU,UART5 - RF0(RX)- RF1(TX),复位向量定位到了0x500.  使用了BL_INDICATOR ,BL_ENTRY.  bootloader library版本2.4.1。     能帮我在您电脑上生成编译下试试吗?  哪位朋友看到也请帮顺手试下吧,是我安装软件的问题吗?

Non line specific message::: advisory: (1493) updated 32-bit floating-point routines might trigger "can't find space" messages appearing after updating to this release; consider using the smaller 24-bit floating-point types

使用特权

评论回复
lcczg| | 2021-7-21 17:41 | 显示全部楼层
mainpthread 发表于 2021-7-17 16:57
我也出现了下面这个问题,加了优化也不管用啊!
我使用的是PIC18F55Q43,8bit MCU,UART5 - RF0(RX)- RF ...

提示和浮点数操作有关,这是建议,没错呀。把你的工程传上来。

使用特权

评论回复
奔波儿熊| | 2021-7-21 18:17 | 显示全部楼层
MCC里的bootloader要被各位发扬光大了

使用特权

评论回复
mainpthread| | 2021-7-23 11:14 | 显示全部楼层
芯片是PIC18F55Q43。  使用的bootloader库是2.4.1, PIC库文件是1.81.7。  IDE是 MPLAB 5.50, 编译器是XC8 v2.32.   
使用外设有UART5, 波特率115200,异步8bit,使能接收发送。
                 memory,默认
UART5  RX --- RF0
UART5  TX --- RF1

bootloader  使用了 i/O INDICATOR, I/O ENTRY, 和I/O protect。application reset vector 为0x500

BL_INDICATOR --- RA0
BL_ENTRY    ----  RA5。


生成代码后,选择了优化等级 s,  代码空间0 - 4FF。 编译就提示上面问题“Non line specific message::: advisory: (1493) updated 32-bit floating-point routines might trigger "can't find space" messages appearing after updating to this release; consider using the smaller 24-bit floating-point types”



微信截图_2021072311125.png
微信截图_20210723111433.png

btldr.X.zip

774.72 KB

使用特权

评论回复
LingTian| | 2021-8-2 16:31 | 显示全部楼层
hao hao hao.

使用特权

评论回复
lcczg| | 2021-8-3 11:15 | 显示全部楼层
mainpthread 发表于 2021-7-23 11:14
芯片是PIC18F55Q43。  使用的bootloader库是2.4.1, PIC库文件是1.81.7。  IDE是 MPLAB 5.50, 编译器是XC8 ...

我编译了一下,没有出现你说的警告。工程见附件。

CLEAN SUCCESSFUL (total time: 173ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/A41438/Downloads/btldr.X'
make  -f nbproject/Makefile-default.mk dist/default/production/btldr.X.production.hex
make[2]: Entering directory 'C:/Users/A41438/Downloads/btldr.X'
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/memory.p1 mcc_generated_files/memory.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/device_config.p1 mcc_generated_files/device_config.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/pic18f_bootload.p1 mcc_generated_files/pic18f_bootload.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/mcc.p1 mcc_generated_files/mcc.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/pic18f_uart.p1 mcc_generated_files/pic18f_uart.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/pin_manager.p1 mcc_generated_files/pin_manager.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/mcc_generated_files/uart5.p1 mcc_generated_files/uart5.c
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -c   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto     -o build/default/production/main.p1 main.c
mcc_generated_files/pic18f_bootload.c:318:20: warning: implicit conversion changes signedness: 'int' to 'unsigned __int24' [-Wsign-conversion]
    if ((TBLPTR & (~LAST_WORD_MASK)) < NEW_RESET_VECTOR)
                ~  ^~~~~~~~~~~~~~~
1 warning generated.
"C:\Program Files\Microchip\xc8\v2.31\bin\xc8-cc.exe"  -mcpu=18F55Q43 -Wl,-Map=dist/default/production/btldr.X.production.map  -DXPRJ_default=default  -Wl,--defsym=__MPLAB_BUILD=1   -mdfp="C:/Program Files/Microchip/MPLABX/v5.50/packs/Microchip/PIC18F-Q_DFP/1.11.185/xc8"  -fno-short-double -fno-short-float -memi=wordwrite -mrom=0-7FF -Os -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init -mno-keep-startup -mno-download -mdefault-config-bits -std=c99 -gdwarf-3 -mstack=compiled:auto:auto:auto      -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/btldr.X.production.elf  build/default/production/mcc_generated_files/device_config.p1 build/default/production/mcc_generated_files/pic18f_uart.p1 build/default/production/mcc_generated_files/pin_manager.p1 build/default/production/mcc_generated_files/uart5.p1 build/default/production/mcc_generated_files/pic18f_bootload.p1 build/default/production/mcc_generated_files/mcc.p1 build/default/production/mcc_generated_files/memory.p1 build/default/production/main.p1     
mcc_generated_files/pin_manager.c:146:: warning: (520) function "_PIN_MANAGER_IOC" is never called
mcc_generated_files/uart5.c:117:: warning: (520) function "_UART5_is_rx_ready" is never called
mcc_generated_files/uart5.c:122:: warning: (520) function "_UART5_is_tx_ready" is never called
mcc_generated_files/uart5.c:127:: warning: (520) function "_UART5_is_tx_done" is never called
mcc_generated_files/uart5.c:132:: warning: (520) function "_UART5_get_last_status" is never called
mcc_generated_files/memory.c:60:: warning: (520) function "_FLASH_ReadByte" is never called
mcc_generated_files/memory.c:73:: warning: (520) function "_FLASH_ReadWord" is never called
mcc_generated_files/memory.c:123:: warning: (520) function "_FLASH_WritePage" is never called
mcc_generated_files/memory.c:153:: warning: (520) function "_FLASH_WriteWord" is never called
mcc_generated_files/memory.c:173:: warning: (520) function "_FLASH_WriteBlock" is never called
mcc_generated_files/memory.c:200:: warning: (520) function "_FLASH_EraseBlock" is never called
mcc_generated_files/memory.c:231:: warning: (520) function "_DATAEE_WriteByte" is never called
mcc_generated_files/memory.c:264:: warning: (520) function "_DATAEE_ReadByte" is never called
mcc_generated_files/memory.c:278:: warning: (520) function "_MEMORY_ISR" is never called
mcc_generated_files/pic18f_bootload.c:107:: warning: (1090) variable "_counter" is not used
mcc_generated_files/pic18f_bootload.c:109:: warning: (1090) variable "_tx_data" is not used
mcc_generated_files/pic18f_bootload.c:108:: warning: (1090) variable "_rx_data" is not used
dist/default/production\btldr.X.production.o:126:: warning: (1482) absolute object _PFM_Buffer overlaps _bufferRAM

Memory Summary:
    Program space        used   77Ah (  1914) of   800h bytes   ( 93.5%)
    Data space           used   1B8h (   440) of   900h bytes   ( 19.1%)
    Configuration bits   used     5h (     5) of     9h words   ( 55.6%)
    EEPROM space         used     0h (     0) of   400h bytes   (  0.0%)
    ID Location space    used    20h (    32) of    20h bytes   (100.0%)

make[2]: Leaving directory 'C:/Users/Downloads/btldr.X'
make[1]: Leaving directory 'C:/Users/Downloads/btldr.X'

BUILD SUCCESSFUL (total time: 17s)
Loading code from C:/Users/Downloads/btldr.X/dist/default/production/btldr.X.production.hex...
Program loaded with pack,PIC18F-Q_DFP,1.11.185,Microchip
Loading completed

做了一点修改 1. ROM range 为0-7FF,少了就空间不够。2. 配置字 #pragma config BBSIZE = BBSIZE_1024
这是和ROM做了对应,另外Boot block Enable #pragma config BBEN = ON

btldr.X-1.zip

725.97 KB

使用特权

评论回复
评论
procat 2022-4-6 18:04 回复TA
MCC为什么没有产生正确的配置字?有BUG? 
guijial511| | 2021-8-6 07:46 | 显示全部楼层
这个很方便啊

使用特权

评论回复
mainpthread| | 2021-8-16 18:22 | 显示全部楼层
lcczg 发表于 2021-8-3 11:15
我编译了一下,没有出现你说的警告。工程见附件。

CLEAN SUCCESSFUL (total time: 173ms)

找打问题了,我的编译工具是免费版的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

42

帖子

0

粉丝