使用MCC配置bootloader
本帖最后由 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.20XC8 V2.00PIC16F18446 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。
4、在Device Resources(器件资源)窗口中,选择EUSART1、MEMORY和Bootloader Generator。5、EUSART1,使能发送和连续接收。代码将使用自动波特率,因此我们不必在此设置。 6、MEMORY,不需要配置。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.
8、Pin Manager Grid (引脚管理器网格)RB7设置TX1,RB5设置RX1,RA2 设置BL_INDICATOR(BOOTLOADER指示灯),Disable所有选中引脚模拟功能。
9、Generate(生成)(忽略警告)。10、选择project(项目)选项卡,右键单击项目以启动Project Properties(项目属性)窗口。 11、单击XC8 Linker(XC8链接器),选择Memory Model(存储器模型)下拉选项卡,如下配置,这将使自举程序位于存储器的前0x300字中。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
编译成功。13、使用板载nEDBG下载。先做个修改:#defineBL_INDICATOR_ON 0#defineBL_INDICATOR_OFF1因为板子文档里的说明是接到地(RA2=0)亮,反掉了。下载到板上,这是LED常亮。
实验3“将自举程序连接到应用程序”1、创建偏移应用程序(1)、重新打开led_app.X,创建偏移应用程序。(2)、转到Project Properties窗口。(3)、选择XC8 Linker,然后选择Additional options(其他选项)选项卡。(4)、将项目偏移设置为0x300。单击Apply。(5)、编译项目。2、自举偏移应用程序(1)、用串口调试工具连接好Nano板上的TX、RX,将串口调试工具插到PC的USB口中。(2)、在官网https://www.microchip.com/promo/8-bit-bootloader最下面右侧下载Bootloader HOST,我们将通过它下载应用程序。(3)、启动统一自举程序java应用程序。
(4)、在Settings(设置)菜单中,选择Serial(串行),然后正确的UART。
(5)、将端口配置为19200,8个数据位,1个停止,禁止奇偶校验。单击“Apply”关闭窗口。(6)、自举程序主机按字节地址和长度工作,因此我们必须通过将PIC16字地址乘以2进行转换。将程序存储器大小设置为0x8000,将自举程序偏移设置为0x600。
(7)、选择File Open/Load(文件打开/加载)下拉菜单,打开应用程序的Hex文件。 (8)、点击“Program Device”(编程器件)按钮。最终器件得到与实验1相同的LED等闪烁共能。实验视频:https://v.youku.com/v_show/id_XNDYzNTA3NjY3Ng==.html
更进一步,顶一个 本帖最后由 TsaiRH 于 2020-4-17 17:32 编辑
lcczg 发表于 2020-4-17 13:19
更进一步,顶一个
现在又遇到一个问题,使能I/O Pin Entry,编译不通过
本帖最后由 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 学习了! 不错的东东,可以看看! 我按照步骤对 PIC18F26K22 用MCC产生bootloader 成功,程序运行正常,但是 EEPROM编程失败。请教是什么原因造成的呢?附件为我的配置。EEPROM的OFFSET 已更改是多少?0x00不对,默认也不对。不知道什么问题。Flash烧录正常,程序运行正常。就是eeprom的数据不能写入。 asm ("psectintcode,global,reloc=2,class=CODE,delta=1");
asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));
asm ("psectintcodelo,global,reloc=2,class=CODE,delta=1");
asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));
请教一下,这4句有什么作用? 本帖最后由 klz198327 于 2021-6-16 08:11 编辑
学习了,这里的 ROM rangse 储存器0-2ff是什么意思呢,是指什么储存器,EEPROM还是程序储存器
klz198327 发表于 2021-6-16 08:09
学习了,这里的 ROM rangse 储存器0-2ff是什么意思呢,是指什么储存器,EEPROM还是程序储存器
...
是FLASH的BOOT区 zhulaoda 发表于 2020-11-7 01:35
asm ("psectintcode,global,reloc=2,class=CODE,delta=1");
asm ("GOTO " str(NEW_INTERRUPT_VEC ...
硬件的中断向量是固定的, 这几句是进入中断后, 跳转到APP的中断入口的..
dorry3 发表于 2020-9-12 19:30
我按照步骤对 PIC18F26K22 用MCC产生bootloader 成功,程序运行正常,但是 EEPROM编程失败。请教是什么原因 ...
做bootloader跟EEPROM似乎是没有关系的...
你这里"EEPROM编程失败"是要对EEPROM做了些什么操作??? 我也出现了下面这个问题,加了优化也不管用啊!
我使用的是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 mainpthread 发表于 2021-7-17 16:57
我也出现了下面这个问题,加了优化也不管用啊!
我使用的是PIC18F55Q43,8bit MCU,UART5 - RF0(RX)- RF ...
提示和浮点数操作有关,这是建议,没错呀。把你的工程传上来。 MCC里的bootloader要被各位发扬光大了 芯片是PIC18F55Q43。使用的bootloader库是2.4.1, PIC库文件是1.81.7。IDE是 MPLAB 5.50, 编译器是XC8 v2.32.
使用外设有UART5, 波特率115200,异步8bit,使能接收发送。
memory,默认
UART5RX --- RF0
UART5TX --- 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”
hao hao hao. 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: Entering directory 'C:/Users/A41438/Downloads/btldr.X'
make-f nbproject/Makefile-default.mk dist/default/production/btldr.X.production.hex
make: 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.elfbuild/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: Leaving directory 'C:/Users/Downloads/btldr.X'
make: 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 这个很方便啊 lcczg 发表于 2021-8-3 11:15
我编译了一下,没有出现你说的警告。工程见附件。
CLEAN SUCCESSFUL (total time: 173ms)
找打问题了,我的编译工具是免费版的
页:
[1]
2