发新帖我要提问
123
返回列表
打印
[PIC®/AVR®/dsPIC®产品]

给PIC16F18446 curiosity nano板做个bootloader

[复制链接]
楼主: lcczg
手机看帖
扫描二维码
随时随地手机跟帖
41
lcczg 发表于 2022-6-15 17:09
你用的那颗芯片?有看复位状态寄存器吗?有中断发生吗,是否中断跳转飞掉了? ...

我用的芯片是PIC16F18346,我使能了定时器中断和串口中断,所以肯定是有中断产生的。问题应该出在中断向量的映射上,现在是使用MCC的demo,如下:
asm("psect  intentry,global,class=CODE,delta=2");
asm("pagesel " str(NEW_INTERRUPT_VECTOR)); // 0x1004
asm("GOTO " str(NEW_INTERRUPT_VECTOR));

这几条的指令的作用是否在0004位置放一个跳转指令,跳转到APP的中断入口?

目前的情况应该就是中断跳转飞掉了,但是还不清楚是哪里出了问题,因为是第一次用PIC单片机,所以查起来很费劲,谢谢你的回复

使用特权

评论回复
42
lcczg|  楼主 | 2022-6-16 15:28 | 只看该作者
本帖最后由 lcczg 于 2022-6-16 15:29 编辑
cxque 发表于 2022-6-16 09:48
我用的芯片是PIC16F18346,我使能了定时器中断和串口中断,所以肯定是有中断产生的。问题应该出在中断向 ...

是的,看下来你的代码0x1004处放的是应用程序的中断入口。请检查:
1.应用代码地址偏移是否设为了0x1000?
2.应用工程和bootloader工程的配置字设置是否相同,如果不同,请改为相同;
   另外主时钟配置是否相同,如果不同,请改为相同。
3.如果还有问题,请参考这个例子,里面应用代码是有中断的 https://gitee.com/chaoa51933/pic ... tloader-development
  当然 https://gitee.com/chaoa51933还有好多其他很好的实例

使用特权

评论回复
43
cxque| | 2022-6-17 10:28 | 只看该作者
本帖最后由 cxque 于 2022-6-17 10:35 编辑
lcczg 发表于 2022-6-16 15:28
是的,看下来你的代码0x1004处放的是应用程序的中断入口。请检查:
1.应用代码地址偏移是否设为了0x1000? ...

1、应用代码地址偏移是0x1000.
   42:            asm("psect  intentry,global,class=CODE,delta=2");
   43:            asm("pagesel " str(NEW_INTERRUPT_VECTOR));
   0002  3186     MOVLP 0x6
   44:            asm("GOTO " str(NEW_INTERRUPT_VECTOR));
   0003  2E04     GOTO 0x604
我查看汇编发现,在超过0x800情况下,GOTO指令后面的地址高位会丢掉,比如我设置的中断向量是1004,这边会变成GOTO 0x04。我目前将boot代码缩减到0x600内,跳转指令这边反汇编如上,已经没有问题,但是复位情况还是一样的,一旦跳转到app立刻就复位了。

2、工程和时钟配置都是一样的。

3、我看了下这里面的代码,大体是一致的,唯一不同的地方应该是升级的协议和上位机,但是应该不影响才对。所以还是没有解决

还是感谢

使用特权

评论回复
44
lcczg|  楼主 | 2022-6-17 13:38 | 只看该作者
cxque 发表于 2022-6-17 10:28
1、应用代码地址偏移是0x1000.
   42:            asm("psect  intentry,global,class=CODE,delta=2");
   ...

调试下来是怎么回事?是复位还是跑飞,复位有寄存器可以看复位源的 6.11 Determining the Cause of a Reset
上次提的例子肯定没问题,也用到了定时器中断。

使用特权

评论回复
45
cxque| | 2022-6-22 16:20 | 只看该作者
lcczg 发表于 2022-6-17 13:38
调试下来是怎么回事?是复位还是跑飞,复位有寄存器可以看复位源的 6.11 Determining the Cause of a Res ...

问题确认了,是编译器版本的问题。一开始使用V2.36版本会有问题,换到V1.45后就都正常了

使用特权

评论回复
46
lcczg|  楼主 | 2022-6-23 15:38 | 只看该作者
cxque 发表于 2022-6-22 16:20
问题确认了,是编译器版本的问题。一开始使用V2.36版本会有问题,换到V1.45后就都正常了 ...

调试下来,能看到什么区别了吗?

使用特权

评论回复
47
cxque| | 2022-6-23 16:03 | 只看该作者
lcczg 发表于 2022-6-23 15:38
调试下来,能看到什么区别了吗?

看不出什么区别,用2.36编译的程序升级app后一有中断就飞了,用1.45的正常

使用特权

评论回复
48
cxque| | 2022-6-23 16:06 | 只看该作者
lcczg 发表于 2022-6-23 15:38
调试下来,能看到什么区别了吗?

我最开始的工程是没有IAP功能的,基于1.45的编译器开发。现在是在原来的基础上增加IAP功能,但是所有的底层文件已经配置都还是按照原来的程序,我不知道和这个有没有关系。本来我想直接用最新的编译器,没想到似乎不同编译器的兼容性不太好,我对PIC不是很熟悉,刚开始用,所以无法看出这两者之间有什么区别

使用特权

评论回复
49
pklong| | 2022-7-9 12:03 | 只看该作者
这个牛了,需要汇编语言吗  

使用特权

评论回复
50
hilahope| | 2022-7-9 13:16 | 只看该作者
PIC16F18446很给力。   

使用特权

评论回复
51
qiufengsd| | 2022-7-9 14:23 | 只看该作者
有相关的资料吗  

使用特权

评论回复
52
lcczg|  楼主 | 2022-7-13 16:52 | 只看该作者

MCC里面已经集成了Bootloader
http://ww1.microchip.com/downloa ... ase-Notes-2.3.3.pdf

使用特权

评论回复
53
wowu| | 2023-1-5 14:25 | 只看该作者
这个是不是一个最小系统板啊,我们自己做BootLoader一般都想实现什么目的呢

使用特权

评论回复
54
lcczg|  楼主 | 2023-1-18 09:58 | 只看该作者
wowu 发表于 2023-1-5 14:25
这个是不是一个最小系统板啊,我们自己做BootLoader一般都想实现什么目的呢

这是我们的一个开发板,基本上是最小系统了。Bootloader用于在线升级。网上有很多这方面的介绍。

使用特权

评论回复
55
lb1057907736| | 2023-7-20 18:02 | 只看该作者
cxque 发表于 2022-6-22 16:20
问题确认了,是编译器版本的问题。一开始使用V2.36版本会有问题,换到V1.45后就都正常了 ...

你发现的问题是v1.45生成的BL,只能和v1.45生成的APP一起运行,是这样的吗?一般BL烧入芯片后就不变了,后续只是用BL更新APP,APP应该可以用更新版本的编译器生成吧,如果不能,这是个问题啊!**详细告知,目前我用最新版本v2.41做了一个BL和APP工程,后续如果不能用更新版本的编译器生成APP,那这不是绑定编译器的版本了吗?理论上不应该这样,应该像我上面所说的,望告知,谢谢。

使用特权

评论回复
56
lb1057907736| | 2023-7-23 14:26 | 只看该作者
来自于microchip官方论坛的解答:https://forum.microchip.com/s/topic/a5C3l000000Bq4rEAC/t391376

使用特权

评论回复
57
lcczg|  楼主 | 2023-7-26 17:18 | 只看该作者
lb1057907736 发表于 2023-7-23 14:26
来自于microchip官方论坛的解答:https://forum.microchip.com/s/topic/a5C3l000000Bq4rEAC/t391376 ...

是的,你的理解是对的,和编译器版本没有关系。

使用特权

评论回复
58
lcczg|  楼主 | 2023-7-26 17:24 | 只看该作者
现在新器件的BOOTLOADER在MCC Melody里支持。对AVR DA 和 PIC18-Q 有现成的例子https://onlinedocs.microchip.com ... 2-991583C839C4.html

使用特权

评论回复
59
lb1057907736| | 2023-7-27 10:04 | 只看该作者
我仅仅只参考了mchp的汇编跳转代码,为PIC18F47Q10做了BL和测试APP,上位机用普通的串口助手就行,通信协议完全自定义的,使用EUSART2做的RS485接口的BL,APP和BL共同该接口,但二者的协议不同,只有APP使用中断

使用特权

评论回复
60
lb1057907736| | 2023-7-27 10:15 | 只看该作者
我发现较新的PIC18F-Q型号单片机,有一个硬件中断基址寄存器IVTBASE,用来指定中断的基地址,也就是说不需要像以前一样,在BL中写几句汇编的中断向量跳转语句,只需要在APP中指定该寄存器的值,如果APP使用中断的情况,众所周知BL一定不要用中断,不然很麻烦

使用特权

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

本版积分规则